feat(db): rollback changes

This commit is contained in:
Taha Yassine Kraiem 2022-01-28 20:52:28 +01:00
parent 04d72e45e0
commit e7cc039f97
5 changed files with 77 additions and 101 deletions

View file

@ -1,12 +1,11 @@
package cache
import (
"database/sql"
import (
. "openreplay/backend/pkg/messages"
// . "openreplay/backend/pkg/db/types"
// . "openreplay/backend/pkg/db/types"
)
func (c *PGCache) insertSessionEnd(sessionID uint64, timestamp uint64 ) error {
func (c *PGCache) insertSessionEnd(sessionID uint64, timestamp uint64) error {
//duration, err := c.Conn.InsertSessionEnd(sessionID, timestamp)
_, err := c.Conn.InsertSessionEnd(sessionID, timestamp)
if err != nil {
@ -21,7 +20,6 @@ func (c *PGCache) insertSessionEnd(sessionID uint64, timestamp uint64 ) error {
return nil
}
func (c *PGCache) InsertIssueEvent(sessionID uint64, crash *IssueEvent) error {
session, err := c.GetSession(sessionID)
if err != nil {
@ -30,7 +28,6 @@ func (c *PGCache) InsertIssueEvent(sessionID uint64, crash *IssueEvent) error {
return c.Conn.InsertIssueEvent(sessionID, session.ProjectID, crash)
}
func (c *PGCache) InsertUserID(sessionID uint64, userID *IOSUserID) error {
if err := c.Conn.InsertIOSUserID(sessionID, userID); err != nil {
return err
@ -39,7 +36,7 @@ func (c *PGCache) InsertUserID(sessionID uint64, userID *IOSUserID) error {
if err != nil {
return err
}
session.UserID = sql.NullString{userID.Value,true}
session.UserID = userID.Value
return nil
}
@ -51,7 +48,7 @@ func (c *PGCache) InsertUserAnonymousID(sessionID uint64, userAnonymousID *IOSUs
if err != nil {
return err
}
session.UserAnonymousID = sql.NullString{userAnonymousID.Value,true}
session.UserAnonymousID = &userAnonymousID.Value
return nil
}
@ -70,11 +67,9 @@ func (c *PGCache) InsertMetadata(sessionID uint64, metadata *Metadata) error {
if keyNo == 0 {
// insert project metadata
}
if err := c.Conn.InsertMetadata(sessionID, keyNo, metadata.Value); err != nil {
return err
}
session.SetMetadata(keyNo, metadata.Value)
return nil
}

View file

@ -2,42 +2,40 @@ package cache
import (
"errors"
"log"
. "openreplay/backend/pkg/db/types"
. "openreplay/backend/pkg/messages"
)
func (c *PGCache) InsertWebSessionStart(sessionID uint64, s *SessionStart) error {
if c.sessions[ sessionID ] != nil {
if c.sessions[sessionID] != nil {
return errors.New("This session already in cache!")
}
c.sessions[ sessionID ] = &Session{
SessionID: sessionID,
Platform: "web",
Timestamp: s.Timestamp,
ProjectID: uint32(s.ProjectID),
c.sessions[sessionID] = &Session{
SessionID: sessionID,
Platform: "web",
Timestamp: s.Timestamp,
ProjectID: uint32(s.ProjectID),
TrackerVersion: s.TrackerVersion,
RevID: s.RevID,
UserUUID: s.UserUUID,
UserOS: s.UserOS,
UserOSVersion: s.UserOSVersion,
UserDevice: s.UserDevice,
UserCountry: s.UserCountry,
RevID: s.RevID,
UserUUID: s.UserUUID,
UserOS: s.UserOS,
UserOSVersion: s.UserOSVersion,
UserDevice: s.UserDevice,
UserCountry: s.UserCountry,
// web properties (TODO: unite different platform types)
UserAgent: s.UserAgent,
UserBrowser: s.UserBrowser,
UserBrowserVersion: s.UserBrowserVersion,
UserDeviceType: s.UserDeviceType,
UserAgent: s.UserAgent,
UserBrowser: s.UserBrowser,
UserBrowserVersion: s.UserBrowserVersion,
UserDeviceType: s.UserDeviceType,
UserDeviceMemorySize: s.UserDeviceMemorySize,
UserDeviceHeapSize: s.UserDeviceHeapSize,
UserID: s.UserID,
UserDeviceHeapSize: s.UserDeviceHeapSize,
UserID: s.UserID,
}
if err := c.Conn.InsertSessionStart(sessionID, c.sessions[ sessionID ]); err != nil {
c.sessions[ sessionID ] = nil
if err := c.Conn.InsertSessionStart(sessionID, c.sessions[sessionID]); err != nil {
c.sessions[sessionID] = nil
return err
}
return nil;
return nil
}
func (c *PGCache) InsertWebSessionEnd(sessionID uint64, e *SessionEnd) error {
@ -45,18 +43,13 @@ func (c *PGCache) InsertWebSessionEnd(sessionID uint64, e *SessionEnd) error {
}
func (c *PGCache) InsertWebErrorEvent(sessionID uint64, e *ErrorEvent) error {
log.Println(">>InsertWebErrorEvent")
session, err := c.GetSession(sessionID)
if err != nil {
log.Println("session not found")
log.Println(err)
return err
}
log.Println(">>InsertWebErrorEvent to DB")
if err := c.Conn.InsertWebErrorEvent(sessionID, session.ProjectID, e); err != nil {
return err
}
session.ErrorsCount += 1
return nil
}

View file

@ -1,15 +1,13 @@
package postgres
//import . "openreplay/backend/pkg/messages"
import (
"log"
. "openreplay/backend/pkg/db/types"
)
import . "openreplay/backend/pkg/db/types"
//import "log"
func (conn *Conn) GetSession(sessionID uint64) (*Session, error) {
s := &Session{ SessionID: sessionID }
//var revID, userOSVersion *string
s := &Session{SessionID: sessionID}
var revID, userOSVersion *string
if err := conn.queryRow(`
SELECT platform,
duration, project_id, start_ts,
@ -24,24 +22,21 @@ func (conn *Conn) GetSession(sessionID uint64) (*Session, error) {
`,
sessionID,
).Scan(&s.Platform,
&s.Duration, &s.ProjectID, &s.Timestamp,
&s.UserUUID, &s.UserOS, &s.UserOSVersion,
&s.UserDevice, &s.UserDeviceType, &s.UserCountry,
&s.RevID, &s.TrackerVersion,
&s.UserID, &s.UserAnonymousID,
&s.Metadata1, &s.Metadata2, &s.Metadata3, &s.Metadata4, &s.Metadata5,
&s.Metadata6, &s.Metadata7, &s.Metadata8, &s.Metadata9, &s.Metadata10); err != nil {
log.Println(">>error DB scan for sessionId:")
log.Println(sessionID)
log.Println(err)
&s.Duration, &s.ProjectID, &s.Timestamp,
&s.UserUUID, &s.UserOS, &userOSVersion,
&s.UserDevice, &s.UserDeviceType, &s.UserCountry,
&revID, &s.TrackerVersion,
&s.UserID, &s.UserAnonymousID,
&s.Metadata1, &s.Metadata2, &s.Metadata3, &s.Metadata4, &s.Metadata5,
&s.Metadata6, &s.Metadata7, &s.Metadata8, &s.Metadata9, &s.Metadata10); err != nil {
return nil, err
}
//if userOSVersion != nil { // TODO: choose format, make f
// s.UserOSVersion = *userOSVersion
//}
//if revID != nil {
// s.RevID = *revID
//}
if userOSVersion != nil { // TODO: choose format, make f
s.UserOSVersion = *userOSVersion
}
if revID != nil {
s.RevID = *revID
}
return s, nil
}
@ -109,4 +104,4 @@ func (conn *Conn) GetSession(sessionID uint64) (*Session, error) {
// }
// }
// return list
// }
// }

View file

@ -1,35 +1,33 @@
package types
import "database/sql"
type Session struct {
SessionID uint64 `db:"session_id" json:"session_id;omitempty"`
Timestamp uint64 `db:"start_ts" json:"start_ts;omitempty"`
ProjectID uint32 `db:"project_id" json:"project_id;omitempty"`
TrackerVersion sql.NullString `db:"tracker_version" json:"tracker_version;omitempty"`
RevID sql.NullString `db:"rev_id" json:"rev_id;omitempty"`
UserUUID string `db:"user_uuid" json:"user_uuid;omitempty"`
UserOS sql.NullString `db:"user_os" json:"user_os;omitempty"`
UserOSVersion sql.NullString `db:"user_os_version" json:"user_os_version;omitempty"`
UserDevice sql.NullString `db:"user_device" json:"user_device;omitempty"`
UserCountry string `db:"user_country" json:"user_country;omitempty"`
SessionID uint64
Timestamp uint64
ProjectID uint32
TrackerVersion string
RevID string
UserUUID string
UserOS string
UserOSVersion string
UserDevice string
UserCountry string
Duration *uint64 `db:"duration" json:"duration;omitempty"`
Duration *uint64
PagesCount int
EventsCount int
ErrorsCount int
UserID sql.NullString `db:"user_id" json:"user_id;omitempty"`
UserAnonymousID sql.NullString `db:"user_anonymous_id" json:"user_anonymous_id;omitempty"`
Metadata1 sql.NullString `db:"metadata_1" json:"metadata_1;omitempty"`
Metadata2 sql.NullString `db:"metadata_2" json:"metadata_2;omitempty"`
Metadata3 sql.NullString `db:"metadata_3" json:"metadata_3;omitempty"`
Metadata4 sql.NullString `db:"metadata_4" json:"metadata_4;omitempty"`
Metadata5 sql.NullString `db:"metadata_5" json:"metadata_5;omitempty"`
Metadata6 sql.NullString `db:"metadata_6" json:"metadata_6;omitempty"`
Metadata7 sql.NullString `db:"metadata_7" json:"metadata_7;omitempty"`
Metadata8 sql.NullString `db:"metadata_8" json:"metadata_8;omitempty"`
Metadata9 sql.NullString `db:"metadata_9" json:"metadata_9;omitempty"`
Metadata10 sql.NullString `db:"metadata_10" json:"metadata_10;omitempty"`
UserID string // pointer??
UserAnonymousID *string
Metadata1 *string
Metadata2 *string
Metadata3 *string
Metadata4 *string
Metadata5 *string
Metadata6 *string
Metadata7 *string
Metadata8 *string
Metadata9 *string
Metadata10 *string
Platform string
// Only-web properties
@ -44,24 +42,24 @@ type Session struct {
func (s *Session) SetMetadata(keyNo uint, value string) {
switch keyNo {
case 1:
s.Metadata1 = sql.NullString{value,true}
s.Metadata1 = &value
case 2:
s.Metadata2 = sql.NullString{value,true}
s.Metadata2 = &value
case 3:
s.Metadata3 = sql.NullString{value,true}
s.Metadata3 = &value
case 4:
s.Metadata4 = sql.NullString{value,true}
s.Metadata4 = &value
case 5:
s.Metadata5 = sql.NullString{value,true}
s.Metadata5 = &value
case 6:
s.Metadata6 = sql.NullString{value,true}
s.Metadata6 = &value
case 7:
s.Metadata7 = sql.NullString{value,true}
s.Metadata7 = &value
case 8:
s.Metadata8 = sql.NullString{value,true}
s.Metadata8 = &value
case 9:
s.Metadata9 = sql.NullString{value,true}
s.Metadata9 = &value
case 10:
s.Metadata10 = sql.NullString{value,true}
s.Metadata10 = &value
}
}

View file

@ -2,7 +2,6 @@ package main
import (
"log"
"reflect"
"time"
"os"
@ -36,11 +35,7 @@ func main() {
env.String("TOPIC_TRIGGER"),
},
func(sessionID uint64, msg messages.Message, _ *types.Meta) {
log.Println(">>Insert message")
log.Println(reflect.TypeOf(msg))
if err := insertMessage(sessionID, msg); err != nil {
log.Println(">>Error")
log.Println(err)
if !postgres.IsPkeyViolation(err) {
log.Printf("Message Insertion Error %v, SessionID: %v, Message: %v", err, sessionID, msg)
}