func MarshalAPMEvent()

in model/modeljson/apmevent.pb.json.go [26:264]


func MarshalAPMEvent(e *modelpb.APMEvent, w *fastjson.Writer) error {
	var labels map[string]modeljson.Label
	if n := len(e.Labels); n > 0 {
		labels = make(map[string]modeljson.Label)
		for k, label := range e.Labels {
			if label != nil {
				labels[sanitizeLabelKey(k)] = modeljson.Label{
					Value:  label.Value,
					Values: label.Values,
				}
			}
		}
	}

	var numericLabels map[string]modeljson.NumericLabel
	if n := len(e.NumericLabels); n > 0 {
		numericLabels = make(map[string]modeljson.NumericLabel)
		for k, label := range e.NumericLabels {
			if label != nil {
				numericLabels[sanitizeLabelKey(k)] = modeljson.NumericLabel{
					Value:  label.Value,
					Values: label.Values,
				}
			}
		}
	}

	doc := modeljson.Document{
		Timestamp:     modeljson.Time(modelpb.ToTime(e.Timestamp)),
		Labels:        labels,
		NumericLabels: numericLabels,
		Message:       e.Message,
	}

	var dataStream modeljson.DataStream
	if e.DataStream != nil {
		doc.DataStream = &dataStream
		doc.DataStream.Type = e.DataStream.Type
		doc.DataStream.Dataset = e.DataStream.Dataset
		doc.DataStream.Namespace = e.DataStream.Namespace
	}

	var transaction modeljson.Transaction
	if e.Transaction != nil {
		TransactionModelJSON(e.Transaction, &transaction, e.Metricset != nil)
		doc.Transaction = &transaction
	}

	var span modeljson.Span
	if e.Span != nil {
		SpanModelJSON(e.Span, &span)
		doc.Span = &span
	}

	var metricset modeljson.Metricset
	if e.Metricset != nil {
		MetricsetModelJSON(e.Metricset, &metricset)
		doc.Metricset = &metricset
		doc.DocCount = e.Metricset.DocCount
	}

	var errorStruct modeljson.Error
	if e.Error != nil {
		ErrorModelJSON(e.Error, &errorStruct)
		doc.Error = &errorStruct
	}

	var event modeljson.Event
	if e.Event != nil {
		EventModelJSON(e.Event, &event)
		doc.Event = &event
	}

	// Set high resolution timestamp for transactions, spans, and errors.
	//
	// TODO(axw) change @timestamp to use date_nanos, and remove this field.
	var timestampStruct modeljson.Timestamp
	if e.Timestamp != 0 {
		switch e.Type() {
		case modelpb.TransactionEventType, modelpb.SpanEventType, modelpb.ErrorEventType:
			timestampStruct.US = int(e.Timestamp / 1000)
			doc.TimestampStruct = &timestampStruct
		}
	}

	var cloud modeljson.Cloud
	if e.Cloud != nil {
		CloudModelJSON(e.Cloud, &cloud)
		doc.Cloud = &cloud
	}

	var fass modeljson.FAAS
	if e.Faas != nil {
		FaasModelJSON(e.Faas, &fass)
		doc.FAAS = &fass
	}

	var device modeljson.Device
	if e.Device != nil {
		DeviceModelJSON(e.Device, &device)
		doc.Device = &device
	}

	var network modeljson.Network
	if e.Network != nil {
		NetworkModelJSON(e.Network, &network)
		doc.Network = &network
	}

	var observer modeljson.Observer
	if e.Observer != nil {
		ObserverModelJSON(e.Observer, &observer)
		doc.Observer = &observer
	}

	var container modeljson.Container
	if e.Container != nil {
		ContainerModelJSON(e.Container, &container)
		doc.Container = &container
	}

	var kubernetes modeljson.Kubernetes
	if e.Kubernetes != nil {
		KubernetesModelJSON(e.Kubernetes, &kubernetes)
		doc.Kubernetes = &kubernetes
	}

	var agent modeljson.Agent
	if e.Agent != nil {
		AgentModelJSON(e.Agent, &agent)
		doc.Agent = &agent
	}

	if e.Trace != nil {
		doc.Trace = &modeljson.Trace{
			ID: e.Trace.Id,
		}
	}

	var user modeljson.User
	if e.User != nil {
		UserModelJSON(e.User, &user)
		doc.User = &user
	}

	var source modeljson.Source
	if e.Source != nil {
		SourceModelJSON(e.Source, &source)
		doc.Source = &source
	}

	if len(e.ParentId) > 0 {
		doc.Parent = &modeljson.Parent{
			ID: e.ParentId,
		}
	}

	if len(e.ChildIds) > 0 {
		doc.Child = &modeljson.Child{
			ID: e.ChildIds,
		}
	}

	var client modeljson.Client
	if e.Client != nil {
		ClientModelJSON(e.Client, &client)
		doc.Client = &client
	}

	if e.UserAgent != nil {
		doc.UserAgent = &modeljson.UserAgent{
			Original: e.UserAgent.Original,
			Name:     e.UserAgent.Name,
		}
	}

	var service modeljson.Service
	if e.Service != nil {
		ServiceModelJSON(e.Service, &service)
		doc.Service = &service
	}

	var httpStruct modeljson.HTTP
	if e.Http != nil {
		HTTPModelJSON(e.Http, &httpStruct)
		doc.HTTP = &httpStruct
	}

	var host modeljson.Host
	if e.Host != nil {
		HostModelJSON(e.Host, &host)
		doc.Host = &host
	}

	var url modeljson.URL
	if e.Url != nil {
		URLModelJSON(e.Url, &url)
		doc.URL = &url
	}

	var logStruct modeljson.Log
	if e.Log != nil {
		LogModelJSON(e.Log, &logStruct)
		doc.Log = &logStruct
	}

	var process modeljson.Process
	if e.Process != nil {
		ProcessModelJSON(e.Process, &process)
		doc.Process = &process
	}

	var destination modeljson.Destination
	if e.Destination != nil {
		DestinationModelJSON(e.Destination, &destination)
		doc.Destination = &destination
	}

	if e.Session != nil {
		doc.Session = &modeljson.Session{
			ID:       e.Session.Id,
			Sequence: e.Session.Sequence,
		}
	}

	if e.Code != nil {
		doc.Code = &modeljson.Code{
			Stacktrace: e.Code.Stacktrace,
		}
	}

	var system modeljson.System
	if e.System != nil {
		SystemModelJSON(e.System, &system)
		doc.System = &system
	}

	return doc.MarshalFastJSON(w)
}