impl GET /api/v1/rpc/aievent?id=123
parent
81fe8070ca
commit
12de99da57
32
main.go
32
main.go
|
|
@ -114,7 +114,37 @@ func newHandlerGetAPIV1RPCAIEvent(cfg Config) http.HandlerFunc {
|
|||
return
|
||||
}
|
||||
|
||||
http.Error(w, "not impl", http.StatusNotImplemented)
|
||||
event := r.URL.Query().Get("id")
|
||||
threadSummaries := []string{}
|
||||
if err := func(ctx context.Context) error {
|
||||
threads, err := cfg.storage.GetEventThreads(ctx, event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
prompt := fmt.Sprintf("Summarize the Slack thread in 1 sentence. List any suggested follow ups.\n\n---\n\n")
|
||||
for _, thread := range threads {
|
||||
messages, err := cfg.storage.GetThreadMessages(ctx, thread.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, message := range messages {
|
||||
prompt += fmt.Sprintf("%s\n%s\n\n", message.Author, message.Plaintext)
|
||||
}
|
||||
}
|
||||
|
||||
summary, err := cfg.ai.Do(ctx, prompt)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
threadSummaries = append(threadSummaries, summary)
|
||||
return nil
|
||||
}(r.Context()); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(map[string]any{"threads": threadSummaries})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
31
main_test.go
31
main_test.go
|
|
@ -49,6 +49,7 @@ func TestRun(t *testing.T) {
|
|||
cfg.slackToModelPipeline, _ = NewSlackToModelPipeline(ctx, cfg)
|
||||
cfg.slackScrapePipeline, _ = NewSlackScrapePipeline(ctx, cfg)
|
||||
cfg.modelToPersistencePipeline, _ = NewModelToPersistencePipeline(ctx, cfg)
|
||||
cfg.ai = NewAINoop()
|
||||
|
||||
go func() {
|
||||
if err := run(ctx, cfg); err != nil && ctx.Err() == nil {
|
||||
|
|
@ -84,4 +85,34 @@ func TestRun(t *testing.T) {
|
|||
t.Fatalf("(%d) %s", resp.StatusCode, b)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("GET /api/v1/rpc/aievent", func(t *testing.T) {
|
||||
b, err := os.ReadFile(path.Join("testdata", "slack_events", "opsgenie_alert_3.json"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
resp, err := http.Post(fmt.Sprintf("%s/api/v1/events/slack", u), "application/json", bytes.NewReader(b))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
b, _ := io.ReadAll(resp.Body)
|
||||
t.Fatalf("(%d) %s", resp.StatusCode, b)
|
||||
}
|
||||
|
||||
resp, err = http.Get(fmt.Sprintf("%s/api/v1/rpc/aievent?id=%s", u, "11067"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
b, _ = io.ReadAll(resp.Body)
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("(%d) %s", resp.StatusCode, b)
|
||||
}
|
||||
|
||||
t.Logf("%s", b)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ func (s Storage) selectThreadsWhere(ctx context.Context, clause string, args ...
|
|||
|
||||
q := fmt.Sprintf(`
|
||||
SELECT %s FROM threads WHERE %s
|
||||
ORDER BY TS ASC
|
||||
`, strings.Join(keys, ", "), clause)
|
||||
rows, err := s.driver.QueryContext(ctx, q, args2...)
|
||||
if err != nil {
|
||||
|
|
@ -138,6 +139,7 @@ func (s Storage) selectMessagesWhere(ctx context.Context, clause string, args ..
|
|||
|
||||
q := fmt.Sprintf(`
|
||||
SELECT %s FROM messages WHERE %s
|
||||
ORDER BY TS ASC
|
||||
`, strings.Join(keys, ", "), clause)
|
||||
rows, err := s.driver.QueryContext(ctx, q, args2...)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in New Issue