Mobile renaming (protocol + backend) (#2078)

* feat(backend): renamed ios to mobile

* feat(backend): added missing changes to iterator

* feat(backend): added missing changes to ender

* feat(backend): as usual auto deleted import in ch connector

* feat(backend): updated ee/conditions func calls
This commit is contained in:
Alexander 2024-04-12 09:30:24 +02:00 committed by GitHub
parent a316c90472
commit 2bf9298836
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
33 changed files with 327 additions and 327 deletions

View file

@ -62,10 +62,10 @@ func main() {
messages.MsgPageEvent, messages.MsgMouseThrashing, messages.MsgInputChange, messages.MsgPageEvent, messages.MsgMouseThrashing, messages.MsgInputChange,
messages.MsgUnbindNodes, messages.MsgCanvasNode, messages.MsgTagTrigger, messages.MsgUnbindNodes, messages.MsgCanvasNode, messages.MsgTagTrigger,
// Mobile messages // Mobile messages
messages.MsgIOSSessionStart, messages.MsgIOSSessionEnd, messages.MsgIOSUserID, messages.MsgIOSUserAnonymousID, messages.MsgMobileSessionStart, messages.MsgMobileSessionEnd, messages.MsgMobileUserID, messages.MsgMobileUserAnonymousID,
messages.MsgIOSMetadata, messages.MsgIOSEvent, messages.MsgIOSNetworkCall, messages.MsgMobileMetadata, messages.MsgMobileEvent, messages.MsgMobileNetworkCall,
messages.MsgIOSClickEvent, messages.MsgIOSSwipeEvent, messages.MsgIOSInputEvent, messages.MsgMobileClickEvent, messages.MsgMobileSwipeEvent, messages.MsgMobileInputEvent,
messages.MsgIOSCrash, messages.MsgIOSIssueEvent, messages.MsgMobileCrash, messages.MsgMobileIssueEvent,
} }
// Init consumer // Init consumer
@ -73,7 +73,7 @@ func main() {
cfg.GroupDB, cfg.GroupDB,
[]string{ []string{
cfg.TopicRawWeb, cfg.TopicRawWeb,
cfg.TopicRawIOS, cfg.TopicRawMobile,
cfg.TopicAnalytics, cfg.TopicAnalytics,
}, },
messages.NewMessageIterator(log, saver.Handle, msgFilter, true), messages.NewMessageIterator(log, saver.Handle, msgFilter, true),

View file

@ -60,7 +60,7 @@ func main() {
cfg.GroupEnder, cfg.GroupEnder,
[]string{ []string{
cfg.TopicRawWeb, cfg.TopicRawWeb,
cfg.TopicRawIOS, cfg.TopicRawMobile,
}, },
messages.NewEnderMessageIterator( messages.NewEnderMessageIterator(
log, log,
@ -170,14 +170,14 @@ func main() {
} }
} }
if sess != nil && (sess.Platform == "ios" || sess.Platform == "android") { if sess != nil && (sess.Platform == "ios" || sess.Platform == "android") {
msg := &messages.IOSSessionEnd{Timestamp: timestamp} msg := &messages.MobileSessionEnd{Timestamp: timestamp}
if err := producer.Produce(cfg.TopicRawIOS, sessionID, msg.Encode()); err != nil { if err := producer.Produce(cfg.TopicRawMobile, sessionID, msg.Encode()); err != nil {
log.Error(sessCtx, "can't send iOSSessionEnd to mobile topic: %s", err) log.Error(sessCtx, "can't send MobileSessionEnd to mobile topic: %s", err)
return false, 0 return false, 0
} }
// Inform canvas service about session end // Inform canvas service about session end
if err := producer.Produce(cfg.TopicRawImages, sessionID, msg.Encode()); err != nil { if err := producer.Produce(cfg.TopicRawImages, sessionID, msg.Encode()); err != nil {
log.Error(sessCtx, "can't send iOSSessionEnd signal to canvas topic: %s", err) log.Error(sessCtx, "can't send MobileSessionEnd signal to canvas topic: %s", err)
} }
} else { } else {
if err := producer.Produce(cfg.TopicRawWeb, sessionID, msg.Encode()); err != nil { if err := producer.Produce(cfg.TopicRawWeb, sessionID, msg.Encode()); err != nil {

View file

@ -7,7 +7,7 @@ import (
"openreplay/backend/pkg/builders" "openreplay/backend/pkg/builders"
"openreplay/backend/pkg/handlers" "openreplay/backend/pkg/handlers"
"openreplay/backend/pkg/handlers/custom" "openreplay/backend/pkg/handlers/custom"
"openreplay/backend/pkg/handlers/ios" "openreplay/backend/pkg/handlers/mobile"
"openreplay/backend/pkg/handlers/web" "openreplay/backend/pkg/handlers/web"
"openreplay/backend/pkg/logger" "openreplay/backend/pkg/logger"
"openreplay/backend/pkg/memory" "openreplay/backend/pkg/memory"
@ -35,8 +35,8 @@ func main() {
&web.NetworkIssueDetector{}, &web.NetworkIssueDetector{},
&web.PerformanceAggregator{}, &web.PerformanceAggregator{},
web.NewAppCrashDetector(), web.NewAppCrashDetector(),
&ios.TapRageDetector{}, &mobile.TapRageDetector{},
ios.NewViewComponentDurations(), mobile.NewViewComponentDurations(),
} }
} }
@ -46,7 +46,7 @@ func main() {
cfg.GroupHeuristics, cfg.GroupHeuristics,
[]string{ []string{
cfg.TopicRawWeb, cfg.TopicRawWeb,
cfg.TopicRawIOS, cfg.TopicRawMobile,
}, },
messages.NewMessageIterator(log, eventBuilder.HandleMessage, nil, true), messages.NewMessageIterator(log, eventBuilder.HandleMessage, nil, true),
false, false,

View file

@ -49,7 +49,7 @@ func main() {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if msgType != messages.MsgIOSSessionEnd { if msgType != messages.MsgMobileSessionEnd {
return nil, fmt.Errorf("not a mobile session end message") return nil, fmt.Errorf("not a mobile session end message")
} }
msg, err := messages.ReadMessage(msgType, reader) msg, err := messages.ReadMessage(msgType, reader)

View file

@ -81,14 +81,14 @@ func main() {
sessCtx := context.WithValue(context.Background(), "sessionID", msg.SessionID()) sessCtx := context.WithValue(context.Background(), "sessionID", msg.SessionID())
// Send SessionEnd trigger to storage service // Send SessionEnd trigger to storage service
if msg.TypeID() == messages.MsgSessionEnd || msg.TypeID() == messages.MsgIOSSessionEnd { if msg.TypeID() == messages.MsgSessionEnd || msg.TypeID() == messages.MsgMobileSessionEnd {
if err := producer.Produce(cfg.TopicTrigger, msg.SessionID(), msg.Encode()); err != nil { if err := producer.Produce(cfg.TopicTrigger, msg.SessionID(), msg.Encode()); err != nil {
log.Error(sessCtx, "can't send SessionEnd to trigger topic: %s", err) log.Error(sessCtx, "can't send SessionEnd to trigger topic: %s", err)
} }
// duplicate session end message to mobile trigger topic to build video replay for mobile sessions // duplicate session end message to mobile trigger topic to build video replay for mobile sessions
if msg.TypeID() == messages.MsgIOSSessionEnd { if msg.TypeID() == messages.MsgMobileSessionEnd {
if err := producer.Produce(cfg.TopicMobileTrigger, msg.SessionID(), msg.Encode()); err != nil { if err := producer.Produce(cfg.TopicMobileTrigger, msg.SessionID(), msg.Encode()); err != nil {
log.Error(sessCtx, "can't send iOSSessionEnd to mobile trigger topic: %s", err) log.Error(sessCtx, "can't send MobileSessionEnd to mobile trigger topic: %s", err)
} }
} }
writer.Close(msg.SessionID()) writer.Close(msg.SessionID())
@ -190,7 +190,7 @@ func main() {
cfg.GroupSink, cfg.GroupSink,
[]string{ []string{
cfg.TopicRawWeb, cfg.TopicRawWeb,
cfg.TopicRawIOS, cfg.TopicRawMobile,
}, },
messages.NewSinkMessageIterator(log, msgHandler, nil, false), messages.NewSinkMessageIterator(log, msgHandler, nil, false),
false, false,

View file

@ -48,9 +48,9 @@ func main() {
messages.NewMessageIterator( messages.NewMessageIterator(
log, log,
func(msg messages.Message) { func(msg messages.Message) {
// Convert IOSSessionEnd to SessionEnd // Convert MobileSessionEnd to SessionEnd
if msg.TypeID() == messages.MsgIOSSessionEnd { if msg.TypeID() == messages.MsgMobileSessionEnd {
mobileEnd, oldMeta := msg.(*messages.IOSSessionEnd), msg.Meta() mobileEnd, oldMeta := msg.(*messages.MobileSessionEnd), msg.Meta()
msg = &messages.SessionEnd{ msg = &messages.SessionEnd{
Timestamp: mobileEnd.Timestamp, Timestamp: mobileEnd.Timestamp,
} }
@ -66,7 +66,7 @@ func main() {
// Log timestamp of last processed session // Log timestamp of last processed session
counter.Update(msg.SessionID(), time.UnixMilli(msg.Meta().Batch().Timestamp())) counter.Update(msg.SessionID(), time.UnixMilli(msg.Meta().Batch().Timestamp()))
}, },
[]int{messages.MsgSessionEnd, messages.MsgIOSSessionEnd}, []int{messages.MsgSessionEnd, messages.MsgMobileSessionEnd},
true, true,
), ),
false, false,

View file

@ -17,7 +17,7 @@ type Config struct {
GroupDB string `env:"GROUP_DB,required"` GroupDB string `env:"GROUP_DB,required"`
TopicRawWeb string `env:"TOPIC_RAW_WEB,required"` TopicRawWeb string `env:"TOPIC_RAW_WEB,required"`
TopicAnalytics string `env:"TOPIC_ANALYTICS,required"` TopicAnalytics string `env:"TOPIC_ANALYTICS,required"`
TopicRawIOS string `env:"TOPIC_RAW_IOS,required"` TopicRawMobile string `env:"TOPIC_RAW_IOS,required"`
CommitBatchTimeout time.Duration `env:"COMMIT_BATCH_TIMEOUT,default=15s"` CommitBatchTimeout time.Duration `env:"COMMIT_BATCH_TIMEOUT,default=15s"`
BatchQueueLimit int `env:"DB_BATCH_QUEUE_LIMIT,required"` BatchQueueLimit int `env:"DB_BATCH_QUEUE_LIMIT,required"`
BatchSizeLimit int `env:"DB_BATCH_SIZE_LIMIT,required"` BatchSizeLimit int `env:"DB_BATCH_SIZE_LIMIT,required"`

View file

@ -16,7 +16,7 @@ type Config struct {
GroupEnder string `env:"GROUP_ENDER,required"` GroupEnder string `env:"GROUP_ENDER,required"`
LoggerTimeout int `env:"LOG_QUEUE_STATS_INTERVAL_SEC,required"` LoggerTimeout int `env:"LOG_QUEUE_STATS_INTERVAL_SEC,required"`
TopicRawWeb string `env:"TOPIC_RAW_WEB,required"` TopicRawWeb string `env:"TOPIC_RAW_WEB,required"`
TopicRawIOS string `env:"TOPIC_RAW_IOS,required"` TopicRawMobile string `env:"TOPIC_RAW_IOS,required"`
TopicCanvasImages string `env:"TOPIC_CANVAS_IMAGES,required"` TopicCanvasImages string `env:"TOPIC_CANVAS_IMAGES,required"`
TopicRawImages string `env:"TOPIC_RAW_IMAGES,required"` TopicRawImages string `env:"TOPIC_RAW_IMAGES,required"`
ProducerTimeout int `env:"PRODUCER_TIMEOUT,default=2000"` ProducerTimeout int `env:"PRODUCER_TIMEOUT,default=2000"`

View file

@ -13,7 +13,7 @@ type Config struct {
TopicAnalytics string `env:"TOPIC_ANALYTICS,required"` TopicAnalytics string `env:"TOPIC_ANALYTICS,required"`
LoggerTimeout int `env:"LOG_QUEUE_STATS_INTERVAL_SEC,required"` LoggerTimeout int `env:"LOG_QUEUE_STATS_INTERVAL_SEC,required"`
TopicRawWeb string `env:"TOPIC_RAW_WEB,required"` TopicRawWeb string `env:"TOPIC_RAW_WEB,required"`
TopicRawIOS string `env:"TOPIC_RAW_IOS,required"` TopicRawMobile string `env:"TOPIC_RAW_IOS,required"`
ProducerTimeout int `env:"PRODUCER_TIMEOUT,default=2000"` ProducerTimeout int `env:"PRODUCER_TIMEOUT,default=2000"`
UseProfiler bool `env:"PROFILER_ENABLED,default=false"` UseProfiler bool `env:"PROFILER_ENABLED,default=false"`
} }

View file

@ -19,7 +19,7 @@ type Config struct {
HTTPPort string `env:"HTTP_PORT,required"` HTTPPort string `env:"HTTP_PORT,required"`
HTTPTimeout time.Duration `env:"HTTP_TIMEOUT,default=60s"` HTTPTimeout time.Duration `env:"HTTP_TIMEOUT,default=60s"`
TopicRawWeb string `env:"TOPIC_RAW_WEB,required"` TopicRawWeb string `env:"TOPIC_RAW_WEB,required"`
TopicRawIOS string `env:"TOPIC_RAW_IOS,required"` TopicRawMobile string `env:"TOPIC_RAW_IOS,required"`
TopicRawImages string `env:"TOPIC_RAW_IMAGES,required"` TopicRawImages string `env:"TOPIC_RAW_IMAGES,required"`
TopicCanvasImages string `env:"TOPIC_CANVAS_IMAGES,required"` TopicCanvasImages string `env:"TOPIC_CANVAS_IMAGES,required"`
BeaconSizeLimit int64 `env:"BEACON_SIZE_LIMIT,required"` BeaconSizeLimit int64 `env:"BEACON_SIZE_LIMIT,required"`

View file

@ -14,7 +14,7 @@ type Config struct {
SyncTimeout int `env:"SYNC_TIMEOUT,default=5"` SyncTimeout int `env:"SYNC_TIMEOUT,default=5"`
GroupSink string `env:"GROUP_SINK,required"` GroupSink string `env:"GROUP_SINK,required"`
TopicRawWeb string `env:"TOPIC_RAW_WEB,required"` TopicRawWeb string `env:"TOPIC_RAW_WEB,required"`
TopicRawIOS string `env:"TOPIC_RAW_IOS,required"` TopicRawMobile string `env:"TOPIC_RAW_IOS,required"`
TopicCache string `env:"TOPIC_CACHE,required"` TopicCache string `env:"TOPIC_CACHE,required"`
TopicTrigger string `env:"TOPIC_TRIGGER,required"` TopicTrigger string `env:"TOPIC_TRIGGER,required"`
TopicMobileTrigger string `env:"TOPIC_MOBILE_TRIGGER,required"` TopicMobileTrigger string `env:"TOPIC_MOBILE_TRIGGER,required"`

View file

@ -47,8 +47,8 @@ func (s *saverImpl) Handle(msg Message) {
if msg.TypeID() == MsgCustomEvent { if msg.TypeID() == MsgCustomEvent {
defer s.Handle(types.WrapCustomEvent(msg.(*CustomEvent))) defer s.Handle(types.WrapCustomEvent(msg.(*CustomEvent)))
} }
if IsIOSType(msg.TypeID()) { if IsMobileType(msg.TypeID()) {
// Handle iOS messages // Handle Mobile messages
if err := s.handleMobileMessage(msg); err != nil { if err := s.handleMobileMessage(msg); err != nil {
if !postgres.IsPkeyViolation(err) { if !postgres.IsPkeyViolation(err) {
s.log.Error(sessCtx, "mobile message insertion error, msg: %+v, err: %s", msg, err) s.log.Error(sessCtx, "mobile message insertion error, msg: %+v, err: %s", msg, err)
@ -77,41 +77,41 @@ func (s *saverImpl) handleMobileMessage(msg Message) error {
return err return err
} }
switch m := msg.(type) { switch m := msg.(type) {
case *IOSUserID: case *MobileUserID:
if err = s.sessions.UpdateUserID(session.SessionID, m.ID); err != nil { if err = s.sessions.UpdateUserID(session.SessionID, m.ID); err != nil {
return err return err
} }
s.pg.InsertAutocompleteValue(session.SessionID, session.ProjectID, "USERID_IOS", m.ID) s.pg.InsertAutocompleteValue(session.SessionID, session.ProjectID, "USERID_Mobile", m.ID)
return nil return nil
case *IOSUserAnonymousID: case *MobileUserAnonymousID:
if err = s.sessions.UpdateAnonymousID(session.SessionID, m.ID); err != nil { if err = s.sessions.UpdateAnonymousID(session.SessionID, m.ID); err != nil {
return err return err
} }
s.pg.InsertAutocompleteValue(session.SessionID, session.ProjectID, "USERANONYMOUSID_IOS", m.ID) s.pg.InsertAutocompleteValue(session.SessionID, session.ProjectID, "USERANONYMOUSID_Mobile", m.ID)
return nil return nil
case *IOSMetadata: case *MobileMetadata:
return s.sessions.UpdateMetadata(m.SessionID(), m.Key, m.Value) return s.sessions.UpdateMetadata(m.SessionID(), m.Key, m.Value)
case *IOSEvent: case *MobileEvent:
return s.pg.InsertIOSEvent(session, m) return s.pg.InsertMobileEvent(session, m)
case *IOSClickEvent: case *MobileClickEvent:
if err := s.pg.InsertIOSClickEvent(session, m); err != nil { if err := s.pg.InsertMobileClickEvent(session, m); err != nil {
return err return err
} }
return s.sessions.UpdateEventsStats(session.SessionID, 1, 0) return s.sessions.UpdateEventsStats(session.SessionID, 1, 0)
case *IOSSwipeEvent: case *MobileSwipeEvent:
if err := s.pg.InsertIOSSwipeEvent(session, m); err != nil { if err := s.pg.InsertMobileSwipeEvent(session, m); err != nil {
return err return err
} }
return s.sessions.UpdateEventsStats(session.SessionID, 1, 0) return s.sessions.UpdateEventsStats(session.SessionID, 1, 0)
case *IOSInputEvent: case *MobileInputEvent:
if err := s.pg.InsertIOSInputEvent(session, m); err != nil { if err := s.pg.InsertMobileInputEvent(session, m); err != nil {
return err return err
} }
return s.sessions.UpdateEventsStats(session.SessionID, 1, 0) return s.sessions.UpdateEventsStats(session.SessionID, 1, 0)
case *IOSNetworkCall: case *MobileNetworkCall:
return s.pg.InsertIOSNetworkCall(session, m) return s.pg.InsertMobileNetworkCall(session, m)
case *IOSCrash: case *MobileCrash:
if err := s.pg.InsertIOSCrash(session.SessionID, session.ProjectID, m); err != nil { if err := s.pg.InsertMobileCrash(session.SessionID, session.ProjectID, m); err != nil {
return err return err
} }
return s.sessions.UpdateIssuesStats(session.SessionID, 1, 1000) return s.sessions.UpdateIssuesStats(session.SessionID, 1, 1000)

View file

@ -18,7 +18,7 @@ import (
"time" "time"
) )
func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request) { func (e *Router) startMobileSessionHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now() startTime := time.Now()
if r.Body == nil { if r.Body == nil {
@ -137,20 +137,20 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request)
e.log.Warn(r.Context(), "failed to add mobile session to DB: %s", err) e.log.Warn(r.Context(), "failed to add mobile session to DB: %s", err)
} }
sessStart := &messages.IOSSessionStart{ sessStart := &messages.MobileSessionStart{
Timestamp: req.Timestamp, Timestamp: req.Timestamp,
ProjectID: uint64(p.ProjectID), ProjectID: uint64(p.ProjectID),
TrackerVersion: req.TrackerVersion, TrackerVersion: req.TrackerVersion,
RevID: req.RevID, RevID: req.RevID,
UserUUID: userUUID, UserUUID: userUUID,
UserOS: "IOS", UserOS: os,
UserOSVersion: req.UserOSVersion, UserOSVersion: req.UserOSVersion,
UserDevice: ios.MapIOSDevice(req.UserDevice), UserDevice: ios.MapIOSDevice(req.UserDevice),
UserDeviceType: ios.GetIOSDeviceType(req.UserDevice), UserDeviceType: deviceType,
UserCountry: geoInfo.Pack(), UserCountry: geoInfo.Pack(),
} }
if err := e.services.Producer.Produce(e.cfg.TopicRawIOS, tokenData.ID, sessStart.Encode()); err != nil { if err := e.services.Producer.Produce(e.cfg.TopicRawMobile, tokenData.ID, sessStart.Encode()); err != nil {
e.log.Error(r.Context(), "failed to send mobile sessionStart event to queue: %s", err) e.log.Error(r.Context(), "failed to send mobile sessionStart event to queue: %s", err)
} }
} }
@ -167,7 +167,7 @@ func (e *Router) startSessionHandlerIOS(w http.ResponseWriter, r *http.Request)
}, startTime, r.URL.Path, 0) }, startTime, r.URL.Path, 0)
} }
func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { func (e *Router) pushMobileMessagesHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now() startTime := time.Now()
sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r)
@ -184,10 +184,10 @@ func (e *Router) pushMessagesHandlerIOS(w http.ResponseWriter, r *http.Request)
r = r.WithContext(context.WithValue(r.Context(), "projectID", fmt.Sprintf("%d", info.ProjectID))) r = r.WithContext(context.WithValue(r.Context(), "projectID", fmt.Sprintf("%d", info.ProjectID)))
} }
e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawMobile)
} }
func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Request) { func (e *Router) pushMobileLateMessagesHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now() startTime := time.Now()
sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r)
if sessionData != nil { if sessionData != nil {
@ -199,10 +199,10 @@ func (e *Router) pushLateMessagesHandlerIOS(w http.ResponseWriter, r *http.Reque
return return
} }
// Check timestamps here? // Check timestamps here?
e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawIOS) e.pushMessages(w, r, sessionData.ID, e.cfg.TopicRawMobile)
} }
func (e *Router) imagesUploadHandlerIOS(w http.ResponseWriter, r *http.Request) { func (e *Router) mobileImagesUploadHandler(w http.ResponseWriter, r *http.Request) {
startTime := time.Now() startTime := time.Now()
sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r) sessionData, err := e.services.Tokenizer.ParseFromHTTPRequest(r)

View file

@ -115,10 +115,10 @@ func (e *Router) init() {
"/v1/web/i": e.pushMessagesHandlerWeb, "/v1/web/i": e.pushMessagesHandlerWeb,
"/v1/web/feature-flags": e.featureFlagsHandlerWeb, "/v1/web/feature-flags": e.featureFlagsHandlerWeb,
"/v1/web/images": e.imagesUploaderHandlerWeb, "/v1/web/images": e.imagesUploaderHandlerWeb,
"/v1/mobile/start": e.startSessionHandlerIOS, "/v1/mobile/start": e.startMobileSessionHandler,
"/v1/mobile/i": e.pushMessagesHandlerIOS, "/v1/mobile/i": e.pushMobileMessagesHandler,
"/v1/mobile/late": e.pushLateMessagesHandlerIOS, "/v1/mobile/late": e.pushMobileLateMessagesHandler,
"/v1/mobile/images": e.imagesUploadHandlerIOS, "/v1/mobile/images": e.mobileImagesUploadHandler,
"/v1/web/uxt/signals/test": e.sendUXTestSignal, "/v1/web/uxt/signals/test": e.sendUXTestSignal,
"/v1/web/uxt/signals/task": e.sendUXTaskSignal, "/v1/web/uxt/signals/task": e.sendUXTaskSignal,
} }

View file

@ -72,7 +72,7 @@ func (se *SessionEnder) UpdateSession(msg messages.Message) {
msgTimestamp = msg.Meta().Timestamp msgTimestamp = msg.Meta().Timestamp
localTimestamp = time.Now().UnixMilli() localTimestamp = time.Now().UnixMilli()
) )
if messages.IsIOSType(msg.TypeID()) { if messages.IsMobileType(msg.TypeID()) {
msgTimestamp = messages.GetTimestamp(msg) msgTimestamp = messages.GetTimestamp(msg)
} }
if batchTimestamp == 0 { if batchTimestamp == 0 {
@ -87,7 +87,7 @@ func (se *SessionEnder) UpdateSession(msg messages.Message) {
lastUpdate: localTimestamp, lastUpdate: localTimestamp,
lastUserTime: msgTimestamp, // last timestamp from user's machine lastUserTime: msgTimestamp, // last timestamp from user's machine
isEnded: false, isEnded: false,
isMobile: messages.IsIOSType(msg.TypeID()), isMobile: messages.IsMobileType(msg.TypeID()),
} }
ender.IncreaseActiveSessions() ender.IncreaseActiveSessions()
ender.IncreaseTotalSessions() ender.IncreaseTotalSessions()

View file

@ -27,7 +27,7 @@ func NewBuilder(sessionID uint64, events chan Message, handlers ...handlers.Mess
} }
func (b *builder) checkSessionEnd(message Message) { func (b *builder) checkSessionEnd(message Message) {
if _, isEnd := message.(*IOSSessionEnd); isEnd { if _, isEnd := message.(*MobileSessionEnd); isEnd {
b.ended = true b.ended = true
} }
if _, isEnd := message.(*SessionEnd); isEnd { if _, isEnd := message.(*SessionEnd); isEnd {

View file

@ -9,23 +9,23 @@ import (
"openreplay/backend/pkg/url" "openreplay/backend/pkg/url"
) )
func (conn *Conn) InsertIOSEvent(session *sessions.Session, e *messages.IOSEvent) error { func (conn *Conn) InsertMobileEvent(session *sessions.Session, e *messages.MobileEvent) error {
if err := conn.InsertCustomEvent(session.SessionID, e.Timestamp, truncSqIdx(e.Index), e.Name, e.Payload); err != nil { if err := conn.InsertCustomEvent(session.SessionID, e.Timestamp, truncSqIdx(e.Index), e.Name, e.Payload); err != nil {
return err return err
} }
conn.InsertAutocompleteValue(session.SessionID, session.ProjectID, "CUSTOM_IOS", e.Name) conn.InsertAutocompleteValue(session.SessionID, session.ProjectID, "CUSTOM_Mobile", e.Name)
return nil return nil
} }
func (conn *Conn) InsertIOSNetworkCall(sess *sessions.Session, e *messages.IOSNetworkCall) error { func (conn *Conn) InsertMobileNetworkCall(sess *sessions.Session, e *messages.MobileNetworkCall) error {
err := conn.InsertRequest(sess.SessionID, e.Timestamp, truncSqIdx(e.Index), e.URL, e.Duration, e.Status < 400) err := conn.InsertRequest(sess.SessionID, e.Timestamp, truncSqIdx(e.Index), e.URL, e.Duration, e.Status < 400)
if err == nil { if err == nil {
conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "REQUEST_IOS", url.DiscardURLQuery(e.URL)) conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "REQUEST_Mobile", url.DiscardURLQuery(e.URL))
} }
return err return err
} }
func (conn *Conn) InsertIOSClickEvent(sess *sessions.Session, clickEvent *messages.IOSClickEvent) error { func (conn *Conn) InsertMobileClickEvent(sess *sessions.Session, clickEvent *messages.MobileClickEvent) error {
if err := conn.Pool.Exec(` if err := conn.Pool.Exec(`
INSERT INTO events_ios.taps ( INSERT INTO events_ios.taps (
session_id, timestamp, seq_index, label session_id, timestamp, seq_index, label
@ -36,11 +36,11 @@ func (conn *Conn) InsertIOSClickEvent(sess *sessions.Session, clickEvent *messag
); err != nil { ); err != nil {
return err return err
} }
conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "CLICK_IOS", clickEvent.Label) conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "CLICK_Mobile", clickEvent.Label)
return nil return nil
} }
func (conn *Conn) InsertIOSSwipeEvent(sess *sessions.Session, swipeEvent *messages.IOSSwipeEvent) error { func (conn *Conn) InsertMobileSwipeEvent(sess *sessions.Session, swipeEvent *messages.MobileSwipeEvent) error {
if err := conn.Pool.Exec(` if err := conn.Pool.Exec(`
INSERT INTO events_ios.swipes ( INSERT INTO events_ios.swipes (
session_id, timestamp, seq_index, label, direction session_id, timestamp, seq_index, label, direction
@ -51,11 +51,11 @@ func (conn *Conn) InsertIOSSwipeEvent(sess *sessions.Session, swipeEvent *messag
); err != nil { ); err != nil {
return err return err
} }
conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "SWIPE_IOS", swipeEvent.Label) conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "SWIPE_Mobile", swipeEvent.Label)
return nil return nil
} }
func (conn *Conn) InsertIOSInputEvent(sess *sessions.Session, inputEvent *messages.IOSInputEvent) error { func (conn *Conn) InsertMobileInputEvent(sess *sessions.Session, inputEvent *messages.MobileInputEvent) error {
if err := conn.Pool.Exec(` if err := conn.Pool.Exec(`
INSERT INTO events_ios.inputs ( INSERT INTO events_ios.inputs (
session_id, timestamp, seq_index, label session_id, timestamp, seq_index, label
@ -66,12 +66,12 @@ func (conn *Conn) InsertIOSInputEvent(sess *sessions.Session, inputEvent *messag
); err != nil { ); err != nil {
return err return err
} }
conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "INPUT_IOS", inputEvent.Label) conn.InsertAutocompleteValue(sess.SessionID, sess.ProjectID, "INPUT_Mobile", inputEvent.Label)
return nil return nil
} }
func (conn *Conn) InsertIOSCrash(sessionID uint64, projectID uint32, crash *messages.IOSCrash) error { func (conn *Conn) InsertMobileCrash(sessionID uint64, projectID uint32, crash *messages.MobileCrash) error {
crashID := hashid.IOSCrashID(projectID, crash) crashID := hashid.MobileCrashID(projectID, crash)
if err := conn.Pool.Exec(` if err := conn.Pool.Exec(`
INSERT INTO public.crashes_ios ( INSERT INTO public.crashes_ios (
@ -96,8 +96,8 @@ func (conn *Conn) InsertIOSCrash(sessionID uint64, projectID uint32, crash *mess
return nil return nil
} }
func (conn *Conn) InsertIOSIssueEvent(sess *sessions.Session, e *messages.IOSIssueEvent) error { func (conn *Conn) InsertMobileIssueEvent(sess *sessions.Session, e *messages.MobileIssueEvent) error {
issueID := hashid.IOSIssueID(sess.ProjectID, e) issueID := hashid.MobileIssueID(sess.ProjectID, e)
payload := &e.Payload payload := &e.Payload
if *payload == "" || *payload == "{}" { if *payload == "" || *payload == "{}" {
payload = nil payload = nil
@ -113,7 +113,7 @@ func (conn *Conn) InsertIOSIssueEvent(sess *sessions.Session, e *messages.IOSIss
return nil return nil
} }
type IOSCrash struct { type MobileCrash struct {
Timestamp uint64 `json:"timestamp"` Timestamp uint64 `json:"timestamp"`
Name string `json:"name"` Name string `json:"name"`
Reason string `json:"reason"` Reason string `json:"reason"`

View file

@ -1,4 +1,4 @@
package ios package mobile
import ( import (
"openreplay/backend/pkg/handlers" "openreplay/backend/pkg/handlers"
@ -7,11 +7,11 @@ import (
/* /*
Handler name: AppNotResponding Handler name: AppNotResponding
Input events: IOSClickEvent, Input events: MobileClickEvent,
IOSInputEvent, MobileInputEvent,
IOSPerformanceEvent, MobilePerformanceEvent,
IOSSessionEnd MobileSessionEnd
Output event: IOSIssueEvent Output event: MobileIssueEvent
*/ */
const MIN_TIME_AFTER_LAST_HEARTBEAT = 60 * 1000 const MIN_TIME_AFTER_LAST_HEARTBEAT = 60 * 1000
@ -28,21 +28,21 @@ func (h *AppNotResponding) Handle(message Message, messageID uint64, timestamp u
h.lastTimestamp = timestamp h.lastTimestamp = timestamp
var event Message = nil var event Message = nil
switch m := message.(type) { switch m := message.(type) {
case *IOSClickEvent: case *MobileClickEvent:
event = h.build(m.Timestamp) event = h.build(m.Timestamp)
h.lastLabel = m.Label h.lastLabel = m.Label
h.lastHeartbeatTimestamp = m.Timestamp h.lastHeartbeatTimestamp = m.Timestamp
h.lastHeartbeatIndex = m.Index h.lastHeartbeatIndex = m.Index
case *IOSInputEvent: case *MobileInputEvent:
event = h.build(m.Timestamp) event = h.build(m.Timestamp)
h.lastLabel = m.Label h.lastLabel = m.Label
h.lastHeartbeatTimestamp = m.Timestamp h.lastHeartbeatTimestamp = m.Timestamp
h.lastHeartbeatIndex = m.Index h.lastHeartbeatIndex = m.Index
case *IOSPerformanceEvent: case *MobilePerformanceEvent:
event = h.build(m.Timestamp) event = h.build(m.Timestamp)
h.lastHeartbeatTimestamp = m.Timestamp h.lastHeartbeatTimestamp = m.Timestamp
h.lastHeartbeatIndex = m.Index h.lastHeartbeatIndex = m.Index
case *IOSSessionEnd: case *MobileSessionEnd:
event = h.build(m.Timestamp) event = h.build(m.Timestamp)
} }
return event return event
@ -54,7 +54,7 @@ func (h *AppNotResponding) Build() Message {
func (h *AppNotResponding) build(timestamp uint64) Message { func (h *AppNotResponding) build(timestamp uint64) Message {
if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp+MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp { if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp+MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp {
event := &IOSIssueEvent{ event := &MobileIssueEvent{
Type: "anr", Type: "anr",
ContextString: h.lastLabel, ContextString: h.lastLabel,
Timestamp: h.lastHeartbeatTimestamp, Timestamp: h.lastHeartbeatTimestamp,

View file

@ -1,4 +1,4 @@
package ios package mobile
import ( import (
"openreplay/backend/pkg/handlers" "openreplay/backend/pkg/handlers"
@ -7,8 +7,8 @@ import (
/* /*
Handler name: PerformanceAggregator Handler name: PerformanceAggregator
Input events: IOSPerformanceEvent, Input events: MobilePerformanceEvent,
IOSSessionEnd MobileSessionEnd
Output event: IssueEvent Output event: IssueEvent
*/ */
@ -28,7 +28,7 @@ func (va *valueAggregator) aggregate() uint64 {
type PerformanceAggregator struct { type PerformanceAggregator struct {
handlers.ReadyMessageStore handlers.ReadyMessageStore
pa *IOSPerformanceAggregated pa *MobilePerformanceAggregated
fps valueAggregator fps valueAggregator
cpu valueAggregator cpu valueAggregator
memory valueAggregator memory valueAggregator
@ -39,11 +39,11 @@ type PerformanceAggregator struct {
func (h *PerformanceAggregator) Handle(message Message, messageID uint64, timestamp uint64) Message { func (h *PerformanceAggregator) Handle(message Message, messageID uint64, timestamp uint64) Message {
h.lastTimestamp = timestamp h.lastTimestamp = timestamp
if h.pa == nil { if h.pa == nil {
h.pa = &IOSPerformanceAggregated{} // TODO: struct type in messages h.pa = &MobilePerformanceAggregated{} // TODO: struct type in messages
} }
var event Message = nil var event Message = nil
switch m := message.(type) { // TODO: All Timestamp messages switch m := message.(type) { // TODO: All Timestamp messages
case *IOSPerformanceEvent: case *MobilePerformanceEvent:
if h.pa.TimestampStart == 0 { if h.pa.TimestampStart == 0 {
h.pa.TimestampStart = m.Timestamp h.pa.TimestampStart = m.Timestamp
} }
@ -88,7 +88,7 @@ func (h *PerformanceAggregator) Handle(message Message, messageID uint64, timest
h.pa.MaxBattery = m.Value h.pa.MaxBattery = m.Value
} }
} }
case *IOSSessionEnd: case *MobileSessionEnd:
event = h.Build() event = h.Build()
} }
return event return event
@ -107,7 +107,7 @@ func (h *PerformanceAggregator) Build() Message {
event := h.pa event := h.pa
h.pa = &IOSPerformanceAggregated{} h.pa = &MobilePerformanceAggregated{}
for _, agg := range []valueAggregator{h.fps, h.cpu, h.memory, h.battery} { for _, agg := range []valueAggregator{h.fps, h.cpu, h.memory, h.battery} {
agg.sum = 0 agg.sum = 0
agg.count = 0 agg.count = 0

View file

@ -1,4 +1,4 @@
package ios package mobile
import ( import (
"encoding/json" "encoding/json"
@ -29,7 +29,7 @@ func (h *TapRageDetector) createPayload() string {
func (h *TapRageDetector) Build() Message { func (h *TapRageDetector) Build() Message {
if h.countsInARow >= MinTapsInARow { if h.countsInARow >= MinTapsInARow {
event := &IOSIssueEvent{ event := &MobileIssueEvent{
Type: "tap_rage", Type: "tap_rage",
ContextString: h.lastLabel, ContextString: h.lastLabel,
Timestamp: h.firstInARawTimestamp, Timestamp: h.firstInARawTimestamp,
@ -49,7 +49,7 @@ func (h *TapRageDetector) Build() Message {
func (h *TapRageDetector) Handle(message Message, timestamp uint64) Message { func (h *TapRageDetector) Handle(message Message, timestamp uint64) Message {
var event Message = nil var event Message = nil
switch m := message.(type) { switch m := message.(type) {
case *IOSClickEvent: case *MobileClickEvent:
if h.lastTimestamp+TapTimeDiff < m.Timestamp && h.lastLabel == m.Label { if h.lastTimestamp+TapTimeDiff < m.Timestamp && h.lastLabel == m.Label {
h.lastTimestamp = m.Timestamp h.lastTimestamp = m.Timestamp
h.countsInARow += 1 h.countsInARow += 1
@ -63,7 +63,7 @@ func (h *TapRageDetector) Handle(message Message, timestamp uint64) Message {
h.firstInARawSeqIndex = m.Index h.firstInARawSeqIndex = m.Index
h.countsInARow = 1 h.countsInARow = 1
} }
case *IOSSessionEnd: case *MobileSessionEnd:
event = h.Build() event = h.Build()
} }
return event return event

View file

@ -1,4 +1,4 @@
package ios package mobile
import ( import (
. "openreplay/backend/pkg/messages" . "openreplay/backend/pkg/messages"

View file

@ -16,14 +16,14 @@ func IssueID(projectID uint32, e *messages.IssueEvent) string {
return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil)) return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil))
} }
func IOSIssueID(projectID uint32, e *messages.IOSIssueEvent) string { func MobileIssueID(projectID uint32, e *messages.MobileIssueEvent) string {
hash := fnv.New128a() hash := fnv.New128a()
hash.Write([]byte(e.Type)) hash.Write([]byte(e.Type))
hash.Write([]byte(e.ContextString)) hash.Write([]byte(e.ContextString))
return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil)) return strconv.FormatUint(uint64(projectID), 16) + hex.EncodeToString(hash.Sum(nil))
} }
func IOSCrashID(projectID uint32, crash *messages.IOSCrash) string { func MobileCrashID(projectID uint32, crash *messages.MobileCrash) string {
hash := fnv.New128a() hash := fnv.New128a()
hash.Write([]byte(crash.Name)) hash.Write([]byte(crash.Name))
hash.Write([]byte(crash.Reason)) hash.Write([]byte(crash.Reason))

View file

@ -5,7 +5,7 @@ func IsReplayerType(id int) bool {
return 1 != id && 3 != id && 17 != id && 23 != id && 24 != id && 25 != id && 26 != id && 27 != id && 28 != id && 29 != id && 30 != id && 31 != id && 32 != id && 42 != id && 56 != id && 62 != id && 63 != id && 64 != id && 66 != id && 78 != id && 80 != id && 81 != id && 82 != id && 112 != id && 115 != id && 125 != id && 126 != id && 127 != id && 90 != id && 91 != id && 92 != id && 94 != id && 95 != id && 97 != id && 98 != id && 107 != id && 110 != id return 1 != id && 3 != id && 17 != id && 23 != id && 24 != id && 25 != id && 26 != id && 27 != id && 28 != id && 29 != id && 30 != id && 31 != id && 32 != id && 42 != id && 56 != id && 62 != id && 63 != id && 64 != id && 66 != id && 78 != id && 80 != id && 81 != id && 82 != id && 112 != id && 115 != id && 125 != id && 126 != id && 127 != id && 90 != id && 91 != id && 92 != id && 94 != id && 95 != id && 97 != id && 98 != id && 107 != id && 110 != id
} }
func IsIOSType(id int) bool { func IsMobileType(id int) bool {
return 90 == id || 91 == id || 92 == id || 93 == id || 94 == id || 95 == id || 96 == id || 97 == id || 98 == id || 100 == id || 101 == id || 102 == id || 103 == id || 104 == id || 105 == id || 106 == id || 107 == id || 110 == id || 111 == id return 90 == id || 91 == id || 92 == id || 93 == id || 94 == id || 95 == id || 96 == id || 97 == id || 98 == id || 100 == id || 101 == id || 102 == id || 103 == id || 104 == id || 105 == id || 106 == id || 107 == id || 110 == id || 111 == id
} }

View file

@ -4,58 +4,58 @@ package messages
func GetTimestamp(message Message) uint64 { func GetTimestamp(message Message) uint64 {
switch msg := message.(type) { switch msg := message.(type) {
case *IOSSessionStart: case *MobileSessionStart:
return msg.Timestamp return msg.Timestamp
case *IOSSessionEnd: case *MobileSessionEnd:
return msg.Timestamp return msg.Timestamp
case *IOSMetadata: case *MobileMetadata:
return msg.Timestamp return msg.Timestamp
case *IOSEvent: case *MobileEvent:
return msg.Timestamp return msg.Timestamp
case *IOSUserID: case *MobileUserID:
return msg.Timestamp return msg.Timestamp
case *IOSUserAnonymousID: case *MobileUserAnonymousID:
return msg.Timestamp return msg.Timestamp
case *IOSScreenChanges: case *MobileScreenChanges:
return msg.Timestamp return msg.Timestamp
case *IOSCrash: case *MobileCrash:
return msg.Timestamp return msg.Timestamp
case *IOSViewComponentEvent: case *MobileViewComponentEvent:
return msg.Timestamp return msg.Timestamp
case *IOSClickEvent: case *MobileClickEvent:
return msg.Timestamp return msg.Timestamp
case *IOSInputEvent: case *MobileInputEvent:
return msg.Timestamp return msg.Timestamp
case *IOSPerformanceEvent: case *MobilePerformanceEvent:
return msg.Timestamp return msg.Timestamp
case *IOSLog: case *MobileLog:
return msg.Timestamp return msg.Timestamp
case *IOSInternalError: case *MobileInternalError:
return msg.Timestamp return msg.Timestamp
case *IOSNetworkCall: case *MobileNetworkCall:
return msg.Timestamp return msg.Timestamp
case *IOSSwipeEvent: case *MobileSwipeEvent:
return msg.Timestamp return msg.Timestamp
case *IOSBatchMeta: case *MobileBatchMeta:
return msg.Timestamp return msg.Timestamp
case *IOSIssueEvent: case *MobileIssueEvent:
return msg.Timestamp return msg.Timestamp
} }

View file

@ -46,7 +46,7 @@ func NewMessageIterator(log logger.Logger, messageHandler MessageHandler, messag
iter.preFilter = map[int]struct{}{ iter.preFilter = map[int]struct{}{
MsgBatchMetadata: {}, MsgBatchMeta: {}, MsgTimestamp: {}, MsgBatchMetadata: {}, MsgBatchMeta: {}, MsgTimestamp: {},
MsgSessionStart: {}, MsgSessionEnd: {}, MsgSetPageLocation: {}, MsgSessionStart: {}, MsgSessionEnd: {}, MsgSetPageLocation: {},
MsgIOSBatchMeta: {}, MsgMobileBatchMeta: {},
} }
return iter return iter
} }
@ -115,8 +115,8 @@ func (i *messageIteratorImpl) Iterate(batchData []byte, batchInfo *BatchInfo) {
msg.Meta().SetMeta(i.messageInfo) msg.Meta().SetMeta(i.messageInfo)
// Update timestamp value for iOS message types // Update timestamp value for iOS message types
if IsIOSType(msgType) { if IsMobileType(msgType) {
msgTime := i.getIOSTimestamp(msg) msgTime := i.getMobileTimestamp(msg)
msg.Meta().Timestamp = msgTime msg.Meta().Timestamp = msgTime
} }
@ -125,7 +125,7 @@ func (i *messageIteratorImpl) Iterate(batchData []byte, batchInfo *BatchInfo) {
} }
} }
func (i *messageIteratorImpl) getIOSTimestamp(msg Message) uint64 { func (i *messageIteratorImpl) getMobileTimestamp(msg Message) uint64 {
return GetTimestamp(msg) return GetTimestamp(msg)
} }
@ -152,7 +152,7 @@ func (i *messageIteratorImpl) preprocessing(msg Message) error {
i.version = m.Version i.version = m.Version
i.batchInfo.version = m.Version i.batchInfo.version = m.Version
case *BatchMeta: // Is not required to be present in batch since IOS doesn't have it (though we might change it) case *BatchMeta: // Is not required to be present in batch since Mobile doesn't have it (though we might change it)
if i.messageInfo.Index > 1 { // Might be several 0-0 BatchMeta in a row without an error though if i.messageInfo.Index > 1 { // Might be several 0-0 BatchMeta in a row without an error though
return fmt.Errorf("batchMeta found at the end of the batch, info: %s", i.batchInfo.Info()) return fmt.Errorf("batchMeta found at the end of the batch, info: %s", i.batchInfo.Info())
} }
@ -194,14 +194,14 @@ func (i *messageIteratorImpl) preprocessing(msg Message) error {
// Save session page url in cache for using in next batches // Save session page url in cache for using in next batches
i.urls.Set(i.messageInfo.batch.sessionID, m.URL) i.urls.Set(i.messageInfo.batch.sessionID, m.URL)
case *IOSBatchMeta: case *MobileBatchMeta:
if i.messageInfo.Index > 1 { // Might be several 0-0 BatchMeta in a row without an error though if i.messageInfo.Index > 1 { // Might be several 0-0 BatchMeta in a row without an error though
return fmt.Errorf("batchMeta found at the end of the batch, info: %s", i.batchInfo.Info()) return fmt.Errorf("batchMeta found at the end of the batch, info: %s", i.batchInfo.Info())
} }
i.messageInfo.Index = m.FirstIndex i.messageInfo.Index = m.FirstIndex
i.messageInfo.Timestamp = m.Timestamp i.messageInfo.Timestamp = m.Timestamp
if m.Timestamp == 0 { if m.Timestamp == 0 {
i.zeroTsLog("IOSBatchMeta") i.zeroTsLog("MobileBatchMeta")
} }
} }
return nil return nil

View file

@ -91,25 +91,25 @@ const (
MsgIssueEvent = 125 MsgIssueEvent = 125
MsgSessionEnd = 126 MsgSessionEnd = 126
MsgSessionSearch = 127 MsgSessionSearch = 127
MsgIOSSessionStart = 90 MsgMobileSessionStart = 90
MsgIOSSessionEnd = 91 MsgMobileSessionEnd = 91
MsgIOSMetadata = 92 MsgMobileMetadata = 92
MsgIOSEvent = 93 MsgMobileEvent = 93
MsgIOSUserID = 94 MsgMobileUserID = 94
MsgIOSUserAnonymousID = 95 MsgMobileUserAnonymousID = 95
MsgIOSScreenChanges = 96 MsgMobileScreenChanges = 96
MsgIOSCrash = 97 MsgMobileCrash = 97
MsgIOSViewComponentEvent = 98 MsgMobileViewComponentEvent = 98
MsgIOSClickEvent = 100 MsgMobileClickEvent = 100
MsgIOSInputEvent = 101 MsgMobileInputEvent = 101
MsgIOSPerformanceEvent = 102 MsgMobilePerformanceEvent = 102
MsgIOSLog = 103 MsgMobileLog = 103
MsgIOSInternalError = 104 MsgMobileInternalError = 104
MsgIOSNetworkCall = 105 MsgMobileNetworkCall = 105
MsgIOSSwipeEvent = 106 MsgMobileSwipeEvent = 106
MsgIOSBatchMeta = 107 MsgMobileBatchMeta = 107
MsgIOSPerformanceAggregated = 110 MsgMobilePerformanceAggregated = 110
MsgIOSIssueEvent = 111 MsgMobileIssueEvent = 111
) )
type Timestamp struct { type Timestamp struct {
@ -2430,7 +2430,7 @@ func (msg *SessionSearch) TypeID() int {
return 127 return 127
} }
type IOSSessionStart struct { type MobileSessionStart struct {
message message
Timestamp uint64 Timestamp uint64
ProjectID uint64 ProjectID uint64
@ -2444,7 +2444,7 @@ type IOSSessionStart struct {
UserCountry string UserCountry string
} }
func (msg *IOSSessionStart) Encode() []byte { func (msg *MobileSessionStart) Encode() []byte {
buf := make([]byte, 101+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)) buf := make([]byte, 101+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry))
buf[0] = 90 buf[0] = 90
p := 1 p := 1
@ -2461,20 +2461,20 @@ func (msg *IOSSessionStart) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSSessionStart) Decode() Message { func (msg *MobileSessionStart) Decode() Message {
return msg return msg
} }
func (msg *IOSSessionStart) TypeID() int { func (msg *MobileSessionStart) TypeID() int {
return 90 return 90
} }
type IOSSessionEnd struct { type MobileSessionEnd struct {
message message
Timestamp uint64 Timestamp uint64
} }
func (msg *IOSSessionEnd) Encode() []byte { func (msg *MobileSessionEnd) Encode() []byte {
buf := make([]byte, 11) buf := make([]byte, 11)
buf[0] = 91 buf[0] = 91
p := 1 p := 1
@ -2482,15 +2482,15 @@ func (msg *IOSSessionEnd) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSSessionEnd) Decode() Message { func (msg *MobileSessionEnd) Decode() Message {
return msg return msg
} }
func (msg *IOSSessionEnd) TypeID() int { func (msg *MobileSessionEnd) TypeID() int {
return 91 return 91
} }
type IOSMetadata struct { type MobileMetadata struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2498,7 +2498,7 @@ type IOSMetadata struct {
Value string Value string
} }
func (msg *IOSMetadata) Encode() []byte { func (msg *MobileMetadata) Encode() []byte {
buf := make([]byte, 41+len(msg.Key)+len(msg.Value)) buf := make([]byte, 41+len(msg.Key)+len(msg.Value))
buf[0] = 92 buf[0] = 92
p := 1 p := 1
@ -2509,15 +2509,15 @@ func (msg *IOSMetadata) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSMetadata) Decode() Message { func (msg *MobileMetadata) Decode() Message {
return msg return msg
} }
func (msg *IOSMetadata) TypeID() int { func (msg *MobileMetadata) TypeID() int {
return 92 return 92
} }
type IOSEvent struct { type MobileEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2525,7 +2525,7 @@ type IOSEvent struct {
Payload string Payload string
} }
func (msg *IOSEvent) Encode() []byte { func (msg *MobileEvent) Encode() []byte {
buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) buf := make([]byte, 41+len(msg.Name)+len(msg.Payload))
buf[0] = 93 buf[0] = 93
p := 1 p := 1
@ -2536,22 +2536,22 @@ func (msg *IOSEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSEvent) Decode() Message { func (msg *MobileEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSEvent) TypeID() int { func (msg *MobileEvent) TypeID() int {
return 93 return 93
} }
type IOSUserID struct { type MobileUserID struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
ID string ID string
} }
func (msg *IOSUserID) Encode() []byte { func (msg *MobileUserID) Encode() []byte {
buf := make([]byte, 31+len(msg.ID)) buf := make([]byte, 31+len(msg.ID))
buf[0] = 94 buf[0] = 94
p := 1 p := 1
@ -2561,22 +2561,22 @@ func (msg *IOSUserID) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSUserID) Decode() Message { func (msg *MobileUserID) Decode() Message {
return msg return msg
} }
func (msg *IOSUserID) TypeID() int { func (msg *MobileUserID) TypeID() int {
return 94 return 94
} }
type IOSUserAnonymousID struct { type MobileUserAnonymousID struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
ID string ID string
} }
func (msg *IOSUserAnonymousID) Encode() []byte { func (msg *MobileUserAnonymousID) Encode() []byte {
buf := make([]byte, 31+len(msg.ID)) buf := make([]byte, 31+len(msg.ID))
buf[0] = 95 buf[0] = 95
p := 1 p := 1
@ -2586,15 +2586,15 @@ func (msg *IOSUserAnonymousID) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSUserAnonymousID) Decode() Message { func (msg *MobileUserAnonymousID) Decode() Message {
return msg return msg
} }
func (msg *IOSUserAnonymousID) TypeID() int { func (msg *MobileUserAnonymousID) TypeID() int {
return 95 return 95
} }
type IOSScreenChanges struct { type MobileScreenChanges struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2604,7 +2604,7 @@ type IOSScreenChanges struct {
Height uint64 Height uint64
} }
func (msg *IOSScreenChanges) Encode() []byte { func (msg *MobileScreenChanges) Encode() []byte {
buf := make([]byte, 61) buf := make([]byte, 61)
buf[0] = 96 buf[0] = 96
p := 1 p := 1
@ -2617,15 +2617,15 @@ func (msg *IOSScreenChanges) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSScreenChanges) Decode() Message { func (msg *MobileScreenChanges) Decode() Message {
return msg return msg
} }
func (msg *IOSScreenChanges) TypeID() int { func (msg *MobileScreenChanges) TypeID() int {
return 96 return 96
} }
type IOSCrash struct { type MobileCrash struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2634,7 +2634,7 @@ type IOSCrash struct {
Stacktrace string Stacktrace string
} }
func (msg *IOSCrash) Encode() []byte { func (msg *MobileCrash) Encode() []byte {
buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace)) buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace))
buf[0] = 97 buf[0] = 97
p := 1 p := 1
@ -2646,15 +2646,15 @@ func (msg *IOSCrash) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSCrash) Decode() Message { func (msg *MobileCrash) Decode() Message {
return msg return msg
} }
func (msg *IOSCrash) TypeID() int { func (msg *MobileCrash) TypeID() int {
return 97 return 97
} }
type IOSViewComponentEvent struct { type MobileViewComponentEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2663,7 +2663,7 @@ type IOSViewComponentEvent struct {
Visible bool Visible bool
} }
func (msg *IOSViewComponentEvent) Encode() []byte { func (msg *MobileViewComponentEvent) Encode() []byte {
buf := make([]byte, 51+len(msg.ScreenName)+len(msg.ViewName)) buf := make([]byte, 51+len(msg.ScreenName)+len(msg.ViewName))
buf[0] = 98 buf[0] = 98
p := 1 p := 1
@ -2675,15 +2675,15 @@ func (msg *IOSViewComponentEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSViewComponentEvent) Decode() Message { func (msg *MobileViewComponentEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSViewComponentEvent) TypeID() int { func (msg *MobileViewComponentEvent) TypeID() int {
return 98 return 98
} }
type IOSClickEvent struct { type MobileClickEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2692,7 +2692,7 @@ type IOSClickEvent struct {
Y uint64 Y uint64
} }
func (msg *IOSClickEvent) Encode() []byte { func (msg *MobileClickEvent) Encode() []byte {
buf := make([]byte, 51+len(msg.Label)) buf := make([]byte, 51+len(msg.Label))
buf[0] = 100 buf[0] = 100
p := 1 p := 1
@ -2704,15 +2704,15 @@ func (msg *IOSClickEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSClickEvent) Decode() Message { func (msg *MobileClickEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSClickEvent) TypeID() int { func (msg *MobileClickEvent) TypeID() int {
return 100 return 100
} }
type IOSInputEvent struct { type MobileInputEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2721,7 +2721,7 @@ type IOSInputEvent struct {
Label string Label string
} }
func (msg *IOSInputEvent) Encode() []byte { func (msg *MobileInputEvent) Encode() []byte {
buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) buf := make([]byte, 51+len(msg.Value)+len(msg.Label))
buf[0] = 101 buf[0] = 101
p := 1 p := 1
@ -2733,15 +2733,15 @@ func (msg *IOSInputEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSInputEvent) Decode() Message { func (msg *MobileInputEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSInputEvent) TypeID() int { func (msg *MobileInputEvent) TypeID() int {
return 101 return 101
} }
type IOSPerformanceEvent struct { type MobilePerformanceEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2749,7 +2749,7 @@ type IOSPerformanceEvent struct {
Value uint64 Value uint64
} }
func (msg *IOSPerformanceEvent) Encode() []byte { func (msg *MobilePerformanceEvent) Encode() []byte {
buf := make([]byte, 41+len(msg.Name)) buf := make([]byte, 41+len(msg.Name))
buf[0] = 102 buf[0] = 102
p := 1 p := 1
@ -2760,15 +2760,15 @@ func (msg *IOSPerformanceEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSPerformanceEvent) Decode() Message { func (msg *MobilePerformanceEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSPerformanceEvent) TypeID() int { func (msg *MobilePerformanceEvent) TypeID() int {
return 102 return 102
} }
type IOSLog struct { type MobileLog struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2776,7 +2776,7 @@ type IOSLog struct {
Content string Content string
} }
func (msg *IOSLog) Encode() []byte { func (msg *MobileLog) Encode() []byte {
buf := make([]byte, 41+len(msg.Severity)+len(msg.Content)) buf := make([]byte, 41+len(msg.Severity)+len(msg.Content))
buf[0] = 103 buf[0] = 103
p := 1 p := 1
@ -2787,22 +2787,22 @@ func (msg *IOSLog) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSLog) Decode() Message { func (msg *MobileLog) Decode() Message {
return msg return msg
} }
func (msg *IOSLog) TypeID() int { func (msg *MobileLog) TypeID() int {
return 103 return 103
} }
type IOSInternalError struct { type MobileInternalError struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
Content string Content string
} }
func (msg *IOSInternalError) Encode() []byte { func (msg *MobileInternalError) Encode() []byte {
buf := make([]byte, 31+len(msg.Content)) buf := make([]byte, 31+len(msg.Content))
buf[0] = 104 buf[0] = 104
p := 1 p := 1
@ -2812,15 +2812,15 @@ func (msg *IOSInternalError) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSInternalError) Decode() Message { func (msg *MobileInternalError) Decode() Message {
return msg return msg
} }
func (msg *IOSInternalError) TypeID() int { func (msg *MobileInternalError) TypeID() int {
return 104 return 104
} }
type IOSNetworkCall struct { type MobileNetworkCall struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2833,7 +2833,7 @@ type IOSNetworkCall struct {
Duration uint64 Duration uint64
} }
func (msg *IOSNetworkCall) Encode() []byte { func (msg *MobileNetworkCall) Encode() []byte {
buf := make([]byte, 91+len(msg.Type)+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) buf := make([]byte, 91+len(msg.Type)+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response))
buf[0] = 105 buf[0] = 105
p := 1 p := 1
@ -2849,15 +2849,15 @@ func (msg *IOSNetworkCall) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSNetworkCall) Decode() Message { func (msg *MobileNetworkCall) Decode() Message {
return msg return msg
} }
func (msg *IOSNetworkCall) TypeID() int { func (msg *MobileNetworkCall) TypeID() int {
return 105 return 105
} }
type IOSSwipeEvent struct { type MobileSwipeEvent struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
@ -2867,7 +2867,7 @@ type IOSSwipeEvent struct {
Direction string Direction string
} }
func (msg *IOSSwipeEvent) Encode() []byte { func (msg *MobileSwipeEvent) Encode() []byte {
buf := make([]byte, 61+len(msg.Label)+len(msg.Direction)) buf := make([]byte, 61+len(msg.Label)+len(msg.Direction))
buf[0] = 106 buf[0] = 106
p := 1 p := 1
@ -2880,22 +2880,22 @@ func (msg *IOSSwipeEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSSwipeEvent) Decode() Message { func (msg *MobileSwipeEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSSwipeEvent) TypeID() int { func (msg *MobileSwipeEvent) TypeID() int {
return 106 return 106
} }
type IOSBatchMeta struct { type MobileBatchMeta struct {
message message
Timestamp uint64 Timestamp uint64
Length uint64 Length uint64
FirstIndex uint64 FirstIndex uint64
} }
func (msg *IOSBatchMeta) Encode() []byte { func (msg *MobileBatchMeta) Encode() []byte {
buf := make([]byte, 31) buf := make([]byte, 31)
buf[0] = 107 buf[0] = 107
p := 1 p := 1
@ -2905,15 +2905,15 @@ func (msg *IOSBatchMeta) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSBatchMeta) Decode() Message { func (msg *MobileBatchMeta) Decode() Message {
return msg return msg
} }
func (msg *IOSBatchMeta) TypeID() int { func (msg *MobileBatchMeta) TypeID() int {
return 107 return 107
} }
type IOSPerformanceAggregated struct { type MobilePerformanceAggregated struct {
message message
TimestampStart uint64 TimestampStart uint64
TimestampEnd uint64 TimestampEnd uint64
@ -2931,7 +2931,7 @@ type IOSPerformanceAggregated struct {
MaxBattery uint64 MaxBattery uint64
} }
func (msg *IOSPerformanceAggregated) Encode() []byte { func (msg *MobilePerformanceAggregated) Encode() []byte {
buf := make([]byte, 141) buf := make([]byte, 141)
buf[0] = 110 buf[0] = 110
p := 1 p := 1
@ -2952,15 +2952,15 @@ func (msg *IOSPerformanceAggregated) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSPerformanceAggregated) Decode() Message { func (msg *MobilePerformanceAggregated) Decode() Message {
return msg return msg
} }
func (msg *IOSPerformanceAggregated) TypeID() int { func (msg *MobilePerformanceAggregated) TypeID() int {
return 110 return 110
} }
type IOSIssueEvent struct { type MobileIssueEvent struct {
message message
Timestamp uint64 Timestamp uint64
Type string Type string
@ -2969,7 +2969,7 @@ type IOSIssueEvent struct {
Payload string Payload string
} }
func (msg *IOSIssueEvent) Encode() []byte { func (msg *MobileIssueEvent) Encode() []byte {
buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload))
buf[0] = 111 buf[0] = 111
p := 1 p := 1
@ -2981,10 +2981,10 @@ func (msg *IOSIssueEvent) Encode() []byte {
return buf[:p] return buf[:p]
} }
func (msg *IOSIssueEvent) Decode() Message { func (msg *MobileIssueEvent) Decode() Message {
return msg return msg
} }
func (msg *IOSIssueEvent) TypeID() int { func (msg *MobileIssueEvent) TypeID() int {
return 111 return 111
} }

View file

@ -1479,9 +1479,9 @@ func DecodeSessionSearch(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSSessionStart(reader BytesReader) (Message, error) { func DecodeMobileSessionStart(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSSessionStart{} msg := &MobileSessionStart{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1515,18 +1515,18 @@ func DecodeIOSSessionStart(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSSessionEnd(reader BytesReader) (Message, error) { func DecodeMobileSessionEnd(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSSessionEnd{} msg := &MobileSessionEnd{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
return msg, err return msg, err
} }
func DecodeIOSMetadata(reader BytesReader) (Message, error) { func DecodeMobileMetadata(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSMetadata{} msg := &MobileMetadata{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1542,9 +1542,9 @@ func DecodeIOSMetadata(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSEvent(reader BytesReader) (Message, error) { func DecodeMobileEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSEvent{} msg := &MobileEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1560,9 +1560,9 @@ func DecodeIOSEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSUserID(reader BytesReader) (Message, error) { func DecodeMobileUserID(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSUserID{} msg := &MobileUserID{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1575,9 +1575,9 @@ func DecodeIOSUserID(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSUserAnonymousID(reader BytesReader) (Message, error) { func DecodeMobileUserAnonymousID(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSUserAnonymousID{} msg := &MobileUserAnonymousID{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1590,9 +1590,9 @@ func DecodeIOSUserAnonymousID(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSScreenChanges(reader BytesReader) (Message, error) { func DecodeMobileScreenChanges(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSScreenChanges{} msg := &MobileScreenChanges{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1614,9 +1614,9 @@ func DecodeIOSScreenChanges(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSCrash(reader BytesReader) (Message, error) { func DecodeMobileCrash(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSCrash{} msg := &MobileCrash{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1635,9 +1635,9 @@ func DecodeIOSCrash(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSViewComponentEvent(reader BytesReader) (Message, error) { func DecodeMobileViewComponentEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSViewComponentEvent{} msg := &MobileViewComponentEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1656,9 +1656,9 @@ func DecodeIOSViewComponentEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSClickEvent(reader BytesReader) (Message, error) { func DecodeMobileClickEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSClickEvent{} msg := &MobileClickEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1677,9 +1677,9 @@ func DecodeIOSClickEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSInputEvent(reader BytesReader) (Message, error) { func DecodeMobileInputEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSInputEvent{} msg := &MobileInputEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1698,9 +1698,9 @@ func DecodeIOSInputEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSPerformanceEvent(reader BytesReader) (Message, error) { func DecodeMobilePerformanceEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSPerformanceEvent{} msg := &MobilePerformanceEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1716,9 +1716,9 @@ func DecodeIOSPerformanceEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSLog(reader BytesReader) (Message, error) { func DecodeMobileLog(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSLog{} msg := &MobileLog{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1734,9 +1734,9 @@ func DecodeIOSLog(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSInternalError(reader BytesReader) (Message, error) { func DecodeMobileInternalError(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSInternalError{} msg := &MobileInternalError{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1749,9 +1749,9 @@ func DecodeIOSInternalError(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSNetworkCall(reader BytesReader) (Message, error) { func DecodeMobileNetworkCall(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSNetworkCall{} msg := &MobileNetworkCall{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1782,9 +1782,9 @@ func DecodeIOSNetworkCall(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSSwipeEvent(reader BytesReader) (Message, error) { func DecodeMobileSwipeEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSSwipeEvent{} msg := &MobileSwipeEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1806,9 +1806,9 @@ func DecodeIOSSwipeEvent(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSBatchMeta(reader BytesReader) (Message, error) { func DecodeMobileBatchMeta(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSBatchMeta{} msg := &MobileBatchMeta{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1821,9 +1821,9 @@ func DecodeIOSBatchMeta(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSPerformanceAggregated(reader BytesReader) (Message, error) { func DecodeMobilePerformanceAggregated(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSPerformanceAggregated{} msg := &MobilePerformanceAggregated{}
if msg.TimestampStart, err = reader.ReadUint(); err != nil { if msg.TimestampStart, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -1869,9 +1869,9 @@ func DecodeIOSPerformanceAggregated(reader BytesReader) (Message, error) {
return msg, err return msg, err
} }
func DecodeIOSIssueEvent(reader BytesReader) (Message, error) { func DecodeMobileIssueEvent(reader BytesReader) (Message, error) {
var err error = nil var err error = nil
msg := &IOSIssueEvent{} msg := &MobileIssueEvent{}
if msg.Timestamp, err = reader.ReadUint(); err != nil { if msg.Timestamp, err = reader.ReadUint(); err != nil {
return nil, err return nil, err
} }
@ -2071,43 +2071,43 @@ func ReadMessage(t uint64, reader BytesReader) (Message, error) {
case 127: case 127:
return DecodeSessionSearch(reader) return DecodeSessionSearch(reader)
case 90: case 90:
return DecodeIOSSessionStart(reader) return DecodeMobileSessionStart(reader)
case 91: case 91:
return DecodeIOSSessionEnd(reader) return DecodeMobileSessionEnd(reader)
case 92: case 92:
return DecodeIOSMetadata(reader) return DecodeMobileMetadata(reader)
case 93: case 93:
return DecodeIOSEvent(reader) return DecodeMobileEvent(reader)
case 94: case 94:
return DecodeIOSUserID(reader) return DecodeMobileUserID(reader)
case 95: case 95:
return DecodeIOSUserAnonymousID(reader) return DecodeMobileUserAnonymousID(reader)
case 96: case 96:
return DecodeIOSScreenChanges(reader) return DecodeMobileScreenChanges(reader)
case 97: case 97:
return DecodeIOSCrash(reader) return DecodeMobileCrash(reader)
case 98: case 98:
return DecodeIOSViewComponentEvent(reader) return DecodeMobileViewComponentEvent(reader)
case 100: case 100:
return DecodeIOSClickEvent(reader) return DecodeMobileClickEvent(reader)
case 101: case 101:
return DecodeIOSInputEvent(reader) return DecodeMobileInputEvent(reader)
case 102: case 102:
return DecodeIOSPerformanceEvent(reader) return DecodeMobilePerformanceEvent(reader)
case 103: case 103:
return DecodeIOSLog(reader) return DecodeMobileLog(reader)
case 104: case 104:
return DecodeIOSInternalError(reader) return DecodeMobileInternalError(reader)
case 105: case 105:
return DecodeIOSNetworkCall(reader) return DecodeMobileNetworkCall(reader)
case 106: case 106:
return DecodeIOSSwipeEvent(reader) return DecodeMobileSwipeEvent(reader)
case 107: case 107:
return DecodeIOSBatchMeta(reader) return DecodeMobileBatchMeta(reader)
case 110: case 110:
return DecodeIOSPerformanceAggregated(reader) return DecodeMobilePerformanceAggregated(reader)
case 111: case 111:
return DecodeIOSIssueEvent(reader) return DecodeMobileIssueEvent(reader)
} }
return nil, fmt.Errorf("unknown message code: %v", t) return nil, fmt.Errorf("unknown message code: %v", t)
} }

View file

@ -76,19 +76,19 @@ func (s *saverImpl) handleExtraMessage(msg messages.Message) error {
return s.ch.InsertMouseThrashing(session, m) return s.ch.InsertMouseThrashing(session, m)
// Mobile messages // Mobile messages
case *messages.IOSSessionEnd: case *messages.MobileSessionEnd:
return s.ch.InsertMobileSession(session) return s.ch.InsertMobileSession(session)
case *messages.IOSEvent: case *messages.MobileEvent:
return s.ch.InsertMobileCustom(session, m) return s.ch.InsertMobileCustom(session, m)
case *messages.IOSClickEvent: case *messages.MobileClickEvent:
return s.ch.InsertMobileClick(session, m) return s.ch.InsertMobileClick(session, m)
case *messages.IOSSwipeEvent: case *messages.MobileSwipeEvent:
return s.ch.InsertMobileSwipe(session, m) return s.ch.InsertMobileSwipe(session, m)
case *messages.IOSInputEvent: case *messages.MobileInputEvent:
return s.ch.InsertMobileInput(session, m) return s.ch.InsertMobileInput(session, m)
case *messages.IOSNetworkCall: case *messages.MobileNetworkCall:
return s.ch.InsertMobileRequest(session, m, session.SaveRequestPayload) return s.ch.InsertMobileRequest(session, m, session.SaveRequestPayload)
case *messages.IOSCrash: case *messages.MobileCrash:
return s.ch.InsertMobileCrash(session, m) return s.ch.InsertMobileCrash(session, m)
} }
return nil return nil

View file

@ -14,7 +14,7 @@ func (e *Router) getConditions(w http.ResponseWriter, r *http.Request) {
// Check authorization // Check authorization
_, err := e.services.Tokenizer.ParseFromHTTPRequest(r) _, err := e.services.Tokenizer.ParseFromHTTPRequest(r)
if err != nil { if err != nil {
ResponseWithError(w, http.StatusUnauthorized, err, startTime, r.URL.Path, bodySize) e.ResponseWithError(r.Context(), w, http.StatusUnauthorized, err, startTime, r.URL.Path, bodySize)
return return
} }
@ -23,15 +23,15 @@ func (e *Router) getConditions(w http.ResponseWriter, r *http.Request) {
projID := vars["project"] projID := vars["project"]
projectID, err := strconv.Atoi(projID) projectID, err := strconv.Atoi(projID)
if err != nil { if err != nil {
ResponseWithError(w, http.StatusBadRequest, err, startTime, r.URL.Path, bodySize) e.ResponseWithError(r.Context(), w, http.StatusBadRequest, err, startTime, r.URL.Path, bodySize)
return return
} }
// Get task info // Get task info
info, err := e.services.Conditions.Get(uint32(projectID)) info, err := e.services.Conditions.Get(uint32(projectID))
if err != nil { if err != nil {
ResponseWithError(w, http.StatusInternalServerError, err, startTime, r.URL.Path, bodySize) e.ResponseWithError(r.Context(), w, http.StatusInternalServerError, err, startTime, r.URL.Path, bodySize)
return return
} }
ResponseWithJSON(w, info, startTime, r.URL.Path, bodySize) e.ResponseWithJSON(r.Context(), w, info, startTime, r.URL.Path, bodySize)
} }

View file

@ -38,12 +38,12 @@ type Connector interface {
InsertMouseThrashing(session *sessions.Session, msg *messages.MouseThrashing) error InsertMouseThrashing(session *sessions.Session, msg *messages.MouseThrashing) error
// Mobile // Mobile
InsertMobileSession(session *sessions.Session) error InsertMobileSession(session *sessions.Session) error
InsertMobileCustom(session *sessions.Session, msg *messages.IOSEvent) error InsertMobileCustom(session *sessions.Session, msg *messages.MobileEvent) error
InsertMobileClick(session *sessions.Session, msg *messages.IOSClickEvent) error InsertMobileClick(session *sessions.Session, msg *messages.MobileClickEvent) error
InsertMobileSwipe(session *sessions.Session, msg *messages.IOSSwipeEvent) error InsertMobileSwipe(session *sessions.Session, msg *messages.MobileSwipeEvent) error
InsertMobileInput(session *sessions.Session, msg *messages.IOSInputEvent) error InsertMobileInput(session *sessions.Session, msg *messages.MobileInputEvent) error
InsertMobileRequest(session *sessions.Session, msg *messages.IOSNetworkCall, savePayload bool) error InsertMobileRequest(session *sessions.Session, msg *messages.MobileNetworkCall, savePayload bool) error
InsertMobileCrash(session *sessions.Session, msg *messages.IOSCrash) error InsertMobileCrash(session *sessions.Session, msg *messages.MobileCrash) error
} }
type task struct { type task struct {
@ -582,7 +582,7 @@ func (c *connectorImpl) InsertMobileSession(session *sessions.Session) error {
return nil return nil
} }
func (c *connectorImpl) InsertMobileCustom(session *sessions.Session, msg *messages.IOSEvent) error { func (c *connectorImpl) InsertMobileCustom(session *sessions.Session, msg *messages.MobileEvent) error {
if err := c.batches["ios_custom"].Append( if err := c.batches["ios_custom"].Append(
session.SessionID, session.SessionID,
uint16(session.ProjectID), uint16(session.ProjectID),
@ -598,7 +598,7 @@ func (c *connectorImpl) InsertMobileCustom(session *sessions.Session, msg *messa
return nil return nil
} }
func (c *connectorImpl) InsertMobileClick(session *sessions.Session, msg *messages.IOSClickEvent) error { func (c *connectorImpl) InsertMobileClick(session *sessions.Session, msg *messages.MobileClickEvent) error {
if msg.Label == "" { if msg.Label == "" {
return nil return nil
} }
@ -616,7 +616,7 @@ func (c *connectorImpl) InsertMobileClick(session *sessions.Session, msg *messag
return nil return nil
} }
func (c *connectorImpl) InsertMobileSwipe(session *sessions.Session, msg *messages.IOSSwipeEvent) error { func (c *connectorImpl) InsertMobileSwipe(session *sessions.Session, msg *messages.MobileSwipeEvent) error {
if msg.Label == "" { if msg.Label == "" {
return nil return nil
} }
@ -635,7 +635,7 @@ func (c *connectorImpl) InsertMobileSwipe(session *sessions.Session, msg *messag
return nil return nil
} }
func (c *connectorImpl) InsertMobileInput(session *sessions.Session, msg *messages.IOSInputEvent) error { func (c *connectorImpl) InsertMobileInput(session *sessions.Session, msg *messages.MobileInputEvent) error {
if msg.Label == "" { if msg.Label == "" {
return nil return nil
} }
@ -653,7 +653,7 @@ func (c *connectorImpl) InsertMobileInput(session *sessions.Session, msg *messag
return nil return nil
} }
func (c *connectorImpl) InsertMobileRequest(session *sessions.Session, msg *messages.IOSNetworkCall, savePayload bool) error { func (c *connectorImpl) InsertMobileRequest(session *sessions.Session, msg *messages.MobileNetworkCall, savePayload bool) error {
urlMethod := url.EnsureMethod(msg.Method) urlMethod := url.EnsureMethod(msg.Method)
if urlMethod == "" { if urlMethod == "" {
return fmt.Errorf("can't parse http method. sess: %d, method: %s", session.SessionID, msg.Method) return fmt.Errorf("can't parse http method. sess: %d, method: %s", session.SessionID, msg.Method)
@ -683,7 +683,7 @@ func (c *connectorImpl) InsertMobileRequest(session *sessions.Session, msg *mess
return nil return nil
} }
func (c *connectorImpl) InsertMobileCrash(session *sessions.Session, msg *messages.IOSCrash) error { func (c *connectorImpl) InsertMobileCrash(session *sessions.Session, msg *messages.MobileCrash) error {
if err := c.batches["ios_crashes"].Append( if err := c.batches["ios_crashes"].Append(
session.SessionID, session.SessionID,
uint16(session.ProjectID), uint16(session.ProjectID),

View file

@ -1,4 +1,4 @@
message 90, 'IOSSessionStart', :replayer => false do message 90, 'MobileSessionStart', :replayer => false do
uint 'Timestamp' uint 'Timestamp'
uint 'ProjectID' uint 'ProjectID'
string 'TrackerVersion' string 'TrackerVersion'
@ -11,37 +11,37 @@ message 90, 'IOSSessionStart', :replayer => false do
string 'UserCountry' string 'UserCountry'
end end
message 91, 'IOSSessionEnd' do message 91, 'MobileSessionEnd' do
uint 'Timestamp' uint 'Timestamp'
end end
message 92, 'IOSMetadata' do message 92, 'MobileMetadata' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Key' string 'Key'
string 'Value' string 'Value'
end end
message 93, 'IOSEvent', :replayer => true do message 93, 'MobileEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Name' string 'Name'
string 'Payload' string 'Payload'
end end
message 94, 'IOSUserID' do message 94, 'MobileUserID' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'ID' string 'ID'
end end
message 95, 'IOSUserAnonymousID' do message 95, 'MobileUserAnonymousID' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'ID' string 'ID'
end end
message 96, 'IOSScreenChanges', :replayer => true do message 96, 'MobileScreenChanges', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
uint 'X' uint 'X'
@ -50,7 +50,7 @@ message 96, 'IOSScreenChanges', :replayer => true do
uint 'Height' uint 'Height'
end end
message 97, 'IOSCrash' do message 97, 'MobileCrash' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Name' string 'Name'
@ -58,7 +58,7 @@ message 97, 'IOSCrash' do
string 'Stacktrace' string 'Stacktrace'
end end
message 98, 'IOSViewComponentEvent' do message 98, 'MobileViewComponentEvent' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'ScreenName' string 'ScreenName'
@ -66,7 +66,7 @@ message 98, 'IOSViewComponentEvent' do
boolean 'Visible' boolean 'Visible'
end end
message 100, 'IOSClickEvent', :replayer => true do message 100, 'MobileClickEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Label' string 'Label'
@ -74,7 +74,7 @@ message 100, 'IOSClickEvent', :replayer => true do
uint 'Y' uint 'Y'
end end
message 101, 'IOSInputEvent', :replayer => true do message 101, 'MobileInputEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Value' string 'Value'
@ -97,27 +97,27 @@ Name/Value may be :
"memoryUsage": Used memory in bytes "memoryUsage": Used memory in bytes
"fps": Frames per second "fps": Frames per second
=end =end
message 102, 'IOSPerformanceEvent', :replayer => true do message 102, 'MobilePerformanceEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Name' string 'Name'
uint 'Value' uint 'Value'
end end
message 103, 'IOSLog', :replayer => true do message 103, 'MobileLog', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Severity' # Possible values ("info", "error") string 'Severity' # Possible values ("info", "error")
string 'Content' string 'Content'
end end
message 104, 'IOSInternalError', :replayer => true do message 104, 'MobileInternalError', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Content' string 'Content'
end end
message 105, 'IOSNetworkCall', :replayer => true do message 105, 'MobileNetworkCall', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Type' string 'Type'
@ -129,7 +129,7 @@ message 105, 'IOSNetworkCall', :replayer => true do
uint 'Duration' uint 'Duration'
end end
message 106, 'IOSSwipeEvent', :replayer => true do message 106, 'MobileSwipeEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
string 'Label' string 'Label'
@ -138,13 +138,13 @@ message 106, 'IOSSwipeEvent', :replayer => true do
string 'Direction' string 'Direction'
end end
message 107, 'IOSBatchMeta' do message 107, 'MobileBatchMeta' do
uint 'Timestamp' uint 'Timestamp'
uint 'Length' uint 'Length'
uint 'FirstIndex' uint 'FirstIndex'
end end
message 110, 'IOSPerformanceAggregated', :swift => false do message 110, 'MobilePerformanceAggregated', :swift => false do
uint 'TimestampStart' uint 'TimestampStart'
uint 'TimestampEnd' uint 'TimestampEnd'
uint 'MinFPS' uint 'MinFPS'
@ -161,7 +161,7 @@ message 110, 'IOSPerformanceAggregated', :swift => false do
uint 'MaxBattery' uint 'MaxBattery'
end end
message 111, 'IOSIssueEvent', :replayer => true do message 111, 'MobileIssueEvent', :replayer => true do
uint 'Timestamp' uint 'Timestamp'
string 'Type' string 'Type'
string 'ContextString' string 'ContextString'

View file

@ -139,7 +139,7 @@ end
require './messages.rb' require './messages.rb'
$context = :ios $context = :ios
require './ios_messages.rb' require './mobile_messages.rb'
Dir["templates/*.erb"].each do |tpl| Dir["templates/*.erb"].each do |tpl|
e = ERB.new(File.read(tpl)) e = ERB.new(File.read(tpl))

View file

@ -5,7 +5,7 @@ func IsReplayerType(id int) bool {
return <%= $messages.select { |msg| msg.replayer == false }.map{ |msg| "#{msg.id} != id" }.join(' && ') %> return <%= $messages.select { |msg| msg.replayer == false }.map{ |msg| "#{msg.id} != id" }.join(' && ') %>
} }
func IsIOSType(id int) bool { func IsMobileType(id int) bool {
return <%= $messages.select { |msg| msg.context == :ios }.map{ |msg| "#{msg.id} == id"}.join(' || ') %> return <%= $messages.select { |msg| msg.context == :ios }.map{ |msg| "#{msg.id} == id"}.join(' || ') %>
} }