openreplay/backend/pkg/db/postgres/session-updates.go
Alexander aa3192b6c7
Patch for db and ender services (#632)
* feat(backend/db): implemented bulk inserts for db service
* feat(backend/storage): added new reading_duration metric for storage service
* feat(backend/ender): added check for sessionEnd duplicates
2022-07-21 17:22:43 +02:00

30 lines
734 B
Go

package postgres
// Mechanism of combination several session updates into one
const sessionUpdateReq = `UPDATE sessions SET (pages_count, events_count) = (pages_count + $1, events_count + $2) WHERE session_id = $3`
type sessionUpdates struct {
sessionID uint64
pages int
events int
}
func NewSessionUpdates(sessionID uint64) *sessionUpdates {
return &sessionUpdates{
sessionID: sessionID,
pages: 0,
events: 0,
}
}
func (su *sessionUpdates) add(pages, events int) {
su.pages += pages
su.events += events
}
func (su *sessionUpdates) request() (string, []interface{}) {
if su.pages == 0 && su.events == 0 {
return "", nil
}
return sessionUpdateReq, []interface{}{su.pages, su.events, su.sessionID}
}