diff --git a/backend/internal/http/router/handlers-web.go b/backend/internal/http/router/handlers-web.go index 7ac619cee..481c58c1f 100644 --- a/backend/internal/http/router/handlers-web.go +++ b/backend/internal/http/router/handlers-web.go @@ -170,6 +170,7 @@ func (e *Router) startSessionHandlerWeb(w http.ResponseWriter, r *http.Request) SessionID: sessionID, Platform: "web", Timestamp: sessionStart.Timestamp, + Timezone: req.Timezone, ProjectID: uint32(sessionStart.ProjectID), TrackerVersion: sessionStart.TrackerVersion, RevID: sessionStart.RevID, diff --git a/backend/internal/http/router/model.go b/backend/internal/http/router/model.go index 7d68050d9..3a6cac5dc 100644 --- a/backend/internal/http/router/model.go +++ b/backend/internal/http/router/model.go @@ -5,6 +5,7 @@ type StartSessionRequest struct { UserUUID *string `json:"userUUID"` RevID string `json:"revID"` Timestamp int64 `json:"timestamp"` + Timezone string `json:"timezone"` TrackerVersion string `json:"trackerVersion"` IsSnippet bool `json:"isSnippet"` DeviceMemory uint64 `json:"deviceMemory"` diff --git a/backend/pkg/sessions/model.go b/backend/pkg/sessions/model.go index e774ca094..2ffb902bd 100644 --- a/backend/pkg/sessions/model.go +++ b/backend/pkg/sessions/model.go @@ -3,6 +3,7 @@ package sessions type Session struct { SessionID uint64 Timestamp uint64 + Timezone string ProjectID uint32 TrackerVersion string RevID string diff --git a/backend/pkg/sessions/storage.go b/backend/pkg/sessions/storage.go index 9dec22c5e..a9d015a34 100644 --- a/backend/pkg/sessions/storage.go +++ b/backend/pkg/sessions/storage.go @@ -40,7 +40,7 @@ func (s *storageImpl) Add(sess *Session) error { tracker_version, issue_score, platform, user_agent, user_browser, user_browser_version, user_device_memory_size, user_device_heap_size, - user_id, user_state, user_city + user_id, user_state, user_city, timezone ) VALUES ( $1, $2, $3, $4, $5, $6, $7, @@ -49,7 +49,7 @@ func (s *storageImpl) Add(sess *Session) error { $11, $12, $13, NULLIF($14, ''), NULLIF($15, ''), NULLIF($16, ''), NULLIF($17, 0), NULLIF($18, 0::bigint), - NULLIF(LEFT($19, 8000), ''), NULLIF($20, ''), NULLIF($21, '') + NULLIF(LEFT($19, 8000), ''), NULLIF($20, ''), NULLIF($21, ''), $22 )`, sess.SessionID, sess.ProjectID, sess.Timestamp, sess.UserUUID, sess.UserDevice, sess.UserDeviceType, sess.UserCountry, @@ -58,7 +58,7 @@ func (s *storageImpl) Add(sess *Session) error { sess.TrackerVersion, sess.Timestamp/1000, sess.Platform, sess.UserAgent, sess.UserBrowser, sess.UserBrowserVersion, sess.UserDeviceMemorySize, sess.UserDeviceHeapSize, - sess.UserID, sess.UserState, sess.UserCity, + sess.UserID, sess.UserState, sess.UserCity, sess.Timezone, ) } diff --git a/ee/backend/pkg/db/clickhouse/connector.go b/ee/backend/pkg/db/clickhouse/connector.go index 29c0fe1d9..858fa930e 100644 --- a/ee/backend/pkg/db/clickhouse/connector.go +++ b/ee/backend/pkg/db/clickhouse/connector.go @@ -106,7 +106,7 @@ func (c *connectorImpl) newBatch(name, query string) error { } var batches = map[string]string{ - "sessions": "INSERT INTO experimental.sessions (session_id, project_id, user_id, user_uuid, user_os, user_os_version, user_device, user_device_type, user_country, user_state, user_city, datetime, duration, pages_count, events_count, errors_count, issue_score, referrer, issue_types, tracker_version, user_browser, user_browser_version, metadata_1, metadata_2, metadata_3, metadata_4, metadata_5, metadata_6, metadata_7, metadata_8, metadata_9, metadata_10) VALUES (?, ?, SUBSTR(?, 1, 8000), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SUBSTR(?, 1, 8000), ?, ?, ?, ?, SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000))", + "sessions": "INSERT INTO experimental.sessions (session_id, project_id, user_id, user_uuid, user_os, user_os_version, user_device, user_device_type, user_country, user_state, user_city, datetime, duration, pages_count, events_count, errors_count, issue_score, referrer, issue_types, tracker_version, user_browser, user_browser_version, metadata_1, metadata_2, metadata_3, metadata_4, metadata_5, metadata_6, metadata_7, metadata_8, metadata_9, metadata_10, timezone) VALUES (?, ?, SUBSTR(?, 1, 8000), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SUBSTR(?, 1, 8000), ?, ?, ?, ?, SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), SUBSTR(?, 1, 8000), ?)", "resources": "INSERT INTO experimental.resources (session_id, project_id, message_id, datetime, url, type, duration, ttfb, header_size, encoded_body_size, decoded_body_size, success) VALUES (?, ?, ?, ?, SUBSTR(?, 1, 8000), ?, ?, ?, ?, ?, ?, ?)", "autocompletes": "INSERT INTO experimental.autocomplete (project_id, type, value) VALUES (?, ?, ?)", "pages": "INSERT INTO experimental.events (session_id, project_id, message_id, datetime, url, request_start, response_start, response_end, dom_content_loaded_event_start, dom_content_loaded_event_end, load_event_start, load_event_end, first_paint, first_contentful_paint_time, speed_index, visually_complete, time_to_interactive, event_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", @@ -297,6 +297,7 @@ func (c *connectorImpl) InsertWebSession(session *sessions.Session) error { session.Metadata8, session.Metadata9, session.Metadata10, + session.Timezone, ); err != nil { c.checkError("sessions", err) return fmt.Errorf("can't append to sessions batch: %s", err)