extract named Pattern result if a group is named

main
Bel LaPointe 2024-04-15 05:55:30 -06:00
parent a8270b524c
commit f2a23e5d8a
4 changed files with 35 additions and 22 deletions

View File

@ -34,6 +34,12 @@ type Config struct {
ai AI
}
var (
renderAssetPattern = `(dpg|svc|red)-[a-z0-9-]*[a-z0-9]`
renderDatacenterPattern = `[a-z]{4}[a-z]*-[0-9]`
renderEventNamePattern = `(\[[^\]]*\] *)?(?P<result>.*)`
)
func newConfig(ctx context.Context) (Config, error) {
return newConfigFromEnv(ctx, os.Getenv)
}
@ -42,9 +48,9 @@ func newConfigFromEnv(ctx context.Context, getEnv func(string) string) (Config,
def := Config{
Port: 38080,
OllamaModel: "gemma:2b",
AssetPattern: `(dpg|svc|red)-[a-z0-9-]*`,
DatacenterPattern: `[a-z]{4}[a-z]*-[0-9]`,
EventNamePattern: `(^\[[^\]]*\] *)?(?P<result>.*)`,
AssetPattern: renderAssetPattern,
DatacenterPattern: renderDatacenterPattern,
EventNamePattern: renderEventNamePattern,
}
var m map[string]any

View File

@ -39,6 +39,9 @@ func TestRun(t *testing.T) {
u := fmt.Sprintf("http://localhost:%d", port)
cfg := Config{}
cfg.DatacenterPattern = renderDatacenterPattern
cfg.AssetPattern = renderAssetPattern
cfg.EventNamePattern = renderEventNamePattern
cfg.Port = port
cfg.driver = NewRAM()
cfg.storage = NewStorage(cfg.driver)
@ -120,7 +123,7 @@ func TestRun(t *testing.T) {
}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
t.Fatal(err)
} else if result.EventNames[0] != "[Oregon-1] Wal Receive Count Alert" {
} else if result.EventNames[0] != "Wal Receive Count Alert" {
t.Fatal(result.EventNames)
} else {
t.Logf("%+v", result)
@ -215,14 +218,17 @@ func TestRun(t *testing.T) {
t.Fatalf("(%d) %s", resp.StatusCode, b)
}
dec := csv.NewReader(resp.Body)
b, _ := io.ReadAll(resp.Body)
t.Logf("whole csv: \n%s", b)
dec := csv.NewReader(bytes.NewReader(b))
var lastLine []string
for {
line, err := dec.Read()
if err == io.EOF {
break
} else if err != nil {
t.Error(err)
t.Error("unexpected error while reading csv line:", err)
}
if lastLine == nil {
@ -230,7 +236,7 @@ func TestRun(t *testing.T) {
t.Errorf("last line had %v elements but this line has %v", len(lastLine), len(line))
}
t.Logf("%+v", line)
t.Logf("CSV line: %+v", line)
lastLine = line
}
if lastLine == nil {

View File

@ -113,13 +113,20 @@ func ParseSlack(b []byte, assetPattern, datacenterPattern, eventNamePattern stri
return Message{}, err
}
asset := regexp.MustCompile(assetPattern)
datacenter := regexp.MustCompile(datacenterPattern)
eventName := regexp.MustCompile(eventNamePattern)
m.Asset = asset.FindString(m.Asset)
m.Datacenter = datacenter.FindString(m.Datacenter)
m.EventName = eventName.FindString(m.EventName)
for pattern, ptr := range map[string]*string{
assetPattern: &m.Asset,
datacenterPattern: &m.Datacenter,
eventNamePattern: &m.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
}
return m, nil
}

View File

@ -7,12 +7,6 @@ import (
"testing"
)
var (
renderAssetPattern = `(dpg|svc|red)-[a-z0-9-]*[a-z0-9]`
renderDatacenterPattern = `[a-z]{4}[a-z]*-[0-9]`
renderEventNamePattern = `(^\[[^\]]*\] *)?(?P<result>.*)`
)
func TestParseSlackTestdata(t *testing.T) {
cases := map[string]struct {
slackMessage slackMessage
@ -130,8 +124,8 @@ func TestParseSlackTestdata(t *testing.T) {
t.Fatal(err)
}
t.Run("parseSlackJSON", func(t *testing.T) {
got, err := parseSlackJSON(b)
t.Run("_parseSlackJSON", func(t *testing.T) {
got, err := _parseSlackJSON(b)
if err != nil {
t.Fatal(err)
}