diff --git a/config.go b/config.go index 87551e0..03b3f3d 100644 --- a/config.go +++ b/config.go @@ -25,6 +25,7 @@ type Config struct { OllamaModel string LocalCheckpoint string LocalTokenizer string + AssetPattern string storage Storage queue Queue driver Driver @@ -103,7 +104,7 @@ func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config, result.driver = pg } if result.FillWithTestdata { - if err := FillWithTestdata(ctx, result.driver); err != nil { + if err := FillWithTestdata(ctx, result.driver, result.AssetPattern); err != nil { return Config{}, err } } diff --git a/driver.go b/driver.go index bb10b27..a6fcf78 100644 --- a/driver.go +++ b/driver.go @@ -23,7 +23,7 @@ type Driver interface { 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" entries, err := os.ReadDir(d) if err != nil { @@ -37,7 +37,7 @@ func FillWithTestdata(ctx context.Context, driver Driver) error { if err != nil { return err } - m, err := ParseSlack(b) + m, err := ParseSlack(b, assetPattern) if errors.Is(err, ErrIrrelevantMessage) { continue } else if err != nil { diff --git a/driver_test.go b/driver_test.go index 25abd9f..c4c85a7 100644 --- a/driver_test.go +++ b/driver_test.go @@ -17,7 +17,7 @@ func TestFillTestdata(t *testing.T) { defer can() ram := NewRAM() - if err := FillWithTestdata(ctx, ram); err != nil { + if err := FillWithTestdata(ctx, ram, `(dpg|svc|svc)-[0-9a-z]*`); err != nil { t.Fatal(err) } n := 0 diff --git a/main.go b/main.go index c3b6f35..3453251 100644 --- a/main.go +++ b/main.go @@ -200,7 +200,7 @@ func _newHandlerPostAPIV1EventsSlack(cfg Config) http.HandlerFunc { return } - m, err := ParseSlack(b) + m, err := ParseSlack(b, cfg.AssetPattern) if errors.Is(err, ErrIrrelevantMessage) { return } else if err != nil { diff --git a/message.go b/message.go index c5b93dc..1b5e7fb 100644 --- a/message.go +++ b/message.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "regexp" "strings" "time" ) @@ -105,7 +106,9 @@ type ( slackAction struct{} ) -func ParseSlack(b []byte) (Message, error) { +func ParseSlack(b []byte, assetPattern string) (Message, error) { + asset := regexp.MustCompile(assetPattern) + s, err := parseSlack(b) if err != nil { return Message{}, err @@ -126,7 +129,7 @@ func ParseSlack(b []byte) (Message, error) { 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", + Asset: asset.FindString(s.Event.Attachments[0].Text), Resolved: !strings.HasPrefix(s.Event.Attachments[0].Color, "F"), }, nil } @@ -143,7 +146,7 @@ func ParseSlack(b []byte) (Message, error) { EventName: "TODO", Event: "TODO", Plaintext: s.Event.Text, - Asset: "TODO", + Asset: asset.FindString(s.Event.Text), }, nil } diff --git a/message_test.go b/message_test.go index c965fef..0b83f75 100644 --- a/message_test.go +++ b/message_test.go @@ -42,7 +42,7 @@ func TestParseSlackTestdata(t *testing.T) { EventName: "TODO", Event: "TODO", Plaintext: "I gotta do this", - Asset: "TODO", + Asset: "", }, }, "opsgenie_alert.json": { @@ -76,7 +76,7 @@ func TestParseSlackTestdata(t *testing.T) { EventName: "Alertconfig Workflow Failed", Event: "#11071", Plaintext: "At least one alertconfig run has failed unexpectedly.\nDashboard: \nPanel: \nSource: ", - Asset: "TODO", + Asset: "", }, }, "opsgenie_alert_resolved.json": { @@ -110,7 +110,7 @@ func TestParseSlackTestdata(t *testing.T) { EventName: "Alertconfig Workflow Failed", Event: "#11069", Plaintext: "At least one alertconfig run has failed unexpectedly.\nDashboard: \nPanel: \nSource: ", - Asset: "TODO", + Asset: "", Resolved: true, }, }, @@ -135,7 +135,7 @@ func TestParseSlackTestdata(t *testing.T) { }) t.Run("ParseSlack", func(t *testing.T) { - got, err := ParseSlack(b) + got, err := ParseSlack(b, `(red|dpg|svc)-[a-z0-9]*`) if err != nil { t.Fatal(err) }