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