openreplay/backend/pkg/db/postgres/messages_ios.go
2021-05-03 17:53:25 +02:00

181 lines
4.4 KiB
Go

package postgres
import (
"openreplay/backend/pkg/messages"
"openreplay/backend/pkg/hashid"
"openreplay/backend/pkg/url"
)
func (conn *Conn) InsertIOSCustomEvent(sessionID uint64, e *messages.IOSCustomEvent) error {
err := conn.InsertCustomEvent(sessionID, e.Timestamp, e.Index, e.Name, e.Payload)
if err == nil {
conn.insertAutocompleteValue(sessionID, "CUSTOM_IOS", e.Name)
}
return err
}
func (conn *Conn) InsertIOSUserID(sessionID uint64, userID *messages.IOSUserID) error {
err := conn.InsertUserID(sessionID, userID.Value)
if err == nil {
conn.insertAutocompleteValue(sessionID, "USERID_IOS", userID.Value)
}
return err
}
func (conn *Conn) InsertIOSUserAnonymousID(sessionID uint64, userAnonymousID *messages.IOSUserAnonymousID) error {
err := conn.InsertUserAnonymousID(sessionID, userAnonymousID.Value)
if err == nil {
conn.insertAutocompleteValue(sessionID, "USERANONYMOUSID_IOS", userAnonymousID.Value)
}
return err
}
func (conn *Conn) InsertIOSNetworkCall(sessionID uint64, e *messages.IOSNetworkCall) error {
err := conn.InsertRequest(sessionID, e.Timestamp, e.Index, e.URL, e.Duration, e.Success)
if err == nil {
conn.insertAutocompleteValue(sessionID, "REQUEST_IOS", url.DiscardURLQuery(e.URL))
}
return err
}
func (conn *Conn) InsertIOSScreenEnter(sessionID uint64, screenEnter *messages.IOSScreenEnter) error {
tx, err := conn.begin()
if err != nil {
return err
}
defer tx.rollback()
if err = tx.exec(`
INSERT INTO events_ios.views (
session_id, timestamp, seq_index, name
) VALUES (
$1, $2, $3, $4
)`,
sessionID, screenEnter.Timestamp, screenEnter.Index, screenEnter.ViewName,
); err != nil {
return err
}
if err = tx.exec(`
UPDATE sessions SET pages_count = pages_count + 1
WHERE session_id = $1`,
sessionID,
); err != nil {
return err
}
if err = tx.commit(); err != nil {
return err
}
conn.insertAutocompleteValue(sessionID, "VIEW_IOS", screenEnter.ViewName)
return nil
}
func (conn *Conn) InsertIOSClickEvent(sessionID uint64, clickEvent *messages.IOSClickEvent) error {
tx, err := conn.begin()
if err != nil {
return err
}
defer tx.rollback()
if err = tx.exec(`
INSERT INTO events_ios.clicks (
session_id, timestamp, seq_index, label
) VALUES (
$1, $2, $3, $4
)`,
sessionID, clickEvent.Timestamp, clickEvent.Index, clickEvent.Label,
); err != nil {
return err
}
if err = tx.exec(`
UPDATE sessions SET events_count = events_count + 1
WHERE session_id = $1`,
sessionID,
); err != nil {
return err
}
if err = tx.commit(); err != nil {
return err
}
conn.insertAutocompleteValue(sessionID, "CLICK_IOS", clickEvent.Label)
return nil
}
func (conn *Conn) InsertIOSInputEvent(sessionID uint64, inputEvent *messages.IOSInputEvent) error {
tx, err := conn.begin()
if err != nil {
return err
}
defer tx.rollback()
var value interface{} = inputEvent.Value
if inputEvent.ValueMasked {
value = nil
}
if err = tx.exec(`
INSERT INTO events_ios.inputs (
session_id, timestamp, seq_index, label, value
) VALUES (
$1, $2, $3, $4, $5
)`,
sessionID, inputEvent.Timestamp, inputEvent.Index, inputEvent.Label, value,
); err != nil {
return err
}
if err = tx.exec(`
UPDATE sessions SET events_count = events_count + 1
WHERE session_id = $1`,
sessionID,
); err != nil {
return err
}
if err = tx.commit(); err != nil {
return err
}
conn.insertAutocompleteValue(sessionID, "INPUT_IOS", inputEvent.Label)
// conn.insertAutocompleteValue(sessionID, "INPUT_VALUE", inputEvent.Label)
return nil
}
func (conn *Conn) InsertIOSCrash(sessionID uint64, projectID uint32, crash *messages.IOSCrash) error {
tx, err := conn.begin()
if err != nil {
return err
}
defer tx.rollback()
crashID := hashid.IOSCrashID(projectID, crash)
if err = tx.exec(`
INSERT INTO crashes_ios (
project_id, crash_id, name, reason, stacktrace
) (SELECT
project_id, $2, $3, $4, $5
FROM sessions
WHERE session_id = $1
)ON CONFLICT DO NOTHING`,
sessionID, crashID, crash.Name, crash.Reason, crash.Stacktrace,
); err != nil {
return err
}
if err = tx.exec(`
INSERT INTO events_ios.crashes (
session_id, timestamp, seq_index, crash_id
) VALUES (
$1, $2, $3, $4
)`,
sessionID, crash.Timestamp, crash.Index, crashID,
); err != nil {
return err
}
if err = tx.exec(`
UPDATE sessions SET errors_count = errors_count + 1, issue_score = issue_score + 1000
WHERE session_id = $1`,
sessionID,
); err != nil {
return err
}
return tx.commit()
}