4
4
package cloudfoundryreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver"
5
5
6
6
import (
7
+ "strings"
7
8
"time"
8
9
9
10
"code.cloudfoundry.org/go-loggregator/rpc/loggregator_v2"
10
11
"go.opentelemetry.io/collector/pdata/pcommon"
11
12
"go.opentelemetry.io/collector/pdata/plog"
12
13
"go.opentelemetry.io/collector/pdata/pmetric"
14
+ "go.opentelemetry.io/otel/trace"
13
15
)
14
16
15
17
const (
@@ -47,9 +49,23 @@ func convertEnvelopeToLogs(envelope *loggregator_v2.Envelope, logSlice plog.LogR
47
49
// TODO: review log attributes and tags from the envelope
48
50
log := logSlice .AppendEmpty ()
49
51
log .SetTimestamp (pcommon .Timestamp (envelope .GetTimestamp ()))
52
+ log .SetObservedTimestamp (pcommon .NewTimestampFromTime (startTime ))
50
53
log .Body ().SetStr (string (envelope .GetLog ().GetPayload ()))
51
- log .SetSeverityNumber (plog .SeverityNumber (envelope .GetLog ().GetType ()))
54
+ switch envelope .GetLog ().GetType () {
55
+ case loggregator_v2 .Log_OUT :
56
+ log .SetSeverityText (plog .SeverityNumberInfo .String ())
57
+ log .SetSeverityNumber (plog .SeverityNumberInfo )
58
+ case loggregator_v2 .Log_ERR :
59
+ log .SetSeverityText (plog .SeverityNumberError .String ())
60
+ log .SetSeverityNumber (plog .SeverityNumberError )
61
+ }
62
+
52
63
copyEnvelopeAttributes (log .Attributes (), envelope )
64
+
65
+ if value , found := log .Attributes ().Get ("org.cloudfoundry.source_type" ); found && value .AsString () == "RTR" {
66
+ parseLogTracedID (log )
67
+ }
68
+
53
69
}
54
70
}
55
71
@@ -66,3 +82,35 @@ func copyEnvelopeAttributes(attributes pcommon.Map, envelope *loggregator_v2.Env
66
82
attributes .PutStr (attributeNamePrefix + "instance_id" , envelope .InstanceId )
67
83
}
68
84
}
85
+
86
+ func parseLogTracedID (log plog.LogRecord ) error {
87
+ s := log .Body ().AsString ()
88
+ quoted := false
89
+ a := strings .FieldsFunc (s , func (r rune ) bool {
90
+ if r == '"' {
91
+ quoted = ! quoted
92
+ }
93
+ return ! quoted && r == ' '
94
+ })
95
+
96
+ traceIDStr := strings .Split (a [21 ], ":" )[1 ]
97
+ traceIDStr = strings .Trim (traceIDStr , "\" " )
98
+
99
+ spanIDStr := strings .Split (a [22 ], ":" )[1 ]
100
+ spanIDStr = strings .Trim (spanIDStr , "\" " )
101
+
102
+ traceID , err := trace .TraceIDFromHex (traceIDStr )
103
+ if err != nil {
104
+ return err
105
+ }
106
+
107
+ spanID , err := trace .SpanIDFromHex (spanIDStr )
108
+ if err != nil {
109
+ return err
110
+ }
111
+
112
+ log .SetTraceID ([16 ]byte (traceID ))
113
+ log .SetSpanID ([8 ]byte (spanID ))
114
+
115
+ return nil
116
+ }
0 commit comments