test parsing slack messages
This commit is contained in:
93
message.go
93
message.go
@@ -1,6 +1,11 @@
|
||||
package main
|
||||
|
||||
import "encoding/json"
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
ID string
|
||||
@@ -39,3 +44,89 @@ func Deserialize(b []byte) (Message, error) {
|
||||
err := json.Unmarshal(b, &m)
|
||||
return m, err
|
||||
}
|
||||
|
||||
type (
|
||||
slackMessage struct {
|
||||
TS uint64 `json:"event_time"`
|
||||
Event slackEvent
|
||||
}
|
||||
|
||||
slackEvent struct {
|
||||
ID string `json:"event_ts"`
|
||||
Channel string
|
||||
// human
|
||||
ParentID string `json:"thread_ts"`
|
||||
Text string
|
||||
Blocks []slackBlock
|
||||
// bot
|
||||
Bot slackBot `json:"bot_profile"`
|
||||
Attachments []slackAttachment
|
||||
}
|
||||
|
||||
slackBlock struct {
|
||||
Elements []slackElement
|
||||
}
|
||||
|
||||
slackElement struct {
|
||||
Elements []slackElement
|
||||
RichText string `json:"text"`
|
||||
}
|
||||
|
||||
slackBot struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
slackAttachment struct {
|
||||
Color string
|
||||
Title string
|
||||
Text string
|
||||
Fields []slackField
|
||||
Actions []slackAction
|
||||
}
|
||||
|
||||
slackField struct {
|
||||
Value string
|
||||
Title string
|
||||
}
|
||||
|
||||
slackAction struct{}
|
||||
)
|
||||
|
||||
func ParseSlack(b []byte) (Message, error) {
|
||||
s, err := parseSlack(b)
|
||||
if err != nil {
|
||||
return Message{}, err
|
||||
}
|
||||
|
||||
if s.Event.Bot.Name != "" {
|
||||
return Message{
|
||||
ID: strconv.FormatUint(s.TS, 10),
|
||||
TS: s.TS,
|
||||
Source: fmt.Sprintf(`https://renderinc.slack.com/archives/%s/p%s`, s.Event.Channel, strings.ReplaceAll(s.Event.ID, ".", "")),
|
||||
Channel: s.Event.Channel,
|
||||
Thread: s.Event.ID,
|
||||
EventName: strings.Split(s.Event.Attachments[0].Title, ": Firing: ")[1],
|
||||
Event: strings.Split(s.Event.Attachments[0].Title, ":")[0],
|
||||
Plaintext: s.Event.Attachments[0].Text,
|
||||
Asset: "TODO",
|
||||
}, nil
|
||||
}
|
||||
|
||||
return Message{
|
||||
ID: strconv.FormatUint(s.TS, 10),
|
||||
TS: s.TS,
|
||||
Source: fmt.Sprintf(`https://renderinc.slack.com/archives/%s/p%s`, s.Event.Channel, strings.ReplaceAll(s.Event.ParentID, ".", "")),
|
||||
Channel: s.Event.Channel,
|
||||
Thread: s.Event.ParentID,
|
||||
EventName: "TODO",
|
||||
Event: "TODO",
|
||||
Plaintext: s.Event.Text,
|
||||
Asset: "TODO",
|
||||
}, nil
|
||||
}
|
||||
|
||||
func parseSlack(b []byte) (slackMessage, error) {
|
||||
var result slackMessage
|
||||
err := json.Unmarshal(b, &result)
|
||||
return result, err
|
||||
}
|
||||
|
||||
113
message_test.go
Normal file
113
message_test.go
Normal file
@@ -0,0 +1,113 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParseSlackTestdata(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
slackMessage slackMessage
|
||||
message Message
|
||||
}{
|
||||
"human_thread_message_from_opsgenie_alert.json": {
|
||||
slackMessage: slackMessage{
|
||||
TS: 1712930706,
|
||||
Event: slackEvent{
|
||||
ID: "1712930706.598629",
|
||||
Channel: "C06U1DDBBU4",
|
||||
ParentID: "1712927439.728409",
|
||||
Text: "I gotta do this",
|
||||
Blocks: []slackBlock{{
|
||||
Elements: []slackElement{{
|
||||
Elements: []slackElement{{
|
||||
RichText: "I gotta do this",
|
||||
}},
|
||||
}},
|
||||
}},
|
||||
Bot: slackBot{
|
||||
Name: "",
|
||||
},
|
||||
Attachments: []slackAttachment{},
|
||||
},
|
||||
},
|
||||
message: Message{
|
||||
ID: "1712930706",
|
||||
TS: 1712930706,
|
||||
Source: "https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
Channel: "C06U1DDBBU4",
|
||||
Thread: "1712927439.728409",
|
||||
EventName: "TODO",
|
||||
Event: "TODO",
|
||||
Plaintext: "I gotta do this",
|
||||
Asset: "TODO",
|
||||
},
|
||||
},
|
||||
"opsgenie_alert.json": {
|
||||
slackMessage: slackMessage{
|
||||
TS: 1712927439,
|
||||
Event: slackEvent{
|
||||
ID: "1712927439.728409",
|
||||
Channel: "C06U1DDBBU4",
|
||||
Bot: slackBot{
|
||||
Name: "Opsgenie for Alert Management",
|
||||
},
|
||||
Attachments: []slackAttachment{{
|
||||
Color: "F4511E",
|
||||
Title: "#11071: [Grafana]: Firing: Alertconfig Workflow Failed",
|
||||
Text: "At least one alertconfig run has failed unexpectedly.\nDashboard: <https://grafana.render.com/d/VLZU83YVk?orgId=1>\nPanel: <https://grafana.render.com/d/VLZU83YVk?orgId=1&viewPanel=17>\nSource: <https://grafana.render.com/alerting/grafana/fa7b06b8-b4d8-4979-bce7-5e1c432edd81/view?orgId=1>",
|
||||
Fields: []slackField{
|
||||
{Value: "P3", Title: "Priority"},
|
||||
{Value: "alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb", Title: "Tags"},
|
||||
{Value: "Datastores Non-Critical", Title: "Routed Teams"},
|
||||
},
|
||||
Actions: []slackAction{{}, {}, {}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
message: Message{
|
||||
ID: "1712927439",
|
||||
TS: 1712927439,
|
||||
Source: "https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
Channel: "C06U1DDBBU4",
|
||||
Thread: "1712927439.728409",
|
||||
EventName: "Alertconfig Workflow Failed",
|
||||
Event: "#11071",
|
||||
Plaintext: "At least one alertconfig run has failed unexpectedly.\nDashboard: <https://grafana.render.com/d/VLZU83YVk?orgId=1>\nPanel: <https://grafana.render.com/d/VLZU83YVk?orgId=1&viewPanel=17>\nSource: <https://grafana.render.com/alerting/grafana/fa7b06b8-b4d8-4979-bce7-5e1c432edd81/view?orgId=1>",
|
||||
Asset: "TODO",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for name, d := range cases {
|
||||
want := d
|
||||
t.Run(name, func(t *testing.T) {
|
||||
b, err := os.ReadFile(path.Join("testdata", "slack_events", name))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Run("parseSlack", func(t *testing.T) {
|
||||
got, err := parseSlack(b)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if fmt.Sprintf("%+v", got) != fmt.Sprintf("%+v", want.slackMessage) {
|
||||
t.Errorf("wanted \n\t%+v, got\n\t%+v", want.slackMessage, got)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("ParseSlack", func(t *testing.T) {
|
||||
got, err := ParseSlack(b)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got != want.message {
|
||||
t.Errorf("wanted \n\t%+v, got\n\t%+v", want.message, got)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
51
testdata/slack_events/human_message.json
vendored
51
testdata/slack_events/human_message.json
vendored
@@ -1 +1,50 @@
|
||||
{"hint":"a message", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U06868T6ADV","type":"message","ts":"1712878479.415559","client_msg_id":"fce57841-0446-4720-aa1d-557e162c7667","text":"BOTH OF YOU GET IN HERE HEEEHEEEHEEE","team":"T9RQLQ0KV","blocks":[{"type":"rich_text","block_id":"6G5BZ","elements":[{"type":"rich_text_section","elements":[{"type":"text","text":"BOTH OF YOU GET IN HERE HEEEHEEEHEEE"}]}]}],"channel":"C06U1DDBBU4","event_ts":"1712878479.415559","channel_type":"channel"},"type":"event_callback","event_id":"Ev06U1F01XMJ","event_time":1712878479,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "a message",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U06868T6ADV",
|
||||
"type": "message",
|
||||
"ts": "1712878479.415559",
|
||||
"client_msg_id": "fce57841-0446-4720-aa1d-557e162c7667",
|
||||
"text": "BOTH OF YOU GET IN HERE HEEEHEEEHEEE",
|
||||
"team": "T9RQLQ0KV",
|
||||
"blocks": [
|
||||
{
|
||||
"type": "rich_text",
|
||||
"block_id": "6G5BZ",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rich_text_section",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "BOTH OF YOU GET IN HERE HEEEHEEEHEEE"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712878479.415559",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06U1F01XMJ",
|
||||
"event_time": 1712878479,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
53
testdata/slack_events/human_thread_message.json
vendored
53
testdata/slack_events/human_thread_message.json
vendored
@@ -1 +1,52 @@
|
||||
{"hint":"a thread message", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U06868T6ADV","type":"message","ts":"1712878566.650149","client_msg_id":"5d9d586b-eee0-40f8-b15e-66245c073a4c","text":"in a thread","team":"T9RQLQ0KV","thread_ts":"1712877772.926539","parent_user_id":"U06868T6ADV","blocks":[{"type":"rich_text","block_id":"KHSCu","elements":[{"type":"rich_text_section","elements":[{"type":"text","text":"in a thread"}]}]}],"channel":"C06U1DDBBU4","event_ts":"1712878566.650149","channel_type":"channel"},"type":"event_callback","event_id":"Ev06TW3WE58V","event_time":1712878566,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "a thread message",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U06868T6ADV",
|
||||
"type": "message",
|
||||
"ts": "1712878566.650149",
|
||||
"client_msg_id": "5d9d586b-eee0-40f8-b15e-66245c073a4c",
|
||||
"text": "in a thread",
|
||||
"team": "T9RQLQ0KV",
|
||||
"thread_ts": "1712877772.926539",
|
||||
"parent_user_id": "U06868T6ADV",
|
||||
"blocks": [
|
||||
{
|
||||
"type": "rich_text",
|
||||
"block_id": "KHSCu",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rich_text_section",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "in a thread"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712878566.650149",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06TW3WE58V",
|
||||
"event_time": 1712878566,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
@@ -1 +1,52 @@
|
||||
{"hint": "a thread reply to an alert", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U06868T6ADV","type":"message","ts":"1712930706.598629","client_msg_id":"880fc69f-de95-4c1e-90a7-aae701a40c21","text":"I gotta do this","team":"T9RQLQ0KV","thread_ts":"1712927439.728409","parent_user_id":"U03RUK7FBUY","blocks":[{"type":"rich_text","block_id":"Cp0IU","elements":[{"type":"rich_text_section","elements":[{"type":"text","text":"I gotta do this"}]}]}],"channel":"C06U1DDBBU4","event_ts":"1712930706.598629","channel_type":"channel"},"type":"event_callback","event_id":"Ev06UF3U1LM7","event_time":1712930706,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "a thread reply to an alert",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U06868T6ADV",
|
||||
"type": "message",
|
||||
"ts": "1712930706.598629",
|
||||
"client_msg_id": "880fc69f-de95-4c1e-90a7-aae701a40c21",
|
||||
"text": "I gotta do this",
|
||||
"team": "T9RQLQ0KV",
|
||||
"thread_ts": "1712927439.728409",
|
||||
"parent_user_id": "U03RUK7FBUY",
|
||||
"blocks": [
|
||||
{
|
||||
"type": "rich_text",
|
||||
"block_id": "Cp0IU",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rich_text_section",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "I gotta do this"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712930706.598629",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06UF3U1LM7",
|
||||
"event_time": 1712930706,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
128
testdata/slack_events/opsgenie_alert.json
vendored
128
testdata/slack_events/opsgenie_alert.json
vendored
@@ -1 +1,127 @@
|
||||
{"hint": "a new alert from opsgenie", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U03RUK7FBUY","type":"message","ts":"1712927439.728409","bot_id":"B03RHGBPH2M","app_id":"A286WATV2","text":"","team":"T9RQLQ0KV","bot_profile":{"id":"B03RHGBPH2M","deleted":false,"name":"Opsgenie for Alert Management","updated":1658887059,"app_id":"A286WATV2","icons":{"image_36":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_36.png","image_48":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_72.png"},"team_id":"T9RQLQ0KV"},"attachments":[{"id":1,"color":"F4511E","fallback":"New alert: \"[Grafana]: Firing: Alertconfig Workflow Failed\" <https:\/\/opsg.in\/a\/i\/render\/38152bc5-bc5d-411d-9feb-d285af5b6481-1712927439305|11071>\nTags: alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb","text":"At least one alertconfig run has failed unexpectedly.\nDashboard: <https:\/\/grafana.render.com\/d\/VLZU83YVk?orgId=1>\nPanel: <https:\/\/grafana.render.com\/d\/VLZU83YVk?orgId=1&viewPanel=17>\nSource: <https:\/\/grafana.render.com\/alerting\/grafana\/fa7b06b8-b4d8-4979-bce7-5e1c432edd81\/view?orgId=1>","title":"#11071: [Grafana]: Firing: Alertconfig Workflow Failed","title_link":"https:\/\/opsg.in\/a\/i\/render\/38152bc5-bc5d-411d-9feb-d285af5b6481-1712927439305","author_name":"New Alert created via Grafana - Datastore Slack","callback_id":"bbd4a269-08a9-470e-ba79-ce238ac03dc7_05fa2e9b-bec4-4a7e-842d-36043d267a13_11071","fields":[{"value":"P3","title":"Priority","short":true},{"value":"alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb","title":"Tags","short":true},{"value":"Datastores Non-Critical","title":"Routed Teams","short":true}],"mrkdwn_in":["pretext","text"],"actions":[{"id":"1","name":"acknowledge","text":"Acknowledge","type":"button","value":"ack","style":"default"},{"id":"2","name":"close","text":"Close","type":"button","value":"close","style":"primary"},{"id":"3","name":"action","text":"Other actions...","type":"select","data_source":"static","options":[{"text":"Assign","value":"assign"},{"text":"Take Ownership","value":"own"},{"text":"Snooze","value":"snooze"},{"text":"Add Note","value":"addNote"},{"text":"Update Priority","value":"updatePriority"}]}]}],"channel":"C06U1DDBBU4","event_ts":"1712927439.728409","channel_type":"channel"},"type":"event_callback","event_id":"Ev06UEPF5BSM","event_time":1712927439,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "a new alert from opsgenie",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U03RUK7FBUY",
|
||||
"type": "message",
|
||||
"ts": "1712927439.728409",
|
||||
"bot_id": "B03RHGBPH2M",
|
||||
"app_id": "A286WATV2",
|
||||
"text": "",
|
||||
"team": "T9RQLQ0KV",
|
||||
"bot_profile": {
|
||||
"id": "B03RHGBPH2M",
|
||||
"deleted": false,
|
||||
"name": "Opsgenie for Alert Management",
|
||||
"updated": 1658887059,
|
||||
"app_id": "A286WATV2",
|
||||
"icons": {
|
||||
"image_36": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_36.png",
|
||||
"image_48": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_48.png",
|
||||
"image_72": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_72.png"
|
||||
},
|
||||
"team_id": "T9RQLQ0KV"
|
||||
},
|
||||
"attachments": [
|
||||
{
|
||||
"id": 1,
|
||||
"color": "F4511E",
|
||||
"fallback": "New alert: \"[Grafana]: Firing: Alertconfig Workflow Failed\" <https://opsg.in/a/i/render/38152bc5-bc5d-411d-9feb-d285af5b6481-1712927439305|11071>\nTags: alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb",
|
||||
"text": "At least one alertconfig run has failed unexpectedly.\nDashboard: <https://grafana.render.com/d/VLZU83YVk?orgId=1>\nPanel: <https://grafana.render.com/d/VLZU83YVk?orgId=1&viewPanel=17>\nSource: <https://grafana.render.com/alerting/grafana/fa7b06b8-b4d8-4979-bce7-5e1c432edd81/view?orgId=1>",
|
||||
"title": "#11071: [Grafana]: Firing: Alertconfig Workflow Failed",
|
||||
"title_link": "https://opsg.in/a/i/render/38152bc5-bc5d-411d-9feb-d285af5b6481-1712927439305",
|
||||
"author_name": "New Alert created via Grafana - Datastore Slack",
|
||||
"callback_id": "bbd4a269-08a9-470e-ba79-ce238ac03dc7_05fa2e9b-bec4-4a7e-842d-36043d267a13_11071",
|
||||
"fields": [
|
||||
{
|
||||
"value": "P3",
|
||||
"title": "Priority",
|
||||
"short": true
|
||||
},
|
||||
{
|
||||
"value": "alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb",
|
||||
"title": "Tags",
|
||||
"short": true
|
||||
},
|
||||
{
|
||||
"value": "Datastores Non-Critical",
|
||||
"title": "Routed Teams",
|
||||
"short": true
|
||||
}
|
||||
],
|
||||
"mrkdwn_in": [
|
||||
"pretext",
|
||||
"text"
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "acknowledge",
|
||||
"text": "Acknowledge",
|
||||
"type": "button",
|
||||
"value": "ack",
|
||||
"style": "default"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "close",
|
||||
"text": "Close",
|
||||
"type": "button",
|
||||
"value": "close",
|
||||
"style": "primary"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "action",
|
||||
"text": "Other actions...",
|
||||
"type": "select",
|
||||
"data_source": "static",
|
||||
"options": [
|
||||
{
|
||||
"text": "Assign",
|
||||
"value": "assign"
|
||||
},
|
||||
{
|
||||
"text": "Take Ownership",
|
||||
"value": "own"
|
||||
},
|
||||
{
|
||||
"text": "Snooze",
|
||||
"value": "snooze"
|
||||
},
|
||||
{
|
||||
"text": "Add Note",
|
||||
"value": "addNote"
|
||||
},
|
||||
{
|
||||
"text": "Update Priority",
|
||||
"value": "updatePriority"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712927439.728409",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06UEPF5BSM",
|
||||
"event_time": 1712927439,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
193
testdata/slack_events/opsgenie_alert_2.json
vendored
193
testdata/slack_events/opsgenie_alert_2.json
vendored
File diff suppressed because one or more lines are too long
128
testdata/slack_events/opsgenie_alert_3.json
vendored
128
testdata/slack_events/opsgenie_alert_3.json
vendored
@@ -1 +1,127 @@
|
||||
{"hint": "an alert firing that has a render_id", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U03RUK7FBUY","type":"message","ts":"1712911957.023359","bot_id":"B03RHGBPH2M","app_id":"A286WATV2","text":"","team":"T9RQLQ0KV","bot_profile":{"id":"B03RHGBPH2M","deleted":false,"name":"Opsgenie for Alert Management","updated":1658887059,"app_id":"A286WATV2","icons":{"image_36":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_36.png","image_48":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_72.png"},"team_id":"T9RQLQ0KV"},"attachments":[{"id":1,"color":"F4511E","fallback":"New alert: \"[Grafana]: Firing: [Oregon-1] Wal Receive Count Alert\" <https:\/\/opsg.in\/a\/i\/render\/c1565736-aac4-4a78-b7db-65e4d90a59f2-1712911956739|11067>\nTags: alertname:[oregon-1] WAL Receive Count alert, business_hours:true, cluster:oregon-1, contacts:\"OpsGenie - Datastore\",\"Slack - Datastore, grafana_folder:[Generated] oregon-1, template-source:ab1da08c-129f-4f08-b505-db44929eb8","text":"Replica for dpg-cn7te6nsc6pc73ak5pig-b cannot start streaming replication, because the primary has already deleted the needed WAL segment.\n\nSync the replica from scratch using the runbook.\nRunbook: <https:\/\/slab.render.com\/posts\/runbook-postgres-replica-too-far-behind-pr084dj4>\nSource: <https:\/\/grafana.render.com\/alerting\/grafana\/aecdfbcf-5298-4679-bd20-d9dec32ee2a0\/view?orgId=1>","title":"#11067: [Grafana]: Firing: [Oregon-1] Wal Receive Count Alert","title_link":"https:\/\/opsg.in\/a\/i\/render\/c1565736-aac4-4a78-b7db-65e4d90a59f2-1712911956739","author_name":"New Alert created via Grafana - Datastore Slack","callback_id":"bbd4a269-08a9-470e-ba79-ce238ac03dc7_05fa2e9b-bec4-4a7e-842d-36043d267a13_11067","fields":[{"value":"P3","title":"Priority","short":true},{"value":"alertname:[oregon-1] WAL Receive Count alert, business_hours:true, cluster:oregon-1, contacts:\"OpsGenie - Datastore\",\"Slack - Datastore, grafana_folder:[Generated] oregon-1, template-source:ab1da08c-129f-4f08-b505-db44929eb8","title":"Tags","short":true},{"value":"Datastores Non-Critical","title":"Routed Teams","short":true}],"mrkdwn_in":["pretext","text"],"actions":[{"id":"1","name":"acknowledge","text":"Acknowledge","type":"button","value":"ack","style":"default"},{"id":"2","name":"close","text":"Close","type":"button","value":"close","style":"primary"},{"id":"3","name":"action","text":"Other actions...","type":"select","data_source":"static","options":[{"text":"Assign","value":"assign"},{"text":"Take Ownership","value":"own"},{"text":"Snooze","value":"snooze"},{"text":"Add Note","value":"addNote"},{"text":"Update Priority","value":"updatePriority"}]}]}],"channel":"C06U1DDBBU4","event_ts":"1712911957.023359","channel_type":"channel"},"type":"event_callback","event_id":"Ev06U0TNBXV0","event_time":1712911957,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "an alert firing that has a render_id",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U03RUK7FBUY",
|
||||
"type": "message",
|
||||
"ts": "1712911957.023359",
|
||||
"bot_id": "B03RHGBPH2M",
|
||||
"app_id": "A286WATV2",
|
||||
"text": "",
|
||||
"team": "T9RQLQ0KV",
|
||||
"bot_profile": {
|
||||
"id": "B03RHGBPH2M",
|
||||
"deleted": false,
|
||||
"name": "Opsgenie for Alert Management",
|
||||
"updated": 1658887059,
|
||||
"app_id": "A286WATV2",
|
||||
"icons": {
|
||||
"image_36": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_36.png",
|
||||
"image_48": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_48.png",
|
||||
"image_72": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_72.png"
|
||||
},
|
||||
"team_id": "T9RQLQ0KV"
|
||||
},
|
||||
"attachments": [
|
||||
{
|
||||
"id": 1,
|
||||
"color": "F4511E",
|
||||
"fallback": "New alert: \"[Grafana]: Firing: [Oregon-1] Wal Receive Count Alert\" <https://opsg.in/a/i/render/c1565736-aac4-4a78-b7db-65e4d90a59f2-1712911956739|11067>\nTags: alertname:[oregon-1] WAL Receive Count alert, business_hours:true, cluster:oregon-1, contacts:\"OpsGenie - Datastore\",\"Slack - Datastore, grafana_folder:[Generated] oregon-1, template-source:ab1da08c-129f-4f08-b505-db44929eb8",
|
||||
"text": "Replica for dpg-cn7te6nsc6pc73ak5pig-b cannot start streaming replication, because the primary has already deleted the needed WAL segment.\n\nSync the replica from scratch using the runbook.\nRunbook: <https://slab.render.com/posts/runbook-postgres-replica-too-far-behind-pr084dj4>\nSource: <https://grafana.render.com/alerting/grafana/aecdfbcf-5298-4679-bd20-d9dec32ee2a0/view?orgId=1>",
|
||||
"title": "#11067: [Grafana]: Firing: [Oregon-1] Wal Receive Count Alert",
|
||||
"title_link": "https://opsg.in/a/i/render/c1565736-aac4-4a78-b7db-65e4d90a59f2-1712911956739",
|
||||
"author_name": "New Alert created via Grafana - Datastore Slack",
|
||||
"callback_id": "bbd4a269-08a9-470e-ba79-ce238ac03dc7_05fa2e9b-bec4-4a7e-842d-36043d267a13_11067",
|
||||
"fields": [
|
||||
{
|
||||
"value": "P3",
|
||||
"title": "Priority",
|
||||
"short": true
|
||||
},
|
||||
{
|
||||
"value": "alertname:[oregon-1] WAL Receive Count alert, business_hours:true, cluster:oregon-1, contacts:\"OpsGenie - Datastore\",\"Slack - Datastore, grafana_folder:[Generated] oregon-1, template-source:ab1da08c-129f-4f08-b505-db44929eb8",
|
||||
"title": "Tags",
|
||||
"short": true
|
||||
},
|
||||
{
|
||||
"value": "Datastores Non-Critical",
|
||||
"title": "Routed Teams",
|
||||
"short": true
|
||||
}
|
||||
],
|
||||
"mrkdwn_in": [
|
||||
"pretext",
|
||||
"text"
|
||||
],
|
||||
"actions": [
|
||||
{
|
||||
"id": "1",
|
||||
"name": "acknowledge",
|
||||
"text": "Acknowledge",
|
||||
"type": "button",
|
||||
"value": "ack",
|
||||
"style": "default"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"name": "close",
|
||||
"text": "Close",
|
||||
"type": "button",
|
||||
"value": "close",
|
||||
"style": "primary"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"name": "action",
|
||||
"text": "Other actions...",
|
||||
"type": "select",
|
||||
"data_source": "static",
|
||||
"options": [
|
||||
{
|
||||
"text": "Assign",
|
||||
"value": "assign"
|
||||
},
|
||||
{
|
||||
"text": "Take Ownership",
|
||||
"value": "own"
|
||||
},
|
||||
{
|
||||
"text": "Snooze",
|
||||
"value": "snooze"
|
||||
},
|
||||
{
|
||||
"text": "Add Note",
|
||||
"value": "addNote"
|
||||
},
|
||||
{
|
||||
"text": "Update Priority",
|
||||
"value": "updatePriority"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712911957.023359",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06U0TNBXV0",
|
||||
"event_time": 1712911957,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
194
testdata/slack_events/opsgenie_alert_resolved.json
vendored
194
testdata/slack_events/opsgenie_alert_resolved.json
vendored
File diff suppressed because one or more lines are too long
@@ -1 +1,55 @@
|
||||
{"hint": "a teeny closed alert message", "token":"redacted","team_id":"T9RQLQ0KV","context_team_id":"T9RQLQ0KV","context_enterprise_id":null,"api_app_id":"A06TYH7CALB","event":{"user":"U03RUK7FBUY","type":"message","ts":"1712925631.682559","bot_id":"B03RHGBPH2M","app_id":"A286WATV2","text":"","team":"T9RQLQ0KV","bot_profile":{"id":"B03RHGBPH2M","deleted":false,"name":"Opsgenie for Alert Management","updated":1658887059,"app_id":"A286WATV2","icons":{"image_36":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_36.png","image_48":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_48.png","image_72":"https:\/\/avatars.slack-edge.com\/2019-05-30\/652285939191_7831939cc30ef7159561_72.png"},"team_id":"T9RQLQ0KV"},"attachments":[{"id":1,"color":"2ecc71","fallback":"Alert API closed alert <https:\/\/opsg.in\/a\/i\/render\/ec6e7c4b-90a6-4c3c-94e9-901f6b7ada47-1712922031403|#11070> \"[Grafana]: Firing: Alertconfig Workflow Failed\"","text":"Alert API closed alert <https:\/\/opsg.in\/a\/i\/render\/ec6e7c4b-90a6-4c3c-94e9-901f6b7ada47-1712922031403|#11070> \"[Grafana]: Firing: Alertconfig Workflow Failed\""}],"channel":"C06U1DDBBU4","event_ts":"1712925631.682559","channel_type":"channel"},"type":"event_callback","event_id":"Ev06U1R10TPV","event_time":1712925631,"authorizations":[{"enterprise_id":null,"team_id":"T9RQLQ0KV","user_id":"U06TS9M7ABG","is_bot":true,"is_enterprise_install":false}],"is_ext_shared_channel":false,"event_context":"4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"}
|
||||
{
|
||||
"hint": "a teeny closed alert message",
|
||||
"token": "redacted",
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"context_team_id": "T9RQLQ0KV",
|
||||
"context_enterprise_id": null,
|
||||
"api_app_id": "A06TYH7CALB",
|
||||
"event": {
|
||||
"user": "U03RUK7FBUY",
|
||||
"type": "message",
|
||||
"ts": "1712925631.682559",
|
||||
"bot_id": "B03RHGBPH2M",
|
||||
"app_id": "A286WATV2",
|
||||
"text": "",
|
||||
"team": "T9RQLQ0KV",
|
||||
"bot_profile": {
|
||||
"id": "B03RHGBPH2M",
|
||||
"deleted": false,
|
||||
"name": "Opsgenie for Alert Management",
|
||||
"updated": 1658887059,
|
||||
"app_id": "A286WATV2",
|
||||
"icons": {
|
||||
"image_36": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_36.png",
|
||||
"image_48": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_48.png",
|
||||
"image_72": "https://avatars.slack-edge.com/2019-05-30/652285939191_7831939cc30ef7159561_72.png"
|
||||
},
|
||||
"team_id": "T9RQLQ0KV"
|
||||
},
|
||||
"attachments": [
|
||||
{
|
||||
"id": 1,
|
||||
"color": "2ecc71",
|
||||
"fallback": "Alert API closed alert <https://opsg.in/a/i/render/ec6e7c4b-90a6-4c3c-94e9-901f6b7ada47-1712922031403|#11070> \"[Grafana]: Firing: Alertconfig Workflow Failed\"",
|
||||
"text": "Alert API closed alert <https://opsg.in/a/i/render/ec6e7c4b-90a6-4c3c-94e9-901f6b7ada47-1712922031403|#11070> \"[Grafana]: Firing: Alertconfig Workflow Failed\""
|
||||
}
|
||||
],
|
||||
"channel": "C06U1DDBBU4",
|
||||
"event_ts": "1712925631.682559",
|
||||
"channel_type": "channel"
|
||||
},
|
||||
"type": "event_callback",
|
||||
"event_id": "Ev06U1R10TPV",
|
||||
"event_time": 1712925631,
|
||||
"authorizations": [
|
||||
{
|
||||
"enterprise_id": null,
|
||||
"team_id": "T9RQLQ0KV",
|
||||
"user_id": "U06TS9M7ABG",
|
||||
"is_bot": true,
|
||||
"is_enterprise_install": false
|
||||
}
|
||||
],
|
||||
"is_ext_shared_channel": false,
|
||||
"event_context": "4-eyJldCI6Im1lc3NhZ2UiLCJ0aWQiOiJUOVJRTFEwS1YiLCJhaWQiOiJBMDZUWUg3Q0FMQiIsImNpZCI6IkMwNlUxRERCQlU0In0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user