func()

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
}