From c44b6854ab8b7f004cb1dda3456eab7ef6fa4604 Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 26 May 2025 14:04:22 +0200 Subject: [PATCH] feat(db): added incident event insertion to PG --- backend/internal/db/datasaver/web.go | 3 +++ backend/pkg/db/postgres/events.go | 12 ++++++++++++ backend/pkg/hashid/hashid.go | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/backend/internal/db/datasaver/web.go b/backend/internal/db/datasaver/web.go index e623b452a..b98cc4759 100644 --- a/backend/internal/db/datasaver/web.go +++ b/backend/internal/db/datasaver/web.go @@ -141,6 +141,9 @@ func (s *saverImpl) handleWebMessage(sessCtx context.Context, session *sessions. } return s.ch.InsertWebPerformanceTrackAggr(session, m) case *messages.Incident: + if err := s.pg.InsertIncident(session, m); err != nil { + return err + } return s.ch.InsertIncident(session, m) } return nil diff --git a/backend/pkg/db/postgres/events.go b/backend/pkg/db/postgres/events.go index 8a61e8140..9782ea2d2 100644 --- a/backend/pkg/db/postgres/events.go +++ b/backend/pkg/db/postgres/events.go @@ -270,3 +270,15 @@ func (conn *Conn) InsertWebStatsPerformance(p *messages.PerformanceTrackAggr) er ) return nil } + +func (conn *Conn) InsertIncident(sess *sessions.Session, e *messages.Incident) error { + sessCtx := context.WithValue(context.Background(), "sessionID", sess.SessionID) + issueID := hashid.MobileIncidentID(sess.ProjectID, sess.SessionID, e.Timestamp) + if err := conn.bulks.Get("webIssues").Append(sess.ProjectID, issueID, "incident", e.Url); err != nil { + conn.log.Error(sessCtx, "insert incident issue err: %s", err) + } + if err := conn.bulks.Get("webIssueEvents").Append(sess.SessionID, issueID, e.Timestamp, truncSqIdx(e.MsgID()), nil); err != nil { + conn.log.Error(sessCtx, "insert incident issue event err: %s", err) + } + return nil +} diff --git a/backend/pkg/hashid/hashid.go b/backend/pkg/hashid/hashid.go index 0dca54e9f..bea70ea4e 100644 --- a/backend/pkg/hashid/hashid.go +++ b/backend/pkg/hashid/hashid.go @@ -38,3 +38,11 @@ func MouseThrashingID(projectID uint32, sessID, ts uint64) string { hash.Write([]byte(strconv.FormatUint(ts, 10))) return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil)) } + +func MobileIncidentID(projectID uint32, sessID, ts uint64) string { + hash := fnv.New128a() + hash.Write([]byte("mobile_incident")) + hash.Write([]byte(strconv.FormatUint(sessID, 10))) + hash.Write([]byte(strconv.FormatUint(ts, 10))) + return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil)) +}