func()

in router/core/router_config.go [128:324]


func (c *Config) Usage() map[string]any {

	type Exporter struct {
		Name, Endpoint string
	}

	usage := make(map[string]any)

	usage["cors"] = c.corsOptions != nil && c.corsOptions.Enabled
	usage["aws_lambda"] = c.awsLambda
	usage["ip_anonymization"] = c.ipAnonymization != nil && c.ipAnonymization.Enabled
	usage["playground"] = c.playground
	usage["introspection"] = c.introspection
	usage["query_plans_enabled"] = c.queryPlansEnabled
	usage["graph_api_token"] = c.graphApiToken != ""
	usage["automatic_persisted_queries"] = c.automaticPersistedQueriesConfig.Enabled

	usage["apollo_compatibility_flags_enable_all"] = c.apolloCompatibilityFlags.EnableAll
	usage["apollo_compatibility_flags_replace_invalid_var_errors_enabled"] = c.apolloCompatibilityFlags.ReplaceInvalidVarErrors.Enabled
	usage["apollo_compatibility_flags_replace_validation_error_status_enabled"] = c.apolloCompatibilityFlags.ReplaceValidationErrorStatus.Enabled
	usage["apollo_compatibility_flags_replace_undefined_op_field_errors_enabled"] = c.apolloCompatibilityFlags.ReplaceUndefinedOpFieldErrors.Enabled
	usage["apollo_compatibility_flags_subscription_multipart_print_boundary_enabled"] = c.apolloCompatibilityFlags.SubscriptionMultipartPrintBoundary.Enabled
	usage["apollo_compatibility_flags_suppress_fetch_errors_enabled"] = c.apolloCompatibilityFlags.SuppressFetchErrors.Enabled
	usage["apollo_compatibility_flags_truncate_floats_enabled"] = c.apolloCompatibilityFlags.TruncateFloats.Enabled
	usage["apollo_compatibility_flags_value_completion_enabled"] = c.apolloCompatibilityFlags.ValueCompletion.Enabled
	usage["apollo_compatibility_flags_use_graphql_validation_failed_status_enabled"] = c.apolloCompatibilityFlags.UseGraphQLValidationFailedStatus.Enabled

	usage["apollo_router_compatibility_flags_replace_invalid_var_errors_enabled"] = c.apolloRouterCompatibilityFlags.ReplaceInvalidVarErrors.Enabled
	usage["apollo_router_compatibility_flags_subrequest_http_error_enabled"] = c.apolloRouterCompatibilityFlags.SubrequestHTTPError.Enabled
	usage["apollo_router_compatibility_flags_replace_invalid_var_errors_enabled"] = c.apolloRouterCompatibilityFlags.ReplaceInvalidVarErrors.Enabled

	usage["demo_mode"] = c.demoMode

	usage["tracing_enabled"] = c.traceConfig.Enabled
	if c.traceConfig != nil {
		exporters := make([]Exporter, len(c.traceConfig.Exporters))
		for i, exporter := range c.traceConfig.Exporters {
			exporters[i].Name = string(exporter.Exporter)
			exporters[i].Endpoint = exporter.Endpoint
		}
		usage["tracing_exporters"] = exporters
	}

	metricsEnabled := c.metricConfig != nil && c.metricConfig.IsEnabled()
	usage["metrics_enabled"] = metricsEnabled
	if metricsEnabled {
		usage["metrics_using_cloud_exporter"] = c.metricConfig.IsUsingCloudExporter
		usage["metrics_otel_enabled"] = c.metricConfig.OpenTelemetry.Enabled
		if c.metricConfig.OpenTelemetry.Enabled {
			exporters := make([]Exporter, len(c.metricConfig.OpenTelemetry.Exporters))
			for i, exporter := range c.metricConfig.OpenTelemetry.Exporters {
				exporters[i].Name = string(exporter.Exporter)
				exporters[i].Endpoint = exporter.Endpoint
			}
			usage["metrics_otel_exporters"] = exporters
			usage["metrics_otel_exclude_metrics"] = c.metricConfig.OpenTelemetry.ExcludeMetrics
			usage["metrics_otel_exclude_metrics_labels"] = c.metricConfig.OpenTelemetry.ExcludeMetricLabels
			usage["metrics_otel_engine_stats_enabled"] = c.metricConfig.OpenTelemetry.EngineStats.Enabled()
			usage["metrics_otel_graphql_cache"] = c.metricConfig.OpenTelemetry.GraphqlCache
			usage["metrics_otel_router_runtime"] = c.metricConfig.OpenTelemetry.RouterRuntime
		}
		usage["metrics_prometheus_enabled"] = c.metricConfig.Prometheus.Enabled
		if c.metricConfig.Prometheus.Enabled {
			usage["metrics_prometheus_graphql_cache"] = c.metricConfig.Prometheus.GraphqlCache
			usage["metrics_prometheus_engine_stats_enabled"] = c.metricConfig.Prometheus.EngineStats.Enabled()
			usage["metrics_prometheus_engine_stats_subscriptions"] = c.metricConfig.Prometheus.EngineStats.Subscription
			usage["metrics_prometheus_exclude_metrics"] = c.metricConfig.Prometheus.ExcludeMetrics
			usage["metrics_prometheus_exclude_metrics_labels"] = c.metricConfig.Prometheus.ExcludeMetricLabels
			usage["metrics_prometheus_exclude_scope_info"] = c.metricConfig.Prometheus.ExcludeScopeInfo
			usage["metrics_prometheus_schema_field_usage_enabled"] = c.metricConfig.Prometheus.PromSchemaFieldUsage.Enabled
		}
	}

	usage["edfs_nats"] = len(c.eventsConfig.Providers.Nats) > 0
	usage["edfs_kafka"] = len(c.eventsConfig.Providers.Kafka) > 0

	usage["prometheus"] = c.prometheusServer != nil
	usage["custom_modules"] = len(c.customModules) > 0
	usage["header_rules"] = c.headerRules != nil && (c.headerRules.All != nil || len(c.headerRules.Subgraphs) > 0)
	usage["subgraph_transport_options"] = c.subgraphTransportOptions != nil
	usage["subgraph_circuit_breaker_options"] = c.subgraphCircuitBreakerOptions.IsEnabled()
	usage["graphql_metrics"] = c.graphqlMetricsConfig != nil && c.graphqlMetricsConfig.Enabled
	usage["batching"] = c.batchingConfig != nil && c.batchingConfig.Enabled
	if c.batchingConfig != nil && c.batchingConfig.Enabled {
		usage["batching_max_concurrent_routines"] = c.batchingConfig.MaxConcurrentRoutines
		usage["batching_max_entries_per_batch"] = c.batchingConfig.MaxEntriesPerBatch
		usage["batching_omit_extensions"] = c.batchingConfig.OmitExtensions
	}
	usage["file_upload"] = c.fileUploadConfig != nil && c.fileUploadConfig.Enabled
	if c.fileUploadConfig != nil && c.fileUploadConfig.Enabled {
		usage["file_upload_max_file_size"] = c.fileUploadConfig.MaxFileSizeBytes
		usage["file_upload_max_files"] = c.fileUploadConfig.MaxFiles
	}
	usage["access_controller"] = c.accessController != nil
	usage["retry_options"] = c.retryOptions.Enabled
	usage["development_mode"] = c.developmentMode
	usage["access_logs"] = c.accessLogsConfig != nil
	usage["localhost_fallback_inside_docker"] = c.localhostFallbackInsideDocker
	usage["tls_server"] = c.tlsServerConfig != nil
	usage["tls_client"] = c.tlsConfig != nil
	usage["self_register"] = c.selfRegister != nil
	usage["registration_info"] = c.registrationInfo != nil

	usage["security_configuration_block_mutations"] = c.securityConfiguration.BlockMutations.Enabled
	usage["security_configuration_block_subscriptions"] = c.securityConfiguration.BlockSubscriptions.Enabled
	usage["security_configuration_block_non_persisted_operations"] = c.securityConfiguration.BlockNonPersistedOperations.Enabled
	usage["security_configuration_complexity_calculation_cache"] = c.securityConfiguration.ComplexityCalculationCache != nil && c.securityConfiguration.ComplexityCalculationCache.Enabled
	usage["security_configuration_complexity_limits"] = c.securityConfiguration.ComplexityLimits != nil
	usage["security_configuration_depth_limit"] = c.securityConfiguration.DepthLimit != nil && c.securityConfiguration.DepthLimit.Enabled

	usage["engine_execution_configuration_enable_single_flight"] = c.engineExecutionConfiguration.EnableSingleFlight
	usage["engine_execution_configuration_enable_request_tracing"] = c.engineExecutionConfiguration.EnableRequestTracing
	usage["engine_execution_configuration_enable_net_poll"] = c.engineExecutionConfiguration.EnableNetPoll
	usage["engine_execution_configuration_execution_plan_cache_size"] = c.engineExecutionConfiguration.ExecutionPlanCacheSize
	usage["engine_execution_configuration_minify_subgraph_operations"] = c.engineExecutionConfiguration.MinifySubgraphOperations
	usage["engine_execution_configuration_enable_persisted_operations_cache"] = c.engineExecutionConfiguration.EnablePersistedOperationsCache
	usage["engine_execution_configuration_enable_normalization_cache"] = c.engineExecutionConfiguration.EnableNormalizationCache
	usage["engine_execution_configuration_normalization_cache_size"] = c.engineExecutionConfiguration.NormalizationCacheSize
	usage["engine_execution_configuration_operation_hash_cache_size"] = c.engineExecutionConfiguration.OperationHashCacheSize
	usage["engine_execution_configuration_parsekit_pool_size"] = c.engineExecutionConfiguration.ParseKitPoolSize
	usage["engine_execution_configuration_enable_validation_cache"] = c.engineExecutionConfiguration.EnableValidationCache
	usage["engine_execution_configuration_validation_cache_size"] = c.engineExecutionConfiguration.ValidationCacheSize
	usage["engine_execution_configuration_disable_exposing_variables_content_on_validation_error"] = c.engineExecutionConfiguration.DisableExposingVariablesContentOnValidationError
	usage["engine_execution_configuration_resolver_max_recyclable_parser_size"] = c.engineExecutionConfiguration.ResolverMaxRecyclableParserSize
	usage["engine_execution_configuration_enable_subgraph_fetch_operation_name"] = c.engineExecutionConfiguration.EnableSubgraphFetchOperationName
	usage["engine_execution_configuration_disable_variables_remapping"] = c.engineExecutionConfiguration.DisableVariablesRemapping

	usage["overrides_subgraphs"] = len(c.overrides.Subgraphs) > 0
	usage["authorization"] = c.authorization != nil
	usage["rate_limiting"] = c.rateLimit != nil

	if c.webSocketConfiguration != nil {
		usage["web_socket_configuration_enabled"] = c.webSocketConfiguration.Enabled
		usage["web_socket_configuration_absinthe_protocol"] = c.webSocketConfiguration.AbsintheProtocol.Enabled
		usage["web_socket_configuration_client_info_from_initial_payload"] = c.webSocketConfiguration.ClientInfoFromInitialPayload.Enabled
		usage["web_socket_configuration_authentication_from_initial_payload"] = c.webSocketConfiguration.Authentication.FromInitialPayload.Enabled
		usage["web_socket_configuration_authentication_export_token"] = c.webSocketConfiguration.Authentication.FromInitialPayload.ExportToken.Enabled
		usage["web_socket_configuration_forward_upgrade_headers"] = c.webSocketConfiguration.ForwardUpgradeHeaders.Enabled
		usage["web_socket_configuration_forward_upgrade_query_params"] = c.webSocketConfiguration.ForwardUpgradeQueryParams.Enabled

	} else {
		usage["web_socket_configuration_enabled"] = false
	}

	usage["subgraph_error_propagation_enabled"] = c.subgraphErrorPropagation.Enabled
	if c.subgraphErrorPropagation.Enabled {
		usage["subgraph_error_propagation_propagate_status_codes"] = c.subgraphErrorPropagation.PropagateStatusCodes
		usage["subgraph_error_propagation_mode"] = string(c.subgraphErrorPropagation.Mode)
		usage["subgraph_error_propagation_rewrite_paths"] = c.subgraphErrorPropagation.RewritePaths
		usage["subgraph_error_propagation_omit_locations"] = c.subgraphErrorPropagation.OmitLocations
		usage["subgraph_error_propagation_omit_extensions"] = c.subgraphErrorPropagation.OmitExtensions
		usage["subgraph_error_propagation_attach_service_name"] = c.subgraphErrorPropagation.AttachServiceName
		usage["subgraph_error_propagation_default_extension_code"] = c.subgraphErrorPropagation.DefaultExtensionCode
		usage["subgraph_error_propagation_allowed_extension_fields"] = c.subgraphErrorPropagation.AllowedExtensionFields
		usage["subgraph_error_propagation_allowed_fields"] = c.subgraphErrorPropagation.AllowedFields
	}

	if c.routerConfigPollerConfig != nil {
		usage["fallback_execution_config_storage_enabled"] = c.routerConfigPollerConfig.ExecutionConfig.FallbackStorage.Enabled
	}
	usage["cache_warmup"] = c.cacheWarmup != nil && c.cacheWarmup.Enabled
	if c.cacheWarmup != nil && c.cacheWarmup.Enabled {
		if c.cacheWarmup.Source.Filesystem != nil {
			usage["cache_warmup_source"] = "filesystem"
		} else {
			usage["cache_warmup_source"] = "cdn"
		}
		usage["cache_warmup_workers"] = c.cacheWarmup.Workers
		usage["cache_warmup_items_per_second"] = c.cacheWarmup.ItemsPerSecond
		usage["cache_warmup_timeout"] = c.cacheWarmup.Timeout.String()
	}

	usage["mcp"] = c.mcp.Enabled
	usage["mcp_enable_arbitrary_operations"] = c.mcp.EnableArbitraryOperations
	usage["mcp_exclude_mutations"] = c.mcp.ExcludeMutations
	usage["mcp_expose_schema"] = c.mcp.ExposeSchema

	usage["cosmo_cdn"] = c.cdnConfig.URL == "https://cosmo-cdn.wundergraph.com"

	usage["static_execution_config"] = c.staticExecutionConfig != nil

	if c.clusterName != "" {
		usage["cluster_name"] = c.clusterName
	} else {
		usage["cluster_name"] = "unknown"
	}

	if c.instanceID != "" {
		usage["instance_id"] = c.instanceID
	} else {
		usage["instance_id"] = "unknown"
	}

	usage["plugins_enabled"] = c.plugins.Enabled

	return usage
}