From 1fddf7f2fc65e30bc135ab17426e930ed6b20bea Mon Sep 17 00:00:00 2001 From: Aditya Thebe Date: Tue, 3 Sep 2024 14:59:08 +0545 Subject: [PATCH] docs: notification templates (#263) * docs: notification overview * feat: template vars * chore: kubernetes deployment health notification example * docs: slack template for components, config & check events * docs: add all notification template vars in reference * docs: complete all template vars for notification * chore: lint workflow change * chore: refactor config notification events page * chore: add slack notification screenshots * docs: notification rate limiting * docs: slack template functions * docs: use gomplate style for notification template functions * docs: repeat interval --- .github/workflows/lint.yml | 15 +- Makefile | 2 +- canary-checker/docs/windows.md | 2 +- common/src/components/Fields.jsx | 86 ++- .../docs/notifications/concepts/index.md | 8 + .../notifications/concepts/rate-limiting.mdx | 40 ++ .../concepts/repeat-interval.mdx | 61 ++ .../docs/notifications/events/components.md | 90 --- .../docs/notifications/events/components.mdx | 62 ++ .../docs/notifications/events/configs.md | 107 ---- .../docs/notifications/events/configs.mdx | 101 +++ .../notifications/events/health-checks.md | 141 ----- .../notifications/events/health-checks.mdx | 88 +++ .../slack-notification-catalog-unhealthy.png | Bin 0 -> 47702 bytes .../slack-notification-catalog-updated.png | Bin 0 -> 30852 bytes .../events/slack-notification-component.png | Bin 0 -> 27549 bytes .../slack-notification-unhealthy-check.png | Bin 0 -> 29930 bytes .../examples/kube-unhealthy-deployment.md | 17 + mission-control/docs/notifications/index.mdx | 9 +- .../reference/notifications/_env_vars.mdx | 593 ++++++++++++++++++ .../reference/notifications/_notification.mdx | 57 +- .../notifications/template_functions.mdx | 219 +++++++ .../notifications/template_vars/checks.mdx | 27 + .../template_vars/components.mdx | 17 + .../notifications/template_vars/config.mdx | 13 + .../notifications/template_vars/index.md | 3 + 26 files changed, 1372 insertions(+), 386 deletions(-) create mode 100644 mission-control/docs/notifications/concepts/index.md create mode 100644 mission-control/docs/notifications/concepts/rate-limiting.mdx create mode 100644 mission-control/docs/notifications/concepts/repeat-interval.mdx delete mode 100644 mission-control/docs/notifications/events/components.md create mode 100644 mission-control/docs/notifications/events/components.mdx delete mode 100644 mission-control/docs/notifications/events/configs.md create mode 100644 mission-control/docs/notifications/events/configs.mdx delete mode 100644 mission-control/docs/notifications/events/health-checks.md create mode 100644 mission-control/docs/notifications/events/health-checks.mdx create mode 100644 mission-control/docs/notifications/events/slack-notification-catalog-unhealthy.png create mode 100644 mission-control/docs/notifications/events/slack-notification-catalog-updated.png create mode 100644 mission-control/docs/notifications/events/slack-notification-component.png create mode 100644 mission-control/docs/notifications/events/slack-notification-unhealthy-check.png create mode 100644 mission-control/docs/notifications/examples/kube-unhealthy-deployment.md create mode 100644 mission-control/docs/reference/notifications/_env_vars.mdx create mode 100644 mission-control/docs/reference/notifications/template_functions.mdx create mode 100644 mission-control/docs/reference/notifications/template_vars/checks.mdx create mode 100644 mission-control/docs/reference/notifications/template_vars/components.mdx create mode 100644 mission-control/docs/reference/notifications/template_vars/config.mdx create mode 100644 mission-control/docs/reference/notifications/template_vars/index.md diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e225959f..962ba302 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -13,4 +13,17 @@ jobs: with: node-version: '20.11.1' - - run: make fmt-check + - name: Run format check + run: make fmt-check + continue-on-error: true + id: fmt-check + + - name: Run formatter and show diff if check failed + if: steps.fmt-check.outcome == 'failure' + run: | + make fmt + git diff + + - name: Exit with error if format check failed + if: steps.fmt-check.outcome == 'failure' + run: exit 1 diff --git a/Makefile b/Makefile index dfed4bd6..208904cc 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ fmt: .PHONY: fmt-check fmt-check: - npx prettier --check "**/*.md" + npx prettier --check --log-level=debug "**/*.md" .PHONY: sync: diff --git a/canary-checker/docs/windows.md b/canary-checker/docs/windows.md index 97ff8f57..bfeabc13 100644 --- a/canary-checker/docs/windows.md +++ b/canary-checker/docs/windows.md @@ -20,7 +20,7 @@ To run Canary Checker on windows please ensure the following ## 2. Downloading required files -You only need the powershell script below(assuming internet connectivity), place it in the folder you wish to install Canary Checker in. +You only need the powershell script below(assuming internet connectivity). Place it in the folder you wish to install Canary Checker in. ```powershell [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 diff --git a/common/src/components/Fields.jsx b/common/src/components/Fields.jsx index 2d9da03a..b871b632 100644 --- a/common/src/components/Fields.jsx +++ b/common/src/components/Fields.jsx @@ -28,8 +28,8 @@ const schemes = { "notificationconnection": "[Connection](/reference/connections)", "notificationproperties": "[map[string]string](/reference/notifications#properties)", } -export default function Fields({ common = [], rows = [], oneOf, anyOf, connection }) { +export default function Fields({ common = [], rows = [], oneOf, anyOf, connection, withTemplates }) { const { siteConfig, siteMetadata } = useDocusaurusContext(); const oss = siteConfig.customFields.oss; @@ -292,55 +292,85 @@ export default function Fields({ common = [], rows = [], oneOf, anyOf, connectio return ( <> - +
+ {withTemplates && } {rows.map((row, index) => ( - + + {withTemplates && ( + + )} ))} - -
Field Description SchemeTemplate Env
- {row.field}{row.required ? "*" : ""} + + {row.field} + {row.required ? '*' : ''} + {(row.description ? row.description : "") + (row.default ? `. Defaults to \`${row.default}\`` : '')} - {row.anyOf && - {row.anyOf.join(' | ')} - } - {!row.anyOf && row.scheme && + + {(row.description ? row.description : '') + + (row.default ? `. Defaults to \`${row.default}\`` : '')} + + + {row.anyOf && {row.anyOf.join(' | ')}} + {!row.anyOf && row.scheme && ( - { - schemes[row.scheme.toLowerCase()] || (row.scheme ? row.scheme : 'string') - } + {schemes[row.scheme.toLowerCase()] || + (row.scheme ? row.scheme : 'string')} - } + )} + {row.templateEnv && + row.templateEnv.map((v) => ( +

+ + {v.name} + +

+ ))} +
- {anyOf && -
-

You must specify {anyOf[0]} and/or {anyOf[1]}

+ + {anyOf && ( +
+

+ You must specify {anyOf[0]} and/or{' '} + {anyOf[1]} +

- } - { - oneOf && oneOf.length == 2 && -
-

You must specify {oneOf[0]} or {oneOf[1]} but not both

+ )} + {oneOf && oneOf.length == 2 && ( +
+

+ You must specify {oneOf[0]} or {oneOf[1]}{' '} + but not both +

- } - { - oneOf && oneOf.length == 3 && -
-

You must specify one of {oneOf[0]}, {oneOf[1]} or {oneOf[2]}

+ )} + {oneOf && oneOf.length == 3 && ( +
+

+ You must specify one of {oneOf[0]},{' '} + {oneOf[1]} or {oneOf[2]} +

- } + )} ) } diff --git a/mission-control/docs/notifications/concepts/index.md b/mission-control/docs/notifications/concepts/index.md new file mode 100644 index 00000000..2b847611 --- /dev/null +++ b/mission-control/docs/notifications/concepts/index.md @@ -0,0 +1,8 @@ +--- +title: Concepts +sidebar_position: 2 +--- + +import DocCardList from '@theme/DocCardList'; + + diff --git a/mission-control/docs/notifications/concepts/rate-limiting.mdx b/mission-control/docs/notifications/concepts/rate-limiting.mdx new file mode 100644 index 00000000..7c3bfda6 --- /dev/null +++ b/mission-control/docs/notifications/concepts/rate-limiting.mdx @@ -0,0 +1,40 @@ +--- +title: Rate Limiting +--- + +To prevent overwhelming users with excessive notifications, Mission Control implements a rate limiting mechanism. + +We use a sliding window rate limiter that restricts the total number of notifications sent within a specified time period. + +:::info +The rate limit is applied individually to each notification. +::: + +:::caution Rate Limited Notifications +When a notification exceeds the rate limit, it is dropped and not delivered to the user. +::: + +## Default Configuration + +The following table outlines the default rate limiting parameters: + +| Property | Value | +|----------------------------------|----------| +| Maximum number of notifications allowed per window | 50 | +| Time period for the sliding window | 4 hours | + +## Customizing Rate Limiting Parameters + +You can override the default settings by adjusting the following properties: + +- `notifications.max.count`: Sets the maximum number of notifications allowed within the window +- `notifications.max.window`: Defines the duration of the sliding window (in hours) + +### Example Configuration + +To allow a maximum of 100 notifications in a 6 hour window: + +``` +notifications.max.count=100 +notifications.max.window=6h +``` diff --git a/mission-control/docs/notifications/concepts/repeat-interval.mdx b/mission-control/docs/notifications/concepts/repeat-interval.mdx new file mode 100644 index 00000000..225eb453 --- /dev/null +++ b/mission-control/docs/notifications/concepts/repeat-interval.mdx @@ -0,0 +1,61 @@ +--- +title: Repeat Interval +--- + +The repeat interval determines the duration between subsequent notifications after an initial successful delivery. + +```yaml title="deployment-failed.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: config-updates + namespace: default +spec: + events: + - config.healthy + - config.unhealthy + - config.warning + - config.unknown + filter: config.type == "Kubernetes::Deployment" + to: + email: alerts@acme.com + repeatInterval: 2h +``` + +The above notification sends at max 1 email notification in a moving 2 hour window. + +## Repeat Group + +By default, the repeat interval applies to any notification sent for the given notification. + +In the example above, if a notification is sent for a `config.healthy` event and then a new notification is to be sent +for a `config.unhealthy` event, then the notification is dropped due to the repeat interval. + +With grouping, you can apply the repeat interval per source event & per resource ID. + +- `source_event` +- `resource_id` + +```yaml title="deployment-updates.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: config-updates + namespace: default +spec: + events: + - config.healthy + - config.unhealthy + - config.warning + - config.unknown + filter: config.type == "Kubernetes::Deployment" + to: + email: alerts@acme.com + repeatInterval: 2h + // highlight-start + repeatGroup: + - source_event + // highlight-end +``` + +With this change, you'll now receive at max 4 notifications for each source event. \ No newline at end of file diff --git a/mission-control/docs/notifications/events/components.md b/mission-control/docs/notifications/events/components.md deleted file mode 100644 index f7113008..00000000 --- a/mission-control/docs/notifications/events/components.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Components -description: Events that fire on topology/component changes ---- - -Component status updates emit the following events - -- `component.healthy` -- `component.unhealthy` -- `component.warning` -- `component.unknown` - -The default notification template used is: -_ **Title:** `Component {{.component.name}} is {{.component.health}}` -_ **Body:** - -``` -### Labels: -{{range $k, $v := .component.labels}}**{{$k}}**: {{$v}} -{{end}} -[Reference]({{.permalink}}) -``` - -Sample notification: - -```yaml title="notification.yaml" -apiVersion: mission-control.flanksource.com/v1 -kind: Notification -metadata: - name: web-api-component-alert - namespace: default -spec: - events: - - component.unhealthy - filter: component.type == 'WebAPI' - title: WebAPI {{.component.name}} failing - body: | - ## Component Failed - Status: {{.component.status}} | {{.component.status_reason}} - Last updated: {{.component.updated_at}} - to: - email: alerts@acme.com -``` - -The notification title and body can be changed using the variables below: - -## Variables - -| Field | Description | Schema | Optional | -| ----------- | ----------------------------- | ------------------------- | -------- | -| `component` | The component object | [`Component`](#component) | | -| `agent` | Agent details (if applicable) | [`Agent`](#agent) | `true` | -| `permalink` | A link to the health check | `string` | | - -### Component - -| Field | Description | Schema | Optional | -| ----------------- | -------------------------------------------- | ------------------- | -------- | -| `id` | The id of the component | `uuid` | | -| `description` | The description of the component | `string` | | -| `external_id` | The external id of the component | `string` | | -| `hidden` | Whether the component is hidden | `bool` | | -| `labels` | The labels of the component | `map[string]string` | `true` | -| `name` | The name of the component | `string` | | -| `namespace` | The namespace of the component | `string` | | -| `parent_id` | The id of the parent component | `uuid` | `true` | -| `properties` | The properties of the component | `map[string]string` | `true` | -| `silenced` | Whether the component is silenced | `bool` | | -| `status_reason` | The status reason of the component | `string` | | -| `status` | The status of the component | `string` | | -| `summary` | The summary of the component | `map[string]string` | `true` | -| `text` | The text of the component | `string` | | -| `topology_type` | The type of the topology | `string` | | -| `type` | The type of the component | `string` | | -| `cost_per_minute` | The cost per minute of the component | `float64` | | -| `cost_total_1d` | The cost total 1d of the component | `float64` | | -| `cost_total_7d` | The cost total 7d of the component | `float64` | | -| `cost_total_30d` | The cost total 30d of the component | `float64` | | -| `created_by` | Id of the person that created this component | `uuid` | | -| `created_at` | Created timestamp | `time.Time` | | -| `updated_at` | Updated timestamp | `time.Time` | | -| `deleted_at` | Deleted timestamp | `time.Time` | `true` | - -### Agent - -| Field | Description | Schema | Optional | -| ------------- | ------------------------------ | -------- | -------- | -| `id` | The id of the agent | `uuid` | | -| `name` | The name of the agent | `string` | | -| `description` | Short description of the agent | `string` | | diff --git a/mission-control/docs/notifications/events/components.mdx b/mission-control/docs/notifications/events/components.mdx new file mode 100644 index 00000000..bb0f6aea --- /dev/null +++ b/mission-control/docs/notifications/events/components.mdx @@ -0,0 +1,62 @@ +--- +title: Components +description: Events that fire on topology/component changes +--- + +import { ComponentHealthEnv, AgentEnv, ComponentEnv } from "../../reference/notifications/_env_vars.mdx" + +Components updates emit the following events when its health changes + +- `component.healthy` +- `component.unhealthy` +- `component.warning` +- `component.unknown` + +```yaml title="unhelthy-component-notification.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: web-api-component-alert + namespace: default +spec: + events: + - component.unhealthy + filter: component.type == 'WebAPI' + title: WebAPI {{.component.name}} failing + body: | + ## Component Failed + Status: {{.component.status}} | {{.component.status_reason}} + Last updated: {{.component.updated_at}} + to: + email: alerts@acme.com +``` + +![](./slack-notification-component.png) + +## Default Templates + +The default notification template used is: + +### Title + +``` +{{ if ne channel "slack"}}Component {{.component.name}} is {{.component.health}}{{end}} +``` + +### Template + +```txt file=../../../modules/mission-control/notification/templates/component.health + +``` + +## Template Variables + +The notification title and body can be changed using the variables below: + + +### Component + + + +### Agent + \ No newline at end of file diff --git a/mission-control/docs/notifications/events/configs.md b/mission-control/docs/notifications/events/configs.md deleted file mode 100644 index 9e4e073d..00000000 --- a/mission-control/docs/notifications/events/configs.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Configs -description: Events that fire on config changes and health ---- - -Configs emit events when their health changes or when they are created, modified, or removed. - -**Health events** - -- `config.healthy` -- `config.unhealthy` -- `config.warning` -- `config.unknown` - -The default notification template for health events is: - -- **Title:** `{{.config.type}} {{.config.name}} is {{.config.health}}` -- **Body:** - - ``` - ### Labels: - {{range $k, $v := .config.labels}}**{{$k}}**: {{$v}} - {{end}} - [Reference]({{.permalink}}) - ``` - -**State events** - -- `config.created` -- `config.updated` -- `config.deleted` - -The default notification template for state events is: - -- **Title:** `{{.config.type}} {{.config.name}} was [created/updated/deleted]` -- **Body:** - - ``` - ### Labels: - {{range $k, $v := .config.labels}}**{{$k}}**: {{$v}} - {{end}} - [Reference]({{.permalink}}) - ``` - -Sample notification: - -```yaml title="notification.yaml" -apiVersion: mission-control.flanksource.com/v1 -kind: Notification -metadata: - name: ec2-instance-create-alert - namespace: default -spec: - events: - - config.created - filter: config.type == 'AWS::EC2::Instance' - title: New EC2 instance {{.config.name}} created - body: | - Region: {{.config.tags['region']}} - Zone: {{.config.tags['zone']}} - Account: {{.config.tags['account']}} - to: - email: alerts@acme.com -``` - -## Variables - -| Field | Description | Schema | nullable | -| ----------- | ----------------------------- | ------------------- | -------- | -| `config` | The config object | [`Config`](#config) | | -| `agent` | Agent details (if applicable) | [`Agent`](#agent) | `true` | -| `permalink` | A link to the config item | `string` | | - -### Config - -| Field | Description | Schema | nullable | -| --------------- | -------------------------------- | --------------- | -------- | -| `id` | ID of the config item | `uuid` | | -| `agent_id` | ID of the agent | `uuid` | `true` | -| `config_class` | Class of the config item | `string` | | -| `config` | Configuration | `string` | `true` | -| `created_at` | Creation timestamp | `time.Time` | | -| `delete_reason` | Reason for deletion | `string` | `true` | -| `deleted_at` | Deletion timestamp | `time.Time` | `true` | -| `description` | Description | `string` | `true` | -| `external_id` | External IDs | `[]string` | `true` | -| `health` | Health | `Health` | `true` | -| `labels` | Labels | `JSONStringMap` | `true` | -| `name` | Name | `string` | `true` | -| `properties` | Properties | `Properties` | `true` | -| `ready` | Whether the config item is ready | `bool` | | -| `scraper_id` | ID of the scraper | `string` | `true` | -| `source` | Source | `string` | `true` | -| `status` | Status | `string` | `true` | -| `tags` | Tags | `JSONStringMap` | | -| `type` | Type | `string` | | -| `updated_at` | Update timestamp | `time.Time` | `true` | - -### Agent - -| Field | Description | Schema | Optional | -| ------------- | ------------------------------ | -------- | -------- | -| `id` | The id of the agent | `uuid` | | -| `name` | The name of the agent | `string` | | -| `description` | Short description of the agent | `string` | | - -## Notification Defaults diff --git a/mission-control/docs/notifications/events/configs.mdx b/mission-control/docs/notifications/events/configs.mdx new file mode 100644 index 00000000..4ae37ead --- /dev/null +++ b/mission-control/docs/notifications/events/configs.mdx @@ -0,0 +1,101 @@ +--- +title: Configs +description: Events that fire on config changes and health +--- + +import { + CheckHealthEnv, ConfigEventsTemplateVars, ComponentHealthEnv, + AgentEnv, ConfigItemEnv, ComponentEnv, CanaryEnv, CheckEnv, CheckStatus, + Uptime, Latency +} from "../../reference/notifications/_env_vars.mdx" + +Configs emit events when their health changes or when they are created, modified, or removed. + +## Health events + +- `config.healthy` +- `config.unhealthy` +- `config.warning` +- `config.unknown` + +```yaml title="ec2-health-notification.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: ec2-instance-health-alerts + namespace: default +spec: + events: + - config.unhealthy + - config.warning + filter: config.type == 'AWS::EC2::Instance' + to: + email: alerts@acme.com +``` + +![](./slack-notification-catalog-unhealthy.png) + + +### Default Template + +The default notification template for health events is: + +#### Title + +``` +{{ if ne channel "slack"}}{{.config.type}} {{.config.name}} is {{.config.health}}{{end}} +``` + +#### Template + +```txt file=../../../modules/mission-control/notification/templates/config.health + +``` + +## State events + +- `config.created` +- `config.updated` +- `config.deleted` + +```yaml title="ec2-instance-updates.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: ec2-instance-changes + namespace: default +spec: + events: + - config.created + - config.updated + - config.deleted + filter: config.type == 'AWS::EC2::Instance' + to: + email: alerts@acme.com +``` + +![](./slack-notification-catalog-updated.png) + +### Default Template + +#### Title + +``` +{{ if ne channel "slack"}}{{.config.type}} {{.config.name}} was {{.new_state}}{{end}} +``` + +#### Template + +```txt file=../../../modules/mission-control/notification/templates/config.db.update + +``` + +## Template Variables + + + +### Config Item + + +### Agent + diff --git a/mission-control/docs/notifications/events/health-checks.md b/mission-control/docs/notifications/events/health-checks.md deleted file mode 100644 index 6e45d000..00000000 --- a/mission-control/docs/notifications/events/health-checks.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -description: Events that fire when health checks pass or fail -title: Health Checks ---- - -Health checks emit 2 events - -- **`check.passed`**: - - - **Title:** `Check {{.check.name}} has passed` - - **Body:** - ``` - Canary: {{.canary.name}} - {{if .agent}}Agent: {{.agent.name}}{{end}} - {{if .status.message}}Message: {{.status.message}} {{end}} - ### Labels: - {{range $k, $v := .check.labels}}**{{$k}}**: {{$v}} - {{end}} - [Reference]({{.permalink}}) - ``` - -- **`check.failed`**: - - **Title:** `Check {{.check.name}} has failed` - - **Body:** - ``` - Canary: {{.canary.name}} - {{if .agent}}Agent: {{.agent.name}}{{end}} - Error: {{.status.error}} - ### Labels: - {{range $k, $v := .check.labels}}**{{$k}}**: {{$v}} - {{end}} - [Reference]({{.permalink}}) - ``` - -Sample notification: - -```yaml title="notification.yaml" -apiVersion: mission-control.flanksource.com/v1 -kind: Notification -metadata: - name: api-http-fail-alert - namespace: default -spec: - events: - - check.failed - filter: check.type == 'http' - title: API HTTP Check {{.check.name}} failing - body: | - ## Check Failed - Error: {{.status.error}} - Failed at {{.status.created_at}} - to: - email: alerts@acme.com -``` - -## Variables - -| Field | Description | Schema | Optional | -| ----------- | ----------------------------- | ------------------------------ | -------- | -| `canary` | The parent canary object | [`Canary`](#canary) | | -| `check` | The check | [`Check`](#check) | | -| `agent` | Agent details (if applicable) | [`Agent`](#check) | `true` | -| `status` | Check status details | [`CheckStatus`](#check-status) | | -| `permalink` | A link to the health check | `string` | | - -### Canary - -| Field | Description | Schema | Optional | -| ------------ | ---------------------------- | ------------------- | -------- | -| `id` | The id of the canary | `uuid` | | -| `name` | The name of the canary | `string` | | -| `namespace` | The namespace of the canary | `string` | | -| `agent_id` | The agent id of the canary | `string` | | -| `labels` | The labels of the canary | `map[string]string` | `true` | -| `source` | The source of the canary | `string` | | -| `created_at` | The created at of the canary | `string` | | -| `updated_at` | The updated at of the canary | `string` | | -| `deleted_at` | The deleted at of the canary | `string` | `true` | - -### Check - -| Field | Description | Schema | Optional | -| ---------------------- | -------------------------------------- | --------------------- | -------- | -| `id` | The id of the check | `uuid` | | -| `type` | The type of the check | `string` | | -| `name` | The name of the check | `string` | | -| `labels` | The labels of the check | `map[string]string` | `true` | -| `description` | The description of the check | `string` | | -| `status` | Check status details | `string` | | -| `severity` | The severity of the check | `string` | `true` | -| `uptime` | The past 1 hour uptime summary | [`Uptime`](#uptime) | `true` | -| `latency` | The past 1 hour latency summary | [`Latency`](#latency) | `true` | -| `transformed` | Whether the check has been transformed | `bool` | | -| `last_runtime` | The last runtime of the check | `time.Time` | `true` | -| `next_runtime` | The next runtime of the check | `time.Time` | `true` | -| `last_transition_time` | The last transition time of the check | `time.Time` | `true` | -| `created_at` | The created at of the check | `time.Time` | | -| `updated_at` | The updated at of the check | `time.Time` | | -| `deleted_at` | The deleted at of the check | `time.Time` | `true` | - -#### Uptime - -| Field | Description | Schema | Optional | -| ----------- | ------------------------------------ | ----------- | -------- | -| `passed` | The number of checks that passed | `int` | | -| `failed` | The number of checks that failed | `int` | | -| `p100` | The percentage of checks that passed | `float64` | | -| `last_pass` | The last time a check passed | `time.Time` | `true` | -| `last_fail` | The last time a check failed | `time.Time` | `true` | - -#### Latency - -| Field | Description | Schema | Optional | -| ----------- | ------------------------ | --------- | -------- | -| `p99` | The latency of the check | `float64` | `true` | -| `p97` | The latency of the check | `float64` | `true` | -| `p95` | The latency of the check | `float64` | `true` | -| `rolling1h` | The latency of the check | `float64` | | - -### Agent - -| Field | Description | Schema | Optional | -| ------------- | ------------------------------ | -------- | -------- | -| `id` | The id of the agent | `uuid` | | -| `name` | The name of the agent | `string` | | -| `description` | Short description of the agent | `string` | | - -### Check Status - -| Field | Description | Schema | Optional | -| ------------ | ----------------------------------------------- | ----------- | -------- | -| `check_id` | The id of the check associated with this status | `uuid` | | -| `status` | The status of the check | `bool` | | -| `invalid` | Whether the check errored out | `bool` | | -| `time` | The time of the check | `string` | | -| `duration` | The duration of the check | `int` | | -| `message` | The success message of the check | `string` | | -| `error` | The error of the check in case of failure | `string` | | -| `created_at` | The created at of the check | `time.Time` | | - -## Notification Template Defaults diff --git a/mission-control/docs/notifications/events/health-checks.mdx b/mission-control/docs/notifications/events/health-checks.mdx new file mode 100644 index 00000000..6bedab70 --- /dev/null +++ b/mission-control/docs/notifications/events/health-checks.mdx @@ -0,0 +1,88 @@ +--- +description: Events that fire when health checks pass or fail +title: Health Checks +--- + +import { + CheckHealthEnv, ConfigEventsTemplateVars, ComponentHealthEnv, + AgentEnv, ConfigItemEnv, ComponentEnv, CanaryEnv, CheckEnv, CheckStatus, + Uptime, Latency +} from "../../reference/notifications/_env_vars.mdx" + +Health checks emit 2 events + +- `check.passed` +- `check.failed` + +```yaml title="notification.yaml" +apiVersion: mission-control.flanksource.com/v1 +kind: Notification +metadata: + name: api-http-fail-alert + namespace: default +spec: + events: + - check.failed + filter: check.type == 'http' + title: API HTTP Check {{.check.name}} failing + body: | + ## Check Failed + Error: {{.status.error}} + Failed at {{.status.created_at}} + to: + email: alerts@acme.com +``` + +![](./slack-notification-unhealthy-check.png) + +## Default Templates + +### check.passed + +#### Title + +``` +{{ if ne channel "slack"}}Check {{.check.name}} has passed{{end}} +``` + +#### Template + +```txt file=../../../modules/mission-control/notification/templates/check.passed + +``` + +### check.failed + +#### Title + +``` +{{ if ne channel "slack"}}Check {{.check.name}} has failed{{end}} +``` + +#### Template + +```txt file=../../../modules/mission-control/notification/templates/check.failed + +``` + +## Template Variables + + + +### Agent + + +### Canary + + +### Check + + +### CheckStatus + + +### Uptime + + +### Latency + \ No newline at end of file diff --git a/mission-control/docs/notifications/events/slack-notification-catalog-unhealthy.png b/mission-control/docs/notifications/events/slack-notification-catalog-unhealthy.png new file mode 100644 index 0000000000000000000000000000000000000000..584105d474c1ddf94845c6f1df12de322e55e92f GIT binary patch literal 47702 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

IiT&eGBe&OW-DaR;lul+w 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 N5Rnxw7u5gpe*kkzu|)s? literal 0 HcmV?d00001 diff --git a/mission-control/docs/notifications/events/slack-notification-component.png b/mission-control/docs/notifications/events/slack-notification-component.png new file mode 100644 index 0000000000000000000000000000000000000000..84caa1a4c1cfaa45d70593c0be51de35b9b1544f GIT binary patch literal 27549 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

dFMQAj?O68d{^^hCQt@S+qh~W| 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 literal 0 HcmV?d00001 diff --git a/mission-control/docs/notifications/events/slack-notification-unhealthy-check.png b/mission-control/docs/notifications/events/slack-notification-unhealthy-check.png new file mode 100644 index 0000000000000000000000000000000000000000..3b96c5bc85865209667762421366af87f2704df7 GIT binary patch literal 29930 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 + ## Templating You can use Go Templates to customize the content of notification titles and bodies. This allows you to include dynamic information from the event that triggered the notification. -For example, the following notification definition uses a Go Template to include the name and health status of the check in the notification title: +**For example, the following notification definition** uses a Go Template to include the name and health status of the check in the notification title: ```yaml title="notification-template" apiVersion: mission-control.flanksource.com/v1 kind: Notification spec: + events: + - check.failed + - check.passed title: Check {{.check.name}} is {{.check.health}} ``` @@ -48,10 +52,9 @@ In this example `{{.check.name}}` and `{{.check.health}}` are placeholders that :::tip Markdown -All notification templates in Mission Control are defined in markdown, and depending on the support of the notification channel in use it will either be converted to HTML or plain text. +All notification templates in Mission Control are defined in markdown, and depending on the support of the notification channel it will either be converted to HTML or plain text. ::: - ## Filtering Events Mission Control allows you to fine-tune your notification delivery by filtering events using CEL. This enables you to specify precise conditions that dictate when a notification should be triggered. For instance, you can configure notifications to be sent only for specific event types, specific resources, or when certain conditions are met. diff --git a/mission-control/docs/reference/notifications/_env_vars.mdx b/mission-control/docs/reference/notifications/_env_vars.mdx new file mode 100644 index 00000000..75beb426 --- /dev/null +++ b/mission-control/docs/reference/notifications/_env_vars.mdx @@ -0,0 +1,593 @@ +export function CheckHealthEnv() { + return +} + +export function ComponentHealthEnv() { + return +} + +export function ConfigEventsTemplateVars() { + return +} + +export function AgentEnv() { + return +} + +export function ConfigItemEnv() { + return +} + +export function CanaryEnv() { + return +} + +export function ComponentEnv() { + return +} + +export function CheckEnv() { + return +} + +export function Uptime() { + return ( + + ) +} + +export function Latency() { + return ( + + ) +} + + +### Check Status + +| Field | Description | Schema | Optional | +| ------------ | ----------------------------------------------- | ----------- | -------- | +| `check_id` | The id of the check associated with this status | `uuid` | | +| `status` | The status of the check | `bool` | | +| `invalid` | Whether the check errored out | `bool` | | +| `time` | The time of the check | `string` | | +| `duration` | The duration of the check | `int` | | +| `message` | The success message of the check | `string` | | +| `error` | The error of the check in case of failure | `string` | | +| `created_at` | The created at of the check | ``time.Time`` | | + + +export function CheckStatus() { + return ( + + ) +} diff --git a/mission-control/docs/reference/notifications/_notification.mdx b/mission-control/docs/reference/notifications/_notification.mdx index 076463d4..27838470 100644 --- a/mission-control/docs/reference/notifications/_notification.mdx +++ b/mission-control/docs/reference/notifications/_notification.mdx @@ -1,10 +1,11 @@ - -> Only one recipient can be specified +:::info Single Recipient +Only one recipient can be specified +::: diff --git a/mission-control/docs/reference/notifications/template_functions.mdx b/mission-control/docs/reference/notifications/template_functions.mdx new file mode 100644 index 00000000..203ef2bd --- /dev/null +++ b/mission-control/docs/reference/notifications/template_functions.mdx @@ -0,0 +1,219 @@ +--- +title: Template Functions +--- + +Special template functions are made available on notifications to complex block formation easier. + +## labelsFormat +Formats the given set of labels into a markdown string + +Syntax: + +```js +labelsFormat(map[string]any): string +``` + +Example: + +```js +labelsFormat(map[string]any{ + "namespace": "default", + "cluster": "staging", +}) +``` + +```md +### Labels + +**namespace**: default +**cluster**: staging +``` + +## Slack + +These slack helper functions will return a json string suitable for use in slack blocks/messages. + +### slackHealthEmoji +Returns a slack emoji based on the supplied health + +Syntax: + +```js +slackHealthEmoji(health): string +``` + +**Returns:** + +- `:large_green_circle:` for `healthy` health status +- `:red_circle:` for `unhealthy` health status +- `:large_orange_circle:` for `warning` health status +- `:white_circle:` for any other health status + +### slackSectionLabels + +Formats the given set of labels into fields of a slack section block + +Syntax: + +```js +slackSectionLabels(map[string]any): SlackSection +``` + +Example: + +```js +slackSectionLabels(map[string]any{ + "namespace": "default", + "cluster": "staging", +}) +``` + +```json +{ + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*Labels*" + }, + "fields": [ + { + "type": "mrkdwn", + "text": "*namespace*: default", + "verbatim": true + }, + { + "type": "mrkdwn", + "text": "*cluster*: staging", + "verbatim": true + } + ] +} +``` + +### slackSectionTextFieldPlain + +Creates a plain text field for a Slack section block + +Syntax: + +```js +slackSectionTextFieldPlain(text: string): string +``` + +Example: + +```js +slackSectionTextFieldPlain("alert-manager") +``` + +```json +{ + "type": "plain_text", + "text": "alert-manager" +} +``` + +### slackSectionTextFieldMD +Creates a markdown text field for a Slack section block + +Syntax: + +```js +slackSectionTextFieldMD(text: string): string +``` + +Example: + +```js +slackSectionTextFieldPlain("alert-manager") +``` + +```json +{ + "type": "mrkdwn", + "text": "alert-manager" +} +``` + +### slackSectionTextMD +Creates a Slack section block with markdown text + +Syntax: + +```js +slackSectionTextMD(text: string): string +``` + +Example: + +```js +slackSectionTextMD("alert-manager") +``` + +```json +{ + "type": "section", + "text": { + "type": "mrkdwn", + "text": "alert-manager" + } +} +``` + +### slackSectionTextPlain +Creates a Slack section block with plain text + +Syntax: + +```js +slackSectionTextPlain(text: string): string +``` + +Example: + +```js +slackSectionTextMD("alert-manager") +``` + +```json +{ + "type": "section", + "text": { + "type": "plain_text", + "text": "alert-manager" + } +} +``` + +### SlackURLAction +Creates a Slack action block with a URL button + +Syntax: + +```js +slackURLAction(name: string, url: string): string +``` + +Example: + +```js +slackURLAction("Grafana", "https://grafana.com") +``` + +```json +{ + "type": "actions", + "elements": [ + { + "type": "button", + "text": { + "type": "plain_text", + "text": "Grafana", + "emoji": true + }, + "url": "https://grafana.com", + "action_id": "Grafana" + } + ] +} +``` \ No newline at end of file diff --git a/mission-control/docs/reference/notifications/template_vars/checks.mdx b/mission-control/docs/reference/notifications/template_vars/checks.mdx new file mode 100644 index 00000000..a9fcceb8 --- /dev/null +++ b/mission-control/docs/reference/notifications/template_vars/checks.mdx @@ -0,0 +1,27 @@ +--- +title: Check Events +--- + +import { CheckHealthEnv, AgentEnv, CanaryEnv, CheckEnv, CheckStatus, Uptime, Latency } from "../_env_vars.mdx" + +List of template variables available on check events. + + + +### Agent + + +### Canary + + +### Check + + +### CheckStatus + + +### Uptime + + +### Latency + \ No newline at end of file diff --git a/mission-control/docs/reference/notifications/template_vars/components.mdx b/mission-control/docs/reference/notifications/template_vars/components.mdx new file mode 100644 index 00000000..b59e9dff --- /dev/null +++ b/mission-control/docs/reference/notifications/template_vars/components.mdx @@ -0,0 +1,17 @@ +--- +title: Component Events +--- + +import { + CheckHealthEnv, ConfigEventsTemplateVars, ComponentHealthEnv, + AgentEnv, ConfigItemEnv, ComponentEnv, CanaryEnv, CheckEnv, CheckStatus, + Uptime, Latency +} from "../_env_vars.mdx" + + + +### Agent + + +### Component + \ No newline at end of file diff --git a/mission-control/docs/reference/notifications/template_vars/config.mdx b/mission-control/docs/reference/notifications/template_vars/config.mdx new file mode 100644 index 00000000..b5d1f588 --- /dev/null +++ b/mission-control/docs/reference/notifications/template_vars/config.mdx @@ -0,0 +1,13 @@ +--- +title: Config Events +--- + +import { ConfigEventsTemplateVars, AgentEnv, ConfigItemEnv } from "../_env_vars.mdx" + + + +### Agent + + +### Config Item + diff --git a/mission-control/docs/reference/notifications/template_vars/index.md b/mission-control/docs/reference/notifications/template_vars/index.md new file mode 100644 index 00000000..573e287f --- /dev/null +++ b/mission-control/docs/reference/notifications/template_vars/index.md @@ -0,0 +1,3 @@ +--- +title: Template Variables +---