diff --git a/backend/Dockerfile.bundle b/backend/Dockerfile.bundle index efbcb2684..79ef57db5 100644 --- a/backend/Dockerfile.bundle +++ b/backend/Dockerfile.bundle @@ -1,4 +1,4 @@ -FROM golang:1.13-alpine3.10 AS prepare +FROM golang:1.18-alpine3.15 AS prepare RUN apk add --no-cache git openssh openssl-dev pkgconf gcc g++ make libc-dev bash @@ -13,7 +13,7 @@ FROM prepare AS build COPY pkg pkg COPY services services -RUN for name in alerts assets db ender http integrations sink storage;do CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/$name -tags musl openreplay/backend/services/$name; done +RUN for name in assets db ender http integrations sink storage;do CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bin/$name -tags musl openreplay/backend/services/$name; done FROM alpine @@ -26,8 +26,9 @@ ENV TZ=UTC \ MAXMINDDB_FILE=/root/geoip.mmdb \ UAPARSER_FILE=/root/regexes.yaml \ HTTP_PORT=80 \ - BEACON_SIZE_LIMIT=1000000 \ + BEACON_SIZE_LIMIT=7000000 \ KAFKA_USE_SSL=true \ + KAFKA_MAX_POLL_INTERVAL_MS=400000 \ REDIS_STREAMS_MAX_LEN=3000 \ TOPIC_RAW_WEB=raw \ TOPIC_RAW_IOS=raw-ios \ @@ -42,10 +43,10 @@ ENV TZ=UTC \ AWS_REGION_WEB=eu-central-1 \ AWS_REGION_IOS=eu-west-1 \ AWS_REGION_ASSETS=eu-central-1 \ - CACHE_ASSETS=false \ + CACHE_ASSETS=true \ ASSETS_SIZE_LIMIT=6291456 \ - FS_CLEAN_HRS=12 - + FS_CLEAN_HRS=12 \ + LOG_QUEUE_STATS_INTERVAL_SEC=60 RUN mkdir $FS_DIR #VOLUME [ $FS_DIR ] # Uncomment in case of using Bind mount. diff --git a/backend/pkg/dev/profiling/profiling.go b/backend/pkg/dev/profiling/profiling.go index 139aaeac6..c05c47549 100644 --- a/backend/pkg/dev/profiling/profiling.go +++ b/backend/pkg/dev/profiling/profiling.go @@ -1,24 +1,23 @@ package profiling import ( - "log" - "net/http" - "github.com/gorilla/mux" - _ "net/http/pprof" -) + "github.com/gorilla/mux" + "log" + "net/http" + _ "net/http/pprof" +) func Profile() { go func() { - router := mux.NewRouter() - router.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux) - log.Println("Starting profiler...") - if err := http.ListenAndServe(":6060", router); err != nil { - panic(err) - } + router := mux.NewRouter() + router.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux) + log.Println("Starting profiler...") + if err := http.ListenAndServe(":6060", router); err != nil { + panic(err) + } }() } - /* docker run -p 6060:6060 -e REQUIRED_ENV=http://value -e ANOTHER_ENV=anothervalue workername @@ -34,4 +33,4 @@ go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 THEN https://www.speedscope.app/ -*/ \ No newline at end of file +*/ diff --git a/backend/pkg/env/aws.go b/backend/pkg/env/aws.go index 6573c8551..cb7445797 100644 --- a/backend/pkg/env/aws.go +++ b/backend/pkg/env/aws.go @@ -19,7 +19,7 @@ func AWSSessionOnRegion(region string) *_session.Session { if AWS_ENDPOINT != "" { config.Endpoint = aws.String(AWS_ENDPOINT) config.DisableSSL = aws.Bool(true) - config.S3ForcePathStyle = aws.Bool(true) + config.S3ForcePathStyle = aws.Bool(true) } aws_session, err := _session.NewSession(config) if err != nil { diff --git a/backend/pkg/env/vars.go b/backend/pkg/env/vars.go index 33ae9da3c..eb88b3c6b 100644 --- a/backend/pkg/env/vars.go +++ b/backend/pkg/env/vars.go @@ -22,7 +22,7 @@ func Uint64(key string) uint64 { v := String(key) n, err := strconv.ParseUint(v, 10, 64) if err != nil { - log.Fatalln(key + " has a wrong value. ", err) + log.Fatalln(key+" has a wrong value. ", err) } return n } @@ -31,12 +31,13 @@ func Uint16(key string) uint16 { v := String(key) n, err := strconv.ParseUint(v, 10, 16) if err != nil { - log.Fatalln(key + " has a wrong value. ", err) + log.Fatalln(key+" has a wrong value. ", err) } return uint16(n) } const MAX_INT = uint64(^uint(0) >> 1) + func Int(key string) int { val := Uint64(key) if val > MAX_INT { @@ -54,4 +55,4 @@ func Bool(key string) bool { return true } return false -} \ No newline at end of file +} diff --git a/backend/pkg/env/worker-id.go b/backend/pkg/env/worker-id.go index 47fdffc43..22d077832 100644 --- a/backend/pkg/env/worker-id.go +++ b/backend/pkg/env/worker-id.go @@ -5,9 +5,9 @@ import ( ) func hashHostname(hostname string) uint16 { - var h uint16 ; + var h uint16 for i, b := range hostname { - h += uint16(i+1)*uint16(b) + h += uint16(i+1) * uint16(b) } return h } diff --git a/backend/pkg/flakeid/flakeid.go b/backend/pkg/flakeid/flakeid.go index 13e064896..c54b990a5 100644 --- a/backend/pkg/flakeid/flakeid.go +++ b/backend/pkg/flakeid/flakeid.go @@ -8,7 +8,7 @@ const ( TIMESTAMP_MAX = 1< m.Timestamp || prt.mints == 0 { - prt.mints = m.Timestamp - } - prt.lastts = m.Timestamp - prt.lastID = m.ID - prt.count += 1 + if prt.maxts < m.Timestamp { + prt.maxts = m.Timestamp + } + if prt.mints > m.Timestamp || prt.mints == 0 { + prt.mints = m.Timestamp + } + prt.lastts = m.Timestamp + prt.lastID = m.ID + prt.count += 1 - - select { - case <-qs.tick: - qs.LogThenReset() - default: - } + select { + case <-qs.tick: + qs.LogThenReset() + default: + } } - func (qs *queueStats) LogThenReset() { - s := "Queue Statistics: " - for i, p := range qs.prts { - s = fmt.Sprintf("%v | %v:: lastTS %v, lastID %v, count %v, maxTS %v, minTS %v", - s, i, p.lastts, p.lastID, p.count, p.maxts, p.mints) - } - log.Println(s) - // reset - qs.prts = make(map[int32]*partitionStats) + s := "Queue Statistics: " + for i, p := range qs.prts { + s = fmt.Sprintf("%v | %v:: lastTS %v, lastID %v, count %v, maxTS %v, minTS %v", + s, i, p.lastts, p.lastID, p.count, p.maxts, p.mints) + } + log.Println(s) + // reset + qs.prts = make(map[int32]*partitionStats) } - // TODO: list of message id to log (mb filter function with callback in messages/utils.go or something) func LogMessage(s string, sessionID uint64, msg messages.Message, m *types.Meta) { - log.Printf("%v | SessionID: %v, Queue info: %v, Message: %v", s, sessionID, m, msg) + log.Printf("%v | SessionID: %v, Queue info: %v, Message: %v", s, sessionID, m, msg) } - diff --git a/backend/pkg/messages/facade.go b/backend/pkg/messages/facade.go index 91d896d19..5c024f2f6 100644 --- a/backend/pkg/messages/facade.go +++ b/backend/pkg/messages/facade.go @@ -36,6 +36,6 @@ func Encode(msg Message) []byte { // } func GetMessageTypeID(b []byte) (uint64, error) { - reader := bytes.NewReader(b) + reader := bytes.NewReader(b) return ReadUint(reader) } diff --git a/backend/pkg/messages/filters.go b/backend/pkg/messages/filters.go index f43f40142..44b2c7959 100644 --- a/backend/pkg/messages/filters.go +++ b/backend/pkg/messages/filters.go @@ -1,9 +1,8 @@ // Auto-generated, do not edit package messages - func IsReplayerType(id uint64) bool { - return 0 == id || 2 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 69 == id || 70 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id + return 0 == id || 2 == id || 4 == id || 5 == id || 6 == id || 7 == id || 8 == id || 9 == id || 10 == id || 11 == id || 12 == id || 13 == id || 14 == id || 15 == id || 16 == id || 18 == id || 19 == id || 20 == id || 22 == id || 37 == id || 38 == id || 39 == id || 40 == id || 41 == id || 44 == id || 45 == id || 46 == id || 47 == id || 48 == id || 49 == id || 54 == id || 55 == id || 59 == id || 69 == id || 70 == id || 90 == id || 93 == id || 96 == id || 100 == id || 102 == id || 103 == id || 105 == id } func IsIOSType(id uint64) bool { diff --git a/backend/pkg/messages/get-timestamp.go b/backend/pkg/messages/get-timestamp.go index c8e42f756..8b44764a7 100644 --- a/backend/pkg/messages/get-timestamp.go +++ b/backend/pkg/messages/get-timestamp.go @@ -1,65 +1,63 @@ // Auto-generated, do not edit package messages - func GetTimestamp(message Message) uint64 { - switch msg := message.(type) { - - case *IOSBatchMeta: - return msg.Timestamp - - case *IOSSessionStart: - return msg.Timestamp - - case *IOSSessionEnd: - return msg.Timestamp - - case *IOSMetadata: - return msg.Timestamp - - case *IOSCustomEvent: - return msg.Timestamp - - case *IOSUserID: - return msg.Timestamp - - case *IOSUserAnonymousID: - return msg.Timestamp - - case *IOSScreenChanges: - return msg.Timestamp - - case *IOSCrash: - return msg.Timestamp - - case *IOSScreenEnter: - return msg.Timestamp - - case *IOSScreenLeave: - return msg.Timestamp - - case *IOSClickEvent: - return msg.Timestamp - - case *IOSInputEvent: - return msg.Timestamp - - case *IOSPerformanceEvent: - return msg.Timestamp - - case *IOSLog: - return msg.Timestamp - - case *IOSInternalError: - return msg.Timestamp - - case *IOSNetworkCall: - return msg.Timestamp - - case *IOSIssueEvent: - return msg.Timestamp - - } - return uint64(message.Meta().Timestamp) -} + switch msg := message.(type) { + case *IOSBatchMeta: + return msg.Timestamp + + case *IOSSessionStart: + return msg.Timestamp + + case *IOSSessionEnd: + return msg.Timestamp + + case *IOSMetadata: + return msg.Timestamp + + case *IOSCustomEvent: + return msg.Timestamp + + case *IOSUserID: + return msg.Timestamp + + case *IOSUserAnonymousID: + return msg.Timestamp + + case *IOSScreenChanges: + return msg.Timestamp + + case *IOSCrash: + return msg.Timestamp + + case *IOSScreenEnter: + return msg.Timestamp + + case *IOSScreenLeave: + return msg.Timestamp + + case *IOSClickEvent: + return msg.Timestamp + + case *IOSInputEvent: + return msg.Timestamp + + case *IOSPerformanceEvent: + return msg.Timestamp + + case *IOSLog: + return msg.Timestamp + + case *IOSInternalError: + return msg.Timestamp + + case *IOSNetworkCall: + return msg.Timestamp + + case *IOSIssueEvent: + return msg.Timestamp + + } + return uint64(message.Meta().Timestamp) +} diff --git a/backend/pkg/messages/legacy-message-transform.go b/backend/pkg/messages/legacy-message-transform.go index 637f8d443..031c4444a 100644 --- a/backend/pkg/messages/legacy-message-transform.go +++ b/backend/pkg/messages/legacy-message-transform.go @@ -1,21 +1,20 @@ package messages - func transformDepricated(msg Message) Message { switch m := msg.(type) { case *MouseClickDepricated: - meta := m.Meta() + meta := m.Meta() meta.TypeID = 33 return &MouseClick{ - meta: meta, - ID: m.ID, + meta: meta, + ID: m.ID, HesitationTime: m.HesitationTime, - Label: m.Label, + Label: m.Label, // Selector: '', } // case *FetchDepricated: // return &Fetch { - // Method: m.Method, + // Method: m.Method, // URL: m.URL, // Request: m.Request, // Response: m.Response, @@ -25,8 +24,6 @@ func transformDepricated(msg Message) Message { // // Headers: '' // } default: - return msg + return msg } } - - diff --git a/backend/pkg/messages/messages.go b/backend/pkg/messages/messages.go index 38a1f61ba..e9aec5788 100644 --- a/backend/pkg/messages/messages.go +++ b/backend/pkg/messages/messages.go @@ -2,1693 +2,1693 @@ package messages type Message interface { - Encode() []byte - Meta() *meta + Encode() []byte + Meta() *meta } type meta struct { - Timestamp int64 - Index uint64 - TypeID uint64 + Timestamp int64 + Index uint64 + TypeID uint64 } // Might also implement Encode() here (?) func (m *meta) Meta() *meta { - return m + return m } type BatchMeta struct { - *meta - PageNo uint64 - FirstIndex uint64 - Timestamp int64 + *meta + PageNo uint64 + FirstIndex uint64 + Timestamp int64 } func (msg *BatchMeta) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 80 - p := 1 - p = WriteUint(msg.PageNo, buf, p) - p = WriteUint(msg.FirstIndex, buf, p) - p = WriteInt(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 80 + p := 1 + p = WriteUint(msg.PageNo, buf, p) + p = WriteUint(msg.FirstIndex, buf, p) + p = WriteInt(msg.Timestamp, buf, p) + return buf[:p] } type Timestamp struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *Timestamp) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 0 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 0 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SessionStart struct { - *meta - Timestamp uint64 - ProjectID uint64 - TrackerVersion string - RevID string - UserUUID string - UserAgent string - UserOS string - UserOSVersion string - UserBrowser string - UserBrowserVersion string - UserDevice string - UserDeviceType string - UserDeviceMemorySize uint64 - UserDeviceHeapSize uint64 - UserCountry string - UserID string + *meta + Timestamp uint64 + ProjectID uint64 + TrackerVersion string + RevID string + UserUUID string + UserAgent string + UserOS string + UserOSVersion string + UserBrowser string + UserBrowserVersion string + UserDevice string + UserDeviceType string + UserDeviceMemorySize uint64 + UserDeviceHeapSize uint64 + UserCountry string + UserID string } func (msg *SessionStart) Encode() []byte { - buf := make([]byte, 161+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserAgent)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserBrowser)+len(msg.UserBrowserVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)+len(msg.UserID)) - buf[0] = 1 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.ProjectID, buf, p) - p = WriteString(msg.TrackerVersion, buf, p) - p = WriteString(msg.RevID, buf, p) - p = WriteString(msg.UserUUID, buf, p) - p = WriteString(msg.UserAgent, buf, p) - p = WriteString(msg.UserOS, buf, p) - p = WriteString(msg.UserOSVersion, buf, p) - p = WriteString(msg.UserBrowser, buf, p) - p = WriteString(msg.UserBrowserVersion, buf, p) - p = WriteString(msg.UserDevice, buf, p) - p = WriteString(msg.UserDeviceType, buf, p) - p = WriteUint(msg.UserDeviceMemorySize, buf, p) - p = WriteUint(msg.UserDeviceHeapSize, buf, p) - p = WriteString(msg.UserCountry, buf, p) - p = WriteString(msg.UserID, buf, p) - return buf[:p] + buf := make([]byte, 161+len(msg.TrackerVersion)+len(msg.RevID)+len(msg.UserUUID)+len(msg.UserAgent)+len(msg.UserOS)+len(msg.UserOSVersion)+len(msg.UserBrowser)+len(msg.UserBrowserVersion)+len(msg.UserDevice)+len(msg.UserDeviceType)+len(msg.UserCountry)+len(msg.UserID)) + buf[0] = 1 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.ProjectID, buf, p) + p = WriteString(msg.TrackerVersion, buf, p) + p = WriteString(msg.RevID, buf, p) + p = WriteString(msg.UserUUID, buf, p) + p = WriteString(msg.UserAgent, buf, p) + p = WriteString(msg.UserOS, buf, p) + p = WriteString(msg.UserOSVersion, buf, p) + p = WriteString(msg.UserBrowser, buf, p) + p = WriteString(msg.UserBrowserVersion, buf, p) + p = WriteString(msg.UserDevice, buf, p) + p = WriteString(msg.UserDeviceType, buf, p) + p = WriteUint(msg.UserDeviceMemorySize, buf, p) + p = WriteUint(msg.UserDeviceHeapSize, buf, p) + p = WriteString(msg.UserCountry, buf, p) + p = WriteString(msg.UserID, buf, p) + return buf[:p] } type SessionDisconnect struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *SessionDisconnect) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 2 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 2 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SessionEnd struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *SessionEnd) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 3 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 3 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type SetPageLocation struct { - *meta - URL string - Referrer string - NavigationStart uint64 + *meta + URL string + Referrer string + NavigationStart uint64 } func (msg *SetPageLocation) Encode() []byte { - buf := make([]byte, 31+len(msg.URL)+len(msg.Referrer)) - buf[0] = 4 - p := 1 - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Referrer, buf, p) - p = WriteUint(msg.NavigationStart, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.URL)+len(msg.Referrer)) + buf[0] = 4 + p := 1 + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Referrer, buf, p) + p = WriteUint(msg.NavigationStart, buf, p) + return buf[:p] } type SetViewportSize struct { - *meta - Width uint64 - Height uint64 + *meta + Width uint64 + Height uint64 } func (msg *SetViewportSize) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 5 - p := 1 - p = WriteUint(msg.Width, buf, p) - p = WriteUint(msg.Height, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 5 + p := 1 + p = WriteUint(msg.Width, buf, p) + p = WriteUint(msg.Height, buf, p) + return buf[:p] } type SetViewportScroll struct { - *meta - X int64 - Y int64 + *meta + X int64 + Y int64 } func (msg *SetViewportScroll) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 6 - p := 1 - p = WriteInt(msg.X, buf, p) - p = WriteInt(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 6 + p := 1 + p = WriteInt(msg.X, buf, p) + p = WriteInt(msg.Y, buf, p) + return buf[:p] } type CreateDocument struct { - *meta + *meta } func (msg *CreateDocument) Encode() []byte { - buf := make([]byte, 1) - buf[0] = 7 - p := 1 + buf := make([]byte, 1) + buf[0] = 7 + p := 1 - return buf[:p] + return buf[:p] } type CreateElementNode struct { - *meta - ID uint64 - ParentID uint64 - index uint64 - Tag string - SVG bool + *meta + ID uint64 + ParentID uint64 + index uint64 + Tag string + SVG bool } func (msg *CreateElementNode) Encode() []byte { - buf := make([]byte, 51+len(msg.Tag)) - buf[0] = 8 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.index, buf, p) - p = WriteString(msg.Tag, buf, p) - p = WriteBoolean(msg.SVG, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Tag)) + buf[0] = 8 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.index, buf, p) + p = WriteString(msg.Tag, buf, p) + p = WriteBoolean(msg.SVG, buf, p) + return buf[:p] } type CreateTextNode struct { - *meta - ID uint64 - ParentID uint64 - Index uint64 + *meta + ID uint64 + ParentID uint64 + Index uint64 } func (msg *CreateTextNode) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 9 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 9 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type MoveNode struct { - *meta - ID uint64 - ParentID uint64 - Index uint64 + *meta + ID uint64 + ParentID uint64 + Index uint64 } func (msg *MoveNode) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 10 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.ParentID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 10 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.ParentID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type RemoveNode struct { - *meta - ID uint64 + *meta + ID uint64 } func (msg *RemoveNode) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 11 - p := 1 - p = WriteUint(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 11 + p := 1 + p = WriteUint(msg.ID, buf, p) + return buf[:p] } type SetNodeAttribute struct { - *meta - ID uint64 - Name string - Value string + *meta + ID uint64 + Name string + Value string } func (msg *SetNodeAttribute) Encode() []byte { - buf := make([]byte, 31+len(msg.Name)+len(msg.Value)) - buf[0] = 12 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Name)+len(msg.Value)) + buf[0] = 12 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type RemoveNodeAttribute struct { - *meta - ID uint64 - Name string + *meta + ID uint64 + Name string } func (msg *RemoveNodeAttribute) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)) - buf[0] = 13 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)) + buf[0] = 13 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + return buf[:p] } type SetNodeData struct { - *meta - ID uint64 - Data string + *meta + ID uint64 + Data string } func (msg *SetNodeData) Encode() []byte { - buf := make([]byte, 21+len(msg.Data)) - buf[0] = 14 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Data)) + buf[0] = 14 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + return buf[:p] } type SetCSSData struct { - *meta - ID uint64 - Data string + *meta + ID uint64 + Data string } func (msg *SetCSSData) Encode() []byte { - buf := make([]byte, 21+len(msg.Data)) - buf[0] = 15 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Data)) + buf[0] = 15 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + return buf[:p] } type SetNodeScroll struct { - *meta - ID uint64 - X int64 - Y int64 + *meta + ID uint64 + X int64 + Y int64 } func (msg *SetNodeScroll) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 16 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteInt(msg.X, buf, p) - p = WriteInt(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 16 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteInt(msg.X, buf, p) + p = WriteInt(msg.Y, buf, p) + return buf[:p] } type SetInputTarget struct { - *meta - ID uint64 - Label string + *meta + ID uint64 + Label string } func (msg *SetInputTarget) Encode() []byte { - buf := make([]byte, 21+len(msg.Label)) - buf[0] = 17 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Label)) + buf[0] = 17 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type SetInputValue struct { - *meta - ID uint64 - Value string - Mask int64 + *meta + ID uint64 + Value string + Mask int64 } func (msg *SetInputValue) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 18 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteInt(msg.Mask, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 18 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteInt(msg.Mask, buf, p) + return buf[:p] } type SetInputChecked struct { - *meta - ID uint64 - Checked bool + *meta + ID uint64 + Checked bool } func (msg *SetInputChecked) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 19 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteBoolean(msg.Checked, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 19 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteBoolean(msg.Checked, buf, p) + return buf[:p] } type MouseMove struct { - *meta - X uint64 - Y uint64 + *meta + X uint64 + Y uint64 } func (msg *MouseMove) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 20 - p := 1 - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 20 + p := 1 + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + return buf[:p] } type MouseClickDepricated struct { - *meta - ID uint64 - HesitationTime uint64 - Label string + *meta + ID uint64 + HesitationTime uint64 + Label string } func (msg *MouseClickDepricated) Encode() []byte { - buf := make([]byte, 31+len(msg.Label)) - buf[0] = 21 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Label)) + buf[0] = 21 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type ConsoleLog struct { - *meta - Level string - Value string + *meta + Level string + Value string } func (msg *ConsoleLog) Encode() []byte { - buf := make([]byte, 21+len(msg.Level)+len(msg.Value)) - buf[0] = 22 - p := 1 - p = WriteString(msg.Level, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Level)+len(msg.Value)) + buf[0] = 22 + p := 1 + p = WriteString(msg.Level, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type PageLoadTiming struct { - *meta - RequestStart uint64 - ResponseStart uint64 - ResponseEnd uint64 - DomContentLoadedEventStart uint64 - DomContentLoadedEventEnd uint64 - LoadEventStart uint64 - LoadEventEnd uint64 - FirstPaint uint64 - FirstContentfulPaint uint64 + *meta + RequestStart uint64 + ResponseStart uint64 + ResponseEnd uint64 + DomContentLoadedEventStart uint64 + DomContentLoadedEventEnd uint64 + LoadEventStart uint64 + LoadEventEnd uint64 + FirstPaint uint64 + FirstContentfulPaint uint64 } func (msg *PageLoadTiming) Encode() []byte { - buf := make([]byte, 91) - buf[0] = 23 - p := 1 - p = WriteUint(msg.RequestStart, buf, p) - p = WriteUint(msg.ResponseStart, buf, p) - p = WriteUint(msg.ResponseEnd, buf, p) - p = WriteUint(msg.DomContentLoadedEventStart, buf, p) - p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) - p = WriteUint(msg.LoadEventStart, buf, p) - p = WriteUint(msg.LoadEventEnd, buf, p) - p = WriteUint(msg.FirstPaint, buf, p) - p = WriteUint(msg.FirstContentfulPaint, buf, p) - return buf[:p] + buf := make([]byte, 91) + buf[0] = 23 + p := 1 + p = WriteUint(msg.RequestStart, buf, p) + p = WriteUint(msg.ResponseStart, buf, p) + p = WriteUint(msg.ResponseEnd, buf, p) + p = WriteUint(msg.DomContentLoadedEventStart, buf, p) + p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) + p = WriteUint(msg.LoadEventStart, buf, p) + p = WriteUint(msg.LoadEventEnd, buf, p) + p = WriteUint(msg.FirstPaint, buf, p) + p = WriteUint(msg.FirstContentfulPaint, buf, p) + return buf[:p] } type PageRenderTiming struct { - *meta - SpeedIndex uint64 - VisuallyComplete uint64 - TimeToInteractive uint64 + *meta + SpeedIndex uint64 + VisuallyComplete uint64 + TimeToInteractive uint64 } func (msg *PageRenderTiming) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 24 - p := 1 - p = WriteUint(msg.SpeedIndex, buf, p) - p = WriteUint(msg.VisuallyComplete, buf, p) - p = WriteUint(msg.TimeToInteractive, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 24 + p := 1 + p = WriteUint(msg.SpeedIndex, buf, p) + p = WriteUint(msg.VisuallyComplete, buf, p) + p = WriteUint(msg.TimeToInteractive, buf, p) + return buf[:p] } type JSException struct { - *meta - Name string - Message string - Payload string + *meta + Name string + Message string + Payload string } func (msg *JSException) Encode() []byte { - buf := make([]byte, 31+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 25 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 25 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type RawErrorEvent struct { - *meta - Timestamp uint64 - Source string - Name string - Message string - Payload string + *meta + Timestamp uint64 + Source string + Name string + Message string + Payload string } func (msg *RawErrorEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 26 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Source, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 26 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Source, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type RawCustomEvent struct { - *meta - Name string - Payload string + *meta + Name string + Payload string } func (msg *RawCustomEvent) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) - buf[0] = 27 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) + buf[0] = 27 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type UserID struct { - *meta - ID string + *meta + ID string } func (msg *UserID) Encode() []byte { - buf := make([]byte, 11+len(msg.ID)) - buf[0] = 28 - p := 1 - p = WriteString(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.ID)) + buf[0] = 28 + p := 1 + p = WriteString(msg.ID, buf, p) + return buf[:p] } type UserAnonymousID struct { - *meta - ID string + *meta + ID string } func (msg *UserAnonymousID) Encode() []byte { - buf := make([]byte, 11+len(msg.ID)) - buf[0] = 29 - p := 1 - p = WriteString(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.ID)) + buf[0] = 29 + p := 1 + p = WriteString(msg.ID, buf, p) + return buf[:p] } type Metadata struct { - *meta - Key string - Value string + *meta + Key string + Value string } func (msg *Metadata) Encode() []byte { - buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) - buf[0] = 30 - p := 1 - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) + buf[0] = 30 + p := 1 + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type PageEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - URL string - Referrer string - Loaded bool - RequestStart uint64 - ResponseStart uint64 - ResponseEnd uint64 - DomContentLoadedEventStart uint64 - DomContentLoadedEventEnd uint64 - LoadEventStart uint64 - LoadEventEnd uint64 - FirstPaint uint64 - FirstContentfulPaint uint64 - SpeedIndex uint64 - VisuallyComplete uint64 - TimeToInteractive uint64 + *meta + MessageID uint64 + Timestamp uint64 + URL string + Referrer string + Loaded bool + RequestStart uint64 + ResponseStart uint64 + ResponseEnd uint64 + DomContentLoadedEventStart uint64 + DomContentLoadedEventEnd uint64 + LoadEventStart uint64 + LoadEventEnd uint64 + FirstPaint uint64 + FirstContentfulPaint uint64 + SpeedIndex uint64 + VisuallyComplete uint64 + TimeToInteractive uint64 } func (msg *PageEvent) Encode() []byte { - buf := make([]byte, 171+len(msg.URL)+len(msg.Referrer)) - buf[0] = 31 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Referrer, buf, p) - p = WriteBoolean(msg.Loaded, buf, p) - p = WriteUint(msg.RequestStart, buf, p) - p = WriteUint(msg.ResponseStart, buf, p) - p = WriteUint(msg.ResponseEnd, buf, p) - p = WriteUint(msg.DomContentLoadedEventStart, buf, p) - p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) - p = WriteUint(msg.LoadEventStart, buf, p) - p = WriteUint(msg.LoadEventEnd, buf, p) - p = WriteUint(msg.FirstPaint, buf, p) - p = WriteUint(msg.FirstContentfulPaint, buf, p) - p = WriteUint(msg.SpeedIndex, buf, p) - p = WriteUint(msg.VisuallyComplete, buf, p) - p = WriteUint(msg.TimeToInteractive, buf, p) - return buf[:p] + buf := make([]byte, 171+len(msg.URL)+len(msg.Referrer)) + buf[0] = 31 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Referrer, buf, p) + p = WriteBoolean(msg.Loaded, buf, p) + p = WriteUint(msg.RequestStart, buf, p) + p = WriteUint(msg.ResponseStart, buf, p) + p = WriteUint(msg.ResponseEnd, buf, p) + p = WriteUint(msg.DomContentLoadedEventStart, buf, p) + p = WriteUint(msg.DomContentLoadedEventEnd, buf, p) + p = WriteUint(msg.LoadEventStart, buf, p) + p = WriteUint(msg.LoadEventEnd, buf, p) + p = WriteUint(msg.FirstPaint, buf, p) + p = WriteUint(msg.FirstContentfulPaint, buf, p) + p = WriteUint(msg.SpeedIndex, buf, p) + p = WriteUint(msg.VisuallyComplete, buf, p) + p = WriteUint(msg.TimeToInteractive, buf, p) + return buf[:p] } type InputEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Value string - ValueMasked bool - Label string + *meta + MessageID uint64 + Timestamp uint64 + Value string + ValueMasked bool + Label string } func (msg *InputEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) - buf[0] = 32 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteBoolean(msg.ValueMasked, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) + buf[0] = 32 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteBoolean(msg.ValueMasked, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type ClickEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - HesitationTime uint64 - Label string - Selector string + *meta + MessageID uint64 + Timestamp uint64 + HesitationTime uint64 + Label string + Selector string } func (msg *ClickEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Label)+len(msg.Selector)) - buf[0] = 33 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteString(msg.Selector, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Label)+len(msg.Selector)) + buf[0] = 33 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteString(msg.Selector, buf, p) + return buf[:p] } type ErrorEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Source string - Name string - Message string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Source string + Name string + Message string + Payload string } func (msg *ErrorEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) - buf[0] = 34 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Source, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Message, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.Source)+len(msg.Name)+len(msg.Message)+len(msg.Payload)) + buf[0] = 34 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Source, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Message, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type ResourceEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Duration uint64 - TTFB uint64 - HeaderSize uint64 - EncodedBodySize uint64 - DecodedBodySize uint64 - URL string - Type string - Success bool - Method string - Status uint64 + *meta + MessageID uint64 + Timestamp uint64 + Duration uint64 + TTFB uint64 + HeaderSize uint64 + EncodedBodySize uint64 + DecodedBodySize uint64 + URL string + Type string + Success bool + Method string + Status uint64 } func (msg *ResourceEvent) Encode() []byte { - buf := make([]byte, 121+len(msg.URL)+len(msg.Type)+len(msg.Method)) - buf[0] = 35 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.TTFB, buf, p) - p = WriteUint(msg.HeaderSize, buf, p) - p = WriteUint(msg.EncodedBodySize, buf, p) - p = WriteUint(msg.DecodedBodySize, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteBoolean(msg.Success, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteUint(msg.Status, buf, p) - return buf[:p] + buf := make([]byte, 121+len(msg.URL)+len(msg.Type)+len(msg.Method)) + buf[0] = 35 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.TTFB, buf, p) + p = WriteUint(msg.HeaderSize, buf, p) + p = WriteUint(msg.EncodedBodySize, buf, p) + p = WriteUint(msg.DecodedBodySize, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteBoolean(msg.Success, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteUint(msg.Status, buf, p) + return buf[:p] } type CustomEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Name string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Name string + Payload string } func (msg *CustomEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) - buf[0] = 36 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) + buf[0] = 36 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type CSSInsertRule struct { - *meta - ID uint64 - Rule string - Index uint64 + *meta + ID uint64 + Rule string + Index uint64 } func (msg *CSSInsertRule) Encode() []byte { - buf := make([]byte, 31+len(msg.Rule)) - buf[0] = 37 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Rule, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Rule)) + buf[0] = 37 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Rule, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type CSSDeleteRule struct { - *meta - ID uint64 - Index uint64 + *meta + ID uint64 + Index uint64 } func (msg *CSSDeleteRule) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 38 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.Index, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 38 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.Index, buf, p) + return buf[:p] } type Fetch struct { - *meta - Method string - URL string - Request string - Response string - Status uint64 - Timestamp uint64 - Duration uint64 + *meta + Method string + URL string + Request string + Response string + Status uint64 + Timestamp uint64 + Duration uint64 } func (msg *Fetch) Encode() []byte { - buf := make([]byte, 71+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) - buf[0] = 39 - p := 1 - p = WriteString(msg.Method, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Request, buf, p) - p = WriteString(msg.Response, buf, p) - p = WriteUint(msg.Status, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 71+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) + buf[0] = 39 + p := 1 + p = WriteString(msg.Method, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Request, buf, p) + p = WriteString(msg.Response, buf, p) + p = WriteUint(msg.Status, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type Profiler struct { - *meta - Name string - Duration uint64 - Args string - Result string + *meta + Name string + Duration uint64 + Args string + Result string } func (msg *Profiler) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Args)+len(msg.Result)) - buf[0] = 40 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteString(msg.Args, buf, p) - p = WriteString(msg.Result, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Args)+len(msg.Result)) + buf[0] = 40 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteString(msg.Args, buf, p) + p = WriteString(msg.Result, buf, p) + return buf[:p] } type OTable struct { - *meta - Key string - Value string + *meta + Key string + Value string } func (msg *OTable) Encode() []byte { - buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) - buf[0] = 41 - p := 1 - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Key)+len(msg.Value)) + buf[0] = 41 + p := 1 + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type StateAction struct { - *meta - Type string + *meta + Type string } func (msg *StateAction) Encode() []byte { - buf := make([]byte, 11+len(msg.Type)) - buf[0] = 42 - p := 1 - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.Type)) + buf[0] = 42 + p := 1 + p = WriteString(msg.Type, buf, p) + return buf[:p] } type StateActionEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Type string + *meta + MessageID uint64 + Timestamp uint64 + Type string } func (msg *StateActionEvent) Encode() []byte { - buf := make([]byte, 31+len(msg.Type)) - buf[0] = 43 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Type)) + buf[0] = 43 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + return buf[:p] } type Redux struct { - *meta - Action string - State string - Duration uint64 + *meta + Action string + State string + Duration uint64 } func (msg *Redux) Encode() []byte { - buf := make([]byte, 31+len(msg.Action)+len(msg.State)) - buf[0] = 44 - p := 1 - p = WriteString(msg.Action, buf, p) - p = WriteString(msg.State, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Action)+len(msg.State)) + buf[0] = 44 + p := 1 + p = WriteString(msg.Action, buf, p) + p = WriteString(msg.State, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type Vuex struct { - *meta - Mutation string - State string + *meta + Mutation string + State string } func (msg *Vuex) Encode() []byte { - buf := make([]byte, 21+len(msg.Mutation)+len(msg.State)) - buf[0] = 45 - p := 1 - p = WriteString(msg.Mutation, buf, p) - p = WriteString(msg.State, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Mutation)+len(msg.State)) + buf[0] = 45 + p := 1 + p = WriteString(msg.Mutation, buf, p) + p = WriteString(msg.State, buf, p) + return buf[:p] } type MobX struct { - *meta - Type string - Payload string + *meta + Type string + Payload string } func (msg *MobX) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)+len(msg.Payload)) - buf[0] = 46 - p := 1 - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)+len(msg.Payload)) + buf[0] = 46 + p := 1 + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type NgRx struct { - *meta - Action string - State string - Duration uint64 + *meta + Action string + State string + Duration uint64 } func (msg *NgRx) Encode() []byte { - buf := make([]byte, 31+len(msg.Action)+len(msg.State)) - buf[0] = 47 - p := 1 - p = WriteString(msg.Action, buf, p) - p = WriteString(msg.State, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Action)+len(msg.State)) + buf[0] = 47 + p := 1 + p = WriteString(msg.Action, buf, p) + p = WriteString(msg.State, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type GraphQL struct { - *meta - OperationKind string - OperationName string - Variables string - Response string + *meta + OperationKind string + OperationName string + Variables string + Response string } func (msg *GraphQL) Encode() []byte { - buf := make([]byte, 41+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) - buf[0] = 48 - p := 1 - p = WriteString(msg.OperationKind, buf, p) - p = WriteString(msg.OperationName, buf, p) - p = WriteString(msg.Variables, buf, p) - p = WriteString(msg.Response, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) + buf[0] = 48 + p := 1 + p = WriteString(msg.OperationKind, buf, p) + p = WriteString(msg.OperationName, buf, p) + p = WriteString(msg.Variables, buf, p) + p = WriteString(msg.Response, buf, p) + return buf[:p] } type PerformanceTrack struct { - *meta - Frames int64 - Ticks int64 - TotalJSHeapSize uint64 - UsedJSHeapSize uint64 + *meta + Frames int64 + Ticks int64 + TotalJSHeapSize uint64 + UsedJSHeapSize uint64 } func (msg *PerformanceTrack) Encode() []byte { - buf := make([]byte, 41) - buf[0] = 49 - p := 1 - p = WriteInt(msg.Frames, buf, p) - p = WriteInt(msg.Ticks, buf, p) - p = WriteUint(msg.TotalJSHeapSize, buf, p) - p = WriteUint(msg.UsedJSHeapSize, buf, p) - return buf[:p] + buf := make([]byte, 41) + buf[0] = 49 + p := 1 + p = WriteInt(msg.Frames, buf, p) + p = WriteInt(msg.Ticks, buf, p) + p = WriteUint(msg.TotalJSHeapSize, buf, p) + p = WriteUint(msg.UsedJSHeapSize, buf, p) + return buf[:p] } type GraphQLEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - OperationKind string - OperationName string - Variables string - Response string + *meta + MessageID uint64 + Timestamp uint64 + OperationKind string + OperationName string + Variables string + Response string } func (msg *GraphQLEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) - buf[0] = 50 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.OperationKind, buf, p) - p = WriteString(msg.OperationName, buf, p) - p = WriteString(msg.Variables, buf, p) - p = WriteString(msg.Response, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.OperationKind)+len(msg.OperationName)+len(msg.Variables)+len(msg.Response)) + buf[0] = 50 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.OperationKind, buf, p) + p = WriteString(msg.OperationName, buf, p) + p = WriteString(msg.Variables, buf, p) + p = WriteString(msg.Response, buf, p) + return buf[:p] } type FetchEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Method string - URL string - Request string - Response string - Status uint64 - Duration uint64 + *meta + MessageID uint64 + Timestamp uint64 + Method string + URL string + Request string + Response string + Status uint64 + Duration uint64 } func (msg *FetchEvent) Encode() []byte { - buf := make([]byte, 81+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) - buf[0] = 51 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Request, buf, p) - p = WriteString(msg.Response, buf, p) - p = WriteUint(msg.Status, buf, p) - p = WriteUint(msg.Duration, buf, p) - return buf[:p] + buf := make([]byte, 81+len(msg.Method)+len(msg.URL)+len(msg.Request)+len(msg.Response)) + buf[0] = 51 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Request, buf, p) + p = WriteString(msg.Response, buf, p) + p = WriteUint(msg.Status, buf, p) + p = WriteUint(msg.Duration, buf, p) + return buf[:p] } type DOMDrop struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *DOMDrop) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 52 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 52 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type ResourceTiming struct { - *meta - Timestamp uint64 - Duration uint64 - TTFB uint64 - HeaderSize uint64 - EncodedBodySize uint64 - DecodedBodySize uint64 - URL string - Initiator string + *meta + Timestamp uint64 + Duration uint64 + TTFB uint64 + HeaderSize uint64 + EncodedBodySize uint64 + DecodedBodySize uint64 + URL string + Initiator string } func (msg *ResourceTiming) Encode() []byte { - buf := make([]byte, 81+len(msg.URL)+len(msg.Initiator)) - buf[0] = 53 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.TTFB, buf, p) - p = WriteUint(msg.HeaderSize, buf, p) - p = WriteUint(msg.EncodedBodySize, buf, p) - p = WriteUint(msg.DecodedBodySize, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteString(msg.Initiator, buf, p) - return buf[:p] + buf := make([]byte, 81+len(msg.URL)+len(msg.Initiator)) + buf[0] = 53 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.TTFB, buf, p) + p = WriteUint(msg.HeaderSize, buf, p) + p = WriteUint(msg.EncodedBodySize, buf, p) + p = WriteUint(msg.DecodedBodySize, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteString(msg.Initiator, buf, p) + return buf[:p] } type ConnectionInformation struct { - *meta - Downlink uint64 - Type string + *meta + Downlink uint64 + Type string } func (msg *ConnectionInformation) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)) - buf[0] = 54 - p := 1 - p = WriteUint(msg.Downlink, buf, p) - p = WriteString(msg.Type, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)) + buf[0] = 54 + p := 1 + p = WriteUint(msg.Downlink, buf, p) + p = WriteString(msg.Type, buf, p) + return buf[:p] } type SetPageVisibility struct { - *meta - hidden bool + *meta + hidden bool } func (msg *SetPageVisibility) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 55 - p := 1 - p = WriteBoolean(msg.hidden, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 55 + p := 1 + p = WriteBoolean(msg.hidden, buf, p) + return buf[:p] } type PerformanceTrackAggr struct { - *meta - TimestampStart uint64 - TimestampEnd uint64 - MinFPS uint64 - AvgFPS uint64 - MaxFPS uint64 - MinCPU uint64 - AvgCPU uint64 - MaxCPU uint64 - MinTotalJSHeapSize uint64 - AvgTotalJSHeapSize uint64 - MaxTotalJSHeapSize uint64 - MinUsedJSHeapSize uint64 - AvgUsedJSHeapSize uint64 - MaxUsedJSHeapSize uint64 + *meta + TimestampStart uint64 + TimestampEnd uint64 + MinFPS uint64 + AvgFPS uint64 + MaxFPS uint64 + MinCPU uint64 + AvgCPU uint64 + MaxCPU uint64 + MinTotalJSHeapSize uint64 + AvgTotalJSHeapSize uint64 + MaxTotalJSHeapSize uint64 + MinUsedJSHeapSize uint64 + AvgUsedJSHeapSize uint64 + MaxUsedJSHeapSize uint64 } func (msg *PerformanceTrackAggr) Encode() []byte { - buf := make([]byte, 141) - buf[0] = 56 - p := 1 - p = WriteUint(msg.TimestampStart, buf, p) - p = WriteUint(msg.TimestampEnd, buf, p) - p = WriteUint(msg.MinFPS, buf, p) - p = WriteUint(msg.AvgFPS, buf, p) - p = WriteUint(msg.MaxFPS, buf, p) - p = WriteUint(msg.MinCPU, buf, p) - p = WriteUint(msg.AvgCPU, buf, p) - p = WriteUint(msg.MaxCPU, buf, p) - p = WriteUint(msg.MinTotalJSHeapSize, buf, p) - p = WriteUint(msg.AvgTotalJSHeapSize, buf, p) - p = WriteUint(msg.MaxTotalJSHeapSize, buf, p) - p = WriteUint(msg.MinUsedJSHeapSize, buf, p) - p = WriteUint(msg.AvgUsedJSHeapSize, buf, p) - p = WriteUint(msg.MaxUsedJSHeapSize, buf, p) - return buf[:p] + buf := make([]byte, 141) + buf[0] = 56 + p := 1 + p = WriteUint(msg.TimestampStart, buf, p) + p = WriteUint(msg.TimestampEnd, buf, p) + p = WriteUint(msg.MinFPS, buf, p) + p = WriteUint(msg.AvgFPS, buf, p) + p = WriteUint(msg.MaxFPS, buf, p) + p = WriteUint(msg.MinCPU, buf, p) + p = WriteUint(msg.AvgCPU, buf, p) + p = WriteUint(msg.MaxCPU, buf, p) + p = WriteUint(msg.MinTotalJSHeapSize, buf, p) + p = WriteUint(msg.AvgTotalJSHeapSize, buf, p) + p = WriteUint(msg.MaxTotalJSHeapSize, buf, p) + p = WriteUint(msg.MinUsedJSHeapSize, buf, p) + p = WriteUint(msg.AvgUsedJSHeapSize, buf, p) + p = WriteUint(msg.MaxUsedJSHeapSize, buf, p) + return buf[:p] } type LongTask struct { - *meta - Timestamp uint64 - Duration uint64 - Context uint64 - ContainerType uint64 - ContainerSrc string - ContainerId string - ContainerName string + *meta + Timestamp uint64 + Duration uint64 + Context uint64 + ContainerType uint64 + ContainerSrc string + ContainerId string + ContainerName string } func (msg *LongTask) Encode() []byte { - buf := make([]byte, 71+len(msg.ContainerSrc)+len(msg.ContainerId)+len(msg.ContainerName)) - buf[0] = 59 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteUint(msg.Context, buf, p) - p = WriteUint(msg.ContainerType, buf, p) - p = WriteString(msg.ContainerSrc, buf, p) - p = WriteString(msg.ContainerId, buf, p) - p = WriteString(msg.ContainerName, buf, p) - return buf[:p] + buf := make([]byte, 71+len(msg.ContainerSrc)+len(msg.ContainerId)+len(msg.ContainerName)) + buf[0] = 59 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteUint(msg.Context, buf, p) + p = WriteUint(msg.ContainerType, buf, p) + p = WriteString(msg.ContainerSrc, buf, p) + p = WriteString(msg.ContainerId, buf, p) + p = WriteString(msg.ContainerName, buf, p) + return buf[:p] } type SetNodeAttributeURLBased struct { - *meta - ID uint64 - Name string - Value string - BaseURL string + *meta + ID uint64 + Name string + Value string + BaseURL string } func (msg *SetNodeAttributeURLBased) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Value)+len(msg.BaseURL)) - buf[0] = 60 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Value)+len(msg.BaseURL)) + buf[0] = 60 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type SetCSSDataURLBased struct { - *meta - ID uint64 - Data string - BaseURL string + *meta + ID uint64 + Data string + BaseURL string } func (msg *SetCSSDataURLBased) Encode() []byte { - buf := make([]byte, 31+len(msg.Data)+len(msg.BaseURL)) - buf[0] = 61 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Data, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Data)+len(msg.BaseURL)) + buf[0] = 61 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Data, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type IssueEvent struct { - *meta - MessageID uint64 - Timestamp uint64 - Type string - ContextString string - Context string - Payload string + *meta + MessageID uint64 + Timestamp uint64 + Type string + ContextString string + Context string + Payload string } func (msg *IssueEvent) Encode() []byte { - buf := make([]byte, 61+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) - buf[0] = 62 - p := 1 - p = WriteUint(msg.MessageID, buf, p) - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.ContextString, buf, p) - p = WriteString(msg.Context, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 61+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) + buf[0] = 62 + p := 1 + p = WriteUint(msg.MessageID, buf, p) + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.ContextString, buf, p) + p = WriteString(msg.Context, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type TechnicalInfo struct { - *meta - Type string - Value string + *meta + Type string + Value string } func (msg *TechnicalInfo) Encode() []byte { - buf := make([]byte, 21+len(msg.Type)+len(msg.Value)) - buf[0] = 63 - p := 1 - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Type)+len(msg.Value)) + buf[0] = 63 + p := 1 + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type CustomIssue struct { - *meta - Name string - Payload string + *meta + Name string + Payload string } func (msg *CustomIssue) Encode() []byte { - buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) - buf[0] = 64 - p := 1 - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 21+len(msg.Name)+len(msg.Payload)) + buf[0] = 64 + p := 1 + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type PageClose struct { - *meta + *meta } func (msg *PageClose) Encode() []byte { - buf := make([]byte, 1) - buf[0] = 65 - p := 1 + buf := make([]byte, 1) + buf[0] = 65 + p := 1 - return buf[:p] + return buf[:p] } type AssetCache struct { - *meta - URL string + *meta + URL string } func (msg *AssetCache) Encode() []byte { - buf := make([]byte, 11+len(msg.URL)) - buf[0] = 66 - p := 1 - p = WriteString(msg.URL, buf, p) - return buf[:p] + buf := make([]byte, 11+len(msg.URL)) + buf[0] = 66 + p := 1 + p = WriteString(msg.URL, buf, p) + return buf[:p] } type CSSInsertRuleURLBased struct { - *meta - ID uint64 - Rule string - Index uint64 - BaseURL string + *meta + ID uint64 + Rule string + Index uint64 + BaseURL string } func (msg *CSSInsertRuleURLBased) Encode() []byte { - buf := make([]byte, 41+len(msg.Rule)+len(msg.BaseURL)) - buf[0] = 67 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteString(msg.Rule, buf, p) - p = WriteUint(msg.Index, buf, p) - p = WriteString(msg.BaseURL, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Rule)+len(msg.BaseURL)) + buf[0] = 67 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteString(msg.Rule, buf, p) + p = WriteUint(msg.Index, buf, p) + p = WriteString(msg.BaseURL, buf, p) + return buf[:p] } type MouseClick struct { - *meta - ID uint64 - HesitationTime uint64 - Label string - Selector string + *meta + ID uint64 + HesitationTime uint64 + Label string + Selector string } func (msg *MouseClick) Encode() []byte { - buf := make([]byte, 41+len(msg.Label)+len(msg.Selector)) - buf[0] = 69 - p := 1 - p = WriteUint(msg.ID, buf, p) - p = WriteUint(msg.HesitationTime, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteString(msg.Selector, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Label)+len(msg.Selector)) + buf[0] = 69 + p := 1 + p = WriteUint(msg.ID, buf, p) + p = WriteUint(msg.HesitationTime, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteString(msg.Selector, buf, p) + return buf[:p] } type CreateIFrameDocument struct { - *meta - FrameID uint64 - ID uint64 + *meta + FrameID uint64 + ID uint64 } func (msg *CreateIFrameDocument) Encode() []byte { - buf := make([]byte, 21) - buf[0] = 70 - p := 1 - p = WriteUint(msg.FrameID, buf, p) - p = WriteUint(msg.ID, buf, p) - return buf[:p] + buf := make([]byte, 21) + buf[0] = 70 + p := 1 + p = WriteUint(msg.FrameID, buf, p) + p = WriteUint(msg.ID, buf, p) + return buf[:p] } type IOSBatchMeta struct { - *meta - Timestamp uint64 - Length uint64 - FirstIndex uint64 + *meta + Timestamp uint64 + Length uint64 + FirstIndex uint64 } func (msg *IOSBatchMeta) Encode() []byte { - buf := make([]byte, 31) - buf[0] = 107 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.FirstIndex, buf, p) - return buf[:p] + buf := make([]byte, 31) + buf[0] = 107 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.FirstIndex, buf, p) + return buf[:p] } type IOSSessionStart struct { - *meta - Timestamp uint64 - ProjectID uint64 - TrackerVersion string - RevID string - UserUUID string - UserOS string - UserOSVersion string - UserDevice string - UserDeviceType string - UserCountry string + *meta + Timestamp uint64 + ProjectID uint64 + TrackerVersion string + RevID string + UserUUID string + UserOS string + UserOSVersion string + UserDevice string + UserDeviceType string + UserCountry string } func (msg *IOSSessionStart) 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[0] = 90 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.ProjectID, buf, p) - p = WriteString(msg.TrackerVersion, buf, p) - p = WriteString(msg.RevID, buf, p) - p = WriteString(msg.UserUUID, buf, p) - p = WriteString(msg.UserOS, buf, p) - p = WriteString(msg.UserOSVersion, buf, p) - p = WriteString(msg.UserDevice, buf, p) - p = WriteString(msg.UserDeviceType, buf, p) - p = WriteString(msg.UserCountry, buf, p) - return buf[:p] + 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 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.ProjectID, buf, p) + p = WriteString(msg.TrackerVersion, buf, p) + p = WriteString(msg.RevID, buf, p) + p = WriteString(msg.UserUUID, buf, p) + p = WriteString(msg.UserOS, buf, p) + p = WriteString(msg.UserOSVersion, buf, p) + p = WriteString(msg.UserDevice, buf, p) + p = WriteString(msg.UserDeviceType, buf, p) + p = WriteString(msg.UserCountry, buf, p) + return buf[:p] } type IOSSessionEnd struct { - *meta - Timestamp uint64 + *meta + Timestamp uint64 } func (msg *IOSSessionEnd) Encode() []byte { - buf := make([]byte, 11) - buf[0] = 91 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - return buf[:p] + buf := make([]byte, 11) + buf[0] = 91 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + return buf[:p] } type IOSMetadata struct { - *meta - Timestamp uint64 - Length uint64 - Key string - Value string + *meta + Timestamp uint64 + Length uint64 + Key string + Value string } func (msg *IOSMetadata) Encode() []byte { - buf := make([]byte, 41+len(msg.Key)+len(msg.Value)) - buf[0] = 92 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Key, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Key)+len(msg.Value)) + buf[0] = 92 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Key, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSCustomEvent struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Payload string + *meta + Timestamp uint64 + Length uint64 + Name string + Payload string } func (msg *IOSCustomEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) - buf[0] = 93 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)+len(msg.Payload)) + buf[0] = 93 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } type IOSUserID struct { - *meta - Timestamp uint64 - Length uint64 - Value string + *meta + Timestamp uint64 + Length uint64 + Value string } func (msg *IOSUserID) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 94 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 94 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSUserAnonymousID struct { - *meta - Timestamp uint64 - Length uint64 - Value string + *meta + Timestamp uint64 + Length uint64 + Value string } func (msg *IOSUserAnonymousID) Encode() []byte { - buf := make([]byte, 31+len(msg.Value)) - buf[0] = 95 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Value)) + buf[0] = 95 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + return buf[:p] } type IOSScreenChanges struct { - *meta - Timestamp uint64 - Length uint64 - X uint64 - Y uint64 - Width uint64 - Height uint64 + *meta + Timestamp uint64 + Length uint64 + X uint64 + Y uint64 + Width uint64 + Height uint64 } func (msg *IOSScreenChanges) Encode() []byte { - buf := make([]byte, 61) - buf[0] = 96 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - p = WriteUint(msg.Width, buf, p) - p = WriteUint(msg.Height, buf, p) - return buf[:p] + buf := make([]byte, 61) + buf[0] = 96 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + p = WriteUint(msg.Width, buf, p) + p = WriteUint(msg.Height, buf, p) + return buf[:p] } type IOSCrash struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Reason string - Stacktrace string + *meta + Timestamp uint64 + Length uint64 + Name string + Reason string + Stacktrace string } func (msg *IOSCrash) Encode() []byte { - buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace)) - buf[0] = 97 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteString(msg.Reason, buf, p) - p = WriteString(msg.Stacktrace, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Name)+len(msg.Reason)+len(msg.Stacktrace)) + buf[0] = 97 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteString(msg.Reason, buf, p) + p = WriteString(msg.Stacktrace, buf, p) + return buf[:p] } type IOSScreenEnter struct { - *meta - Timestamp uint64 - Length uint64 - Title string - ViewName string + *meta + Timestamp uint64 + Length uint64 + Title string + ViewName string } func (msg *IOSScreenEnter) Encode() []byte { - buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) - buf[0] = 98 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Title, buf, p) - p = WriteString(msg.ViewName, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) + buf[0] = 98 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Title, buf, p) + p = WriteString(msg.ViewName, buf, p) + return buf[:p] } type IOSScreenLeave struct { - *meta - Timestamp uint64 - Length uint64 - Title string - ViewName string + *meta + Timestamp uint64 + Length uint64 + Title string + ViewName string } func (msg *IOSScreenLeave) Encode() []byte { - buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) - buf[0] = 99 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Title, buf, p) - p = WriteString(msg.ViewName, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Title)+len(msg.ViewName)) + buf[0] = 99 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Title, buf, p) + p = WriteString(msg.ViewName, buf, p) + return buf[:p] } type IOSClickEvent struct { - *meta - Timestamp uint64 - Length uint64 - Label string - X uint64 - Y uint64 + *meta + Timestamp uint64 + Length uint64 + Label string + X uint64 + Y uint64 } func (msg *IOSClickEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Label)) - buf[0] = 100 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Label, buf, p) - p = WriteUint(msg.X, buf, p) - p = WriteUint(msg.Y, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Label)) + buf[0] = 100 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Label, buf, p) + p = WriteUint(msg.X, buf, p) + p = WriteUint(msg.Y, buf, p) + return buf[:p] } type IOSInputEvent struct { - *meta - Timestamp uint64 - Length uint64 - Value string - ValueMasked bool - Label string + *meta + Timestamp uint64 + Length uint64 + Value string + ValueMasked bool + Label string } func (msg *IOSInputEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) - buf[0] = 101 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Value, buf, p) - p = WriteBoolean(msg.ValueMasked, buf, p) - p = WriteString(msg.Label, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Value)+len(msg.Label)) + buf[0] = 101 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Value, buf, p) + p = WriteBoolean(msg.ValueMasked, buf, p) + p = WriteString(msg.Label, buf, p) + return buf[:p] } type IOSPerformanceEvent struct { - *meta - Timestamp uint64 - Length uint64 - Name string - Value uint64 + *meta + Timestamp uint64 + Length uint64 + Name string + Value uint64 } func (msg *IOSPerformanceEvent) Encode() []byte { - buf := make([]byte, 41+len(msg.Name)) - buf[0] = 102 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Name, buf, p) - p = WriteUint(msg.Value, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Name)) + buf[0] = 102 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Name, buf, p) + p = WriteUint(msg.Value, buf, p) + return buf[:p] } type IOSLog struct { - *meta - Timestamp uint64 - Length uint64 - Severity string - Content string + *meta + Timestamp uint64 + Length uint64 + Severity string + Content string } func (msg *IOSLog) Encode() []byte { - buf := make([]byte, 41+len(msg.Severity)+len(msg.Content)) - buf[0] = 103 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Severity, buf, p) - p = WriteString(msg.Content, buf, p) - return buf[:p] + buf := make([]byte, 41+len(msg.Severity)+len(msg.Content)) + buf[0] = 103 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Severity, buf, p) + p = WriteString(msg.Content, buf, p) + return buf[:p] } type IOSInternalError struct { - *meta - Timestamp uint64 - Length uint64 - Content string + *meta + Timestamp uint64 + Length uint64 + Content string } func (msg *IOSInternalError) Encode() []byte { - buf := make([]byte, 31+len(msg.Content)) - buf[0] = 104 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteString(msg.Content, buf, p) - return buf[:p] + buf := make([]byte, 31+len(msg.Content)) + buf[0] = 104 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteString(msg.Content, buf, p) + return buf[:p] } type IOSNetworkCall struct { - *meta - Timestamp uint64 - Length uint64 - Duration uint64 - Headers string - Body string - URL string - Success bool - Method string - Status uint64 + *meta + Timestamp uint64 + Length uint64 + Duration uint64 + Headers string + Body string + URL string + Success bool + Method string + Status uint64 } func (msg *IOSNetworkCall) Encode() []byte { - buf := make([]byte, 91+len(msg.Headers)+len(msg.Body)+len(msg.URL)+len(msg.Method)) - buf[0] = 105 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteUint(msg.Length, buf, p) - p = WriteUint(msg.Duration, buf, p) - p = WriteString(msg.Headers, buf, p) - p = WriteString(msg.Body, buf, p) - p = WriteString(msg.URL, buf, p) - p = WriteBoolean(msg.Success, buf, p) - p = WriteString(msg.Method, buf, p) - p = WriteUint(msg.Status, buf, p) - return buf[:p] + buf := make([]byte, 91+len(msg.Headers)+len(msg.Body)+len(msg.URL)+len(msg.Method)) + buf[0] = 105 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteUint(msg.Length, buf, p) + p = WriteUint(msg.Duration, buf, p) + p = WriteString(msg.Headers, buf, p) + p = WriteString(msg.Body, buf, p) + p = WriteString(msg.URL, buf, p) + p = WriteBoolean(msg.Success, buf, p) + p = WriteString(msg.Method, buf, p) + p = WriteUint(msg.Status, buf, p) + return buf[:p] } type IOSPerformanceAggregated struct { - *meta - TimestampStart uint64 - TimestampEnd uint64 - MinFPS uint64 - AvgFPS uint64 - MaxFPS uint64 - MinCPU uint64 - AvgCPU uint64 - MaxCPU uint64 - MinMemory uint64 - AvgMemory uint64 - MaxMemory uint64 - MinBattery uint64 - AvgBattery uint64 - MaxBattery uint64 + *meta + TimestampStart uint64 + TimestampEnd uint64 + MinFPS uint64 + AvgFPS uint64 + MaxFPS uint64 + MinCPU uint64 + AvgCPU uint64 + MaxCPU uint64 + MinMemory uint64 + AvgMemory uint64 + MaxMemory uint64 + MinBattery uint64 + AvgBattery uint64 + MaxBattery uint64 } func (msg *IOSPerformanceAggregated) Encode() []byte { - buf := make([]byte, 141) - buf[0] = 110 - p := 1 - p = WriteUint(msg.TimestampStart, buf, p) - p = WriteUint(msg.TimestampEnd, buf, p) - p = WriteUint(msg.MinFPS, buf, p) - p = WriteUint(msg.AvgFPS, buf, p) - p = WriteUint(msg.MaxFPS, buf, p) - p = WriteUint(msg.MinCPU, buf, p) - p = WriteUint(msg.AvgCPU, buf, p) - p = WriteUint(msg.MaxCPU, buf, p) - p = WriteUint(msg.MinMemory, buf, p) - p = WriteUint(msg.AvgMemory, buf, p) - p = WriteUint(msg.MaxMemory, buf, p) - p = WriteUint(msg.MinBattery, buf, p) - p = WriteUint(msg.AvgBattery, buf, p) - p = WriteUint(msg.MaxBattery, buf, p) - return buf[:p] + buf := make([]byte, 141) + buf[0] = 110 + p := 1 + p = WriteUint(msg.TimestampStart, buf, p) + p = WriteUint(msg.TimestampEnd, buf, p) + p = WriteUint(msg.MinFPS, buf, p) + p = WriteUint(msg.AvgFPS, buf, p) + p = WriteUint(msg.MaxFPS, buf, p) + p = WriteUint(msg.MinCPU, buf, p) + p = WriteUint(msg.AvgCPU, buf, p) + p = WriteUint(msg.MaxCPU, buf, p) + p = WriteUint(msg.MinMemory, buf, p) + p = WriteUint(msg.AvgMemory, buf, p) + p = WriteUint(msg.MaxMemory, buf, p) + p = WriteUint(msg.MinBattery, buf, p) + p = WriteUint(msg.AvgBattery, buf, p) + p = WriteUint(msg.MaxBattery, buf, p) + return buf[:p] } type IOSIssueEvent struct { - *meta - Timestamp uint64 - Type string - ContextString string - Context string - Payload string + *meta + Timestamp uint64 + Type string + ContextString string + Context string + Payload string } func (msg *IOSIssueEvent) Encode() []byte { - buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) - buf[0] = 111 - p := 1 - p = WriteUint(msg.Timestamp, buf, p) - p = WriteString(msg.Type, buf, p) - p = WriteString(msg.ContextString, buf, p) - p = WriteString(msg.Context, buf, p) - p = WriteString(msg.Payload, buf, p) - return buf[:p] + buf := make([]byte, 51+len(msg.Type)+len(msg.ContextString)+len(msg.Context)+len(msg.Payload)) + buf[0] = 111 + p := 1 + p = WriteUint(msg.Timestamp, buf, p) + p = WriteString(msg.Type, buf, p) + p = WriteString(msg.ContextString, buf, p) + p = WriteString(msg.Context, buf, p) + p = WriteString(msg.Payload, buf, p) + return buf[:p] } diff --git a/backend/pkg/messages/performance/performance.go b/backend/pkg/messages/performance/performance.go index 4cfb28045..27e28215e 100644 --- a/backend/pkg/messages/performance/performance.go +++ b/backend/pkg/messages/performance/performance.go @@ -4,7 +4,6 @@ import ( "math" ) - func TimeDiff(t1 uint64, t2 uint64) uint64 { if t1 < t2 { return 0 @@ -30,4 +29,4 @@ func CPURateFromTickRate(tickRate float64) uint64 { func CPURate(ticks int64, dt uint64) uint64 { return CPURateFromTickRate(TickRate(ticks, dt)) -} \ No newline at end of file +} diff --git a/backend/pkg/messages/primitives.go b/backend/pkg/messages/primitives.go index 70952eeab..8687ef413 100644 --- a/backend/pkg/messages/primitives.go +++ b/backend/pkg/messages/primitives.go @@ -1,9 +1,9 @@ package messages import ( + "encoding/json" "errors" "io" - "encoding/json" "log" ) @@ -37,7 +37,7 @@ func ReadData(reader io.Reader) ([]byte, error) { } return p, nil } - + func ReadUint(reader io.Reader) (uint64, error) { var x uint64 var s uint @@ -152,4 +152,4 @@ func WriteJson(v interface{}, buf []byte, p int) int { return WriteString("null", buf, p) } return WriteData(data, buf, p) -} \ No newline at end of file +} diff --git a/backend/pkg/messages/read-message.go b/backend/pkg/messages/read-message.go index 31512c9c8..60f9c17a8 100644 --- a/backend/pkg/messages/read-message.go +++ b/backend/pkg/messages/read-message.go @@ -2,1430 +2,1430 @@ package messages import ( - "fmt" - "io" + "fmt" + "io" ) func ReadMessage(reader io.Reader) (Message, error) { - t, err := ReadUint(reader) - if err != nil { - return nil, err - } - switch t { - - case 80: - msg := &BatchMeta{meta: &meta{TypeID: 80}} - if msg.PageNo, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 0: - msg := &Timestamp{meta: &meta{TypeID: 0}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 1: - msg := &SessionStart{meta: &meta{TypeID: 1}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ProjectID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TrackerVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.RevID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserUUID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserAgent, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOS, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOSVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserBrowser, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserBrowserVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDevice, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceType, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceMemorySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UserDeviceHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UserCountry, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 2: - msg := &SessionDisconnect{meta: &meta{TypeID: 2}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 3: - msg := &SessionEnd{meta: &meta{TypeID: 3}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 4: - msg := &SetPageLocation{meta: &meta{TypeID: 4}} - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Referrer, err = ReadString(reader); err != nil { - return nil, err - } - if msg.NavigationStart, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 5: - msg := &SetViewportSize{meta: &meta{TypeID: 5}} - if msg.Width, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Height, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 6: - msg := &SetViewportScroll{meta: &meta{TypeID: 6}} - if msg.X, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 7: - msg := &CreateDocument{meta: &meta{TypeID: 7}} - - return msg, nil - - case 8: - msg := &CreateElementNode{meta: &meta{TypeID: 8}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.index, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Tag, err = ReadString(reader); err != nil { - return nil, err - } - if msg.SVG, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 9: - msg := &CreateTextNode{meta: &meta{TypeID: 9}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 10: - msg := &MoveNode{meta: &meta{TypeID: 10}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ParentID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 11: - msg := &RemoveNode{meta: &meta{TypeID: 11}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 12: - msg := &SetNodeAttribute{meta: &meta{TypeID: 12}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 13: - msg := &RemoveNodeAttribute{meta: &meta{TypeID: 13}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 14: - msg := &SetNodeData{meta: &meta{TypeID: 14}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 15: - msg := &SetCSSData{meta: &meta{TypeID: 15}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 16: - msg := &SetNodeScroll{meta: &meta{TypeID: 16}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.X, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 17: - msg := &SetInputTarget{meta: &meta{TypeID: 17}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 18: - msg := &SetInputValue{meta: &meta{TypeID: 18}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Mask, err = ReadInt(reader); err != nil { - return nil, err - } - return msg, nil - - case 19: - msg := &SetInputChecked{meta: &meta{TypeID: 19}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Checked, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 20: - msg := &MouseMove{meta: &meta{TypeID: 20}} - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 21: - msg := &MouseClickDepricated{meta: &meta{TypeID: 21}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 22: - msg := &ConsoleLog{meta: &meta{TypeID: 22}} - if msg.Level, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 23: - msg := &PageLoadTiming{meta: &meta{TypeID: 23}} - if msg.RequestStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 24: - msg := &PageRenderTiming{meta: &meta{TypeID: 24}} - if msg.SpeedIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.VisuallyComplete, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimeToInteractive, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 25: - msg := &JSException{meta: &meta{TypeID: 25}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 26: - msg := &RawErrorEvent{meta: &meta{TypeID: 26}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Source, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 27: - msg := &RawCustomEvent{meta: &meta{TypeID: 27}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 28: - msg := &UserID{meta: &meta{TypeID: 28}} - if msg.ID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 29: - msg := &UserAnonymousID{meta: &meta{TypeID: 29}} - if msg.ID, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 30: - msg := &Metadata{meta: &meta{TypeID: 30}} - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 31: - msg := &PageEvent{meta: &meta{TypeID: 31}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Referrer, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Loaded, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.RequestStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ResponseEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.LoadEventEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.SpeedIndex, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.VisuallyComplete, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimeToInteractive, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 32: - msg := &InputEvent{meta: &meta{TypeID: 32}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ValueMasked, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 33: - msg := &ClickEvent{meta: &meta{TypeID: 33}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Selector, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 34: - msg := &ErrorEvent{meta: &meta{TypeID: 34}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Source, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Message, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 35: - msg := &ResourceEvent{meta: &meta{TypeID: 35}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TTFB, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HeaderSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.EncodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DecodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Success, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 36: - msg := &CustomEvent{meta: &meta{TypeID: 36}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 37: - msg := &CSSInsertRule{meta: &meta{TypeID: 37}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Rule, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 38: - msg := &CSSDeleteRule{meta: &meta{TypeID: 38}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 39: - msg := &Fetch{meta: &meta{TypeID: 39}} - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Request, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 40: - msg := &Profiler{meta: &meta{TypeID: 40}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Args, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Result, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 41: - msg := &OTable{meta: &meta{TypeID: 41}} - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 42: - msg := &StateAction{meta: &meta{TypeID: 42}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 43: - msg := &StateActionEvent{meta: &meta{TypeID: 43}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 44: - msg := &Redux{meta: &meta{TypeID: 44}} - if msg.Action, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 45: - msg := &Vuex{meta: &meta{TypeID: 45}} - if msg.Mutation, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 46: - msg := &MobX{meta: &meta{TypeID: 46}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 47: - msg := &NgRx{meta: &meta{TypeID: 47}} - if msg.Action, err = ReadString(reader); err != nil { - return nil, err - } - if msg.State, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 48: - msg := &GraphQL{meta: &meta{TypeID: 48}} - if msg.OperationKind, err = ReadString(reader); err != nil { - return nil, err - } - if msg.OperationName, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Variables, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 49: - msg := &PerformanceTrack{meta: &meta{TypeID: 49}} - if msg.Frames, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.Ticks, err = ReadInt(reader); err != nil { - return nil, err - } - if msg.TotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.UsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 50: - msg := &GraphQLEvent{meta: &meta{TypeID: 50}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.OperationKind, err = ReadString(reader); err != nil { - return nil, err - } - if msg.OperationName, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Variables, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 51: - msg := &FetchEvent{meta: &meta{TypeID: 51}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Request, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Response, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 52: - msg := &DOMDrop{meta: &meta{TypeID: 52}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 53: - msg := &ResourceTiming{meta: &meta{TypeID: 53}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TTFB, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HeaderSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.EncodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.DecodedBodySize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Initiator, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 54: - msg := &ConnectionInformation{meta: &meta{TypeID: 54}} - if msg.Downlink, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 55: - msg := &SetPageVisibility{meta: &meta{TypeID: 55}} - if msg.hidden, err = ReadBoolean(reader); err != nil { - return nil, err - } - return msg, nil - - case 56: - msg := &PerformanceTrackAggr{meta: &meta{TypeID: 56}} - if msg.TimestampStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimestampEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxTotalJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxUsedJSHeapSize, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 59: - msg := &LongTask{meta: &meta{TypeID: 59}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ContainerType, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ContainerSrc, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContainerId, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContainerName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 60: - msg := &SetNodeAttributeURLBased{meta: &meta{TypeID: 60}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 61: - msg := &SetCSSDataURLBased{meta: &meta{TypeID: 61}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Data, err = ReadString(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 62: - msg := &IssueEvent{meta: &meta{TypeID: 62}} - if msg.MessageID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContextString, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 63: - msg := &TechnicalInfo{meta: &meta{TypeID: 63}} - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 64: - msg := &CustomIssue{meta: &meta{TypeID: 64}} - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 65: - msg := &PageClose{meta: &meta{TypeID: 65}} - - return msg, nil - - case 66: - msg := &AssetCache{meta: &meta{TypeID: 66}} - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 67: - msg := &CSSInsertRuleURLBased{meta: &meta{TypeID: 67}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Rule, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Index, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.BaseURL, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 69: - msg := &MouseClick{meta: &meta{TypeID: 69}} - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.HesitationTime, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Selector, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 70: - msg := &CreateIFrameDocument{meta: &meta{TypeID: 70}} - if msg.FrameID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ID, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 107: - msg := &IOSBatchMeta{meta: &meta{TypeID: 107}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.FirstIndex, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 90: - msg := &IOSSessionStart{meta: &meta{TypeID: 90}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.ProjectID, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TrackerVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.RevID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserUUID, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOS, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserOSVersion, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDevice, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserDeviceType, err = ReadString(reader); err != nil { - return nil, err - } - if msg.UserCountry, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 91: - msg := &IOSSessionEnd{meta: &meta{TypeID: 91}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 92: - msg := &IOSMetadata{meta: &meta{TypeID: 92}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Key, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 93: - msg := &IOSCustomEvent{meta: &meta{TypeID: 93}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 94: - msg := &IOSUserID{meta: &meta{TypeID: 94}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 95: - msg := &IOSUserAnonymousID{meta: &meta{TypeID: 95}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 96: - msg := &IOSScreenChanges{meta: &meta{TypeID: 96}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Width, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Height, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 97: - msg := &IOSCrash{meta: &meta{TypeID: 97}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Reason, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Stacktrace, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 98: - msg := &IOSScreenEnter{meta: &meta{TypeID: 98}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Title, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ViewName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 99: - msg := &IOSScreenLeave{meta: &meta{TypeID: 99}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Title, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ViewName, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 100: - msg := &IOSClickEvent{meta: &meta{TypeID: 100}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - if msg.X, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Y, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 101: - msg := &IOSInputEvent{meta: &meta{TypeID: 101}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ValueMasked, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Label, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 102: - msg := &IOSPerformanceEvent{meta: &meta{TypeID: 102}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Name, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Value, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 103: - msg := &IOSLog{meta: &meta{TypeID: 103}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Severity, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Content, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 104: - msg := &IOSInternalError{meta: &meta{TypeID: 104}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Content, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - case 105: - msg := &IOSNetworkCall{meta: &meta{TypeID: 105}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Length, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Duration, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Headers, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Body, err = ReadString(reader); err != nil { - return nil, err - } - if msg.URL, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Success, err = ReadBoolean(reader); err != nil { - return nil, err - } - if msg.Method, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Status, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 110: - msg := &IOSPerformanceAggregated{meta: &meta{TypeID: 110}} - if msg.TimestampStart, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.TimestampEnd, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxFPS, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxCPU, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxMemory, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MinBattery, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.AvgBattery, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.MaxBattery, err = ReadUint(reader); err != nil { - return nil, err - } - return msg, nil - - case 111: - msg := &IOSIssueEvent{meta: &meta{TypeID: 111}} - if msg.Timestamp, err = ReadUint(reader); err != nil { - return nil, err - } - if msg.Type, err = ReadString(reader); err != nil { - return nil, err - } - if msg.ContextString, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Context, err = ReadString(reader); err != nil { - return nil, err - } - if msg.Payload, err = ReadString(reader); err != nil { - return nil, err - } - return msg, nil - - } - return nil, fmt.Errorf("Unknown message code: %v", t) + t, err := ReadUint(reader) + if err != nil { + return nil, err + } + switch t { + + case 80: + msg := &BatchMeta{meta: &meta{TypeID: 80}} + if msg.PageNo, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 0: + msg := &Timestamp{meta: &meta{TypeID: 0}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 1: + msg := &SessionStart{meta: &meta{TypeID: 1}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ProjectID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TrackerVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.RevID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserUUID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserAgent, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOS, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOSVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserBrowser, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserBrowserVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDevice, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceType, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceMemorySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UserDeviceHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UserCountry, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 2: + msg := &SessionDisconnect{meta: &meta{TypeID: 2}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 3: + msg := &SessionEnd{meta: &meta{TypeID: 3}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 4: + msg := &SetPageLocation{meta: &meta{TypeID: 4}} + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Referrer, err = ReadString(reader); err != nil { + return nil, err + } + if msg.NavigationStart, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 5: + msg := &SetViewportSize{meta: &meta{TypeID: 5}} + if msg.Width, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Height, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 6: + msg := &SetViewportScroll{meta: &meta{TypeID: 6}} + if msg.X, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 7: + msg := &CreateDocument{meta: &meta{TypeID: 7}} + + return msg, nil + + case 8: + msg := &CreateElementNode{meta: &meta{TypeID: 8}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.index, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Tag, err = ReadString(reader); err != nil { + return nil, err + } + if msg.SVG, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 9: + msg := &CreateTextNode{meta: &meta{TypeID: 9}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 10: + msg := &MoveNode{meta: &meta{TypeID: 10}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ParentID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 11: + msg := &RemoveNode{meta: &meta{TypeID: 11}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 12: + msg := &SetNodeAttribute{meta: &meta{TypeID: 12}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 13: + msg := &RemoveNodeAttribute{meta: &meta{TypeID: 13}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 14: + msg := &SetNodeData{meta: &meta{TypeID: 14}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 15: + msg := &SetCSSData{meta: &meta{TypeID: 15}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 16: + msg := &SetNodeScroll{meta: &meta{TypeID: 16}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.X, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 17: + msg := &SetInputTarget{meta: &meta{TypeID: 17}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 18: + msg := &SetInputValue{meta: &meta{TypeID: 18}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Mask, err = ReadInt(reader); err != nil { + return nil, err + } + return msg, nil + + case 19: + msg := &SetInputChecked{meta: &meta{TypeID: 19}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Checked, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 20: + msg := &MouseMove{meta: &meta{TypeID: 20}} + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 21: + msg := &MouseClickDepricated{meta: &meta{TypeID: 21}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 22: + msg := &ConsoleLog{meta: &meta{TypeID: 22}} + if msg.Level, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 23: + msg := &PageLoadTiming{meta: &meta{TypeID: 23}} + if msg.RequestStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 24: + msg := &PageRenderTiming{meta: &meta{TypeID: 24}} + if msg.SpeedIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.VisuallyComplete, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimeToInteractive, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 25: + msg := &JSException{meta: &meta{TypeID: 25}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 26: + msg := &RawErrorEvent{meta: &meta{TypeID: 26}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Source, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 27: + msg := &RawCustomEvent{meta: &meta{TypeID: 27}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 28: + msg := &UserID{meta: &meta{TypeID: 28}} + if msg.ID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 29: + msg := &UserAnonymousID{meta: &meta{TypeID: 29}} + if msg.ID, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 30: + msg := &Metadata{meta: &meta{TypeID: 30}} + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 31: + msg := &PageEvent{meta: &meta{TypeID: 31}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Referrer, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Loaded, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.RequestStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ResponseEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DomContentLoadedEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.LoadEventEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstContentfulPaint, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.SpeedIndex, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.VisuallyComplete, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimeToInteractive, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 32: + msg := &InputEvent{meta: &meta{TypeID: 32}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ValueMasked, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 33: + msg := &ClickEvent{meta: &meta{TypeID: 33}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Selector, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 34: + msg := &ErrorEvent{meta: &meta{TypeID: 34}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Source, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Message, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 35: + msg := &ResourceEvent{meta: &meta{TypeID: 35}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TTFB, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HeaderSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.EncodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DecodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Success, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 36: + msg := &CustomEvent{meta: &meta{TypeID: 36}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 37: + msg := &CSSInsertRule{meta: &meta{TypeID: 37}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Rule, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 38: + msg := &CSSDeleteRule{meta: &meta{TypeID: 38}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 39: + msg := &Fetch{meta: &meta{TypeID: 39}} + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Request, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 40: + msg := &Profiler{meta: &meta{TypeID: 40}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Args, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Result, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 41: + msg := &OTable{meta: &meta{TypeID: 41}} + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 42: + msg := &StateAction{meta: &meta{TypeID: 42}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 43: + msg := &StateActionEvent{meta: &meta{TypeID: 43}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 44: + msg := &Redux{meta: &meta{TypeID: 44}} + if msg.Action, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 45: + msg := &Vuex{meta: &meta{TypeID: 45}} + if msg.Mutation, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 46: + msg := &MobX{meta: &meta{TypeID: 46}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 47: + msg := &NgRx{meta: &meta{TypeID: 47}} + if msg.Action, err = ReadString(reader); err != nil { + return nil, err + } + if msg.State, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 48: + msg := &GraphQL{meta: &meta{TypeID: 48}} + if msg.OperationKind, err = ReadString(reader); err != nil { + return nil, err + } + if msg.OperationName, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Variables, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 49: + msg := &PerformanceTrack{meta: &meta{TypeID: 49}} + if msg.Frames, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.Ticks, err = ReadInt(reader); err != nil { + return nil, err + } + if msg.TotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.UsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 50: + msg := &GraphQLEvent{meta: &meta{TypeID: 50}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.OperationKind, err = ReadString(reader); err != nil { + return nil, err + } + if msg.OperationName, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Variables, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 51: + msg := &FetchEvent{meta: &meta{TypeID: 51}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Request, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Response, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 52: + msg := &DOMDrop{meta: &meta{TypeID: 52}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 53: + msg := &ResourceTiming{meta: &meta{TypeID: 53}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TTFB, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HeaderSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.EncodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.DecodedBodySize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Initiator, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 54: + msg := &ConnectionInformation{meta: &meta{TypeID: 54}} + if msg.Downlink, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 55: + msg := &SetPageVisibility{meta: &meta{TypeID: 55}} + if msg.hidden, err = ReadBoolean(reader); err != nil { + return nil, err + } + return msg, nil + + case 56: + msg := &PerformanceTrackAggr{meta: &meta{TypeID: 56}} + if msg.TimestampStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimestampEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxTotalJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxUsedJSHeapSize, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 59: + msg := &LongTask{meta: &meta{TypeID: 59}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ContainerType, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ContainerSrc, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContainerId, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContainerName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 60: + msg := &SetNodeAttributeURLBased{meta: &meta{TypeID: 60}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 61: + msg := &SetCSSDataURLBased{meta: &meta{TypeID: 61}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Data, err = ReadString(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 62: + msg := &IssueEvent{meta: &meta{TypeID: 62}} + if msg.MessageID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContextString, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 63: + msg := &TechnicalInfo{meta: &meta{TypeID: 63}} + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 64: + msg := &CustomIssue{meta: &meta{TypeID: 64}} + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 65: + msg := &PageClose{meta: &meta{TypeID: 65}} + + return msg, nil + + case 66: + msg := &AssetCache{meta: &meta{TypeID: 66}} + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 67: + msg := &CSSInsertRuleURLBased{meta: &meta{TypeID: 67}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Rule, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Index, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.BaseURL, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 69: + msg := &MouseClick{meta: &meta{TypeID: 69}} + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.HesitationTime, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Selector, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 70: + msg := &CreateIFrameDocument{meta: &meta{TypeID: 70}} + if msg.FrameID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ID, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 107: + msg := &IOSBatchMeta{meta: &meta{TypeID: 107}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.FirstIndex, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 90: + msg := &IOSSessionStart{meta: &meta{TypeID: 90}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.ProjectID, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TrackerVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.RevID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserUUID, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOS, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserOSVersion, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDevice, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserDeviceType, err = ReadString(reader); err != nil { + return nil, err + } + if msg.UserCountry, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 91: + msg := &IOSSessionEnd{meta: &meta{TypeID: 91}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 92: + msg := &IOSMetadata{meta: &meta{TypeID: 92}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Key, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 93: + msg := &IOSCustomEvent{meta: &meta{TypeID: 93}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 94: + msg := &IOSUserID{meta: &meta{TypeID: 94}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 95: + msg := &IOSUserAnonymousID{meta: &meta{TypeID: 95}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 96: + msg := &IOSScreenChanges{meta: &meta{TypeID: 96}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Width, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Height, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 97: + msg := &IOSCrash{meta: &meta{TypeID: 97}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Reason, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Stacktrace, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 98: + msg := &IOSScreenEnter{meta: &meta{TypeID: 98}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Title, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ViewName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 99: + msg := &IOSScreenLeave{meta: &meta{TypeID: 99}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Title, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ViewName, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 100: + msg := &IOSClickEvent{meta: &meta{TypeID: 100}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + if msg.X, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Y, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 101: + msg := &IOSInputEvent{meta: &meta{TypeID: 101}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ValueMasked, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Label, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 102: + msg := &IOSPerformanceEvent{meta: &meta{TypeID: 102}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Name, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Value, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 103: + msg := &IOSLog{meta: &meta{TypeID: 103}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Severity, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Content, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 104: + msg := &IOSInternalError{meta: &meta{TypeID: 104}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Content, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + case 105: + msg := &IOSNetworkCall{meta: &meta{TypeID: 105}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Length, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Duration, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Headers, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Body, err = ReadString(reader); err != nil { + return nil, err + } + if msg.URL, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Success, err = ReadBoolean(reader); err != nil { + return nil, err + } + if msg.Method, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Status, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 110: + msg := &IOSPerformanceAggregated{meta: &meta{TypeID: 110}} + if msg.TimestampStart, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.TimestampEnd, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxFPS, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxCPU, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxMemory, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MinBattery, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.AvgBattery, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.MaxBattery, err = ReadUint(reader); err != nil { + return nil, err + } + return msg, nil + + case 111: + msg := &IOSIssueEvent{meta: &meta{TypeID: 111}} + if msg.Timestamp, err = ReadUint(reader); err != nil { + return nil, err + } + if msg.Type, err = ReadString(reader); err != nil { + return nil, err + } + if msg.ContextString, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Context, err = ReadString(reader); err != nil { + return nil, err + } + if msg.Payload, err = ReadString(reader); err != nil { + return nil, err + } + return msg, nil + + } + return nil, fmt.Errorf("Unknown message code: %v", t) } diff --git a/backend/pkg/pprof/pprof.go b/backend/pkg/pprof/pprof.go index a05080178..8ea1c1b5f 100644 --- a/backend/pkg/pprof/pprof.go +++ b/backend/pkg/pprof/pprof.go @@ -8,6 +8,6 @@ import ( func StartProfilingServer() { go func() { - log.Println(http.ListenAndServe("localhost:6060", nil)) + log.Println(http.ListenAndServe(":6060", nil)) }() } diff --git a/backend/pkg/redisstream/producer.go b/backend/pkg/redisstream/producer.go index e67200a4f..d5afc63b3 100644 --- a/backend/pkg/redisstream/producer.go +++ b/backend/pkg/redisstream/producer.go @@ -6,25 +6,24 @@ import ( "openreplay/backend/pkg/env" ) - type Producer struct { - redis *redis.Client - maxLenApprox int64 + redis *redis.Client + maxLenApprox int64 } func NewProducer() *Producer { return &Producer{ - redis: getRedisClient(), + redis: getRedisClient(), maxLenApprox: int64(env.Uint64("REDIS_STREAMS_MAX_LEN")), } } func (p *Producer) Produce(topic string, key uint64, value []byte) error { - args := &redis.XAddArgs{ + args := &redis.XAddArgs{ Stream: topic, Values: map[string]interface{}{ "sessionID": key, - "value": value, + "value": value, }, } args.MaxLenApprox = p.maxLenApprox @@ -35,7 +34,7 @@ func (p *Producer) Produce(topic string, key uint64, value []byte) error { } return nil } - + func (p *Producer) Close(_ int) { // noop } diff --git a/backend/pkg/redisstream/redis.go b/backend/pkg/redisstream/redis.go index dea4afe9b..7dba0b537 100644 --- a/backend/pkg/redisstream/redis.go +++ b/backend/pkg/redisstream/redis.go @@ -2,15 +2,13 @@ package redisstream import ( "log" - + "github.com/go-redis/redis" "openreplay/backend/pkg/env" ) - -var redisClient *redis.Client - +var redisClient *redis.Client func getRedisClient() *redis.Client { if redisClient != nil { @@ -23,4 +21,4 @@ func getRedisClient() *redis.Client { log.Fatalln(err) } return redisClient -} \ No newline at end of file +} diff --git a/backend/pkg/storage/s3.go b/backend/pkg/storage/s3.go index 0f55e3851..408dc1864 100644 --- a/backend/pkg/storage/s3.go +++ b/backend/pkg/storage/s3.go @@ -2,8 +2,8 @@ package storage import ( "io" - "strconv" "sort" + "strconv" _s3 "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" @@ -12,18 +12,17 @@ import ( ) type S3 struct { - uploader *s3manager.Uploader - svc *_s3.S3 - bucket *string + uploader *s3manager.Uploader + svc *_s3.S3 + bucket *string } - func NewS3(region string, bucket string) *S3 { sess := env.AWSSessionOnRegion(region) return &S3{ uploader: s3manager.NewUploader(sess), - svc: _s3.New(sess), // AWS Docs: "These clients are safe to use concurrently." - bucket: &bucket, + svc: _s3.New(sess), // AWS Docs: "These clients are safe to use concurrently." + bucket: &bucket, } } @@ -35,14 +34,14 @@ func (s3 *S3) Upload(reader io.Reader, key string, contentType string, gzipped b contentEncoding = &gzipStr } _, err := s3.uploader.Upload(&s3manager.UploadInput{ - Body: reader, - Bucket: s3.bucket, - Key: &key, - ContentType: &contentType, - CacheControl: &cacheControl, + Body: reader, + Bucket: s3.bucket, + Key: &key, + ContentType: &contentType, + CacheControl: &cacheControl, ContentEncoding: contentEncoding, - }) - return err + }) + return err } func (s3 *S3) Get(key string) (io.ReadCloser, error) { @@ -67,8 +66,8 @@ func (s3 *S3) Exists(key string) bool { return false } - const MAX_RETURNING_COUNT = 40 + func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { prefix := strconv.FormatUint(projectID, 10) + "/" output, err := s3.svc.ListObjectsV2(&_s3.ListObjectsV2Input{ @@ -82,7 +81,7 @@ func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { list := output.Contents max := len(list) - if (max > MAX_RETURNING_COUNT) { + if max > MAX_RETURNING_COUNT { max = MAX_RETURNING_COUNT sort.Slice(list, func(i, j int) bool { return list[i].LastModified.After(*(list[j].LastModified)) @@ -91,8 +90,8 @@ func (s3 *S3) GetFrequentlyUsedKeys(projectID uint64) ([]string, error) { var keyList []string s := len(prefix) - for _, obj := range list[:max] { - keyList = append(keyList, (*obj.Key)[s:]) - } - return keyList, nil -} \ No newline at end of file + for _, obj := range list[:max] { + keyList = append(keyList, (*obj.Key)[s:]) + } + return keyList, nil +} diff --git a/backend/pkg/url/assets/css.go b/backend/pkg/url/assets/css.go index 3bd486bc7..dda8755d7 100644 --- a/backend/pkg/url/assets/css.go +++ b/backend/pkg/url/assets/css.go @@ -39,7 +39,7 @@ func unquote(str string) (string, string) { } func ExtractURLsFromCSS(css string) []string { - indexes := cssUrlsIndex(css) + indexes := cssUrlsIndex(css) urls := make([]string, len(indexes)) for _, idx := range indexes { diff --git a/backend/pkg/url/method.go b/backend/pkg/url/method.go index e7dd9eb49..31e654fde 100644 --- a/backend/pkg/url/method.go +++ b/backend/pkg/url/method.go @@ -1,12 +1,12 @@ package url -var METHODS = []string{ "GET", "HEAD", "POST" , "PUT" , "DELETE" , "CONNECT" , "OPTIONS" , "TRACE" , "PATCH" } +var METHODS = []string{"GET", "HEAD", "POST", "PUT", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH"} func EnsureMethod(method string) string { for _, m := range METHODS { - if m == method { - return method - } + if m == method { + return method + } } return "" -} \ No newline at end of file +} diff --git a/backend/services/assets/jsexception.go b/backend/services/assets/jsexception.go index ce5852bd5..c0b26e0db 100644 --- a/backend/services/assets/jsexception.go +++ b/backend/services/assets/jsexception.go @@ -1,16 +1,14 @@ -package main +package main import ( "encoding/json" "strings" ) - type frame struct { FileName string `json:"fileName"` } - func extractJSExceptionSources(payload *string) ([]string, error) { var frameList []frame err := json.Unmarshal([]byte(*payload), &frameList) @@ -25,8 +23,8 @@ func extractJSExceptionSources(payload *string) ([]string, error) { fn := strings.Split(f.FileName, "?")[0] if strings.HasPrefix(fn, "http") && !presentedFileName[fn] { fileNamesList = append(fileNamesList, f.FileName) - presentedFileName[fn] = true + presentedFileName[fn] = true } } return fileNamesList, nil -} \ No newline at end of file +} diff --git a/backend/services/assets/main.go b/backend/services/assets/main.go index 664dc5b09..259918395 100644 --- a/backend/services/assets/main.go +++ b/backend/services/assets/main.go @@ -66,6 +66,7 @@ func main() { os.Exit(0) case err := <-cacher.Errors: log.Printf("Error while caching: %v", err) + // TODO: notify user case <-tick: cacher.UpdateTimeouts() default: diff --git a/backend/services/db/heuristics/anr.go b/backend/services/db/heuristics/anr.go index 266f882f9..0475b00be 100644 --- a/backend/services/db/heuristics/anr.go +++ b/backend/services/db/heuristics/anr.go @@ -1,23 +1,22 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const MIN_TIME_AFTER_LAST_HEARTBEAT = 60 * 1000 type anr struct { readyMessageStore - lastLabel string + lastLabel string lastHeartbeatTimestamp uint64 - lastHeartbeatIndex uint64 + lastHeartbeatIndex uint64 } func (h *anr) buildIf(timestamp uint64) { - if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp + MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp { + if h.lastHeartbeatTimestamp != 0 && h.lastHeartbeatTimestamp+MIN_TIME_AFTER_LAST_HEARTBEAT <= timestamp { m := &IOSIssueEvent{ - Type: "anr", + Type: "anr", ContextString: h.lastLabel, //Context: "{}", //Payload: fmt.SPrint @@ -49,4 +48,4 @@ func (h *anr) HandleMessage(msg Message) { case *IOSSessionEnd: h.buildIf(m.Timestamp) } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/clickrage.go b/backend/services/db/heuristics/clickrage.go index 4dc86ee65..9a1db92d5 100644 --- a/backend/services/db/heuristics/clickrage.go +++ b/backend/services/db/heuristics/clickrage.go @@ -1,26 +1,25 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const CLICK_TIME_DIFF = 200 const MIN_CLICKS_IN_A_ROW = 3 type clickrage struct { readyMessageStore - lastTimestamp uint64 - lastLabel string + lastTimestamp uint64 + lastLabel string firstInARawTimestamp uint64 - firstInARawSeqIndex uint64 - countsInARow int + firstInARawSeqIndex uint64 + countsInARow int } func (h *clickrage) build() { if h.countsInARow >= MIN_CLICKS_IN_A_ROW { m := &IOSIssueEvent{ - Type: "click_rage", + Type: "click_rage", ContextString: h.lastLabel, //Context: "{}", //Payload: fmt.SPrint @@ -39,7 +38,7 @@ func (h *clickrage) build() { func (h *clickrage) HandleMessage(msg Message) { switch m := msg.(type) { case *IOSClickEvent: - if h.lastTimestamp + CLICK_TIME_DIFF < m.Timestamp && h.lastLabel == m.Label { + if h.lastTimestamp+CLICK_TIME_DIFF < m.Timestamp && h.lastLabel == m.Label { h.lastTimestamp = m.Timestamp h.countsInARow += 1 return @@ -55,4 +54,4 @@ func (h *clickrage) HandleMessage(msg Message) { case *IOSSessionEnd: h.build() } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/heuristics.go b/backend/services/db/heuristics/heuristics.go index 7832e0a82..677574951 100644 --- a/backend/services/db/heuristics/heuristics.go +++ b/backend/services/db/heuristics/heuristics.go @@ -1,8 +1,8 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" - . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) type MessageHandler interface { @@ -19,7 +19,6 @@ type Handler interface { type mainHandler map[uint64]*sessHandler - func NewHandler() mainHandler { return make(mainHandler) } @@ -43,8 +42,10 @@ func (m mainHandler) HandleMessage(session *Session, msg Message) { } func (m mainHandler) IterateSessionReadyMessages(sessionID uint64, iter func(msg Message)) { - s, ok := m[ sessionID ] - if !ok { return } + s, ok := m[sessionID] + if !ok { + return + } s.IterateReadyMessages(iter) if s.IsEnded() { delete(m, sessionID) @@ -61,5 +62,3 @@ func (m mainHandler) IterateReadyMessages(iter func(sessionID uint64, msg Messag } } } - - diff --git a/backend/services/db/heuristics/performance.go b/backend/services/db/heuristics/performance.go index 931d831e6..c7494a793 100644 --- a/backend/services/db/heuristics/performance.go +++ b/backend/services/db/heuristics/performance.go @@ -1,31 +1,30 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - const AGGR_TIME = 15 * 60 * 1000 - type valueAggregator struct { - sum float64 + sum float64 count float64 } + func (va *valueAggregator) aggregate() uint64 { if va.count == 0 { return 0 } - return uint64(va.sum/va.count) + return uint64(va.sum / va.count) } type performanceAggregator struct { readyMessageStore - pa *IOSPerformanceAggregated - fps valueAggregator - cpu valueAggregator - memory valueAggregator - battery valueAggregator + pa *IOSPerformanceAggregated + fps valueAggregator + cpu valueAggregator + memory valueAggregator + battery valueAggregator } func (h *performanceAggregator) build(timestamp uint64) { @@ -56,7 +55,7 @@ func (h *performanceAggregator) HandleMessage(msg Message) { if h.pa.TimestampStart == 0 { h.pa.TimestampStart = m.Timestamp } - if h.pa.TimestampStart + AGGR_TIME <= m.Timestamp { + if h.pa.TimestampStart+AGGR_TIME <= m.Timestamp { h.build(m.Timestamp) } switch m.Name { @@ -96,8 +95,8 @@ func (h *performanceAggregator) HandleMessage(msg Message) { if m.Value > h.pa.MaxBattery { h.pa.MaxBattery = m.Value } - } + } case *IOSSessionEnd: h.build(m.Timestamp) } -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/readyMessageStore.go b/backend/services/db/heuristics/readyMessageStore.go index 9c619e20b..bbe77585d 100644 --- a/backend/services/db/heuristics/readyMessageStore.go +++ b/backend/services/db/heuristics/readyMessageStore.go @@ -1,10 +1,9 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" + . "openreplay/backend/pkg/messages" ) - type readyMessageStore struct { store []Message } @@ -18,4 +17,4 @@ func (s *readyMessageStore) IterateReadyMessages(cb func(msg Message)) { cb(msg) } s.store = nil -} \ No newline at end of file +} diff --git a/backend/services/db/heuristics/session.go b/backend/services/db/heuristics/session.go index d828ca478..3946bf918 100644 --- a/backend/services/db/heuristics/session.go +++ b/backend/services/db/heuristics/session.go @@ -1,18 +1,16 @@ package heuristics import ( - . "openreplay/backend/pkg/messages" - . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) - type sessHandler struct { - session *Session + session *Session handlers []Handler - ended bool + ended bool } - func newSessHandler(session *Session) *sessHandler { return &sessHandler{ session: session, @@ -44,4 +42,4 @@ func (s *sessHandler) IterateReadyMessages(cb func(msg Message)) { func (s *sessHandler) IsEnded() bool { return s.ended -} \ No newline at end of file +} diff --git a/backend/services/db/stats.go b/backend/services/db/stats.go index 81abf1b91..2c3a5da38 100644 --- a/backend/services/db/stats.go +++ b/backend/services/db/stats.go @@ -1,25 +1,23 @@ package main import ( - - . "openreplay/backend/pkg/messages" . "openreplay/backend/pkg/db/types" + . "openreplay/backend/pkg/messages" ) func initStats() { - // noop + // noop } - func insertStats(session *Session, msg Message) error { switch m := msg.(type) { - // Web - case *PerformanceTrackAggr: - return pg.InsertWebStatsPerformance(session.SessionID, m) - case *ResourceEvent: - return pg.InsertWebStatsResourceEvent(session.SessionID, m) - case *LongTask: - return pg.InsertWebStatsLongtask(session.SessionID, m) + // Web + case *PerformanceTrackAggr: + return pg.InsertWebStatsPerformance(session.SessionID, m) + case *ResourceEvent: + return pg.InsertWebStatsResourceEvent(session.SessionID, m) + case *LongTask: + return pg.InsertWebStatsLongtask(session.SessionID, m) // IOS // case *IOSPerformanceAggregated: diff --git a/backend/services/ender/builder/builderMap.go b/backend/services/ender/builder/builderMap.go index 6ab3c3ac7..3f3e4d6e3 100644 --- a/backend/services/ender/builder/builderMap.go +++ b/backend/services/ender/builder/builderMap.go @@ -6,7 +6,6 @@ import ( type builderMap map[uint64]*builder - func NewBuilderMap() builderMap { return make(builderMap) } @@ -28,8 +27,10 @@ func (m builderMap) HandleMessage(sessionID uint64, msg Message, messageID uint6 } func (m builderMap) IterateSessionReadyMessages(sessionID uint64, operatingTs int64, iter func(msg Message)) { - b, ok := m[ sessionID ] - if !ok { return } + b, ok := m[sessionID] + if !ok { + return + } sessionEnded := b.checkTimeouts(operatingTs) b.iterateReadyMessage(iter) if sessionEnded { @@ -48,5 +49,3 @@ func (m builderMap) IterateReadyMessages(operatingTs int64, iter func(sessionID } } } - - diff --git a/backend/services/ender/builder/clikRageDetector.go b/backend/services/ender/builder/clikRageDetector.go index 116d57071..f25efbcd9 100644 --- a/backend/services/ender/builder/clikRageDetector.go +++ b/backend/services/ender/builder/clikRageDetector.go @@ -1,34 +1,32 @@ package builder import ( - "encoding/json" + "encoding/json" . "openreplay/backend/pkg/messages" ) - const CLICK_TIME_DIFF = 300 const MIN_CLICKS_IN_A_ROW = 3 type clickRageDetector struct { - lastTimestamp uint64 - lastLabel string + lastTimestamp uint64 + lastLabel string firstInARawTimestamp uint64 firstInARawMessageId uint64 - countsInARow int + countsInARow int } - func (crd *clickRageDetector) Build() *IssueEvent { var i *IssueEvent if crd.countsInARow >= MIN_CLICKS_IN_A_ROW { - payload, _ := json.Marshal(struct{Count int }{crd.countsInARow,}) + payload, _ := json.Marshal(struct{ Count int }{crd.countsInARow}) i = &IssueEvent{ - Type: "click_rage", + Type: "click_rage", ContextString: crd.lastLabel, - Payload: string(payload), // TODO: json encoder - Timestamp: crd.firstInARawTimestamp, - MessageID: crd.firstInARawMessageId, + Payload: string(payload), // TODO: json encoder + Timestamp: crd.firstInARawTimestamp, + MessageID: crd.firstInARawMessageId, } } crd.lastTimestamp = 0 @@ -39,8 +37,8 @@ func (crd *clickRageDetector) Build() *IssueEvent { return i } -func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint64, timestamp uint64) *IssueEvent { - if crd.lastTimestamp + CLICK_TIME_DIFF > timestamp && crd.lastLabel == msg.Label { +func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint64, timestamp uint64) *IssueEvent { + if crd.lastTimestamp+CLICK_TIME_DIFF > timestamp && crd.lastLabel == msg.Label { crd.lastTimestamp = timestamp crd.countsInARow += 1 return nil @@ -54,4 +52,4 @@ func (crd *clickRageDetector) HandleMouseClick(msg *MouseClick, messageID uint6 crd.countsInARow = 1 } return i -} \ No newline at end of file +} diff --git a/backend/services/ender/builder/cpuIssueFinder.go b/backend/services/ender/builder/cpuIssueFinder.go index be02c280f..1af867ea3 100644 --- a/backend/services/ender/builder/cpuIssueFinder.go +++ b/backend/services/ender/builder/cpuIssueFinder.go @@ -3,20 +3,19 @@ package builder import ( "encoding/json" - "openreplay/backend/pkg/messages/performance" . "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/messages/performance" ) -const CPU_THRESHOLD = 70 // % out of 100 +const CPU_THRESHOLD = 70 // % out of 100 const CPU_MIN_DURATION_TRIGGER = 6 * 1000 - type cpuIssueFinder struct { startTimestamp uint64 startMessageID uint64 - lastTimestamp uint64 - maxRate uint64 - contextString string + lastTimestamp uint64 + maxRate uint64 + contextString string } func (f *cpuIssueFinder) Build() *IssueEvent { @@ -35,16 +34,16 @@ func (f *cpuIssueFinder) Build() *IssueEvent { return nil } - payload, _ := json.Marshal(struct{ + payload, _ := json.Marshal(struct { Duration uint64 - Rate uint64 - }{duration,maxRate}) + Rate uint64 + }{duration, maxRate}) return &IssueEvent{ - Type: "cpu", - Timestamp: timestamp, - MessageID: messageID, + Type: "cpu", + Timestamp: timestamp, + MessageID: messageID, ContextString: f.contextString, - Payload: string(payload), + Payload: string(payload), } } @@ -52,8 +51,6 @@ func (f *cpuIssueFinder) HandleSetPageLocation(msg *SetPageLocation) { f.contextString = msg.URL } - - func (f *cpuIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messageID uint64, timestamp uint64) *IssueEvent { dt := performance.TimeDiff(timestamp, f.lastTimestamp) if dt == 0 { @@ -82,5 +79,3 @@ func (f *cpuIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messageID return nil } - - diff --git a/backend/services/ender/builder/deadClickDetector.go b/backend/services/ender/builder/deadClickDetector.go index 725b025cb..de977b7bd 100644 --- a/backend/services/ender/builder/deadClickDetector.go +++ b/backend/services/ender/builder/deadClickDetector.go @@ -4,25 +4,23 @@ import ( . "openreplay/backend/pkg/messages" ) - const CLICK_RELATION_TIME = 1400 type deadClickDetector struct { - lastMouseClick *MouseClick - lastTimestamp uint64 - lastMessageID uint64 - inputIDSet map[uint64]bool + lastMouseClick *MouseClick + lastTimestamp uint64 + lastMessageID uint64 + inputIDSet map[uint64]bool } - func (d *deadClickDetector) HandleReaction(timestamp uint64) *IssueEvent { var i *IssueEvent - if d.lastMouseClick != nil && d.lastTimestamp + CLICK_RELATION_TIME < timestamp { + if d.lastMouseClick != nil && d.lastTimestamp+CLICK_RELATION_TIME < timestamp { i = &IssueEvent{ - Type: "dead_click", + Type: "dead_click", ContextString: d.lastMouseClick.Label, - Timestamp: d.lastTimestamp, - MessageID: d.lastMessageID, + Timestamp: d.lastTimestamp, + MessageID: d.lastMessageID, } } d.inputIDSet = nil @@ -53,8 +51,8 @@ func (d *deadClickDetector) HandleMessage(msg Message, messageID uint64, timesta d.lastMouseClick = m d.lastTimestamp = timestamp d.lastMessageID = messageID - case *SetNodeAttribute, - *RemoveNodeAttribute, + case *SetNodeAttribute, + *RemoveNodeAttribute, *CreateElementNode, *CreateTextNode, *MoveNode, @@ -66,5 +64,3 @@ func (d *deadClickDetector) HandleMessage(msg Message, messageID uint64, timesta } return i } - - diff --git a/backend/services/ender/builder/domDropDetector.go b/backend/services/ender/builder/domDropDetector.go index 3366a0163..3643038c1 100644 --- a/backend/services/ender/builder/domDropDetector.go +++ b/backend/services/ender/builder/domDropDetector.go @@ -4,14 +4,13 @@ import ( . "openreplay/backend/pkg/messages" ) - type domDropDetector struct { - removedCount int + removedCount int lastDropTimestamp uint64 } -const DROP_WINDOW = 200 //ms -const CRITICAL_COUNT = 1 // Our login page contains 20. But on crush it removes only roots (1-3 nodes). +const DROP_WINDOW = 200 //ms +const CRITICAL_COUNT = 1 // Our login page contains 20. But on crush it removes only roots (1-3 nodes). func (dd *domDropDetector) HandleNodeCreation() { dd.removedCount = 0 @@ -19,7 +18,7 @@ func (dd *domDropDetector) HandleNodeCreation() { } func (dd *domDropDetector) HandleNodeRemoval(ts uint64) { - if dd.lastDropTimestamp + DROP_WINDOW > ts { + if dd.lastDropTimestamp+DROP_WINDOW > ts { dd.removedCount += 1 } else { dd.removedCount = 1 @@ -27,7 +26,6 @@ func (dd *domDropDetector) HandleNodeRemoval(ts uint64) { dd.lastDropTimestamp = ts } - func (dd *domDropDetector) Build() *DOMDrop { var domDrop *DOMDrop if dd.removedCount >= CRITICAL_COUNT { @@ -39,4 +37,3 @@ func (dd *domDropDetector) Build() *DOMDrop { dd.lastDropTimestamp = 0 return domDrop } - diff --git a/backend/services/ender/builder/inputEventBuilder.go b/backend/services/ender/builder/inputEventBuilder.go index 98c7ebaf6..ce1b710ca 100644 --- a/backend/services/ender/builder/inputEventBuilder.go +++ b/backend/services/ender/builder/inputEventBuilder.go @@ -7,9 +7,9 @@ import ( type inputLabels map[uint64]string type inputEventBuilder struct { - inputEvent *InputEvent - inputLabels inputLabels - inputID uint64 + inputEvent *InputEvent + inputLabels inputLabels + inputID uint64 } func NewInputEventBuilder() *inputEventBuilder { @@ -18,7 +18,6 @@ func NewInputEventBuilder() *inputEventBuilder { return ieBuilder } - func (b *inputEventBuilder) ClearLabels() { b.inputLabels = make(inputLabels) } @@ -57,11 +56,11 @@ func (b *inputEventBuilder) HasInstance() bool { return b.inputEvent != nil } -func (b * inputEventBuilder) GetTimestamp() uint64 { +func (b *inputEventBuilder) GetTimestamp() uint64 { if b.inputEvent == nil { return 0 } - return b.inputEvent.Timestamp; + return b.inputEvent.Timestamp } func (b *inputEventBuilder) Build() *InputEvent { diff --git a/backend/services/ender/builder/memoryIssueFinder.go b/backend/services/ender/builder/memoryIssueFinder.go index a2702e505..0d6d71420 100644 --- a/backend/services/ender/builder/memoryIssueFinder.go +++ b/backend/services/ender/builder/memoryIssueFinder.go @@ -1,21 +1,21 @@ package builder import ( - "math" "encoding/json" - + "math" + . "openreplay/backend/pkg/messages" ) const MIN_COUNT = 3 -const MEM_RATE_THRESHOLD = 300 // % to average +const MEM_RATE_THRESHOLD = 300 // % to average type memoryIssueFinder struct { startMessageID uint64 startTimestamp uint64 rate int count float64 - sum float64 + sum float64 contextString string } @@ -23,13 +23,13 @@ func (f *memoryIssueFinder) Build() *IssueEvent { if f.startTimestamp == 0 { return nil } - payload, _ := json.Marshal(struct{Rate int }{f.rate - 100,}) + payload, _ := json.Marshal(struct{ Rate int }{f.rate - 100}) i := &IssueEvent{ - Type: "memory", - Timestamp: f.startTimestamp, - MessageID: f.startMessageID, + Type: "memory", + Timestamp: f.startTimestamp, + MessageID: f.startMessageID, ContextString: f.contextString, - Payload: string(payload), + Payload: string(payload), } f.startTimestamp = 0 f.startMessageID = 0 @@ -48,8 +48,8 @@ func (f *memoryIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messag return nil } - average := f.sum/f.count - rate := int(math.Round(float64(msg.UsedJSHeapSize)/average * 100)) + average := f.sum / f.count + rate := int(math.Round(float64(msg.UsedJSHeapSize) / average * 100)) f.sum += float64(msg.UsedJSHeapSize) f.count++ @@ -68,5 +68,3 @@ func (f *memoryIssueFinder) HandlePerformanceTrack(msg *PerformanceTrack, messag return nil } - - diff --git a/backend/services/ender/builder/pageEventBuilder.go b/backend/services/ender/builder/pageEventBuilder.go index db602a996..2b0665894 100644 --- a/backend/services/ender/builder/pageEventBuilder.go +++ b/backend/services/ender/builder/pageEventBuilder.go @@ -5,8 +5,8 @@ import ( ) type pageEventBuilder struct { - pageEvent *PageEvent - firstTimingHandled bool + pageEvent *PageEvent + firstTimingHandled bool } func (b *pageEventBuilder) buildIfTimingsComplete() *PageEvent { @@ -28,7 +28,7 @@ func (b *pageEventBuilder) HandleSetPageLocation(msg *SetPageLocation, messageID } } -func (b * pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent { +func (b *pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent { if !b.HasInstance() { return nil } @@ -62,7 +62,7 @@ func (b * pageEventBuilder) HandlePageLoadTiming(msg *PageLoadTiming) *PageEvent return b.buildIfTimingsComplete() } -func (b * pageEventBuilder) HandlePageRenderTiming(msg *PageRenderTiming) *PageEvent { +func (b *pageEventBuilder) HandlePageRenderTiming(msg *PageRenderTiming) *PageEvent { if !b.HasInstance() { return nil } @@ -76,16 +76,16 @@ func (b *pageEventBuilder) HasInstance() bool { return b.pageEvent != nil } -func (b * pageEventBuilder) GetTimestamp() uint64 { +func (b *pageEventBuilder) GetTimestamp() uint64 { if b.pageEvent == nil { return 0 } - return b.pageEvent.Timestamp; + return b.pageEvent.Timestamp } -func (b * pageEventBuilder) Build() *PageEvent { +func (b *pageEventBuilder) Build() *PageEvent { pageEvent := b.pageEvent b.pageEvent = nil b.firstTimingHandled = false return pageEvent -} \ No newline at end of file +} diff --git a/backend/services/ender/builder/performanceTrackAggrBuilder.go b/backend/services/ender/builder/performanceTrackAggrBuilder.go index b24090ff9..70b751f55 100644 --- a/backend/services/ender/builder/performanceTrackAggrBuilder.go +++ b/backend/services/ender/builder/performanceTrackAggrBuilder.go @@ -3,22 +3,20 @@ package builder import ( "math" - "openreplay/backend/pkg/messages/performance" . "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/messages/performance" ) - type performanceTrackAggrBuilder struct { - performanceTrackAggr *PerformanceTrackAggr - lastTimestamp uint64 - count float64 - sumFrameRate float64 - sumTickRate float64 - sumTotalJSHeapSize float64 - sumUsedJSHeapSize float64 + performanceTrackAggr *PerformanceTrackAggr + lastTimestamp uint64 + count float64 + sumFrameRate float64 + sumTickRate float64 + sumTotalJSHeapSize float64 + sumUsedJSHeapSize float64 } - func (b *performanceTrackAggrBuilder) start(timestamp uint64) { b.performanceTrackAggr = &PerformanceTrackAggr{ TimestampStart: timestamp, @@ -39,7 +37,7 @@ func (b *performanceTrackAggrBuilder) HandlePerformanceTrack(msg *PerformanceTra } frameRate := performance.FrameRate(msg.Frames, dt) - tickRate := performance.TickRate(msg.Ticks, dt) + tickRate := performance.TickRate(msg.Ticks, dt) fps := uint64(math.Round(frameRate)) cpu := performance.CPURateFromTickRate(tickRate) @@ -84,7 +82,7 @@ func (b *performanceTrackAggrBuilder) GetStartTimestamp() uint64 { if b.performanceTrackAggr == nil { return 0 } - return b.performanceTrackAggr.TimestampStart; + return b.performanceTrackAggr.TimestampStart } func (b *performanceTrackAggrBuilder) Build() *PerformanceTrackAggr { @@ -106,4 +104,3 @@ func (b *performanceTrackAggrBuilder) Build() *PerformanceTrackAggr { b.lastTimestamp = 0 return performanceTrackAggr } - diff --git a/backend/services/http/assets.go b/backend/services/http/assets.go index cc055087a..b6ac61186 100644 --- a/backend/services/http/assets.go +++ b/backend/services/http/assets.go @@ -1,8 +1,8 @@ package main import ( - "openreplay/backend/pkg/url/assets" "openreplay/backend/pkg/messages" + "openreplay/backend/pkg/url/assets" ) func sendAssetForCache(sessionID uint64, baseURL string, relativeURL string) { @@ -33,4 +33,4 @@ func handleCSS(sessionID uint64, baseURL string, css string) string { return rewriter.RewriteCSS(sessionID, baseURL, css) } return assets.ResolveCSS(baseURL, css) -} \ No newline at end of file +} diff --git a/backend/services/http/handlers-depricated.go b/backend/services/http/handlers-depricated.go index 85f0393b7..06ab7d0f9 100644 --- a/backend/services/http/handlers-depricated.go +++ b/backend/services/http/handlers-depricated.go @@ -1 +1 @@ -package main \ No newline at end of file +package main diff --git a/backend/services/http/ios-device.go b/backend/services/http/ios-device.go index bec1f3b36..6a09e5e07 100644 --- a/backend/services/http/ios-device.go +++ b/backend/services/http/ios-device.go @@ -1,138 +1,138 @@ package main import ( - "strings" + "strings" ) func MapIOSDevice(identifier string) string { - switch identifier { - case "iPod5,1": - return "iPod touch (5th generation)" - case "iPod7,1": - return "iPod touch (6th generation)" - case "iPod9,1": - return "iPod touch (7th generation)" - case "iPhone3,1", "iPhone3,2", "iPhone3,3": - return "iPhone 4" - case "iPhone4,1": - return "iPhone 4s" - case "iPhone5,1", "iPhone5,2": - return "iPhone 5" - case "iPhone5,3", "iPhone5,4": - return "iPhone 5c" - case "iPhone6,1", "iPhone6,2": - return "iPhone 5s" - case "iPhone7,2": - return "iPhone 6" - case "iPhone7,1": - return "iPhone 6 Plus" - case "iPhone8,1": - return "iPhone 6s" - case "iPhone8,2": - return "iPhone 6s Plus" - case "iPhone8,4": - return "iPhone SE" - case "iPhone9,1", "iPhone9,3": - return "iPhone 7" - case "iPhone9,2", "iPhone9,4": - return "iPhone 7 Plus" - case "iPhone10,1", "iPhone10,4": - return "iPhone 8" - case "iPhone10,2", "iPhone10,5": - return "iPhone 8 Plus" - case "iPhone10,3", "iPhone10,6": - return "iPhone X" - case "iPhone11,2": - return "iPhone XS" - case "iPhone11,4", "iPhone11,6": - return "iPhone XS Max" - case "iPhone11,8": - return "iPhone XR" - case "iPhone12,1": - return "iPhone 11" - case "iPhone12,3": - return "iPhone 11 Pro" - case "iPhone12,5": - return "iPhone 11 Pro Max" - case "iPhone12,8": - return "iPhone SE (2nd generation)" - case "iPhone13,1": - return "iPhone 12 mini" - case "iPhone13,2": - return "iPhone 12" - case "iPhone13,3": - return "iPhone 12 Pro" - case "iPhone13,4": - return "iPhone 12 Pro Max" - case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": - return "iPad 2" - case "iPad3,1", "iPad3,2", "iPad3,3": - return "iPad (3rd generation)" - case "iPad3,4", "iPad3,5", "iPad3,6": - return "iPad (4th generation)" - case "iPad6,11", "iPad6,12": - return "iPad (5th generation)" - case "iPad7,5", "iPad7,6": - return "iPad (6th generation)" - case "iPad7,11", "iPad7,12": - return "iPad (7th generation)" - case "iPad11,6", "iPad11,7": - return "iPad (8th generation)" - case "iPad4,1", "iPad4,2", "iPad4,3": - return "iPad Air" - case "iPad5,3", "iPad5,4": - return "iPad Air 2" - case "iPad11,3", "iPad11,4": - return "iPad Air (3rd generation)" - case "iPad13,1", "iPad13,2": - return "iPad Air (4th generation)" - case "iPad2,5", "iPad2,6", "iPad2,7": - return "iPad mini" - case "iPad4,4", "iPad4,5", "iPad4,6": - return "iPad mini 2" - case "iPad4,7", "iPad4,8", "iPad4,9": - return "iPad mini 3" - case "iPad5,1", "iPad5,2": - return "iPad mini 4" - case "iPad11,1", "iPad11,2": - return "iPad mini (5th generation)" - case "iPad6,3", "iPad6,4": - return "iPad Pro (9.7-inch)" - case "iPad7,3", "iPad7,4": - return "iPad Pro (10.5-inch)" - case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4": - return "iPad Pro (11-inch) (1st generation)" - case "iPad8,9", "iPad8,10": - return "iPad Pro (11-inch) (2nd generation)" - case "iPad6,7", "iPad6,8": - return "iPad Pro (12.9-inch) (1st generation)" - case "iPad7,1", "iPad7,2": - return "iPad Pro (12.9-inch) (2nd generation)" - case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": - return "iPad Pro (12.9-inch) (3rd generation)" - case "iPad8,11", "iPad8,12": - return "iPad Pro (12.9-inch) (4th generation)" - case "AppleTV5,3": - return "Apple TV" - case "AppleTV6,2": - return "Apple TV 4K" - case "AudioAccessory1,1": - return "HomePod" - case "AudioAccessory5,1": - return "HomePod mini" - case "i386", "x86_64": - return "Simulator" - default: - return identifier - } + switch identifier { + case "iPod5,1": + return "iPod touch (5th generation)" + case "iPod7,1": + return "iPod touch (6th generation)" + case "iPod9,1": + return "iPod touch (7th generation)" + case "iPhone3,1", "iPhone3,2", "iPhone3,3": + return "iPhone 4" + case "iPhone4,1": + return "iPhone 4s" + case "iPhone5,1", "iPhone5,2": + return "iPhone 5" + case "iPhone5,3", "iPhone5,4": + return "iPhone 5c" + case "iPhone6,1", "iPhone6,2": + return "iPhone 5s" + case "iPhone7,2": + return "iPhone 6" + case "iPhone7,1": + return "iPhone 6 Plus" + case "iPhone8,1": + return "iPhone 6s" + case "iPhone8,2": + return "iPhone 6s Plus" + case "iPhone8,4": + return "iPhone SE" + case "iPhone9,1", "iPhone9,3": + return "iPhone 7" + case "iPhone9,2", "iPhone9,4": + return "iPhone 7 Plus" + case "iPhone10,1", "iPhone10,4": + return "iPhone 8" + case "iPhone10,2", "iPhone10,5": + return "iPhone 8 Plus" + case "iPhone10,3", "iPhone10,6": + return "iPhone X" + case "iPhone11,2": + return "iPhone XS" + case "iPhone11,4", "iPhone11,6": + return "iPhone XS Max" + case "iPhone11,8": + return "iPhone XR" + case "iPhone12,1": + return "iPhone 11" + case "iPhone12,3": + return "iPhone 11 Pro" + case "iPhone12,5": + return "iPhone 11 Pro Max" + case "iPhone12,8": + return "iPhone SE (2nd generation)" + case "iPhone13,1": + return "iPhone 12 mini" + case "iPhone13,2": + return "iPhone 12" + case "iPhone13,3": + return "iPhone 12 Pro" + case "iPhone13,4": + return "iPhone 12 Pro Max" + case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": + return "iPad 2" + case "iPad3,1", "iPad3,2", "iPad3,3": + return "iPad (3rd generation)" + case "iPad3,4", "iPad3,5", "iPad3,6": + return "iPad (4th generation)" + case "iPad6,11", "iPad6,12": + return "iPad (5th generation)" + case "iPad7,5", "iPad7,6": + return "iPad (6th generation)" + case "iPad7,11", "iPad7,12": + return "iPad (7th generation)" + case "iPad11,6", "iPad11,7": + return "iPad (8th generation)" + case "iPad4,1", "iPad4,2", "iPad4,3": + return "iPad Air" + case "iPad5,3", "iPad5,4": + return "iPad Air 2" + case "iPad11,3", "iPad11,4": + return "iPad Air (3rd generation)" + case "iPad13,1", "iPad13,2": + return "iPad Air (4th generation)" + case "iPad2,5", "iPad2,6", "iPad2,7": + return "iPad mini" + case "iPad4,4", "iPad4,5", "iPad4,6": + return "iPad mini 2" + case "iPad4,7", "iPad4,8", "iPad4,9": + return "iPad mini 3" + case "iPad5,1", "iPad5,2": + return "iPad mini 4" + case "iPad11,1", "iPad11,2": + return "iPad mini (5th generation)" + case "iPad6,3", "iPad6,4": + return "iPad Pro (9.7-inch)" + case "iPad7,3", "iPad7,4": + return "iPad Pro (10.5-inch)" + case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4": + return "iPad Pro (11-inch) (1st generation)" + case "iPad8,9", "iPad8,10": + return "iPad Pro (11-inch) (2nd generation)" + case "iPad6,7", "iPad6,8": + return "iPad Pro (12.9-inch) (1st generation)" + case "iPad7,1", "iPad7,2": + return "iPad Pro (12.9-inch) (2nd generation)" + case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": + return "iPad Pro (12.9-inch) (3rd generation)" + case "iPad8,11", "iPad8,12": + return "iPad Pro (12.9-inch) (4th generation)" + case "AppleTV5,3": + return "Apple TV" + case "AppleTV6,2": + return "Apple TV 4K" + case "AudioAccessory1,1": + return "HomePod" + case "AudioAccessory5,1": + return "HomePod mini" + case "i386", "x86_64": + return "Simulator" + default: + return identifier + } } func GetIOSDeviceType(identifier string) string { - if strings.Contains(identifier, "iPhone") { - return "mobile" //"phone" - } - if strings.Contains(identifier, "iPad") { - return "tablet" - } - return "other" + if strings.Contains(identifier, "iPhone") { + return "mobile" //"phone" + } + if strings.Contains(identifier, "iPad") { + return "tablet" + } + return "other" } diff --git a/backend/services/http/uuid.go b/backend/services/http/uuid.go index 13f57bff0..87704d740 100644 --- a/backend/services/http/uuid.go +++ b/backend/services/http/uuid.go @@ -12,4 +12,4 @@ func getUUID(u *string) string { } } return uuid.New().String() -} \ No newline at end of file +} diff --git a/backend/services/integrations/clientManager/manager.go b/backend/services/integrations/clientManager/manager.go index 39cd8dd90..a671a6266 100644 --- a/backend/services/integrations/clientManager/manager.go +++ b/backend/services/integrations/clientManager/manager.go @@ -7,38 +7,36 @@ import ( "openreplay/backend/services/integrations/integration" ) - type manager struct { - clientMap integration.ClientMap - Events chan *integration.SessionErrorEvent - Errors chan error - RequestDataUpdates chan postgres.Integration // not pointer because it could change in other thread + clientMap integration.ClientMap + Events chan *integration.SessionErrorEvent + Errors chan error + RequestDataUpdates chan postgres.Integration // not pointer because it could change in other thread } - func NewManager() *manager { - return &manager { - clientMap: make(integration.ClientMap), + return &manager{ + clientMap: make(integration.ClientMap), RequestDataUpdates: make(chan postgres.Integration, 100), - Events: make(chan *integration.SessionErrorEvent, 100), - Errors: make(chan error, 100), + Events: make(chan *integration.SessionErrorEvent, 100), + Errors: make(chan error, 100), } } -func (m* manager) Update(i *postgres.Integration) error { +func (m *manager) Update(i *postgres.Integration) error { key := strconv.Itoa(int(i.ProjectID)) + i.Provider if i.Options == nil { delete(m.clientMap, key) return nil } - c, exists := m.clientMap[ key ] + c, exists := m.clientMap[key] if !exists { c, err := integration.NewClient(i, m.RequestDataUpdates, m.Events, m.Errors) if err != nil { return err } - m.clientMap[ key ] = c + m.clientMap[key] = c return nil } return c.Update(i) diff --git a/backend/services/integrations/integration/cloudwatch.go b/backend/services/integrations/integration/cloudwatch.go index fa2210138..9974f485b 100644 --- a/backend/services/integrations/integration/cloudwatch.go +++ b/backend/services/integrations/integration/cloudwatch.go @@ -2,43 +2,40 @@ package integration import ( "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/cloudwatchlogs" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/cloudwatchlogs" - "strings" - "regexp" "openreplay/backend/pkg/messages" + "regexp" + "strings" ) - var reIsException = regexp.MustCompile(`(?i)exception|error`) type cloudwatch struct { - AwsAccessKeyId string // `json:"aws_access_key_id"` - AwsSecretAccessKey string // `json:"aws_secret_access_key"` - LogGroupName string // `json:"log_group_name"` - Region string // `json:"region"` + AwsAccessKeyId string // `json:"aws_access_key_id"` + AwsSecretAccessKey string // `json:"aws_secret_access_key"` + LogGroupName string // `json:"log_group_name"` + Region string // `json:"region"` } - func (cw *cloudwatch) Request(c *client) error { - startTs := int64(c.getLastMessageTimestamp() + 1) // From next millisecond + startTs := int64(c.getLastMessageTimestamp() + 1) // From next millisecond //endTs := utils.CurrentTimestamp() sess, err := session.NewSession(aws.NewConfig(). - WithRegion(cw.Region). - WithCredentials( - credentials.NewStaticCredentials(cw.AwsAccessKeyId, cw.AwsSecretAccessKey, ""), - ), + WithRegion(cw.Region). + WithCredentials( + credentials.NewStaticCredentials(cw.AwsAccessKeyId, cw.AwsSecretAccessKey, ""), + ), ) if err != nil { return err } svc := cloudwatchlogs.New(sess) - filterOptions := new(cloudwatchlogs.FilterLogEventsInput). - SetStartTime(startTs). // Inclusively both startTime and endTime + SetStartTime(startTs). // Inclusively both startTime and endTime // SetEndTime(endTs). // Default nil? // SetLimit(10000). // Default 10000 SetLogGroupName(cw.LogGroupName). @@ -56,7 +53,7 @@ func (cw *cloudwatch) Request(c *client) error { } if !reIsException.MatchString(*e.Message) { // too weak condition ? continue - } + } token, err := GetToken(*e.Message) if err != nil { c.errChan <- err @@ -72,18 +69,18 @@ func (cw *cloudwatch) Request(c *client) error { //SessionID: sessionID, Token: token, RawErrorEvent: &messages.RawErrorEvent{ - Source: "cloudwatch", - Timestamp: timestamp, // e.IngestionTime ?? - Name: name, - Payload: strings.ReplaceAll(e.String(), "\n", ""), + Source: "cloudwatch", + Timestamp: timestamp, // e.IngestionTime ?? + Name: name, + Payload: strings.ReplaceAll(e.String(), "\n", ""), }, } } if output.NextToken == nil { - break; + break } filterOptions.NextToken = output.NextToken } return nil -} \ No newline at end of file +} diff --git a/backend/services/integrations/integration/elasticsearch.go b/backend/services/integrations/integration/elasticsearch.go index dd6f5d5f9..6b8181073 100644 --- a/backend/services/integrations/integration/elasticsearch.go +++ b/backend/services/integrations/integration/elasticsearch.go @@ -53,14 +53,14 @@ func (es *elasticsearch) Request(c *client) error { "query": map[string]interface{}{ "bool": map[string]interface{}{ "filter": []map[string]interface{}{ - map[string]interface{}{ + { "match": map[string]interface{}{ "message": map[string]interface{}{ "query": "openReplaySessionToken=", // asayer_session_id= }, }, }, - map[string]interface{}{ + { "range": map[string]interface{}{ "utc_time": map[string]interface{}{ "gte": strconv.FormatUint(gteTs, 10), @@ -68,7 +68,7 @@ func (es *elasticsearch) Request(c *client) error { }, }, }, - map[string]interface{}{ + { "term": map[string]interface{}{ "tags": "error", }, diff --git a/backend/services/integrations/integration/rollbar.go b/backend/services/integrations/integration/rollbar.go index 369ee31f9..53a5c6d5b 100644 --- a/backend/services/integrations/integration/rollbar.go +++ b/backend/services/integrations/integration/rollbar.go @@ -1,15 +1,15 @@ package integration import ( - "net/http" "encoding/json" + "errors" "fmt" - "time" - "strings" - "strconv" "io" - "io/ioutil" - "errors" + "io/ioutil" + "net/http" + "strconv" + "strings" + "time" "openreplay/backend/pkg/messages" ) @@ -17,42 +17,42 @@ import ( // Old name: asayerSessionId // QUERY: what can be modified? -const RB_QUERY = - "SELECT item.id, item.title,body.message.openReplaySessionToken,item.level,"+ - " item.counter,item.environment,body.crash_report.raw,body.message.body,timestamp"+ - " FROM item_occurrence"+ - " WHERE body.message.openReplaySessionToken != null"+ - " AND timestamp>= %v"+ - " AND item.level>30"+ - " ORDER BY timestamp"+ +const RB_QUERY = "SELECT item.id, item.title,body.message.openReplaySessionToken,item.level," + + " item.counter,item.environment,body.crash_report.raw,body.message.body,timestamp" + + " FROM item_occurrence" + + " WHERE body.message.openReplaySessionToken != null" + + " AND timestamp>= %v" + + " AND item.level>30" + + " ORDER BY timestamp" + " LIMIT 1000" + // ASC by default // \n\t symbols can spoil the request body, so it wouldn't work (OR probably it happend because of job hashing) /* - - `read` Access Token required - - timstamp in seconds + - `read` Access Token required + - timstamp in seconds */ type rollbar struct { - AccessToken string // `json:"access_token"` + AccessToken string // `json:"access_token"` } type rollbarJobResponce struct { - Err int + Err int Message string - Result struct { + Result struct { Id int } } type rollbarJobStatusResponce struct { - Err int + Err int Result struct { Status string Result struct { - Rows [][] json.Number - Columns[] string + Rows [][]json.Number + Columns []string } } } @@ -65,7 +65,7 @@ type rollbarEvent map[string]string */ func (rb *rollbar) Request(c *client) error { fromTs := c.getLastMessageTimestamp() + 1000 // From next second - c.setLastMessageTimestamp(fromTs) // anti-job-hashing + c.setLastMessageTimestamp(fromTs) // anti-job-hashing fromTsSec := fromTs / 1e3 query := fmt.Sprintf(RB_QUERY, fromTsSec) jsonBody := fmt.Sprintf(`{ @@ -111,7 +111,7 @@ func (rb *rollbar) Request(c *client) error { tick := time.Tick(5 * time.Second) for { - <- tick + <-tick resp, err = http.DefaultClient.Do(req) if err != nil { return err // continue + timeout/maxAttempts @@ -131,14 +131,14 @@ func (rb *rollbar) Request(c *client) error { e := make(rollbarEvent) for i, col := range jobStatus.Result.Result.Columns { //if len(row) <= i { error } - e[ col ] = row[ i ].String() // here I make them all string. That's not good + e[col] = row[i].String() // here I make them all string. That's not good } // sessionID, err := strconv.ParseUint(e[ "body.message.asayerSessionId" ], 10, 64) // if err != nil { // c.errChan <- err // continue // } - if e[ "body.message.openReplaySessionToken" ] == "" { + if e["body.message.openReplaySessionToken"] == "" { c.errChan <- errors.New("Token is empty!") continue } @@ -147,7 +147,7 @@ func (rb *rollbar) Request(c *client) error { c.errChan <- err continue } - timestampSec, err := strconv.ParseUint(e[ "timestamp" ], 10, 64) + timestampSec, err := strconv.ParseUint(e["timestamp"], 10, 64) if err != nil { c.errChan <- err continue @@ -155,22 +155,22 @@ func (rb *rollbar) Request(c *client) error { timestamp := timestampSec * 1000 c.setLastMessageTimestamp(timestamp) c.evChan <- &SessionErrorEvent{ - Token: e[ "body.message.openReplaySessionToken" ], + Token: e["body.message.openReplaySessionToken"], RawErrorEvent: &messages.RawErrorEvent{ - Source: "rollbar", + Source: "rollbar", Timestamp: timestamp, - Name: e[ "item.title" ], - Payload: string(payload), + Name: e["item.title"], + Payload: string(payload), }, } } break } - if jobStatus.Result.Status != "new" && + if jobStatus.Result.Status != "new" && jobStatus.Result.Status != "running" { // error break } } return nil -} \ No newline at end of file +} diff --git a/backend/services/integrations/integration/utils.go b/backend/services/integrations/integration/utils.go index 396a177bd..36a473c02 100644 --- a/backend/services/integrations/integration/utils.go +++ b/backend/services/integrations/integration/utils.go @@ -1,34 +1,37 @@ package integration import ( + "fmt" "regexp" "strconv" "strings" - "fmt" ) var reSessionID = regexp.MustCompile(`(?i)asayer_session_id=([0-9]+)`) -func GetAsayerSessionId(s string) (uint64, error) { + +func GetAsayerSessionId(s string) (uint64, error) { matches := reSessionID.FindStringSubmatch(s) if len(matches) < 2 { return 0, fmt.Errorf("'asayer_session_id' not found in '%v' ", s) } - return strconv.ParseUint(matches[ 1 ], 10, 64) + return strconv.ParseUint(matches[1], 10, 64) } func GetLinkFromAngularBrackets(s string) string { beg := strings.Index(s, "<") + 1 end := strings.Index(s, ">") - if end < 0 { return "" } + if end < 0 { + return "" + } return strings.TrimSpace(s[beg:end]) } - var reToken = regexp.MustCompile(`(?i)openReplaySessionToken=([0-9a-zA-Z\.]+)`) -func GetToken(s string) (string, error) { + +func GetToken(s string) (string, error) { matches := reToken.FindStringSubmatch(s) if len(matches) < 2 { return "", fmt.Errorf("'openReplaySessionToken' not found in '%v' ", s) } - return matches[ 1 ], nil -} \ No newline at end of file + return matches[1], nil +} diff --git a/backend/services/storage/gzip.go b/backend/services/storage/gzip.go index d574ec4ae..f3e96394a 100644 --- a/backend/services/storage/gzip.go +++ b/backend/services/storage/gzip.go @@ -1,19 +1,18 @@ package main import ( - "io" gzip "github.com/klauspost/pgzip" + "io" ) - func gzipFile(file io.ReadSeeker) io.Reader { reader, writer := io.Pipe() - go func() { - gw, _ := gzip.NewWriterLevel(writer, gzip.BestSpeed) - io.Copy(gw, file) + go func() { + gw, _ := gzip.NewWriterLevel(writer, gzip.BestSpeed) + io.Copy(gw, file) - gw.Close() - writer.Close() - }() - return reader -} \ No newline at end of file + gw.Close() + writer.Close() + }() + return reader +}