slack to model pipeline tested and K
parent
ba06796b8c
commit
709f2ac254
39
slack.go
39
slack.go
|
|
@ -5,6 +5,7 @@ import (
|
|||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
|
@ -44,13 +45,43 @@ func NewSlackToModelPipeline(ctx context.Context, cfg Config) (Pipeline, error)
|
|||
|
||||
func newSlackToModelProcess(cfg Config) processFunc {
|
||||
return func(ctx context.Context, slack []byte) ([]byte, error) {
|
||||
slackMessage, err := parseSlack(slack)
|
||||
s, err := parseSlack(slack)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to deserialize slack %w: %s", err, slack)
|
||||
}
|
||||
return nil, errors.New("not impl")
|
||||
_ = slackMessage
|
||||
return json.Marshal(Models{})
|
||||
|
||||
for pattern, ptr := range map[string]*string{
|
||||
cfg.AssetPattern: &s.Asset,
|
||||
cfg.DatacenterPattern: &s.Datacenter,
|
||||
cfg.EventNamePattern: &s.EventName,
|
||||
} {
|
||||
r := regexp.MustCompile(pattern)
|
||||
parsed := r.FindString(*ptr)
|
||||
for i, name := range r.SubexpNames() {
|
||||
if i > 0 && name != "" {
|
||||
parsed = r.FindStringSubmatch(*ptr)[i]
|
||||
}
|
||||
}
|
||||
*ptr = parsed
|
||||
}
|
||||
|
||||
event := model.Event{}
|
||||
if s.Event != "" && s.Source != "" && s.TS > 0 && s.EventName != "" {
|
||||
event = model.NewEvent(s.Event, s.Source, s.TS, s.EventName, s.Asset, s.Datacenter, "TODO", s.Resolved)
|
||||
}
|
||||
message := model.Message{}
|
||||
if s.ID != "" && s.Source != "" && s.TS > 0 && s.Thread != "" {
|
||||
message = model.NewMessage(s.ID, s.Source, s.TS, "TODO", s.Plaintext, s.Thread)
|
||||
}
|
||||
thread := model.Thread{}
|
||||
if s.Thread != "" && s.Source != "" && s.TS > 0 && s.Event != "" {
|
||||
thread = model.NewThread(s.Thread, s.Source, s.TS, s.Channel, s.Event)
|
||||
}
|
||||
return json.Marshal(Models{
|
||||
Event: event,
|
||||
Message: message,
|
||||
Thread: thread,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,11 +2,13 @@ package main
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/breel-render/spoc-bot-vr/model"
|
||||
"gotest.tools/assert"
|
||||
)
|
||||
|
||||
|
|
@ -15,7 +17,12 @@ func TestSlackToModelPipeline(t *testing.T) {
|
|||
ctx, can := context.WithTimeout(context.Background(), time.Second*5)
|
||||
defer can()
|
||||
|
||||
pipeline, err := NewSlackToModelPipeline(ctx, Config{driver: NewTestDriver(t)})
|
||||
pipeline, err := NewSlackToModelPipeline(ctx, Config{
|
||||
driver: NewTestDriver(t),
|
||||
AssetPattern: renderAssetPattern,
|
||||
DatacenterPattern: renderDatacenterPattern,
|
||||
EventNamePattern: renderEventNamePattern,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
@ -25,8 +32,33 @@ func TestSlackToModelPipeline(t *testing.T) {
|
|||
}
|
||||
}()
|
||||
|
||||
want := Models{
|
||||
Event: model.NewEvent(
|
||||
"11071",
|
||||
"https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
1712927439,
|
||||
"Alertconfig Workflow Failed",
|
||||
"",
|
||||
"",
|
||||
"TODO",
|
||||
false,
|
||||
),
|
||||
Message: model.NewMessage(
|
||||
"1712927439.728409/1712927439",
|
||||
"https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
1712927439,
|
||||
"TODO",
|
||||
"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>",
|
||||
"1712927439.728409",
|
||||
),
|
||||
Thread: model.NewThread(
|
||||
"1712927439.728409",
|
||||
"https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
1712927439,
|
||||
"C06U1DDBBU4",
|
||||
"11071",
|
||||
),
|
||||
/*
|
||||
want := Message{
|
||||
ID: "1712927439.728409/1712927439",
|
||||
TS: 1712927439,
|
||||
Source: "https://renderinc.slack.com/archives/C06U1DDBBU4/p1712927439728409",
|
||||
|
|
@ -37,19 +69,27 @@ func TestSlackToModelPipeline(t *testing.T) {
|
|||
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: "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>",
|
||||
Datacenter: "alertname:Alertconfig Workflow Failed, grafana_folder:Datastores, rule_uid:a7639f7e-6950-41be-850a-b22119f74cbb",
|
||||
*/
|
||||
}
|
||||
|
||||
b, _ := os.ReadFile("testdata/slack_events/opsgenie_alert.json")
|
||||
if err := pipeline.reader.Enqueue(ctx, b); err != nil {
|
||||
t.Fatal("failed to enqueue", err)
|
||||
}
|
||||
var got Models
|
||||
if _, b2, err := pipeline.writer.Syn(ctx); err != nil {
|
||||
t.Fatal("failed to syn", err)
|
||||
} else if m := MustDeserialize(b2); false {
|
||||
} else if err := json.Unmarshal(b2, &got); err != nil {
|
||||
t.Fatal("failed to parse outqueue:", err)
|
||||
} else {
|
||||
assert.DeepEqual(t, want, m)
|
||||
want.Event.Updated = 0
|
||||
want.Message.Updated = 0
|
||||
want.Thread.Updated = 0
|
||||
got.Event.Updated = 0
|
||||
got.Message.Updated = 0
|
||||
got.Thread.Updated = 0
|
||||
assert.DeepEqual(t, want, got)
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
func TestParseSlackTestdata(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue