123 lines
3.8 KiB
Go
123 lines
3.8 KiB
Go
package datasaver
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"openreplay/backend/pkg/messages"
|
|
)
|
|
|
|
type FetchEventFTS struct {
|
|
Method string `json:"method"`
|
|
URL string `json:"url"`
|
|
Request string `json:"request"`
|
|
Response string `json:"response"`
|
|
Status uint64 `json:"status"`
|
|
Timestamp uint64 `json:"timestamp"`
|
|
Duration uint64 `json:"duration"`
|
|
}
|
|
|
|
type PageEventFTS struct {
|
|
MessageID uint64 `json:"message_id"`
|
|
Timestamp uint64 `json:"timestamp"`
|
|
URL string `json:"url"`
|
|
Referrer string `json:"referrer"`
|
|
Loaded bool `json:"loaded"`
|
|
RequestStart uint64 `json:"request_start"`
|
|
ResponseStart uint64 `json:"response_start"`
|
|
ResponseEnd uint64 `json:"response_end"`
|
|
DomContentLoadedEventStart uint64 `json:"dom_content_loaded_event_start"`
|
|
DomContentLoadedEventEnd uint64 `json:"dom_content_loaded_event_end"`
|
|
LoadEventStart uint64 `json:"load_event_start"`
|
|
LoadEventEnd uint64 `json:"load_event_end"`
|
|
FirstPaint uint64 `json:"first_paint"`
|
|
FirstContentfulPaint uint64 `json:"first_contentful_paint"`
|
|
SpeedIndex uint64 `json:"speed_index"`
|
|
VisuallyComplete uint64 `json:"visually_complete"`
|
|
TimeToInteractive uint64 `json:"time_to_interactive"`
|
|
}
|
|
|
|
type GraphQLEventFTS struct {
|
|
OperationKind string `json:"operation_kind"`
|
|
OperationName string `json:"operation_name"`
|
|
Variables string `json:"variables"`
|
|
Response string `json:"response"`
|
|
}
|
|
|
|
func (s *Saver) sendToFTS(msg messages.Message, sessionID uint64) {
|
|
// Skip, if FTS is disabled
|
|
if s.producer == nil {
|
|
return
|
|
}
|
|
|
|
var (
|
|
event []byte
|
|
err error
|
|
)
|
|
|
|
switch m := msg.(type) {
|
|
// Common
|
|
case *messages.Fetch:
|
|
event, err = json.Marshal(FetchEventFTS{
|
|
Method: m.Method,
|
|
URL: m.URL,
|
|
Request: m.Request,
|
|
Response: m.Response,
|
|
Status: m.Status,
|
|
Timestamp: m.Timestamp,
|
|
Duration: m.Duration,
|
|
})
|
|
case *messages.FetchEvent:
|
|
event, err = json.Marshal(FetchEventFTS{
|
|
Method: m.Method,
|
|
URL: m.URL,
|
|
Request: m.Request,
|
|
Response: m.Response,
|
|
Status: m.Status,
|
|
Timestamp: m.Timestamp,
|
|
Duration: m.Duration,
|
|
})
|
|
case *messages.PageEvent:
|
|
event, err = json.Marshal(PageEventFTS{
|
|
MessageID: m.MessageID,
|
|
Timestamp: m.Timestamp,
|
|
URL: m.URL,
|
|
Referrer: m.Referrer,
|
|
Loaded: m.Loaded,
|
|
RequestStart: m.RequestStart,
|
|
ResponseStart: m.ResponseStart,
|
|
ResponseEnd: m.ResponseEnd,
|
|
DomContentLoadedEventStart: m.DomContentLoadedEventStart,
|
|
DomContentLoadedEventEnd: m.DomContentLoadedEventEnd,
|
|
LoadEventStart: m.LoadEventStart,
|
|
LoadEventEnd: m.LoadEventEnd,
|
|
FirstPaint: m.FirstPaint,
|
|
FirstContentfulPaint: m.FirstContentfulPaint,
|
|
SpeedIndex: m.SpeedIndex,
|
|
VisuallyComplete: m.VisuallyComplete,
|
|
TimeToInteractive: m.TimeToInteractive,
|
|
})
|
|
case *messages.GraphQL:
|
|
event, err = json.Marshal(GraphQLEventFTS{
|
|
OperationKind: m.OperationKind,
|
|
OperationName: m.OperationName,
|
|
Variables: m.Variables,
|
|
Response: m.Response,
|
|
})
|
|
case *messages.GraphQLEvent:
|
|
event, err = json.Marshal(GraphQLEventFTS{
|
|
OperationKind: m.OperationKind,
|
|
OperationName: m.OperationName,
|
|
Variables: m.Variables,
|
|
Response: m.Response,
|
|
})
|
|
}
|
|
if err != nil {
|
|
log.Printf("can't marshal json for quickwit: %s", err)
|
|
} else {
|
|
if len(event) > 0 {
|
|
if err := s.producer.Produce("quickwit", sessionID, event); err != nil {
|
|
log.Printf("can't send event to quickwit: %s", err)
|
|
}
|
|
}
|
|
}
|
|
}
|