in operatortrace-go/pkg/client/tracing_client.go [145:182]
func (tc *tracingClient) StartTrace(ctx context.Context, key *client.ObjectKey, obj client.Object, opts ...client.GetOption) (context.Context, trace.Span, error) {
name := getNameFromNamespacedName(*key)
incomingKey := *key
key.Name = name
// Create or retrieve the span from the context
getErr := tc.Reader.Get(ctx, *key, obj, opts...)
if getErr != nil {
ctx, span := startSpanFromContext(ctx, tc.Logger, tc.Tracer, obj, tc.scheme, fmt.Sprintf("StartTrace Unknown Object %s", name))
return trace.ContextWithSpan(ctx, span), span, getErr
}
overrideTraceIDFromNamespacedName(incomingKey, obj)
gvk, err := apiutil.GVKForObject(obj, tc.scheme)
objectKind := ""
if err == nil {
objectKind = gvk.GroupKind().Kind
}
callerName := getCallerNameFromNamespacedName(incomingKey)
callerKind := getCallerKindFromNamespacedName(incomingKey)
operationName := ""
if callerKind != "" && callerName != "" {
operationName = fmt.Sprintf("StartTrace %s/%s Triggered By Changed Object %s/%s", objectKind, name, callerKind, callerName)
} else {
operationName = fmt.Sprintf("StartTrace %s %s", objectKind, name)
}
ctx, span := startSpanFromContext(ctx, tc.Logger, tc.Tracer, obj, tc.scheme, operationName)
if err != nil {
span.RecordError(err)
}
tc.Logger.Info("Getting object", "object", key.Name)
return trace.ContextWithSpan(ctx, span), span, err
}