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  }