parse datacenter from Tags field

main
bel 2024-04-13 10:24:02 -06:00
parent b1d93a7698
commit 6b962ea509
6 changed files with 53 additions and 40 deletions

View File

@ -26,6 +26,7 @@ type Config struct {
LocalCheckpoint string LocalCheckpoint string
LocalTokenizer string LocalTokenizer string
AssetPattern string AssetPattern string
DatacenterPattern string
storage Storage storage Storage
queue Queue queue Queue
driver Driver driver Driver
@ -41,6 +42,7 @@ func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config,
Port: 38080, Port: 38080,
OllamaModel: "gemma:2b", OllamaModel: "gemma:2b",
AssetPattern: `(dpg|svc|red)-[a-z0-9-]*`, AssetPattern: `(dpg|svc|red)-[a-z0-9-]*`,
DatacenterPattern: `[a-z]{4}[a-z]*-[0-9]`,
} }
var m map[string]any var m map[string]any
@ -105,7 +107,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, result.AssetPattern); err != nil { if err := FillWithTestdata(ctx, result.driver, result.AssetPattern, result.DatacenterPattern); 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, assetPattern string) error { func FillWithTestdata(ctx context.Context, driver Driver, assetPattern, datacenterPattern 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, assetPattern string) e
if err != nil { if err != nil {
return err return err
} }
m, err := ParseSlack(b, assetPattern) m, err := ParseSlack(b, assetPattern, datacenterPattern)
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, renderAssetPattern); err != nil { if err := FillWithTestdata(ctx, ram, renderAssetPattern, renderDatacenterPattern); err != nil {
t.Fatal(err) t.Fatal(err)
} }
n := 0 n := 0

View File

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

View File

@ -24,6 +24,7 @@ type Message struct {
Plaintext string Plaintext string
Asset string Asset string
Resolved bool Resolved bool
Datacenter string
} }
func (m Message) Empty() bool { func (m Message) Empty() bool {
@ -106,8 +107,9 @@ type (
slackAction struct{} slackAction struct{}
) )
func ParseSlack(b []byte, assetPattern string) (Message, error) { func ParseSlack(b []byte, assetPattern, datacenterPattern string) (Message, error) {
asset := regexp.MustCompile(assetPattern) asset := regexp.MustCompile(assetPattern)
datacenter := regexp.MustCompile(datacenterPattern)
s, err := parseSlack(b) s, err := parseSlack(b)
if err != nil { if err != nil {
@ -120,6 +122,12 @@ func ParseSlack(b []byte, assetPattern string) (Message, error) {
} else if !strings.Contains(s.Event.Attachments[0].Title, ": Firing: ") { } else if !strings.Contains(s.Event.Attachments[0].Title, ": Firing: ") {
return Message{}, ErrIrrelevantMessage return Message{}, ErrIrrelevantMessage
} }
var tagsField string
for _, field := range s.Event.Attachments[0].Fields {
if field.Title == "Tags" {
tagsField = field.Value
}
}
return Message{ return Message{
ID: fmt.Sprintf("%s/%v", s.Event.ID, s.TS), ID: fmt.Sprintf("%s/%v", s.Event.ID, s.TS),
TS: s.TS, TS: s.TS,
@ -131,6 +139,7 @@ func ParseSlack(b []byte, assetPattern string) (Message, error) {
Plaintext: s.Event.Attachments[0].Text, Plaintext: s.Event.Attachments[0].Text,
Asset: asset.FindString(s.Event.Attachments[0].Text), 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"),
Datacenter: datacenter.FindString(tagsField),
}, nil }, nil
} }
@ -147,6 +156,7 @@ func ParseSlack(b []byte, assetPattern string) (Message, error) {
Event: "", Event: "",
Plaintext: s.Event.Text, Plaintext: s.Event.Text,
Asset: asset.FindString(s.Event.Text), Asset: asset.FindString(s.Event.Text),
Datacenter: datacenter.FindString(s.Event.Text),
}, nil }, nil
} }

View File

@ -9,6 +9,7 @@ import (
var ( var (
renderAssetPattern = `(dpg|svc|red)-[a-z0-9-]*[a-z0-9]` renderAssetPattern = `(dpg|svc|red)-[a-z0-9-]*[a-z0-9]`
renderDatacenterPattern = `[a-z]{4}[a-z]*-[0-9]`
) )
func TestParseSlackTestdata(t *testing.T) { func TestParseSlackTestdata(t *testing.T) {
@ -139,7 +140,7 @@ func TestParseSlackTestdata(t *testing.T) {
}) })
t.Run("ParseSlack", func(t *testing.T) { t.Run("ParseSlack", func(t *testing.T) {
got, err := ParseSlack(b, renderAssetPattern) got, err := ParseSlack(b, renderAssetPattern, renderDatacenterPattern)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }