func transformEventsToLogs()

in store/kustoSpan.go [196:236]


func transformEventsToLogs(kustoSpan *kustoSpan, logger hclog.Logger) ([]dbmodel.Log, error) {
	var events []event
	err := json.Unmarshal(kustoSpan.Logs.Value, &events)
	if err != nil {
		return nil, err
	}
	// Get the events field from events and convert it to logs
	var logs []dbmodel.Log
	// Map event to logs that can be set. ref: https://opentelemetry.io/docs/reference/specification/trace/sdk_exporters/jaeger/#events
	// Set all the events' timestam and attibute, to log's timestamp and fields by iterating over span events
	for _, evt := range events {
		log := dbmodel.Log{}
		var kvs []dbmodel.KeyValue
		timestamp := evt.Timestamp
		if timestamp != "" {
			t, terr := time.Parse(time.RFC3339Nano, timestamp)
			if terr != nil {
				logger.Warn(fmt.Sprintf("Error parsing log timestamp. Error %s. TraceId: %s SpanId: %s & timestamp: %s ", terr.Error(), kustoSpan.TraceID, kustoSpan.SpanID, timestamp))
			} else {
				log.Timestamp = uint64(t.UnixMicro())
			}
		}
		// EventName should be added as log's field.
		kvs = append(kvs, dbmodel.KeyValue{
			Key:   "event",
			Value: evt.EventName,
			Type:  dbmodel.StringType,
		})
		for ek, ev := range evt.EventAttributes {
			kv := dbmodel.KeyValue{
				Key:   ek,
				Value: fmt.Sprint(ev),
				Type:  dbmodel.ValueType(strings.ToLower(reflect.TypeOf(ev).String())),
			}
			kvs = append(kvs, kv)
		}
		log.Fields = kvs
		logs = append(logs, log)
	}
	return logs, nil
}