func getCustomDynamicAttributeValue()

in router/core/request_context_fields.go [192:251]


func getCustomDynamicAttributeValue(
	attribute *config.CustomDynamicAttribute,
	reqContext *requestContext,
	err any,
) interface{} {
	if attribute == nil || attribute.ContextField == "" {
		return ""
	}

	if reqContext == nil {
		// If the request context is nil, we can only return the error state.
		if attribute.ContextField == ContextFieldRequestError {
			return err != nil
		} else if attribute.ContextField == ContextFieldResponseErrorMessage && err != nil {
			return fmt.Sprintf("%v", err)
		}
		return ""
	}

	switch attribute.ContextField {
	case ContextFieldRequestError:
		return err != nil || reqContext.error != nil
	case ContextFieldOperationName:
		return reqContext.operation.Name()
	case ContextFieldOperationType:
		return reqContext.operation.Type()
	case ContextFieldOperationPlanningTime:
		return reqContext.operation.planningTime
	case ContextFieldOperationNormalizationTime:
		return reqContext.operation.normalizationTime
	case ContextFieldOperationParsingTime:
		return reqContext.operation.parsingTime
	case ContextFieldOperationValidationTime:
		return reqContext.operation.validationTime
	case ContextFieldOperationSha256:
		return reqContext.operation.sha256Hash
	case ContextFieldOperationHash:
		if reqContext.operation.hash != 0 {
			return strconv.FormatUint(reqContext.operation.hash, 10)
		}
		return reqContext.operation.Hash()
	case ContextFieldPersistedOperationSha256:
		return reqContext.operation.persistedID
	case ContextFieldResponseErrorMessage:
		if err != nil {
			return fmt.Sprintf("%v", err)
		}
		if reqContext.error != nil {
			return reqContext.error.Error()
		}
	case ContextFieldOperationServices:
		return reqContext.dataSourceNames
	case ContextFieldGraphQLErrorServices:
		return reqContext.graphQLErrorServices
	case ContextFieldGraphQLErrorCodes:
		return reqContext.graphQLErrorCodes
	}

	return ""
}