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
}