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:
parent
a316c90472
commit
2bf9298836
33 changed files with 327 additions and 327 deletions
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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"`
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ios
|
package mobile
|
||||||
|
|
||||||
import (
|
import (
|
||||||
. "openreplay/backend/pkg/messages"
|
. "openreplay/backend/pkg/messages"
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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),
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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(' || ') %>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue