{
    "$schema": "https://json-schema.org/draft-06/schema",
    "$ref": "#/definitions/OpenTelemetryConfiguration",
    "definitions": {
        "OpenTelemetryConfiguration": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "scheme_version": {
                    "type": "number"
                },
                "sdk": {
                    "$ref": "#/definitions/SDK"
                }
            },
            "required": [
                "scheme_version",
                "sdk"
            ],
            "title": "OpenTelemetryConfiguration"
        },
        "SDK": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "disabled": {
                    "type": "boolean"
                },
                "resource": {
                    "$ref": "#/definitions/Resource"
                },
                "propagators": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "attribute_limits": {
                    "$ref": "#/definitions/Limits"
                },
                "tracer_provider": {
                    "$ref": "#/definitions/TracerProvider"
                },
                "meter_provider": {
                    "$ref": "#/definitions/MeterProvider"
                },
                "logger_provider": {
                    "$ref": "#/definitions/LoggerProvider"
                }
            },
            "required": [
                "disabled"
            ],
            "title": "SDK"
        },
        "Limits": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "attribute_value_length_limit": {
                    "type": "integer"
                },
                "attribute_count_limit": {
                    "type": "integer"
                }
            },
            "required": [
                "attribute_count_limit",
                "attribute_value_length_limit"
            ],
            "title": "Limits"
        },
        "LoggerProvider": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "exporters": {
                    "$ref": "#/definitions/LoggerProviderExporters"
                },
                "log_record_processors": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Processor"
                    }
                },
                "log_record_limits": {
                    "$ref": "#/definitions/Limits"
                }
            },
            "required": [
                "exporters",
                "log_record_limits",
                "log_record_processors"
            ],
            "title": "LoggerProvider"
        },
        "LoggerProviderExporters": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "otlp": {
                    "$ref": "#/definitions/Otlp"
                }
            },
            "required": [
                "otlp"
            ],
            "title": "LoggerProviderExporters"
        },
        "Otlp": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "protocol": {
                    "type": "string",
                    "pattern": "^(http|grpc)\\/(protobuf|json)"
                },
                "endpoint": {
                    "type": "string",
                    "format": "uri",
                    "qt-uri-protocols": [
                        "http"
                    ]
                },
                "certificate": {
                    "type": "string"
                },
                "client_key": {
                    "type": "string"
                },
                "client_certificate": {
                    "type": "string"
                },
                "headers": {
                    "$ref": "#/definitions/Headers"
                },
                "compression": {
                    "type": "string"
                },
                "timeout": {
                    "type": "integer"
                },
                "temporality_preference": {
                    "type": "string"
                },
                "default_histogram_aggregation": {
                    "type": "string"
                }
            },
            "required": [
                "endpoint",
                "protocol"
            ],
            "title": "Otlp"
        },
        "Headers": {
            "type": "object",
            "additionalProperties": true,
            "title": "Headers"
        },
        "Processor": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string"
                },
                "args": {
                    "$ref": "#/definitions/LogRecordProcessorArgs"
                }
            },
            "required": [
                "args",
                "type"
            ],
            "title": "Processor"
        },
        "LogRecordProcessorArgs": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "schedule_delay": {
                    "type": "integer"
                },
                "export_timeout": {
                    "type": "integer"
                },
                "max_queue_size": {
                    "type": "integer"
                },
                "max_export_batch_size": {
                    "type": "integer"
                },
                "exporter": {
                    "type": "string"
                }
            },
            "required": [
                "exporter"
            ],
            "title": "LogRecordProcessorArgs"
        },
        "MeterProvider": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "exporters": {
                    "$ref": "#/definitions/LoggerProviderExporters"
                },
                "metric_readers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/MetricReader"
                    }
                },
                "views": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/ViewElement"
                    }
                }
            },
            "required": [
                "exporters",
                "metric_readers",
                "views"
            ],
            "title": "MeterProvider"
        },
        "MetricReader": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string"
                },
                "args": {
                    "$ref": "#/definitions/MetricReaderArgs"
                }
            },
            "required": [
                "args",
                "type"
            ],
            "title": "MetricReader"
        },
        "MetricReaderArgs": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "interval": {
                    "type": "integer"
                },
                "timeout": {
                    "type": "integer"
                },
                "exporter": {
                    "type": "string"
                },
                "host": {
                    "type": "string"
                },
                "port": {
                    "type": "integer"
                }
            },
            "required": [],
            "title": "MetricReaderArgs"
        },
        "ViewElement": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "selector": {
                    "$ref": "#/definitions/Selector"
                },
                "view": {
                    "$ref": "#/definitions/ViewView"
                }
            },
            "required": [
                "selector",
                "view"
            ],
            "title": "ViewElement"
        },
        "Selector": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "instrument_name": {
                    "type": "string"
                },
                "instrument_type": {
                    "type": "string"
                },
                "meter_name": {
                    "type": "string"
                },
                "meter_version": {
                    "type": "string"
                },
                "meter_schema_url": {
                    "type": "string",
                    "format": "uri",
                    "qt-uri-protocols": [
                        "https"
                    ],
                    "qt-uri-extensions": [
                        ".0"
                    ]
                }
            },
            "required": [
                "instrument_name",
                "instrument_type",
                "meter_name",
                "meter_schema_url",
                "meter_version"
            ],
            "title": "Selector"
        },
        "ViewView": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "name": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "aggregation": {
                    "$ref": "#/definitions/Aggregation"
                },
                "attribute_keys": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "aggregation",
                "attribute_keys",
                "description",
                "name"
            ],
            "title": "ViewView"
        },
        "Aggregation": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "type": {
                    "type": "string"
                },
                "args": {
                    "$ref": "#/definitions/AggregationArgs"
                }
            },
            "required": [
                "args",
                "type"
            ],
            "title": "Aggregation"
        },
        "AggregationArgs": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "boundaries": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    }
                },
                "record_min_max": {
                    "type": "boolean"
                },
                "max_size": {
                    "type": "integer"
                }
            },
            "required": [
                "boundaries",
                "max_size",
                "record_min_max"
            ],
            "title": "AggregationArgs"
        },
        "Resource": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "attributes": {
                    "$ref": "#/definitions/Attributes"
                }
            },
            "required": [
                "attributes"
            ],
            "title": "Resource"
        },
        "Attributes": {
            "type": "object",
            "additionalProperties": true,
            "properties": {
                "service.name": {
                    "type": "string"
                }
            },
            "required": [
                "service.name"
            ],
            "title": "Attributes"
        },
        "TracerProvider": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "exporters": {
                    "$ref": "#/definitions/TracerProviderExporters"
                },
                "span_processors": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/Processor"
                    }
                },
                "span_limits": {
                    "$ref": "#/definitions/SpanLimits"
                },
                "sampler_config": {
                    "$ref": "#/definitions/SamplerConfig"
                },
                "sampler": {
                    "type": "string"
                }
            },
            "required": [
                "exporters",
                "span_processors"
            ],
            "title": "TracerProvider"
        },
        "TracerProviderExporters": {
            "type": "object",
            "additionalProperties": true,
            "patternProperties": {
                "^otlp.*": {
                    "$ref": "#/definitions/Otlp"
                },
                "^zipkin.*": {
                    "$ref": "#/definitions/Zipkin"
                },
                "^jaeger.*": {
                    "$ref": "#/definitions/Jaeger"
                }
            },
            "title": "TracerProviderExporters"
        },
        "Jaeger": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "protocol": {
                    "type": "string",
                    "pattern": "^http/thrift.binary$"
                },
                "endpoint": {
                    "type": "string",
                    "format": "uri",
                    "qt-uri-protocols": [
                        "http"
                    ]
                },
                "timeout": {
                    "type": "integer"
                },
                "user": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "agent_host": {
                    "type": "string"
                },
                "agent_port": {
                    "type": "integer"
                }
            },
            "required": [
                "agent_host",
                "agent_port",
                "endpoint",
                "password",
                "protocol",
                "timeout",
                "user"
            ],
            "title": "Jaeger"
        },
        "Zipkin": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "endpoint": {
                    "type": "string",
                    "format": "uri",
                    "qt-uri-protocols": [
                        "http"
                    ]
                },
                "timeout": {
                    "type": "integer"
                }
            },
            "required": [
                "endpoint",
                "timeout"
            ],
            "title": "Zipkin"
        },
        "SamplerConfig": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "always_on": {
                    "type": "null"
                },
                "always_off": {
                    "type": "null"
                },
                "trace_id_ratio_based": {
                    "$ref": "#/definitions/TraceIDRatioBased"
                },
                "parent_based": {
                    "$ref": "#/definitions/ParentBased"
                },
                "jaeger_remote": {
                    "$ref": "#/definitions/JaegerRemote"
                }
            },
            "required": [
                "always_off",
                "always_on",
                "jaeger_remote",
                "parent_based",
                "trace_id_ratio_based"
            ],
            "title": "SamplerConfig"
        },
        "JaegerRemote": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "endpoint": {
                    "type": "string",
                    "format": "uri",
                    "qt-uri-protocols": [
                        "http"
                    ]
                },
                "polling_interval": {
                    "type": "integer"
                },
                "initial_sampling_rate": {
                    "type": "number"
                }
            },
            "required": [
                "endpoint",
                "initial_sampling_rate",
                "polling_interval"
            ],
            "title": "JaegerRemote"
        },
        "ParentBased": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "root": {
                    "type": "string"
                },
                "remote_parent_sampled": {
                    "type": "string"
                },
                "remote_parent_not_sampled": {
                    "type": "string"
                },
                "local_parent_sampled": {
                    "type": "string"
                },
                "local_parent_not_sampled": {
                    "type": "string"
                }
            },
            "required": [
                "local_parent_not_sampled",
                "local_parent_sampled",
                "remote_parent_not_sampled",
                "remote_parent_sampled",
                "root"
            ],
            "title": "ParentBased"
        },
        "TraceIDRatioBased": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "ratio": {
                    "type": "number"
                }
            },
            "required": [
                "ratio"
            ],
            "title": "TraceIDRatioBased"
        },
        "SpanLimits": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
                "attribute_value_length_limit": {
                    "type": "integer"
                },
                "attribute_count_limit": {
                    "type": "integer"
                },
                "event_count_limit": {
                    "type": "integer"
                },
                "link_count_limit": {
                    "type": "integer"
                },
                "event_attribute_count_limit": {
                    "type": "integer"
                },
                "link_attribute_count_limit": {
                    "type": "integer"
                }
            },
            "required": [
                "attribute_count_limit",
                "attribute_value_length_limit",
                "event_attribute_count_limit",
                "event_count_limit",
                "link_attribute_count_limit",
                "link_count_limit"
            ],
            "title": "SpanLimits"
        }
    }
}