diff --git a/README.md b/README.md index 5d616c6c..af82ab7f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,10 @@ core applications: https://status.twinnation.org/ - [Usage](#usage) - [Configuration](#configuration) - [Conditions](#conditions) + - [Placeholders](#placeholders) + - [Functions](#functions) + - [Length - len()](#length---len) + - [Pattern - pat()](#pattern---pat) - [Alerting](#alerting) - [Configuring Slack alerts](#configuring-slack-alerts) - [Configuring PagerDuty alerts](#configuring-pagerduty-alerts) @@ -75,7 +79,7 @@ Note that you can also add environment variables in the configuration file (i.e. ### Configuration | Parameter | Description | Default | -| ---------------------------------------- | ----------------------------------------------------------------------------- | -------------- | +|:---------------------------------------- |:----------------------------------------------------------------------------- |:-------------- | | `debug` | Whether to enable debug logs | `false` | | `metrics` | Whether to expose metrics at /metrics | `false` | | `services` | List of services to monitor | Required `[]` | @@ -114,23 +118,64 @@ Note that you can also add environment variables in the configuration file (i.e. Here are some examples of conditions you can use: | Condition | Description | Passing values | Failing values | -| -----------------------------| ------------------------------------------------------- | -------------------------- | -------------- | +|:-----------------------------|:------------------------------------------------------- |:-------------------------- | -------------- | | `[STATUS] == 200` | Status must be equal to 200 | 200 | 201, 404, ... | | `[STATUS] < 300` | Status must lower than 300 | 200, 201, 299 | 301, 302, ... | | `[STATUS] <= 299` | Status must be less than or equal to 299 | 200, 201, 299 | 301, 302, ... | | `[STATUS] > 400` | Status must be greater than 400 | 401, 402, 403, 404 | 400, 200, ... | | `[RESPONSE_TIME] < 500` | Response time must be below 500ms | 100ms, 200ms, 300ms | 500ms, 501ms | -| `[BODY] == 1` | The body must be equal to 1 | 1 | Anything else | +| `[IP] == 127.0.0.1` | Target IP must be 127.0.0.1 | 127.0.0.1 | 0.0.0.0 | +| `[BODY] == 1` | The body must be equal to 1 | 1 | `{}`, `2`, ... | | `[BODY].user.name == john` | JSONPath value of `$.user.name` is equal to `john` | `{"user":{"name":"john"}}` | | | `[BODY].data[0].id == 1` | JSONPath value of `$.data[0].id` is equal to 1 | `{"data":[{"id":1}]}` | | +| `[BODY].age == [BODY].id` | JSONPath value of `$.age` is equal JSONPath `$.id` | `{"age":1,"id":1}` | | | `len([BODY].data) < 5` | Array at JSONPath `$.data` has less than 5 elements | `{"data":[{"id":1}]}` | | | `len([BODY].name) == 8` | String at JSONPath `$.name` has a length of 8 | `{"name":"john.doe"}` | `{"name":"bob"}` | -| `[BODY].age == [BODY].id` | JSONPath value of `$.age` is equal JSONPath `$.id` | `{"user":{"name":"john"}}` | | +| `[BODY].name == pat(john*)` | String at JSONPath `$.name` matches pattern `john*` | `{"name":"john.doe"}` | `{"name":"bob"}` | + + +#### Placeholders + +| Placeholder | Description | Example of resolved value | +|:---------------------------- |:------------------------------------------------------- |:-------------------------- | +| `[STATUS]` | Resolves into the HTTP status of the request | 404 +| `[RESPONSE_TIME]` | Resolves into the response time the request took, in ms | 10 +| `[IP]` | Resolves into the IP of the target host | 192.168.0.232 +| `[BODY]` | Resolves into the response body. Supports JSONPath. | `{"name":"john.doe"}` + + +#### Functions + +##### Length - len() + +Returns the length of the object/slice. + +Example: +``` +len([BODY].username) > 8 +``` + +Works only with the `[BODY]` placeholder. + + +##### Pattern - pat() + +Specifies that the string passed as parameter should be evaluated as a pattern. + +Usage: +``` +[IP] == pat(192.168.*) +``` + +Works only with `==` and `!=` comparators. + +**NOTE**: Use patterns only when you need to. `[STATUS] == pat(2*)` is a lot more expensive than `[STATUS] < 300`. + + ### Alerting - #### Configuring Slack alerts ```yaml