error_events.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package internal
  2. import (
  3. "bytes"
  4. "time"
  5. )
  6. // MarshalJSON is used for testing.
  7. func (e *ErrorEvent) MarshalJSON() ([]byte, error) {
  8. buf := bytes.NewBuffer(make([]byte, 0, 256))
  9. e.WriteJSON(buf)
  10. return buf.Bytes(), nil
  11. }
  12. // WriteJSON prepares JSON in the format expected by the collector.
  13. // https://source.datanerd.us/agents/agent-specs/blob/master/Error-Events.md
  14. func (e *ErrorEvent) WriteJSON(buf *bytes.Buffer) {
  15. w := jsonFieldsWriter{buf: buf}
  16. buf.WriteByte('[')
  17. buf.WriteByte('{')
  18. w.stringField("type", "TransactionError")
  19. w.stringField("error.class", e.Klass)
  20. w.stringField("error.message", e.Msg)
  21. w.floatField("timestamp", timeToFloatSeconds(e.When))
  22. w.stringField("transactionName", e.FinalName)
  23. sharedTransactionIntrinsics(&e.TxnEvent, &w)
  24. sharedBetterCATIntrinsics(&e.TxnEvent, &w)
  25. buf.WriteByte('}')
  26. buf.WriteByte(',')
  27. userAttributesJSON(e.Attrs, buf, destError, e.ErrorData.ExtraAttributes)
  28. buf.WriteByte(',')
  29. agentAttributesJSON(e.Attrs, buf, destError)
  30. buf.WriteByte(']')
  31. }
  32. type errorEvents struct {
  33. events *analyticsEvents
  34. }
  35. func newErrorEvents(max int) *errorEvents {
  36. return &errorEvents{
  37. events: newAnalyticsEvents(max),
  38. }
  39. }
  40. func (events *errorEvents) Add(e *ErrorEvent, priority Priority) {
  41. events.events.addEvent(analyticsEvent{priority, e})
  42. }
  43. func (events *errorEvents) MergeIntoHarvest(h *Harvest) {
  44. h.ErrorEvents.events.mergeFailed(events.events)
  45. }
  46. func (events *errorEvents) Data(agentRunID string, harvestStart time.Time) ([]byte, error) {
  47. return events.events.CollectorJSON(agentRunID)
  48. }
  49. func (events *errorEvents) numSeen() float64 { return events.events.NumSeen() }
  50. func (events *errorEvents) numSaved() float64 { return events.events.NumSaved() }
  51. func (events *errorEvents) EndpointMethod() string {
  52. return cmdErrorEvents
  53. }