# 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).