Compare commits

..

2 Commits

Author SHA1 Message Date
bel
85d589a570 remove # from event 2024-04-13 10:03:54 -06:00
bel
10630df394 Accept $ASSET_PATTERN 2024-04-13 10:00:21 -06:00
6 changed files with 26 additions and 17 deletions

View File

@@ -25,6 +25,7 @@ type Config struct {
OllamaModel string OllamaModel string
LocalCheckpoint string LocalCheckpoint string
LocalTokenizer string LocalTokenizer string
AssetPattern string
storage Storage storage Storage
queue Queue queue Queue
driver Driver driver Driver
@@ -37,8 +38,9 @@ func newConfig(ctx context.Context) (Config, error) {
func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config, error) { func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config, error) {
def := Config{ def := Config{
Port: 38080, Port: 38080,
OllamaModel: "gemma:2b", OllamaModel: "gemma:2b",
AssetPattern: `(dpg|svc|red)-[a-z0-9-]*`,
} }
var m map[string]any var m map[string]any
@@ -103,7 +105,7 @@ func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config,
result.driver = pg result.driver = pg
} }
if result.FillWithTestdata { if result.FillWithTestdata {
if err := FillWithTestdata(ctx, result.driver); err != nil { if err := FillWithTestdata(ctx, result.driver, result.AssetPattern); err != nil {
return Config{}, err return Config{}, err
} }
} }

View File

@@ -23,7 +23,7 @@ type Driver interface {
Set(context.Context, string, string, []byte) error Set(context.Context, string, string, []byte) error
} }
func FillWithTestdata(ctx context.Context, driver Driver) error { func FillWithTestdata(ctx context.Context, driver Driver, assetPattern string) error {
d := "./testdata/slack_events" d := "./testdata/slack_events"
entries, err := os.ReadDir(d) entries, err := os.ReadDir(d)
if err != nil { if err != nil {
@@ -37,7 +37,7 @@ func FillWithTestdata(ctx context.Context, driver Driver) error {
if err != nil { if err != nil {
return err return err
} }
m, err := ParseSlack(b) m, err := ParseSlack(b, assetPattern)
if errors.Is(err, ErrIrrelevantMessage) { if errors.Is(err, ErrIrrelevantMessage) {
continue continue
} else if err != nil { } else if err != nil {

View File

@@ -17,7 +17,7 @@ func TestFillTestdata(t *testing.T) {
defer can() defer can()
ram := NewRAM() ram := NewRAM()
if err := FillWithTestdata(ctx, ram); err != nil { if err := FillWithTestdata(ctx, ram, renderAssetPattern); err != nil {
t.Fatal(err) t.Fatal(err)
} }
n := 0 n := 0

View File

@@ -200,7 +200,7 @@ func _newHandlerPostAPIV1EventsSlack(cfg Config) http.HandlerFunc {
return return
} }
m, err := ParseSlack(b) m, err := ParseSlack(b, cfg.AssetPattern)
if errors.Is(err, ErrIrrelevantMessage) { if errors.Is(err, ErrIrrelevantMessage) {
return return
} else if err != nil { } else if err != nil {

View File

@@ -4,6 +4,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"regexp"
"strings" "strings"
"time" "time"
) )
@@ -105,7 +106,9 @@ type (
slackAction struct{} slackAction struct{}
) )
func ParseSlack(b []byte) (Message, error) { func ParseSlack(b []byte, assetPattern string) (Message, error) {
asset := regexp.MustCompile(assetPattern)
s, err := parseSlack(b) s, err := parseSlack(b)
if err != nil { if err != nil {
return Message{}, err return Message{}, err
@@ -124,9 +127,9 @@ func ParseSlack(b []byte) (Message, error) {
Channel: s.Event.Channel, Channel: s.Event.Channel,
Thread: s.Event.ID, Thread: s.Event.ID,
EventName: strings.Split(s.Event.Attachments[0].Title, ": Firing: ")[1], EventName: strings.Split(s.Event.Attachments[0].Title, ": Firing: ")[1],
Event: strings.Split(s.Event.Attachments[0].Title, ":")[0], Event: strings.TrimPrefix(strings.Split(s.Event.Attachments[0].Title, ":")[0], "#"),
Plaintext: s.Event.Attachments[0].Text, Plaintext: s.Event.Attachments[0].Text,
Asset: "TODO", Asset: asset.FindString(s.Event.Attachments[0].Text),
Resolved: !strings.HasPrefix(s.Event.Attachments[0].Color, "F"), Resolved: !strings.HasPrefix(s.Event.Attachments[0].Color, "F"),
}, nil }, nil
} }
@@ -143,7 +146,7 @@ func ParseSlack(b []byte) (Message, error) {
EventName: "TODO", EventName: "TODO",
Event: "TODO", Event: "TODO",
Plaintext: s.Event.Text, Plaintext: s.Event.Text,
Asset: "TODO", Asset: asset.FindString(s.Event.Text),
}, nil }, nil
} }

View File

@@ -7,6 +7,10 @@ import (
"testing" "testing"
) )
var (
renderAssetPattern = `(dpg|svc|red)-[a-z0-9-]*[a-z0-9]`
)
func TestParseSlackTestdata(t *testing.T) { func TestParseSlackTestdata(t *testing.T) {
cases := map[string]struct { cases := map[string]struct {
slackMessage slackMessage slackMessage slackMessage
@@ -42,7 +46,7 @@ func TestParseSlackTestdata(t *testing.T) {
EventName: "TODO", EventName: "TODO",
Event: "TODO", Event: "TODO",
Plaintext: "I gotta do this", Plaintext: "I gotta do this",
Asset: "TODO", Asset: "",
}, },
}, },
"opsgenie_alert.json": { "opsgenie_alert.json": {
@@ -74,9 +78,9 @@ func TestParseSlackTestdata(t *testing.T) {
Channel: "C06U1DDBBU4", Channel: "C06U1DDBBU4",
Thread: "1712927439.728409", Thread: "1712927439.728409",
EventName: "Alertconfig Workflow Failed", EventName: "Alertconfig Workflow Failed",
Event: "#11071", 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&amp;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&amp;viewPanel=17>\nSource: <https://grafana.render.com/alerting/grafana/fa7b06b8-b4d8-4979-bce7-5e1c432edd81/view?orgId=1>",
Asset: "TODO", Asset: "",
}, },
}, },
"opsgenie_alert_resolved.json": { "opsgenie_alert_resolved.json": {
@@ -108,9 +112,9 @@ func TestParseSlackTestdata(t *testing.T) {
Channel: "C06U1DDBBU4", Channel: "C06U1DDBBU4",
Thread: "1712916339.000300", Thread: "1712916339.000300",
EventName: "Alertconfig Workflow Failed", EventName: "Alertconfig Workflow Failed",
Event: "#11069", Event: "11069",
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&amp;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&amp;viewPanel=17>\nSource: <https://grafana.render.com/alerting/grafana/fa7b06b8-b4d8-4979-bce7-5e1c432edd81/view?orgId=1>",
Asset: "TODO", Asset: "",
Resolved: true, Resolved: true,
}, },
}, },
@@ -135,7 +139,7 @@ func TestParseSlackTestdata(t *testing.T) {
}) })
t.Run("ParseSlack", func(t *testing.T) { t.Run("ParseSlack", func(t *testing.T) {
got, err := ParseSlack(b) got, err := ParseSlack(b, renderAssetPattern)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }