github.com/newrelic/go-agent@v3.26.0+incompatible/internal/error_events.go (about) 1 // Copyright 2020 New Relic Corporation. All rights reserved. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package internal 5 6 import ( 7 "bytes" 8 "time" 9 ) 10 11 // MarshalJSON is used for testing. 12 func (e *ErrorEvent) MarshalJSON() ([]byte, error) { 13 buf := bytes.NewBuffer(make([]byte, 0, 256)) 14 15 e.WriteJSON(buf) 16 17 return buf.Bytes(), nil 18 } 19 20 // WriteJSON prepares JSON in the format expected by the collector. 21 // https://source.datanerd.us/agents/agent-specs/blob/master/Error-Events.md 22 func (e *ErrorEvent) WriteJSON(buf *bytes.Buffer) { 23 w := jsonFieldsWriter{buf: buf} 24 buf.WriteByte('[') 25 buf.WriteByte('{') 26 w.stringField("type", "TransactionError") 27 w.stringField("error.class", e.Klass) 28 w.stringField("error.message", e.Msg) 29 w.floatField("timestamp", timeToFloatSeconds(e.When)) 30 w.stringField("transactionName", e.FinalName) 31 32 sharedTransactionIntrinsics(&e.TxnEvent, &w) 33 sharedBetterCATIntrinsics(&e.TxnEvent, &w) 34 35 buf.WriteByte('}') 36 buf.WriteByte(',') 37 userAttributesJSON(e.Attrs, buf, destError, e.ErrorData.ExtraAttributes) 38 buf.WriteByte(',') 39 agentAttributesJSON(e.Attrs, buf, destError) 40 buf.WriteByte(']') 41 } 42 43 type errorEvents struct { 44 *analyticsEvents 45 } 46 47 func newErrorEvents(max int) *errorEvents { 48 return &errorEvents{ 49 analyticsEvents: newAnalyticsEvents(max), 50 } 51 } 52 53 func (events *errorEvents) Add(e *ErrorEvent, priority Priority) { 54 events.addEvent(analyticsEvent{priority, e}) 55 } 56 57 func (events *errorEvents) MergeIntoHarvest(h *Harvest) { 58 h.ErrorEvents.mergeFailed(events.analyticsEvents) 59 } 60 61 func (events *errorEvents) Data(agentRunID string, harvestStart time.Time) ([]byte, error) { 62 return events.CollectorJSON(agentRunID) 63 } 64 65 func (events *errorEvents) EndpointMethod() string { 66 return cmdErrorEvents 67 }