DEVELOPMENT ENVIRONMENT

~liljamo/emerwen

ref: 77b0f862c8fd398a04ec608db010160eca2f7d22 emerwen/README.md -rw-r--r-- 1.7 KiB
77b0f862Jonni Liljamo feat(master): implement webtomaster as ipc_server 5 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# emerwen

emerwen is a WIP host and service monitoring solution.

emerwen stands for *shepherdess* in Quenya.

It's architected as one Master server, which configures Workers who notify the
Master about the status of their targets.

gRPC is used for the Master<->Worker connection. A custom TCP protocol was
planned and experimented with, but scrapped due to *me* not having done it before
and not wanting to deal with the burden of managing all the connections manually etc, etc.
tldr: gRPC was easier lmao.

## What's next (short-term TODO)

- Master web UI (leptos + leptos_oidc) for configuring workers.

## Future (non-critical TODO)

- TLS
- Graceful shutdown for Workers when SIGINT is received.
    - Send Master a message that you're exiting, and close the connection.
    - Exit with 0 after all tasks are killed.
- Master should notify if a Worker becomes unreachable...
    - ...without sending the message described above, "graceful shutdown".

## Development

- There's a [flake.nix](./flake.nix) which defines a development shell with
  the Rust toolchain and all the required dependencies ready to go.
    - Also configures pre-commit hooks.
- There's a [justfile](./justfile) which defines common commands. Requires
  [just](https://github.com/casey/just).
- `x86_64-unknown-linux-gnu` builds use [mold](https://github.com/rui314/mold) as
  the default linked, defined in [.cargo/config.toml](./.cargo/config.toml).
- When using the `trace` feature, you need `--cfg tokio_unstable`, which is also
  set in [.cargo/config.toml](./.cargo/config.toml) for `x86_64-unknown-linux-gnu builds`.
    - Otherwise, you can set `RUSTFLAGS="--cfg tokio_unstable"`.

## License

This project is licensed under [GNU General Public License v3.0 or later](./LICENSE).