You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1009 B
Go
39 lines
1009 B
Go
package trace
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/trace"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
const messageEvent = "message"
|
|
|
|
var (
|
|
// MessageSent is the type of sent messages.
|
|
MessageSent = messageType(RPCMessageTypeSent)
|
|
// MessageReceived is the type of received messages.
|
|
MessageReceived = messageType(RPCMessageTypeReceived)
|
|
)
|
|
|
|
type messageType attribute.KeyValue
|
|
|
|
// Event adds an event of the messageType to the span associated with the
|
|
// passed context with id and size (if message is a proto message).
|
|
func (m messageType) Event(ctx context.Context, id int, message any) {
|
|
span := trace.SpanFromContext(ctx)
|
|
if p, ok := message.(proto.Message); ok {
|
|
span.AddEvent(messageEvent, trace.WithAttributes(
|
|
attribute.KeyValue(m),
|
|
RPCMessageIDKey.Int(id),
|
|
RPCMessageUncompressedSizeKey.Int(proto.Size(p)),
|
|
))
|
|
} else {
|
|
span.AddEvent(messageEvent, trace.WithAttributes(
|
|
attribute.KeyValue(m),
|
|
RPCMessageIDKey.Int(id),
|
|
))
|
|
}
|
|
}
|