Skip to content

Commit

Permalink
[receiver/cloudfoundryreceiver] WIP: Add functionality to fill trace …
Browse files Browse the repository at this point in the history
…id and span id from RTR Logs

Co-authored-by: Jose Riguera <jose.riguera@springer.com>
  • Loading branch information
CemDK and jriguera committed May 13, 2024
1 parent 05c6974 commit 241167a
Showing 1 changed file with 49 additions and 1 deletion.
50 changes: 49 additions & 1 deletion receiver/cloudfoundryreceiver/converter.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
package cloudfoundryreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver"

import (
"strings"
"time"

"code.cloudfoundry.org/go-loggregator/rpc/loggregator_v2"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/otel/trace"
)

const (
Expand Down Expand Up @@ -47,9 +49,23 @@ func convertEnvelopeToLogs(envelope *loggregator_v2.Envelope, logSlice plog.LogR
// TODO: review log attributes and tags from the envelope
log := logSlice.AppendEmpty()
log.SetTimestamp(pcommon.Timestamp(envelope.GetTimestamp()))
log.SetObservedTimestamp(pcommon.NewTimestampFromTime(startTime))
log.Body().SetStr(string(envelope.GetLog().GetPayload()))
log.SetSeverityNumber(plog.SeverityNumber(envelope.GetLog().GetType()))
switch envelope.GetLog().GetType() {
case loggregator_v2.Log_OUT:
log.SetSeverityText(plog.SeverityNumberInfo.String())
log.SetSeverityNumber(plog.SeverityNumberInfo)
case loggregator_v2.Log_ERR:
log.SetSeverityText(plog.SeverityNumberError.String())
log.SetSeverityNumber(plog.SeverityNumberError)
}

copyEnvelopeAttributes(log.Attributes(), envelope)

if value, found := log.Attributes().Get("org.cloudfoundry.source_type"); found && value.AsString() == "RTR" {
parseLogTracedID(log)
}

}
}

Expand All @@ -66,3 +82,35 @@ func copyEnvelopeAttributes(attributes pcommon.Map, envelope *loggregator_v2.Env
attributes.PutStr(attributeNamePrefix+"instance_id", envelope.InstanceId)
}
}

func parseLogTracedID(log plog.LogRecord) error {
s := log.Body().AsString()
quoted := false
a := strings.FieldsFunc(s, func(r rune) bool {
if r == '"' {
quoted = !quoted
}
return !quoted && r == ' '
})

traceIDStr := strings.Split(a[21], ":")[1]
traceIDStr = strings.Trim(traceIDStr, "\"")

spanIDStr := strings.Split(a[22], ":")[1]
spanIDStr = strings.Trim(spanIDStr, "\"")

traceID, err := trace.TraceIDFromHex(traceIDStr)
if err != nil {
return err
}

spanID, err := trace.SpanIDFromHex(spanIDStr)
if err != nil {
return err
}

log.SetTraceID([16]byte(traceID))
log.SetSpanID([8]byte(spanID))

return nil
}

0 comments on commit 241167a

Please sign in to comment.