github.com/Axway/agent-sdk@v1.1.101/pkg/transaction/metric/metricevent.go (about) 1 package metric 2 3 import ( 4 "encoding/json" 5 "time" 6 7 "github.com/Axway/agent-sdk/pkg/agent" 8 "github.com/Axway/agent-sdk/pkg/traceability" 9 "github.com/Axway/agent-sdk/pkg/traceability/sampling" 10 "github.com/Axway/agent-sdk/pkg/util/log" 11 "github.com/elastic/beats/v7/libbeat/beat" 12 beatPub "github.com/elastic/beats/v7/libbeat/publisher" 13 metrics "github.com/rcrowley/go-metrics" 14 ) 15 16 // CondorMetricEvent - the condor event format to send metric data 17 type CondorMetricEvent struct { 18 Message string `json:"message"` 19 Fields map[string]interface{} `json:"fields"` 20 Timestamp time.Time `json:"-"` 21 ID string `json:"-"` 22 } 23 24 // AddCondorMetricEventToBatch - creates the condor metric event and adds to the batch 25 func AddCondorMetricEventToBatch(metricEvent V4Event, batch *EventBatch, histogram metrics.Histogram) error { 26 metricData, _ := json.Marshal(metricEvent) 27 28 cme := &CondorMetricEvent{ 29 Message: string(metricData), 30 Fields: make(map[string]interface{}), 31 Timestamp: metricEvent.Data.GetStartTime(), 32 ID: metricEvent.ID, 33 } 34 event, err := cme.CreateEvent() 35 if err != nil { 36 return err 37 } 38 batch.AddEvent(event, histogram) 39 return nil 40 } 41 42 // CreateEvent - creates the beat event to add to the batch 43 func (c *CondorMetricEvent) CreateEvent() (beatPub.Event, error) { 44 // Get the event token 45 token, err := agent.GetCentralAuthToken() 46 if err != nil { 47 return beatPub.Event{}, err 48 } 49 c.Fields["token"] = token 50 c.Fields[traceability.FlowHeader] = metricFlow 51 52 // convert the CondorMetricEvent to json then to map[string]interface{} 53 cmeJSON, err := json.Marshal(c) 54 if err != nil { 55 return beatPub.Event{}, err 56 } 57 58 var fieldsData map[string]interface{} 59 err = json.Unmarshal(cmeJSON, &fieldsData) 60 if err != nil { 61 return beatPub.Event{}, err 62 } 63 64 beatEnv := beatPub.Event{ 65 Content: beat.Event{ 66 Timestamp: c.Timestamp, 67 Meta: map[string]interface{}{ 68 metricKey: c.ID, 69 sampling.SampleKey: true, // All metric events should be sent 70 }, 71 Fields: fieldsData, 72 }, 73 Flags: beatPub.GuaranteedSend, 74 } 75 log.Tracef("Created Metric Event: %+v", beatEnv) 76 return beatEnv, nil 77 }