package alerting import ( "fmt" "io/ioutil" "net/http" "testing" "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/bus" "github.com/grafana/grafana/pkg/infra/tracing" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/tests/testinfra" ) func TestAvailableChannels(t *testing.T) { _, err := tracing.InitializeTracerForTest() require.NoError(t, err) dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{ DisableLegacyAlerting: true, EnableUnifiedAlerting: true, DisableAnonymous: true, }) grafanaListedAddr, store := testinfra.StartGrafana(t, dir, path) store.Bus = bus.GetBus() // Create a user to make authenticated requests createUser(t, store, models.CreateUserCommand{ DefaultOrgRole: string(models.ROLE_EDITOR), Password: "password", Login: "grafana", }) alertsURL := fmt.Sprintf("http://grafana:password@%s/api/alert-notifiers", grafanaListedAddr) // nolint:gosec resp, err := http.Get(alertsURL) require.NoError(t, err) t.Cleanup(func() { err := resp.Body.Close() require.NoError(t, err) }) b, err := ioutil.ReadAll(resp.Body) require.NoError(t, err) require.Equal(t, 200, resp.StatusCode) require.JSONEq(t, expAvailableChannelJsonOutput, string(b)) } var expAvailableChannelJsonOutput = ` [ { "type": "dingding", "name": "DingDing", "heading": "DingDing settings", "description": "Sends HTTP POST request to DingDing", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Url", "description": "", "placeholder": "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Message Type", "description": "", "placeholder": "", "propertyName": "msgType", "selectOptions": [ { "value": "link", "label": "Link" }, { "value": "actionCard", "label": "ActionCard" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "kafka", "name": "Kafka REST Proxy", "heading": "Kafka settings", "description": "Sends notifications to Kafka Rest Proxy", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Kafka REST Proxy", "description": "", "placeholder": "http://localhost:8082", "propertyName": "kafkaRestProxy", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Topic", "description": "", "placeholder": "topic1", "propertyName": "kafkaTopic", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false } ] }, { "type": "email", "name": "Email", "heading": "Email settings", "description": "Sends notifications using Grafana server configured SMTP settings", "info": "", "options": [ { "element": "checkbox", "inputType": "", "label": "Single email", "description": "Send a single email to all recipients", "placeholder": "", "propertyName": "singleEmail", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Addresses", "description": "You can enter multiple email addresses using a \";\" separator", "placeholder": "", "propertyName": "addresses", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "Optional message to include with the email. You can use template variables", "placeholder": "", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "pagerduty", "name": "PagerDuty", "heading": "PagerDuty settings", "description": "Sends notifications to PagerDuty", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Integration Key", "description": "", "placeholder": "Pagerduty Integration Key", "propertyName": "integrationKey", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "select", "inputType": "", "label": "Severity", "description": "", "placeholder": "", "propertyName": "severity", "selectOptions": [ { "value": "critical", "label": "Critical" }, { "value": "error", "label": "Error" }, { "value": "warning", "label": "Warning" }, { "value": "info", "label": "Info" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Class", "description": "The class/type of the event, for example 'ping failure' or 'cpu load'", "placeholder": "", "propertyName": "class", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Component", "description": "Component of the source machine that is responsible for the event, for example mysql or eth0", "placeholder": "Grafana", "propertyName": "component", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Group", "description": "Logical grouping of components of a service, for example 'app-stack'", "placeholder": "", "propertyName": "group", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Summary", "description": "You can use templates for summary", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "summary", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "victorops", "name": "VictorOps", "heading": "VictorOps settings", "description": "Sends notifications to VictorOps", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Url", "description": "", "placeholder": "VictorOps url", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Message Type", "description": "", "placeholder": "", "propertyName": "messageType", "selectOptions": [ { "value": "CRITICAL", "label": "CRITICAL" }, { "value": "WARNING", "label": "WARNING" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "pushover", "name": "Pushover", "description": "Sends HTTP POST request to the Pushover API", "heading": "Pushover settings", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "API Token", "description": "", "placeholder": "Application token", "propertyName": "apiToken", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "User key(s)", "description": "", "placeholder": "comma-separated list", "propertyName": "userKey", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Device(s) (optional)", "description": "", "placeholder": "comma-separated list; leave empty to send to all devices", "propertyName": "device", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Alerting priority", "description": "", "placeholder": "", "propertyName": "priority", "selectOptions": [ { "value": "2", "label": "Emergency" }, { "value": "1", "label": "High" }, { "value": "0", "label": "Normal" }, { "value": "-1", "label": "Low" }, { "value": "-2", "label": "Lowest" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "OK priority", "description": "", "placeholder": "", "propertyName": "okPriority", "selectOptions": [ { "value": "2", "label": "Emergency" }, { "value": "1", "label": "High" }, { "value": "0", "label": "Normal" }, { "value": "-1", "label": "Low" }, { "value": "-2", "label": "Lowest" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Retry (Only used for Emergency Priority)", "description": "How often (in seconds) the Pushover servers will send the same alerting or OK notification to the user.", "placeholder": "minimum 30 seconds", "propertyName": "retry", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Expire (Only used for Emergency Priority)", "description": "How many seconds the alerting or OK notification will continue to be retried.", "placeholder": "maximum 86400 seconds", "propertyName": "expire", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Alerting sound", "description": "", "placeholder": "", "propertyName": "sound", "selectOptions": [ { "value": "default", "label": "Default" }, { "value": "pushover", "label": "Pushover" }, { "value": "bike", "label": "Bike" }, { "value": "bugle", "label": "Bugle" }, { "value": "cashregister", "label": "Cashregister" }, { "value": "classical", "label": "Classical" }, { "value": "cosmic", "label": "Cosmic" }, { "value": "falling", "label": "Falling" }, { "value": "gamelan", "label": "Gamelan" }, { "value": "incoming", "label": "Incoming" }, { "value": "intermission", "label": "Intermission" }, { "value": "magic", "label": "Magic" }, { "value": "mechanical", "label": "Mechanical" }, { "value": "pianobar", "label": "Pianobar" }, { "value": "siren", "label": "Siren" }, { "value": "spacealarm", "label": "Spacealarm" }, { "value": "tugboat", "label": "Tugboat" }, { "value": "alien", "label": "Alien" }, { "value": "climb", "label": "Climb" }, { "value": "persistent", "label": "Persistent" }, { "value": "echo", "label": "Echo" }, { "value": "updown", "label": "Updown" }, { "value": "none", "label": "None" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "OK sound", "description": "", "placeholder": "", "propertyName": "okSound", "selectOptions": [ { "value": "default", "label": "Default" }, { "value": "pushover", "label": "Pushover" }, { "value": "bike", "label": "Bike" }, { "value": "bugle", "label": "Bugle" }, { "value": "cashregister", "label": "Cashregister" }, { "value": "classical", "label": "Classical" }, { "value": "cosmic", "label": "Cosmic" }, { "value": "falling", "label": "Falling" }, { "value": "gamelan", "label": "Gamelan" }, { "value": "incoming", "label": "Incoming" }, { "value": "intermission", "label": "Intermission" }, { "value": "magic", "label": "Magic" }, { "value": "mechanical", "label": "Mechanical" }, { "value": "pianobar", "label": "Pianobar" }, { "value": "siren", "label": "Siren" }, { "value": "spacealarm", "label": "Spacealarm" }, { "value": "tugboat", "label": "Tugboat" }, { "value": "alien", "label": "Alien" }, { "value": "climb", "label": "Climb" }, { "value": "persistent", "label": "Persistent" }, { "value": "echo", "label": "Echo" }, { "value": "updown", "label": "Updown" }, { "value": "none", "label": "None" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "slack", "name": "Slack", "heading": "Slack settings", "description": "Sends notifications to Slack", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Recipient", "description": "Specify channel, private group, or IM channel (can be an encoded ID or a name) - required unless you provide a webhook", "placeholder": "", "propertyName": "recipient", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Token", "description": "Provide a Slack API token (starts with \"xoxb\") - required unless you provide a webhook", "placeholder": "", "propertyName": "token", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Username", "description": "Set the username for the bot's message", "placeholder": "", "propertyName": "username", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Icon emoji", "description": "Provide an emoji to use as the icon for the bot's message. Overrides the icon URL.", "placeholder": "", "propertyName": "icon_emoji", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Icon URL", "description": "Provide a URL to an image to use as the icon for the bot's message", "placeholder": "", "propertyName": "icon_url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Mention Users", "description": "Mention one or more users (comma separated) when notifying in a channel, by ID (you can copy this from the user's Slack profile)", "placeholder": "", "propertyName": "mentionUsers", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Mention Groups", "description": "Mention one or more groups (comma separated) when notifying in a channel (you can copy this from the group's Slack profile URL)", "placeholder": "", "propertyName": "mentionGroups", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Mention Channel", "description": "Mention whole channel or just active members when notifying", "placeholder": "", "propertyName": "mentionChannel", "selectOptions": [ { "value": "", "label": "Disabled" }, { "value": "here", "label": "Every active channel member" }, { "value": "channel", "label": "Every channel member" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Webhook URL", "description": "Optionally provide a Slack incoming webhook URL for sending messages, in this case the token isn't necessary", "placeholder": "Slack incoming webhook URL", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Title", "description": "Templated title of the slack message", "placeholder": "{{ template \"slack.default.title\" . }}", "propertyName": "title", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Text Body", "description": "Body of the slack message", "placeholder": "{{ template \"slack.default.text\" . }}", "propertyName": "text", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "sensugo", "name": "Sensu Go", "description": "Sends HTTP POST request to a Sensu Go API", "heading": "Sensu Go Settings", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Backend URL", "description": "", "placeholder": "http://sensu-api.local:8080", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "input", "inputType": "password", "label": "API Key", "description": "API key to auth to Sensu Go backend", "placeholder": "", "propertyName": "apikey", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Proxy entity name", "description": "", "placeholder": "default", "propertyName": "entity", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Check name", "description": "", "placeholder": "default", "propertyName": "check", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Handler", "description": "", "placeholder": "", "propertyName": "handler", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Namespace", "description": "", "placeholder": "default", "propertyName": "namespace", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "teams", "name": "Microsoft Teams", "heading": "Teams settings", "description": "Sends notifications using Incoming Webhook connector to Microsoft Teams", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "URL", "description": "", "placeholder": "Teams incoming webhook url", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "telegram", "name": "Telegram", "heading": "Telegram API settings", "description": "Sends notifications to Telegram", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "BOT API Token", "description": "", "placeholder": "Telegram BOT API Token", "propertyName": "bottoken", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Chat ID", "description": "Integer Telegram Chat Identifier", "placeholder": "", "propertyName": "chatid", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "webhook", "name": "webhook", "heading": "Webhook settings", "description": "Sends HTTP POST request to a URL", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Url", "description": "", "placeholder": "", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Http Method", "description": "", "placeholder": "", "propertyName": "httpMethod", "selectOptions": [ { "value": "POST", "label": "POST" }, { "value": "PUT", "label": "PUT" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Username", "description": "", "placeholder": "", "propertyName": "username", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "password", "label": "Password", "description": "", "placeholder": "", "propertyName": "password", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Max Alerts", "description": "Max alerts to include in a notification. Remaining alerts in the same batch will be ignored above this number. 0 means no limit.", "placeholder": "", "propertyName": "maxAlerts", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "wecom", "name": "WeCom", "heading": "WeCom settings", "description": "Send alerts generated by Grafana to WeCom", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Url", "description": "", "placeholder": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "textarea", "inputType": "", "label": "Message", "description": "Custom WeCom message. You can use template variables.", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "prometheus-alertmanager", "name": "Alertmanager", "heading": "Alertmanager Settings", "description": "Sends notifications to Alertmanager", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "URL", "description": "", "placeholder": "http://localhost:9093", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "input", "inputType": "text", "label": "Basic Auth User", "description": "", "placeholder": "", "propertyName": "basicAuthUser", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "input", "inputType": "password", "label": "Basic Auth Password", "description": "", "placeholder": "", "propertyName": "basicAuthPassword", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": true } ] }, { "type": "discord", "name": "Discord", "heading": "Discord settings", "description": "Sends notifications to Discord", "info": "", "options": [ { "label": "Message Content", "description": "Mention a group using @ or a user using <@ID> when notifying in a channel", "element": "input", "inputType": "text", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "label": "Webhook URL", "description": "", "element": "input", "inputType": "text", "placeholder": "Discord webhook URL", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "label": "Avatar URL", "description": "", "element": "input", "inputType": "text", "placeholder": "", "propertyName": "avatar_url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "checkbox", "inputType": "", "label": "Use Discord's Webhook Username", "description": "Use the username configured in Discord's webhook settings. Otherwise, the username will be 'Grafana'", "placeholder": "", "propertyName": "use_discord_username", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "googlechat", "name": "Google Hangouts Chat", "heading": "Google Hangouts Chat settings", "description": "Sends notifications to Google Hangouts Chat via webhooks based on the official JSON message format", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Url", "description": "", "placeholder": "Google Hangouts Chat incoming webhook url", "propertyName": "url", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "textarea", "inputType": "", "label": "Message", "description": "", "placeholder": "{{ template \"default.message\" . }}", "propertyName": "message", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] }, { "type": "LINE", "name": "LINE", "heading": "LINE notify settings", "description": "Send notifications to LINE notify", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "Token", "description": "", "placeholder": "LINE notify token key", "propertyName": "token", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true } ] }, { "type": "threema", "name": "Threema Gateway", "heading": "Threema Gateway settings", "description": "Sends notifications to Threema using Threema Gateway (Basic IDs)", "info": "Notifications can be configured for any Threema Gateway ID of type \"Basic\". End-to-End IDs are not currently supported.The Threema Gateway ID can be set up at https://gateway.threema.ch/.", "options": [ { "element": "input", "inputType": "text", "label": "Gateway ID", "description": "Your 8 character Threema Gateway Basic ID (starting with a *).", "placeholder": "*3MAGWID", "propertyName": "gateway_id", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "\\*[0-9A-Z]{7}", "secure": false }, { "element": "input", "inputType": "text", "label": "Recipient ID", "description": "The 8 character Threema ID that should receive the alerts.", "placeholder": "YOUR3MID", "propertyName": "recipient_id", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "[0-9A-Z]{8}", "secure": false }, { "element": "input", "inputType": "text", "label": "API Secret", "description": "Your Threema Gateway API secret.", "placeholder": "", "propertyName": "api_secret", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true } ] }, { "type": "opsgenie", "name": "OpsGenie", "heading": "OpsGenie settings", "description": "Sends notifications to OpsGenie", "info": "", "options": [ { "element": "input", "inputType": "text", "label": "API Key", "description": "", "placeholder": "OpsGenie API Key", "propertyName": "apiKey", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": true }, { "element": "input", "inputType": "text", "label": "Alert API Url", "description": "", "placeholder": "https://api.opsgenie.com/v2/alerts", "propertyName": "apiUrl", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": true, "validationRule": "", "secure": false }, { "element": "checkbox", "inputType": "", "label": "Auto close incidents", "description": "Automatically close alerts in OpsGenie once the alert goes back to ok.", "placeholder": "", "propertyName": "autoClose", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "checkbox", "inputType": "", "label": "Override priority", "description": "Allow the alert priority to be set using the og_priority annotation", "placeholder": "", "propertyName": "overridePriority", "selectOptions": null, "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false }, { "element": "select", "inputType": "", "label": "Send notification tags as", "description": "Send the common annotations to Opsgenie as either Extra Properties, Tags or both", "placeholder": "", "propertyName": "sendTagsAs", "selectOptions": [ { "value": "tags", "label": "Tags" }, { "value": "details", "label": "Extra Properties" }, { "value": "both", "label": "Tags & Extra Properties" } ], "showWhen": { "field": "", "is": "" }, "required": false, "validationRule": "", "secure": false } ] } ] `