47 lines
1,008 B
Go
47 lines
1,008 B
Go
package web
|
|
|
|
import (
|
|
. "openreplay/backend/pkg/messages"
|
|
)
|
|
|
|
/*
|
|
Handler name: NetworkIssue
|
|
Input events: ResourceTiming,
|
|
Fetch
|
|
Output event: IssueEvent
|
|
*/
|
|
|
|
type NetworkIssueDetector struct{}
|
|
|
|
func (f *NetworkIssueDetector) Build() Message {
|
|
return nil
|
|
}
|
|
|
|
func (f *NetworkIssueDetector) Handle(message Message, messageID uint64, timestamp uint64) Message {
|
|
switch msg := message.(type) {
|
|
case *ResourceTiming:
|
|
success := msg.Duration != 0 // The only available way here
|
|
if !success {
|
|
issueType := "missing_resource"
|
|
if msg.Initiator == "fetch" || msg.Initiator == "xmlhttprequest" {
|
|
issueType = "bad_request"
|
|
}
|
|
return &IssueEvent{
|
|
Type: issueType,
|
|
MessageID: messageID,
|
|
Timestamp: msg.Timestamp,
|
|
ContextString: msg.URL,
|
|
}
|
|
}
|
|
case *Fetch:
|
|
if msg.Status >= 400 {
|
|
return &IssueEvent{
|
|
Type: "bad_request",
|
|
MessageID: messageID,
|
|
Timestamp: msg.Timestamp,
|
|
ContextString: msg.URL,
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|