mirror of
https://github.com/mailscope/kumomta.git
synced 2026-10-28 09:16:15 +00:00
109 lines
3.2 KiB
Markdown
109 lines
3.2 KiB
Markdown
# kumomta
|
|
|
|
## Debugging/Tracing
|
|
|
|
This will launch the server using the policy defined in [simple_policy.lua](simple_policy.lua):
|
|
|
|
```
|
|
KUMOD_LOG=kumod=trace cargo run -p kumod -- --policy simple_policy.lua
|
|
```
|
|
|
|
## Tokio Console
|
|
|
|
You may use
|
|
[tokio-console](https://docs.rs/tokio-console/latest/tokio_console/) to
|
|
introspect the system. You must first start the server with tokio tracing
|
|
enabled:
|
|
|
|
```
|
|
KUMOD_LOG=tokio=trace,runtime=trace,info cargo run -p kumod -- --policy simple_policy.lua 2>/dev/null
|
|
```
|
|
|
|
Note the `2>/dev/null`; that is to prevent tracing log spew from hitting the terminal.
|
|
|
|
Then, in another window, run `tokio-console`.
|
|
|
|
The following environment variables influence the tokio console server that is
|
|
embedded into kumod:
|
|
|
|
| **Environment Variable** | **Purpose** | **Default Value** |
|
|
|----------------------------------|--------------------------------------------------------------|-------------------|
|
|
| `TOKIO_CONSOLE_RETENTION` | The duration of seconds to accumulate completed tracing data | 3600s (1h) |
|
|
| `TOKIO_CONSOLE_BIND` | a HOST:PORT description, such as `localhost:1234` | `127.0.0.1:6669` |
|
|
| `TOKIO_CONSOLE_PUBLISH_INTERVAL` | The duration to wait between sending updates to the console | 1000ms (1s) |
|
|
| `TOKIO_CONSOLE_RECORD_PATH` | The file path to save a recording | None |
|
|
|
|
## Metrics
|
|
|
|
If the http listener is enabled, the `/metrics` endpoint will return a set of metrics
|
|
for prometheus to scrape.
|
|
|
|
You can manually review them with curl:
|
|
|
|
```
|
|
$ curl 'http://127.0.0.1:8000/metrics'
|
|
# HELP connection_count connection_count
|
|
# TYPE connection_count gauge
|
|
connection_count{service="esmtp_listener"} 1
|
|
connection_count{service="smtp_client:(alt1|alt2|alt3|alt4)?.gmail-smtp-in.l.google.com."} 0
|
|
# HELP delayed_count delayed_count
|
|
# TYPE delayed_count gauge
|
|
delayed_count{queue="gmail.com"} 1
|
|
```
|
|
|
|
## Contributing
|
|
|
|
Ensure that the code is formatted before submitting a PR.
|
|
|
|
You need to install [StyLua](https://github.com/JohnnyMorganz/StyLua) to
|
|
format lua:
|
|
|
|
```bash
|
|
$ cargo install stylua --features lua54
|
|
```
|
|
|
|
Then you can format both the rust and the lua code:
|
|
|
|
```bash
|
|
$ rustup toolchain install nightly
|
|
$ make fmt
|
|
```
|
|
|
|
### Docker build
|
|
|
|
To build a lightweight alpine-based docker image:
|
|
|
|
```
|
|
$ ./docker/kumod/build-docker-image.sh
|
|
...
|
|
$ docker image ls kumomta/kumod
|
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
|
kumomta/kumod latest bbced15ff4d1 3 minutes ago 116MB
|
|
```
|
|
|
|
You can then run that image; this invocation mounts the kumo
|
|
src dir at `/config` and then the `KUMO_POLICY` environment
|
|
variable is used to override the default `/config/policy.lua`
|
|
path to use the SMTP sink policy script [sink.lua](sink.lua),
|
|
which will accept and discard all mail:
|
|
|
|
```
|
|
$ sudo docker run --rm -p 2025:25 \
|
|
-v .:/config \
|
|
--name kumo-sink \
|
|
--env KUMO_POLICY="/config/sink.lua" \
|
|
kumomta/kumod
|
|
```
|
|
|
|
### Fuzzing
|
|
|
|
Some components have fuzzer coverage. To run it, follow the setup from [the
|
|
Rust Fuzz Book](https://rust-fuzz.github.io/book/cargo-fuzz/setup.html)
|
|
|
|
Then:
|
|
|
|
```bash
|
|
$ cd crates/rfc5321/
|
|
$ cargo +nightly fuzz run parser
|
|
```
|