{
    "name": "chronosphere",
    "displayName": "Chronosphere",
    "description": "Chronosphere Pulumi Provider",
    "keywords": [
        "chronosphere",
        "observability",
        "prometheus"
    ],
    "homepage": "https://chronosphere.io",
    "license": "Apache-2.0",
    "attribution": "This Pulumi package is based on the [`chronosphere` Terraform Provider](https://github.com/chronosphereio/terraform-provider-chronosphere).",
    "repository": "https://github.com/chronosphereio/pulumi-chronosphere",
    "pluginDownloadURL": "github://api.github.com/chronosphereio",
    "publisher": "Chronosphere",
    "meta": {
        "moduleFormat": "(.*)(?:/[^/]*)"
    },
    "language": {
        "csharp": {
            "packageReferences": {
                "Pulumi": "3.*"
            },
            "namespaces": {
                "chronosphere": "Pulumi"
            },
            "compatibility": "tfbridge20",
            "rootNamespace": "Chronosphere"
        },
        "go": {
            "importBasePath": "github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere",
            "generateResourceContainerTypes": true,
            "generateExtraInputTypes": true
        },
        "java": {
            "basePackage": "io.chronosphere",
            "buildFiles": "",
            "gradleNexusPublishPluginVersion": "",
            "gradleTest": ""
        },
        "nodejs": {
            "packageName": "@pulumi-chronosphere/pulumi-chronosphere",
            "packageDescription": "Chronosphere Pulumi Provider",
            "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/chronosphereio/terraform-provider-chronosphere)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-chronosphere` repo](https://github.com/chronosphereio/pulumi-chronosphere/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-chronosphere` repo](https://github.com/chronosphereio/terraform-provider-chronosphere/issues).",
            "dependencies": {
                "@pulumi/pulumi": "^3.0.0"
            },
            "devDependencies": {
                "@types/mime": "^2.0.0",
                "@types/node": "^10.0.0"
            },
            "compatibility": "tfbridge20",
            "disableUnionOutputTypes": true
        },
        "python": {
            "packageName": "pulumi_chronosphere",
            "requires": {
                "pulumi": "\u003e=3.0.0,\u003c4.0.0"
            },
            "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/chronosphereio/terraform-provider-chronosphere)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi-chronosphere` repo](https://github.com/chronosphereio/pulumi-chronosphere/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-chronosphere` repo](https://github.com/chronosphereio/terraform-provider-chronosphere/issues).",
            "compatibility": "tfbridge20",
            "pyproject": {}
        }
    },
    "config": {
        "variables": {
            "apiToken": {
                "type": "string",
                "description": "API token used to authenticate against the Chronosphere API. Treat as a secret. Falls back to the\n`CHRONOSPHERE_API_TOKEN` environment variable.\n",
                "defaultInfo": {
                    "environment": [
                        "CHRONOSPHERE_API_TOKEN"
                    ]
                },
                "secret": true
            },
            "disableDryrun": {
                "type": "boolean",
                "description": "Disable the dry-run validation step that runs before every apply. Falls back to the\n`CHRONOSPHERE_DRY_RUN_VALIDATION_DISABLED` environment variable (set to `1` to disable).\n"
            },
            "entityNamespace": {
                "type": "string",
                "description": "Optional namespace prefix applied to entity slugs managed by this provider instance, so multiple Terraform\nconfigurations can coexist in one Chronosphere org. Falls back to the `CHRONOSPHERE_ENTITY_NAMESPACE` environment\nvariable.\n"
            },
            "org": {
                "type": "string",
                "description": "Chronosphere organization name (the subdomain of `\u003corg\u003e.chronosphere.io`). Falls back to the `CHRONOSPHERE_ORG` or\n`CHRONOSPHERE_ORG_NAME` environment variables.\n",
                "defaultInfo": {
                    "environment": [
                        "CHRONOSPHERE_ORG",
                        "CHRONOSPHERE_ORG_NAME"
                    ]
                }
            },
            "unstable": {
                "type": "boolean",
                "description": "Opt into resources and behaviors backed by Chronosphere's unstable config API. Subject to breaking change without\nnotice. Falls back to the `CHRONOSPHERE_UNSTABLE` environment variable (set to `1` to enable).\n"
            }
        },
        "defaults": [
            "org"
        ]
    },
    "types": {
        "chronosphere:index/AzureMetricsIntegrationPrincipal:AzureMetricsIntegrationPrincipal": {
            "properties": {
                "clientId": {
                    "type": "string",
                    "description": "OAuth2 client ID of the managed identity principal.\n"
                },
                "tenantId": {
                    "type": "string",
                    "description": "ID of the Azure tenant that hosts the managed identity principal.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/AzureMetricsIntegrationScrapeConfig:AzureMetricsIntegrationScrapeConfig": {
            "properties": {
                "locations": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Azure locations (regions) to ingest from, applied across all subscriptions. Leave empty for all locations.\n"
                },
                "resourceTypes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationScrapeConfigResourceType:AzureMetricsIntegrationScrapeConfigResourceType"
                    },
                    "description": "Azure resource types to scrape metrics from. Each entry can constrain the set of metric names to a subset.\n"
                },
                "subscriptionIds": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Azure subscription IDs to target. Leave empty to scrape from all subscriptions accessible to the principal.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/AzureMetricsIntegrationScrapeConfigResourceType:AzureMetricsIntegrationScrapeConfigResourceType": {
            "properties": {
                "metricNames": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Metric names to ingest for this resource type. Leave empty for all metrics.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Azure resource type identifier (e.g. `Microsoft.Compute/virtualMachines`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetAlertActionConfig:ConsumptionBudgetAlertActionConfig": {
            "properties": {
                "annotations": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional annotations to set on the generated monitor. Overrides the default `description`, `dashboard`, `resource`, `consumption_budget_slug`, `threshold_type`, and `partition` annotations when keys collide.\n"
                },
                "instantRateSustainSecs": {
                    "type": "integer",
                    "description": "How long instant-rate consumption must remain above the threshold before an alert fires, in seconds. Defaults to 0 (alert immediately on any breach).\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional labels to set on the generated monitor, usable for notification routing. The `resource`, `partition`, and `threshold_type` labels are reserved and cannot be overridden.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetPriority:ConsumptionBudgetPriority": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetPriorityFilter:ConsumptionBudgetPriorityFilter"
                    },
                    "description": "Filters identifying which data matches this priority. Filters are AND-ed together: a request must match every filter to be assigned this priority.\n"
                },
                "priority": {
                    "type": "integer",
                    "description": "Priority order used when dropping data. Priority `10` is dropped first; priority `1` is dropped last.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetPriorityFilter:ConsumptionBudgetPriorityFilter": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter` instead. Slug of the dataset to match against.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionBudgetPriorityFilterLogFilter:ConsumptionBudgetPriorityFilterLogFilter",
                    "description": "Log search filter that matches log data for this priority.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetPriorityFilterLogFilter:ConsumptionBudgetPriorityFilterLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionBudgetThreshold:ConsumptionBudgetThreshold": {
            "properties": {
                "action": {
                    "type": "string",
                    "description": "Action to take when this threshold is exceeded (e.g. drop traffic, fire warning/critical alert).\n"
                },
                "instantRate": {
                    "$ref": "#/types/chronosphere:index/ConsumptionBudgetThresholdInstantRate:ConsumptionBudgetThresholdInstantRate",
                    "description": "Configures an instant-rate threshold value. Set when `type` is an instant-rate type.\n"
                },
                "resourceGroup": {
                    "type": "string",
                    "description": "Resource group the threshold applies to (e.g. metrics, logs, traces). Replaces the deprecated top-level `resource` field.\n"
                },
                "skuGroup": {
                    "type": "string",
                    "description": "SKU group the threshold applies to (e.g. metrics, logs, traces). Replaces the deprecated top-level `resource` field.\n",
                    "deprecationMessage": "use resource_group instead"
                },
                "type": {
                    "type": "string",
                    "description": "Measurement window over which the threshold is evaluated (e.g. instant rate vs. rolling volume).\n"
                },
                "unit": {
                    "type": "string",
                    "description": "Unit in which the threshold value is denominated (e.g. bytes, datapoints).\n"
                },
                "volume": {
                    "$ref": "#/types/chronosphere:index/ConsumptionBudgetThresholdVolume:ConsumptionBudgetThresholdVolume",
                    "description": "Configures a volume threshold value. Set when `type` is a volume type.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetThresholdInstantRate:ConsumptionBudgetThresholdInstantRate": {
            "properties": {
                "fixedValuePerSec": {
                    "type": "integer",
                    "description": "Fixed per-second rate threshold value, expressed in the threshold's `unit`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionBudgetThresholdVolume:ConsumptionBudgetThresholdVolume": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Fixed volume threshold value, expressed in the threshold's `unit`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartition:ConsumptionConfigPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionFilter:ConsumptionConfigPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartition:ConsumptionConfigPartitionPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionFilter:ConsumptionConfigPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionFilterCondition:ConsumptionConfigPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionFilterCondition:ConsumptionConfigPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionFilterConditionLogFilter:ConsumptionConfigPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionFilterConditionLogFilter:ConsumptionConfigPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartition:ConsumptionConfigPartitionPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionFilter:ConsumptionConfigPartitionPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionFilter:ConsumptionConfigPartitionPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartitionPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartitionPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilter"
                    },
                    "description": "Filters identifying which data belongs to this partition. Filters are AND-ed together: a request must match every filter to be assigned to the partition. At most one `IN` filter and one `NOT_IN` filter can be specified.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the partition. Must be unique within its parent partition. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier of the partition. Must be unique within its parent partition. Immutable after creation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilter": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterCondition"
                    },
                    "description": "Conditions evaluated by the filter. Each condition matches by dataset, logs, metrics, or trace data; exactly one of `log_filter`, `metric_filter`, or `dataset_id` must be set per condition.\n"
                },
                "operator": {
                    "type": "string",
                    "description": "Match operator (e.g. `IN`, `NOT_IN`) applied to the filter conditions.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterCondition:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterCondition": {
            "properties": {
                "datasetId": {
                    "type": "string",
                    "description": "Deprecated: use `log_filter`, `metric_filter`, or trace filters instead. Slug of the dataset to match.\n"
                },
                "logFilter": {
                    "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter",
                    "description": "Log search filter matching log data for this condition.\n"
                },
                "metricFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter"
                    },
                    "description": "Metric label filters matched against incoming metric data. Multiple filters are AND-ed together; values support glob patterns including `service:{svc1,svc2}` style alternations.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionLogFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter:ConsumptionConfigPartitionPartitionPartitionPartitionPartitionPartitionFilterConditionMetricFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label's value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/DatasetConfiguration:DatasetConfiguration": {
            "properties": {
                "logDataset": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationLogDataset:DatasetConfigurationLogDataset",
                    "description": "Log-specific dataset configuration. Set only when `type` is a log type.\n"
                },
                "traceDataset": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDataset:DatasetConfigurationTraceDataset",
                    "description": "Trace-specific dataset configuration. Set only when `type` is a trace type.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Dataset type. Determines which of `trace_dataset` or `log_dataset` must be set.\n"
                }
            },
            "type": "object",
            "required": [
                "type"
            ]
        },
        "chronosphere:index/DatasetConfigurationLogDataset:DatasetConfigurationLogDataset": {
            "properties": {
                "matchCriteria": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationLogDatasetMatchCriteria:DatasetConfigurationLogDatasetMatchCriteria",
                    "description": "Log search filter that defines which logs are included in this dataset.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationLogDatasetMatchCriteria:DatasetConfigurationLogDatasetMatchCriteria": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDataset:DatasetConfigurationTraceDataset": {
            "properties": {
                "matchCriteria": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteria:DatasetConfigurationTraceDatasetMatchCriteria",
                    "description": "Log search filter that defines which logs are included in this dataset.\n"
                }
            },
            "type": "object",
            "required": [
                "matchCriteria"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteria:DatasetConfigurationTraceDatasetMatchCriteria": {
            "properties": {
                "scopeFilter": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilter:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilter",
                    "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                },
                "spans": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpan:DatasetConfigurationTraceDatasetMatchCriteriaSpan"
                    },
                    "description": "Span-level conditions. Each block defines a set of conditions that must all be satisfied by a single span in the trace for the trace to match.\n"
                },
                "trace": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTrace:DatasetConfigurationTraceDatasetMatchCriteriaTrace",
                    "description": "Trace-level conditions evaluated against the whole trace (aggregated duration and error status).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilter:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilter": {
            "properties": {
                "spanScopes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScope:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScope"
                    },
                    "description": "Span conditions that select which spans are aggregated. Spans must match at least one block to be included.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScope:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScope": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeDuration:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeError:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeIsRootSpan:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeOperation:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentOperation:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentService:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeService:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeSpanCount:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTag:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeDuration:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeError:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeIsRootSpan:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeOperation:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentOperation:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentService:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeService:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeSpanCount:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTag:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Name of the span tag (span attribute) inspected by this filter.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagNumericValue:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagValue:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagNumericValue:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagValue:DatasetConfigurationTraceDatasetMatchCriteriaScopeFilterSpanScopeTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpan:DatasetConfigurationTraceDatasetMatchCriteriaSpan": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanDuration:DatasetConfigurationTraceDatasetMatchCriteriaSpanDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanError:DatasetConfigurationTraceDatasetMatchCriteriaSpanError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanIsRootSpan:DatasetConfigurationTraceDatasetMatchCriteriaSpanIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanOperation:DatasetConfigurationTraceDatasetMatchCriteriaSpanOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanParentOperation:DatasetConfigurationTraceDatasetMatchCriteriaSpanParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanParentService:DatasetConfigurationTraceDatasetMatchCriteriaSpanParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanService:DatasetConfigurationTraceDatasetMatchCriteriaSpanService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanSpanCount:DatasetConfigurationTraceDatasetMatchCriteriaSpanSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTag:DatasetConfigurationTraceDatasetMatchCriteriaSpanTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanDuration:DatasetConfigurationTraceDatasetMatchCriteriaSpanDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanError:DatasetConfigurationTraceDatasetMatchCriteriaSpanError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanIsRootSpan:DatasetConfigurationTraceDatasetMatchCriteriaSpanIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanOperation:DatasetConfigurationTraceDatasetMatchCriteriaSpanOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanParentOperation:DatasetConfigurationTraceDatasetMatchCriteriaSpanParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanParentService:DatasetConfigurationTraceDatasetMatchCriteriaSpanParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanService:DatasetConfigurationTraceDatasetMatchCriteriaSpanService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanSpanCount:DatasetConfigurationTraceDatasetMatchCriteriaSpanSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTag:DatasetConfigurationTraceDatasetMatchCriteriaSpanTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Name of the span tag (span attribute) inspected by this filter.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTagNumericValue:DatasetConfigurationTraceDatasetMatchCriteriaSpanTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTagValue:DatasetConfigurationTraceDatasetMatchCriteriaSpanTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTagNumericValue:DatasetConfigurationTraceDatasetMatchCriteriaSpanTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaSpanTagValue:DatasetConfigurationTraceDatasetMatchCriteriaSpanTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTrace:DatasetConfigurationTraceDatasetMatchCriteriaTrace": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTraceDuration:DatasetConfigurationTraceDatasetMatchCriteriaTraceDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTraceError:DatasetConfigurationTraceDatasetMatchCriteriaTraceError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTraceDuration:DatasetConfigurationTraceDatasetMatchCriteriaTraceDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DatasetConfigurationTraceDatasetMatchCriteriaTraceError:DatasetConfigurationTraceDatasetMatchCriteriaTraceError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabel:DerivedLabelMetricLabel": {
            "properties": {
                "constructedLabel": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelConstructedLabel:DerivedLabelMetricLabelConstructedLabel",
                    "description": "Constructs the derived label value from a list of value definitions, each gated by a filter on existing labels.\n"
                },
                "mappingLabel": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelMappingLabel:DerivedLabelMetricLabelMappingLabel",
                    "description": "Derives the label value by mapping from an existing source label, optionally translating its values.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DerivedLabelMetricLabelConstructedLabel:DerivedLabelMetricLabelConstructedLabel": {
            "properties": {
                "valueDefinitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelConstructedLabelValueDefinition:DerivedLabelMetricLabelConstructedLabelValueDefinition"
                    },
                    "description": "Ordered list of value definitions. The first definition whose filters match produces the derived label value.\n"
                }
            },
            "type": "object",
            "required": [
                "valueDefinitions"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelConstructedLabelValueDefinition:DerivedLabelMetricLabelConstructedLabelValueDefinition": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelConstructedLabelValueDefinitionFilter:DerivedLabelMetricLabelConstructedLabelValueDefinitionFilter"
                    },
                    "description": "Label filters that must all match for this value definition to apply.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Value assigned to the derived label when this definition's filters match.\n"
                }
            },
            "type": "object",
            "required": [
                "filters",
                "value"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelConstructedLabelValueDefinitionFilter:DerivedLabelMetricLabelConstructedLabelValueDefinitionFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Name of the label to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelMappingLabel:DerivedLabelMetricLabelMappingLabel": {
            "properties": {
                "nameMappings": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMapping:DerivedLabelMetricLabelMappingLabelNameMapping"
                    },
                    "description": "Ordered list of name mappings. The first mapping whose filters match supplies the derived label from its `source_label`.\n"
                },
                "valueMappings": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelMappingLabelValueMapping:DerivedLabelMetricLabelMappingLabelValueMapping"
                    },
                    "description": "Translations from source label values to a normalized target value. Each entry maps a set of source globs to a single target.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMapping:DerivedLabelMetricLabelMappingLabelNameMapping": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMappingFilter:DerivedLabelMetricLabelMappingLabelNameMappingFilter"
                    },
                    "description": "Label filters that must all match for this value definition to apply.\n"
                },
                "sourceLabel": {
                    "type": "string",
                    "description": "Source label on the ingested time series to copy into the derived label.\n"
                },
                "valueMappings": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMappingValueMapping:DerivedLabelMetricLabelMappingLabelNameMappingValueMapping"
                    },
                    "description": "Translations from source label values to a normalized target value. Each entry maps a set of source globs to a single target.\n"
                }
            },
            "type": "object",
            "required": [
                "filters",
                "sourceLabel"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMappingFilter:DerivedLabelMetricLabelMappingLabelNameMappingFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Name of the label to match.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Glob pattern matched against the label value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "valueGlob"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelMappingLabelNameMappingValueMapping:DerivedLabelMetricLabelMappingLabelNameMappingValueMapping": {
            "properties": {
                "sourceValueGlobs": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Glob patterns matched against the source label value. A match maps the value to `target_value`.\n"
                },
                "targetValue": {
                    "type": "string",
                    "description": "Value to assign on the derived label when any `source_value_globs` matches.\n"
                }
            },
            "type": "object",
            "required": [
                "sourceValueGlobs",
                "targetValue"
            ]
        },
        "chronosphere:index/DerivedLabelMetricLabelMappingLabelValueMapping:DerivedLabelMetricLabelMappingLabelValueMapping": {
            "properties": {
                "sourceValueGlobs": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Glob patterns matched against the source label value. A match maps the value to `target_value`.\n"
                },
                "targetValue": {
                    "type": "string",
                    "description": "Value to assign on the derived label when any `source_value_globs` matches.\n"
                }
            },
            "type": "object",
            "required": [
                "sourceValueGlobs",
                "targetValue"
            ]
        },
        "chronosphere:index/DerivedLabelSpanTag:DerivedLabelSpanTag": {
            "properties": {
                "nameMappings": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelSpanTagNameMapping:DerivedLabelSpanTagNameMapping"
                    },
                    "description": "Ordered list of name mappings. The first mapping that matches supplies the derived label from its `source_tag`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DerivedLabelSpanTagNameMapping:DerivedLabelSpanTagNameMapping": {
            "properties": {
                "sourceTag": {
                    "type": "string",
                    "description": "Source span tag name to copy into the derived label.\n"
                }
            },
            "type": "object",
            "required": [
                "sourceTag"
            ]
        },
        "chronosphere:index/DerivedMetricQuery:DerivedMetricQuery": {
            "properties": {
                "query": {
                    "$ref": "#/types/chronosphere:index/DerivedMetricQueryQuery:DerivedMetricQueryQuery",
                    "description": "PromQL query executed when this selector matches.\n"
                },
                "selector": {
                    "$ref": "#/types/chronosphere:index/DerivedMetricQuerySelector:DerivedMetricQuerySelector",
                    "description": "Label matchers that must be present on the derived metric usage for this query to be selected. If omitted, the query matches any usage.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/DerivedMetricQueryQuery:DerivedMetricQueryQuery": {
            "properties": {
                "expr": {
                    "type": "string",
                    "description": "PromQL expression for the derived metric. References declared variables using `$name` syntax (e.g. `cpu_usage{$service}`).\n"
                },
                "variables": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedMetricQueryQueryVariable:DerivedMetricQueryQueryVariable"
                    },
                    "description": "Variables that can be substituted into `expr` at query time as label selectors.\n"
                }
            },
            "type": "object",
            "required": [
                "expr"
            ]
        },
        "chronosphere:index/DerivedMetricQueryQueryVariable:DerivedMetricQueryQueryVariable": {
            "properties": {
                "defaultSelector": {
                    "type": "string",
                    "description": "PromQL label selector used when no override is supplied by the derived metric usage.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Variable name as referenced in `expr` (e.g. `service` for `$service`).\n"
                }
            },
            "type": "object",
            "required": [
                "defaultSelector",
                "name"
            ]
        },
        "chronosphere:index/DerivedMetricQuerySelector:DerivedMetricQuerySelector": {
            "properties": {
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Labels that must match (key/value) on the derived metric usage for the selector to apply.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/DropRuleValueBasedDrop:DropRuleValueBasedDrop": {
            "properties": {
                "targetDropValue": {
                    "type": "number",
                    "description": "Data point value at which matching points are dropped.\n"
                }
            },
            "type": "object",
            "required": [
                "targetDropValue"
            ]
        },
        "chronosphere:index/GcpMetricsIntegrationMetricGroup:GcpMetricsIntegrationMetricGroup": {
            "properties": {
                "filters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroupFilter:GcpMetricsIntegrationMetricGroupFilter"
                    },
                    "description": "Label filters applied to metrics in this group. All filters must match for a metric to be ingested.\n"
                },
                "prefixes": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of Google Cloud metric prefixes to ingest (e.g. `compute.googleapis.com/`).\n"
                },
                "projectId": {
                    "type": "string",
                    "description": "Google Cloud project ID to read metrics from. The configured service account must have access.\n"
                },
                "rollupRules": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRule:GcpMetricsIntegrationMetricGroupRollupRule"
                    },
                    "description": "Server-side aggregation rules applied to metrics in this group before they are stored.\n"
                }
            },
            "type": "object",
            "required": [
                "projectId"
            ]
        },
        "chronosphere:index/GcpMetricsIntegrationMetricGroupFilter:GcpMetricsIntegrationMetricGroupFilter": {
            "properties": {
                "context": {
                    "type": "string",
                    "description": "Label context, e.g. resource vs. metric label. See the Chronosphere GCP integration documentation for accepted values.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to filter on.\n"
                },
                "valueGlob": {
                    "type": "string",
                    "description": "Value pattern using glob syntax (e.g. `prod-*`). An exact match is applied when no glob characters are present.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRule:GcpMetricsIntegrationMetricGroupRollupRule": {
            "properties": {
                "aggregation": {
                    "type": "string",
                    "description": "Aggregation function applied across the dropped labels (e.g. sum, max).\n"
                },
                "labelPolicy": {
                    "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicy:GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicy",
                    "description": "Specifies which labels to preserve during aggregation. Labels not listed are dropped.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Fully-qualified Google Cloud metric name the rollup rule targets (e.g. `cloudsql.googleapis.com/database/uptime`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicy:GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicy": {
            "properties": {
                "keeps": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicyKeep:GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicyKeep"
                    },
                    "description": "Labels to retain after aggregation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicyKeep:GcpMetricsIntegrationMetricGroupRollupRuleLabelPolicyKeep": {
            "properties": {
                "context": {
                    "type": "string",
                    "description": "Label context, e.g. resource vs. metric label. See the Chronosphere GCP integration documentation for accepted values.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to filter on.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/GcpMetricsIntegrationServiceAccount:GcpMetricsIntegrationServiceAccount": {
            "properties": {
                "clientEmail": {
                    "type": "string",
                    "description": "Email address of the Google Cloud service account to impersonate for authentication.\n"
                }
            },
            "type": "object",
            "required": [
                "clientEmail"
            ]
        },
        "chronosphere:index/LogAllocationConfigDatasetAllocation:LogAllocationConfigDatasetAllocation": {
            "properties": {
                "allocation": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocationAllocation:LogAllocationConfigDatasetAllocationAllocation",
                    "description": "Resource allocation for the dataset, expressed as a share of the overall log license.\n"
                },
                "datasetId": {
                    "type": "string",
                    "description": "Slug of the dataset this allocation applies to.\n"
                },
                "priorities": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocationPriorities:LogAllocationConfigDatasetAllocationPriorities",
                    "description": "Defines high and low priority match criteria. Low priority logs are dropped first when the allocation is exhausted, then default priority, with high priority dropped last.\n"
                }
            },
            "type": "object",
            "required": [
                "allocation",
                "datasetId"
            ]
        },
        "chronosphere:index/LogAllocationConfigDatasetAllocationAllocation:LogAllocationConfigDatasetAllocationAllocation": {
            "properties": {
                "percentOfLicense": {
                    "type": "number",
                    "description": "Percentage of the tenant's log license to allocate to this dataset, expressed as a number between 0 and 100.\n"
                }
            },
            "type": "object",
            "required": [
                "percentOfLicense"
            ]
        },
        "chronosphere:index/LogAllocationConfigDatasetAllocationPriorities:LogAllocationConfigDatasetAllocationPriorities": {
            "properties": {
                "highPriorityFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocationPrioritiesHighPriorityFilter:LogAllocationConfigDatasetAllocationPrioritiesHighPriorityFilter"
                    },
                    "description": "List of log search filters. Filters are combined as OR statements so only one filter needs to match.\n"
                },
                "lowPriorityFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocationPrioritiesLowPriorityFilter:LogAllocationConfigDatasetAllocationPrioritiesLowPriorityFilter"
                    },
                    "description": "List of log search filters. Filters are combined as OR statements so only one filter needs to match.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogAllocationConfigDatasetAllocationPrioritiesHighPriorityFilter:LogAllocationConfigDatasetAllocationPrioritiesHighPriorityFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/LogAllocationConfigDatasetAllocationPrioritiesLowPriorityFilter:LogAllocationConfigDatasetAllocationPrioritiesLowPriorityFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/LogAllocationConfigDefaultDataset:LogAllocationConfigDefaultDataset": {
            "properties": {
                "allocation": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDatasetAllocation:LogAllocationConfigDefaultDatasetAllocation",
                    "description": "Resource allocation for the dataset, expressed as a share of the overall log license.\n"
                },
                "priorities": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDatasetPriorities:LogAllocationConfigDefaultDatasetPriorities",
                    "description": "Defines high and low priority match criteria. Low priority logs are dropped first when the allocation is exhausted, then default priority, with high priority dropped last.\n"
                }
            },
            "type": "object",
            "required": [
                "allocation"
            ]
        },
        "chronosphere:index/LogAllocationConfigDefaultDatasetAllocation:LogAllocationConfigDefaultDatasetAllocation": {
            "properties": {
                "percentOfLicense": {
                    "type": "number",
                    "description": "Percentage of the tenant's log license to allocate to this dataset, expressed as a number between 0 and 100.\n"
                }
            },
            "type": "object",
            "required": [
                "percentOfLicense"
            ]
        },
        "chronosphere:index/LogAllocationConfigDefaultDatasetPriorities:LogAllocationConfigDefaultDatasetPriorities": {
            "properties": {
                "highPriorityFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDatasetPrioritiesHighPriorityFilter:LogAllocationConfigDefaultDatasetPrioritiesHighPriorityFilter"
                    },
                    "description": "List of log search filters. Filters are combined as OR statements so only one filter needs to match.\n"
                },
                "lowPriorityFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDatasetPrioritiesLowPriorityFilter:LogAllocationConfigDefaultDatasetPrioritiesLowPriorityFilter"
                    },
                    "description": "List of log search filters. Filters are combined as OR statements so only one filter needs to match.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogAllocationConfigDefaultDatasetPrioritiesHighPriorityFilter:LogAllocationConfigDefaultDatasetPrioritiesHighPriorityFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/LogAllocationConfigDefaultDatasetPrioritiesLowPriorityFilter:LogAllocationConfigDefaultDatasetPrioritiesLowPriorityFilter": {
            "properties": {
                "query": {
                    "type": "string",
                    "description": "Log search query that selects matching logs. Supports only top-level operations; nested clauses are not allowed and only one type of `AND` or `OR` operator can be used.\n"
                }
            },
            "type": "object",
            "required": [
                "query"
            ]
        },
        "chronosphere:index/LogControlConfigRule:LogControlConfigRule": {
            "properties": {
                "dropField": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleDropField:LogControlConfigRuleDropField",
                    "description": "Configuration for the `DROP_FIELD` action, which removes fields from matching logs.\n"
                },
                "emitMetrics": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetrics:LogControlConfigRuleEmitMetrics",
                    "description": "Configuration for the `EMIT_METRICS` action, which derives Prometheus metrics from matching logs.\n"
                },
                "filter": {
                    "type": "string",
                    "description": "Log query filter that selects matching logs. The control action applies only to logs that match.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Execution mode for the rule (for example, `ENABLED` or `DISABLED`).\n"
                },
                "name": {
                    "type": "string",
                    "description": "User-defined name for the control rule.\n"
                },
                "parseField": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseField:LogControlConfigRuleParseField",
                    "description": "Configuration for the `PARSE_FIELD` action, which parses a field with a regex, key/value, or grok parser and writes the result to another field.\n"
                },
                "replaceField": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleReplaceField:LogControlConfigRuleReplaceField",
                    "description": "Configuration for the `REPLACE_FIELD` action, which rewrites field values in matching logs.\n"
                },
                "sample": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleSample:LogControlConfigRuleSample",
                    "description": "Configuration for the `SAMPLE_LOGS` action, which keeps a fraction of matching logs.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Type of control action this rule performs. Exactly one of the matching action blocks (`sample`, `drop_field`, `emit_metrics`, `replace_field`, `parse_field`) must be configured.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleDropField:LogControlConfigRuleDropField": {
            "properties": {
                "fieldRegex": {
                    "type": "string",
                    "description": "Regular expression that selects which fields to drop.\n"
                },
                "parentPath": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleDropFieldParentPath:LogControlConfigRuleDropFieldParentPath",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleDropFieldParentPath:LogControlConfigRuleDropFieldParentPath": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetrics:LogControlConfigRuleEmitMetrics": {
            "properties": {
                "counter": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsCounter:LogControlConfigRuleEmitMetricsCounter",
                    "description": "Emit a counter metric. Exactly one of `counter`, `gauge`, or `histogram` must be set.\n"
                },
                "dropLog": {
                    "type": "boolean",
                    "description": "If `true`, drops the entire log after emitting the metric.\n"
                },
                "gauge": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsGauge:LogControlConfigRuleEmitMetricsGauge",
                    "description": "Emit a gauge metric. Exactly one of `counter`, `gauge`, or `histogram` must be set.\n"
                },
                "histogram": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsHistogram:LogControlConfigRuleEmitMetricsHistogram",
                    "description": "Emit a histogram metric. Exactly one of `counter`, `gauge`, or `histogram` must be set.\n"
                },
                "labels": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsLabel:LogControlConfigRuleEmitMetricsLabel"
                    },
                    "description": "Labels to attach to the generated metric, specified as key/value pairs mapping a Prometheus label name to a log field path.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Metric emission mode that controls how the metric is generated from matching logs.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the generated metric. Must conform to Prometheus naming conventions and be unique within the tenant.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsCounter:LogControlConfigRuleEmitMetricsCounter": {
            "properties": {
                "value": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsCounterValue:LogControlConfigRuleEmitMetricsCounterValue",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsCounterValue:LogControlConfigRuleEmitMetricsCounterValue": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsGauge:LogControlConfigRuleEmitMetricsGauge": {
            "properties": {
                "aggregationType": {
                    "type": "string",
                    "description": "How multiple values are aggregated into the emitted gauge (for example, `LAST`, `MIN`, `MAX`).\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsGaugeValue:LogControlConfigRuleEmitMetricsGaugeValue",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsGaugeValue:LogControlConfigRuleEmitMetricsGaugeValue": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsHistogram:LogControlConfigRuleEmitMetricsHistogram": {
            "properties": {
                "value": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsHistogramValue:LogControlConfigRuleEmitMetricsHistogramValue",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsHistogramValue:LogControlConfigRuleEmitMetricsHistogramValue": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsLabel:LogControlConfigRuleEmitMetricsLabel": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Prometheus label name to set on the emitted metric.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleEmitMetricsLabelValue:LogControlConfigRuleEmitMetricsLabelValue",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleEmitMetricsLabelValue:LogControlConfigRuleEmitMetricsLabelValue": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleParseField:LogControlConfigRuleParseField": {
            "properties": {
                "destination": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldDestination:LogControlConfigRuleParseFieldDestination",
                    "description": "Path to a field within a log record.\n"
                },
                "parser": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldParser:LogControlConfigRuleParseFieldParser",
                    "description": "Parser configuration. Exactly one of `regex_parser`, `key_value_parser`, or `grok_parser` must be set, matching `parser_type`.\n"
                },
                "source": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldSource:LogControlConfigRuleParseFieldSource",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object",
            "required": [
                "parser"
            ]
        },
        "chronosphere:index/LogControlConfigRuleParseFieldDestination:LogControlConfigRuleParseFieldDestination": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleParseFieldParser:LogControlConfigRuleParseFieldParser": {
            "properties": {
                "grokParser": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldParserGrokParser:LogControlConfigRuleParseFieldParserGrokParser",
                    "description": "Grok parser configuration. Only set when `parser_type` is `GROK`.\n"
                },
                "keyValueParser": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldParserKeyValueParser:LogControlConfigRuleParseFieldParserKeyValueParser",
                    "description": "Key/value parser configuration. Only set when `parser_type` is `KEY_VALUE`. Duplicate keys keep the first occurrence.\n"
                },
                "parserType": {
                    "type": "string",
                    "description": "Type of parser to apply. Determines which of `regex_parser`, `key_value_parser`, or `grok_parser` must be set.\n"
                },
                "regexParser": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleParseFieldParserRegexParser:LogControlConfigRuleParseFieldParserRegexParser",
                    "description": "Regex parser configuration. Only set when `parser_type` is `REGEX`.\n"
                }
            },
            "type": "object",
            "required": [
                "parserType"
            ]
        },
        "chronosphere:index/LogControlConfigRuleParseFieldParserGrokParser:LogControlConfigRuleParseFieldParserGrokParser": {
            "properties": {
                "pattern": {
                    "type": "string",
                    "description": "Grok pattern to apply. Named capture groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "pattern"
            ]
        },
        "chronosphere:index/LogControlConfigRuleParseFieldParserKeyValueParser:LogControlConfigRuleParseFieldParserKeyValueParser": {
            "properties": {
                "delimiter": {
                    "type": "string",
                    "description": "String used to split the input into individual key/value pairs.\n"
                },
                "pairSeparator": {
                    "type": "string",
                    "description": "String used to split each pair into a key and value.\n"
                },
                "trimSet": {
                    "type": "string",
                    "description": "Unicode code points to trim from the beginning and end of each key and value.\n"
                }
            },
            "type": "object",
            "required": [
                "delimiter",
                "pairSeparator"
            ]
        },
        "chronosphere:index/LogControlConfigRuleParseFieldParserRegexParser:LogControlConfigRuleParseFieldParserRegexParser": {
            "properties": {
                "regex": {
                    "type": "string",
                    "description": "RE2 regular expression pattern. Named capturing groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "regex"
            ]
        },
        "chronosphere:index/LogControlConfigRuleParseFieldSource:LogControlConfigRuleParseFieldSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleReplaceField:LogControlConfigRuleReplaceField": {
            "properties": {
                "field": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleReplaceFieldField:LogControlConfigRuleReplaceFieldField",
                    "description": "Path to a field within a log record.\n"
                },
                "mappedValue": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleReplaceFieldMappedValue:LogControlConfigRuleReplaceFieldMappedValue",
                    "description": "Replace field values using a key/value lookup table. Exactly one of `mapped_value` or `static_value` must be set.\n"
                },
                "replaceAll": {
                    "type": "boolean",
                    "description": "If `true`, replaces all matches. If `false`, replaces only the first match.\n"
                },
                "replaceMode": {
                    "type": "string",
                    "description": "Mode that controls how the replacement is applied to matched content.\n"
                },
                "replaceRegex": {
                    "type": "string",
                    "description": "Regular expression that selects which part of the field value to replace.\n"
                },
                "staticValue": {
                    "$ref": "#/types/chronosphere:index/LogControlConfigRuleReplaceFieldStaticValue:LogControlConfigRuleReplaceFieldStaticValue",
                    "description": "Replace matched content with a static string. Exactly one of `mapped_value` or `static_value` must be set.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleReplaceFieldField:LogControlConfigRuleReplaceFieldField": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleReplaceFieldMappedValue:LogControlConfigRuleReplaceFieldMappedValue": {
            "properties": {
                "defaultValue": {
                    "type": "string",
                    "description": "Value to substitute when no matching key is found, when `use_default` is `true`.\n"
                },
                "pairs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogControlConfigRuleReplaceFieldMappedValuePair:LogControlConfigRuleReplaceFieldMappedValuePair"
                    },
                    "description": "List of key/value pairs that map matched content to replacement values.\n"
                },
                "useDefault": {
                    "type": "boolean",
                    "description": "If `true`, falls back to `default_value` when no key matches. If `false`, leaves the value unchanged on a miss.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleReplaceFieldMappedValuePair:LogControlConfigRuleReplaceFieldMappedValuePair": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Prometheus label name to set on the emitted metric.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleReplaceFieldStaticValue:LogControlConfigRuleReplaceFieldStaticValue": {
            "properties": {
                "value": {
                    "type": "string",
                    "description": "Path to a field within a log record.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogControlConfigRuleSample:LogControlConfigRuleSample": {
            "properties": {
                "rate": {
                    "type": "number",
                    "description": "Fraction of matching logs to keep, in the range `[0, 1]` (for example, `0.25` keeps 25%).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalization:LogIngestConfigFieldNormalization": {
            "properties": {
                "customFieldNormalizations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalization:LogIngestConfigFieldNormalizationCustomFieldNormalization"
                    },
                    "description": "Normalization rules for additional custom fields. These fields are not indexed; use them for things like environment, region, or user ID.\n"
                },
                "message": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationMessage:LogIngestConfigFieldNormalizationMessage",
                    "description": "Rule that extracts and transforms a string value from a log field, with optional regex sanitization, default value, and value mapping.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationService:LogIngestConfigFieldNormalizationService",
                    "description": "Rule that extracts and transforms a string value from a log field, with optional regex sanitization, default value, and value mapping.\n"
                },
                "severity": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationSeverity:LogIngestConfigFieldNormalizationSeverity",
                    "description": "Rule that extracts and transforms a string value from a log field, with optional regex sanitization, default value, and value mapping.\n"
                },
                "timestamp": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationTimestamp:LogIngestConfigFieldNormalizationTimestamp",
                    "description": "Normalization rule for the well-known `timestamp` field.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalization:LogIngestConfigFieldNormalizationCustomFieldNormalization": {
            "properties": {
                "normalization": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalization:LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalization",
                    "description": "Rule that extracts and transforms a string value from a log field, with optional regex sanitization, default value, and value mapping.\n"
                },
                "target": {
                    "type": "string",
                    "description": "Name of the target field where the normalized value is stored.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalization:LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalization": {
            "properties": {
                "defaultValue": {
                    "type": "string",
                    "description": "Value to use when no source field contains a value.\n"
                },
                "sanitizePatterns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Regex patterns used to extract and sanitize the value. Each pattern must have exactly one capturing group, whose contents are used as the result.\n"
                },
                "sources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalizationSource:LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalizationSource"
                    },
                    "description": "Ordered list of field paths to check for values. The first non-empty value found is used.\n"
                },
                "valueMap": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Optional mapping that normalizes raw values to canonical ones (for example, `warn` to `WARNING`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalizationSource:LogIngestConfigFieldNormalizationCustomFieldNormalizationNormalizationSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationMessage:LogIngestConfigFieldNormalizationMessage": {
            "properties": {
                "defaultValue": {
                    "type": "string",
                    "description": "Value to use when no source field contains a value.\n"
                },
                "sanitizePatterns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Regex patterns used to extract and sanitize the value. Each pattern must have exactly one capturing group, whose contents are used as the result.\n"
                },
                "sources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationMessageSource:LogIngestConfigFieldNormalizationMessageSource"
                    },
                    "description": "Ordered list of field paths to check for values. The first non-empty value found is used.\n"
                },
                "valueMap": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Optional mapping that normalizes raw values to canonical ones (for example, `warn` to `WARNING`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationMessageSource:LogIngestConfigFieldNormalizationMessageSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationService:LogIngestConfigFieldNormalizationService": {
            "properties": {
                "defaultValue": {
                    "type": "string",
                    "description": "Value to use when no source field contains a value.\n"
                },
                "sanitizePatterns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Regex patterns used to extract and sanitize the value. Each pattern must have exactly one capturing group, whose contents are used as the result.\n"
                },
                "sources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationServiceSource:LogIngestConfigFieldNormalizationServiceSource"
                    },
                    "description": "Ordered list of field paths to check for values. The first non-empty value found is used.\n"
                },
                "valueMap": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Optional mapping that normalizes raw values to canonical ones (for example, `warn` to `WARNING`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationServiceSource:LogIngestConfigFieldNormalizationServiceSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationSeverity:LogIngestConfigFieldNormalizationSeverity": {
            "properties": {
                "defaultValue": {
                    "type": "string",
                    "description": "Value to use when no source field contains a value.\n"
                },
                "sanitizePatterns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Regex patterns used to extract and sanitize the value. Each pattern must have exactly one capturing group, whose contents are used as the result.\n"
                },
                "sources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationSeveritySource:LogIngestConfigFieldNormalizationSeveritySource"
                    },
                    "description": "Ordered list of field paths to check for values. The first non-empty value found is used.\n"
                },
                "valueMap": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Optional mapping that normalizes raw values to canonical ones (for example, `warn` to `WARNING`).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationSeveritySource:LogIngestConfigFieldNormalizationSeveritySource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationTimestamp:LogIngestConfigFieldNormalizationTimestamp": {
            "properties": {
                "sources": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalizationTimestampSource:LogIngestConfigFieldNormalizationTimestampSource"
                    },
                    "description": "Ordered list of field paths to check for values. The first non-empty value found is used.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/LogIngestConfigFieldNormalizationTimestampSource:LogIngestConfigFieldNormalizationTimestampSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParser:LogIngestConfigFieldParser": {
            "properties": {
                "destination": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserDestination:LogIngestConfigFieldParserDestination",
                    "description": "Path to write the parsed output to. If omitted, parsed fields are written at the root.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mode that controls when the field parser runs on incoming logs.\n"
                },
                "parser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserParser:LogIngestConfigFieldParserParser",
                    "description": "Parser configuration. Exactly one of `regex_parser`, `key_value_parser`, or `grok_parser` must be set, matching `parser_type`.\n"
                },
                "source": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserSource:LogIngestConfigFieldParserSource",
                    "description": "Path of the field to parse.\n"
                }
            },
            "type": "object",
            "required": [
                "parser",
                "source"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserDestination:LogIngestConfigFieldParserDestination": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserParser:LogIngestConfigFieldParserParser": {
            "properties": {
                "grokParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserParserGrokParser:LogIngestConfigFieldParserParserGrokParser",
                    "description": "Grok parser configuration. Only set when `parser_type` is `GROK`.\n"
                },
                "keyValueParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserParserKeyValueParser:LogIngestConfigFieldParserParserKeyValueParser",
                    "description": "Key/value parser configuration. Only set when `parser_type` is `KEY_VALUE`. Duplicate keys keep the first occurrence.\n"
                },
                "parserType": {
                    "type": "string",
                    "description": "Type of parser to apply. Determines which of `regex_parser`, `key_value_parser`, or `grok_parser` must be set.\n"
                },
                "regexParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParserParserRegexParser:LogIngestConfigFieldParserParserRegexParser",
                    "description": "Regex parser configuration. Only set when `parser_type` is `REGEX`.\n"
                }
            },
            "type": "object",
            "required": [
                "parserType"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserParserGrokParser:LogIngestConfigFieldParserParserGrokParser": {
            "properties": {
                "pattern": {
                    "type": "string",
                    "description": "Grok pattern to apply. Named capture groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "pattern"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserParserKeyValueParser:LogIngestConfigFieldParserParserKeyValueParser": {
            "properties": {
                "delimiter": {
                    "type": "string",
                    "description": "String used to split the input into individual key/value pairs.\n"
                },
                "pairSeparator": {
                    "type": "string",
                    "description": "String used to split each pair into a key and value.\n"
                },
                "trimSet": {
                    "type": "string",
                    "description": "Unicode code points to trim from the beginning and end of each key and value.\n"
                }
            },
            "type": "object",
            "required": [
                "delimiter",
                "pairSeparator"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserParserRegexParser:LogIngestConfigFieldParserParserRegexParser": {
            "properties": {
                "regex": {
                    "type": "string",
                    "description": "RE2 regular expression pattern. Named capturing groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "regex"
            ]
        },
        "chronosphere:index/LogIngestConfigFieldParserSource:LogIngestConfigFieldParserSource": {
            "properties": {
                "selector": {
                    "type": "string",
                    "description": "Field path selector. Use `parent[child]` syntax to indicate nesting.\n"
                }
            },
            "type": "object",
            "required": [
                "selector"
            ]
        },
        "chronosphere:index/LogIngestConfigPlaintextParser:LogIngestConfigPlaintextParser": {
            "properties": {
                "keepOriginal": {
                    "type": "boolean",
                    "description": "If `true`, the original log is retained after parsing and stored under the `plaintext_log` key. Defaults to `false`.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mode that controls how the parser matches incoming plaintext logs.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the parser. Must be unique within the configuration.\n"
                },
                "parser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParserParser:LogIngestConfigPlaintextParserParser",
                    "description": "Parser configuration. Exactly one of `regex_parser`, `key_value_parser`, or `grok_parser` must be set, matching `parser_type`.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "parser"
            ]
        },
        "chronosphere:index/LogIngestConfigPlaintextParserParser:LogIngestConfigPlaintextParserParser": {
            "properties": {
                "grokParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParserParserGrokParser:LogIngestConfigPlaintextParserParserGrokParser",
                    "description": "Grok parser configuration. Only set when `parser_type` is `GROK`.\n"
                },
                "keyValueParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParserParserKeyValueParser:LogIngestConfigPlaintextParserParserKeyValueParser",
                    "description": "Key/value parser configuration. Only set when `parser_type` is `KEY_VALUE`. Duplicate keys keep the first occurrence.\n"
                },
                "parserType": {
                    "type": "string",
                    "description": "Type of parser to apply. Determines which of `regex_parser`, `key_value_parser`, or `grok_parser` must be set.\n"
                },
                "regexParser": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParserParserRegexParser:LogIngestConfigPlaintextParserParserRegexParser",
                    "description": "Regex parser configuration. Only set when `parser_type` is `REGEX`.\n"
                }
            },
            "type": "object",
            "required": [
                "parserType"
            ]
        },
        "chronosphere:index/LogIngestConfigPlaintextParserParserGrokParser:LogIngestConfigPlaintextParserParserGrokParser": {
            "properties": {
                "pattern": {
                    "type": "string",
                    "description": "Grok pattern to apply. Named capture groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "pattern"
            ]
        },
        "chronosphere:index/LogIngestConfigPlaintextParserParserKeyValueParser:LogIngestConfigPlaintextParserParserKeyValueParser": {
            "properties": {
                "delimiter": {
                    "type": "string",
                    "description": "String used to split the input into individual key/value pairs.\n"
                },
                "pairSeparator": {
                    "type": "string",
                    "description": "String used to split each pair into a key and value.\n"
                },
                "trimSet": {
                    "type": "string",
                    "description": "Unicode code points to trim from the beginning and end of each key and value.\n"
                }
            },
            "type": "object",
            "required": [
                "delimiter",
                "pairSeparator"
            ]
        },
        "chronosphere:index/LogIngestConfigPlaintextParserParserRegexParser:LogIngestConfigPlaintextParserParserRegexParser": {
            "properties": {
                "regex": {
                    "type": "string",
                    "description": "RE2 regular expression pattern. Named capturing groups become named fields in the extracted log.\n"
                }
            },
            "type": "object",
            "required": [
                "regex"
            ]
        },
        "chronosphere:index/LogscaleActionEmailAction:LogscaleActionEmailAction": {
            "properties": {
                "attachCsv": {
                    "type": "boolean",
                    "description": "If `true`, attaches the query result set as a CSV file.\n"
                },
                "bodyTemplate": {
                    "type": "string",
                    "description": "Body of the email. Supports Go template syntax with values from the query result.\n"
                },
                "recipients": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of email addresses to send the message to.\n"
                },
                "subjectTemplate": {
                    "type": "string",
                    "description": "Subject of the email. Supports Go template syntax with values from the query result.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "recipients"
            ]
        },
        "chronosphere:index/LogscaleActionHumioAction:LogscaleActionHumioAction": {
            "properties": {
                "ingestToken": {
                    "type": "string",
                    "description": "Ingest token for the target repository.\n"
                }
            },
            "type": "object",
            "required": [
                "ingestToken"
            ]
        },
        "chronosphere:index/LogscaleActionOpsGenieAction:LogscaleActionOpsGenieAction": {
            "properties": {
                "apiUrl": {
                    "type": "string",
                    "description": "OpsGenie webhook URL to send the request to.\n"
                },
                "opsGenieKey": {
                    "type": "string",
                    "description": "Key used to authenticate with OpsGenie.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "apiUrl",
                "opsGenieKey"
            ]
        },
        "chronosphere:index/LogscaleActionPagerDutyAction:LogscaleActionPagerDutyAction": {
            "properties": {
                "routingKey": {
                    "type": "string",
                    "description": "Routing key used to authenticate with PagerDuty.\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity attached to the PagerDuty event.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "routingKey",
                "severity"
            ]
        },
        "chronosphere:index/LogscaleActionSlackAction:LogscaleActionSlackAction": {
            "properties": {
                "fields": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Fields to include in the Slack message. Values support Go template syntax with the query result.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Slack incoming webhook URL to send the request to.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "url"
            ]
        },
        "chronosphere:index/LogscaleActionSlackPostMessageAction:LogscaleActionSlackPostMessageAction": {
            "properties": {
                "apiToken": {
                    "type": "string",
                    "description": "Slack API token used to authenticate the request.\n"
                },
                "channels": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of Slack channels to post the message to.\n"
                },
                "fields": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Fields to include in the Slack message. Values support Go template syntax with the query result.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "apiToken",
                "channels"
            ]
        },
        "chronosphere:index/LogscaleActionUploadFileAction:LogscaleActionUploadFileAction": {
            "properties": {
                "fileName": {
                    "type": "string",
                    "description": "Name to use for the uploaded file.\n"
                }
            },
            "type": "object",
            "required": [
                "fileName"
            ]
        },
        "chronosphere:index/LogscaleActionVictorOpsAction:LogscaleActionVictorOpsAction": {
            "properties": {
                "messageType": {
                    "type": "string",
                    "description": "Type of the VictorOps message to send (for example, `CRITICAL`, `WARNING`, `INFO`).\n"
                },
                "notifyUrl": {
                    "type": "string",
                    "description": "VictorOps webhook URL to send the request to.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "messageType",
                "notifyUrl"
            ]
        },
        "chronosphere:index/LogscaleActionWebhookAction:LogscaleActionWebhookAction": {
            "properties": {
                "bodyTemplate": {
                    "type": "string",
                    "description": "Body of the request. Supports Go template syntax with values from the query result.\n"
                },
                "headers": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Headers to include on the HTTP or HTTPS request.\n"
                },
                "ignoreSsl": {
                    "type": "boolean",
                    "description": "If `true`, skips SSL certificate verification for the request.\n"
                },
                "method": {
                    "type": "string",
                    "description": "HTTP method used for the webhook request.\n"
                },
                "url": {
                    "type": "string",
                    "description": "URL to send the HTTP or HTTPS request to.\n"
                },
                "useProxy": {
                    "type": "boolean",
                    "description": "If `true`, sends the request through the configured outbound proxy.\n"
                }
            },
            "type": "object",
            "required": [
                "method",
                "url"
            ]
        },
        "chronosphere:index/MappingRuleStoragePolicy:MappingRuleStoragePolicy": {
            "properties": {
                "resolution": {
                    "type": "string",
                    "description": "Resolution at which mapped data points are stored.\n"
                },
                "retention": {
                    "type": "string",
                    "description": "Retention duration for mapped data points.\n"
                }
            },
            "type": "object",
            "required": [
                "resolution",
                "retention"
            ]
        },
        "chronosphere:index/MonitorNotificationTemplate:MonitorNotificationTemplate": {
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Body/description template for the notification.\n"
                },
                "title": {
                    "type": "string",
                    "description": "Title template for the notification.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/MonitorQuery:MonitorQuery": {
            "properties": {
                "graphiteExpr": {
                    "type": "string",
                    "description": "Graphite expression evaluated by the monitor.\n"
                },
                "loggingExpr": {
                    "type": "string",
                    "description": "Log query expression evaluated by the monitor.\n"
                },
                "prometheusExpr": {
                    "type": "string",
                    "description": "PromQL expression evaluated by the monitor.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/MonitorSchedule:MonitorSchedule": {
            "properties": {
                "ranges": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/MonitorScheduleRange:MonitorScheduleRange"
                    },
                    "description": "Time-of-day ranges during which the monitor is active. The monitor is inactive outside these ranges.\n"
                },
                "timezone": {
                    "type": "string",
                    "description": "IANA timezone name (e.g. `America/New_York`) used to interpret `range` values.\n"
                }
            },
            "type": "object",
            "required": [
                "timezone"
            ]
        },
        "chronosphere:index/MonitorScheduleRange:MonitorScheduleRange": {
            "properties": {
                "day": {
                    "type": "string",
                    "description": "Day of week, e.g. `monday`. Case-insensitive.\n"
                },
                "end": {
                    "type": "string",
                    "description": "End time of day, 24-hour `HH:MM` format.\n"
                },
                "start": {
                    "type": "string",
                    "description": "Start time of day, 24-hour `HH:MM` format.\n"
                }
            },
            "type": "object",
            "required": [
                "day",
                "end",
                "start"
            ]
        },
        "chronosphere:index/MonitorSeriesConditions:MonitorSeriesConditions": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsCondition:MonitorSeriesConditionsCondition"
                    },
                    "description": "One or more severity/threshold conditions. Multiple conditions enable multi-severity monitors (e.g. warn at one threshold, page at a higher one).\n"
                },
                "overrides": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsOverride:MonitorSeriesConditionsOverride"
                    },
                    "description": "Per-series overrides that apply different conditions to series matching a set of label matchers.\n"
                }
            },
            "type": "object",
            "required": [
                "conditions"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsCondition:MonitorSeriesConditionsCondition": {
            "properties": {
                "op": {
                    "type": "string",
                    "description": "Comparison operator between the query value and `value` (e.g. `gt`, `lt`, `eq`).\n"
                },
                "resolveSustain": {
                    "type": "string",
                    "description": "Duration the condition must remain false continuously before an active signal resolves.\n"
                },
                "resolveValue": {
                    "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsConditionResolveValue:MonitorSeriesConditionsConditionResolveValue",
                    "description": "Optional separate threshold used for resolution, enabling hysteresis (e.g. fire at \u003e90, resolve at \\n\\n).\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity assigned when this condition matches (e.g. `warn`, `critical`). Case-sensitive.\n"
                },
                "sustain": {
                    "type": "string",
                    "description": "Duration the condition must hold continuously before a signal fires.\n"
                },
                "value": {
                    "type": "number",
                    "description": "Resolution threshold value.\n"
                }
            },
            "type": "object",
            "required": [
                "op",
                "severity"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsConditionResolveValue:MonitorSeriesConditionsConditionResolveValue": {
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "Whether the resolve-value threshold is active.\n"
                },
                "value": {
                    "type": "number",
                    "description": "Resolution threshold value.\n"
                }
            },
            "type": "object",
            "required": [
                "enabled",
                "value"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsOverride:MonitorSeriesConditionsOverride": {
            "properties": {
                "conditions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsOverrideCondition:MonitorSeriesConditionsOverrideCondition"
                    },
                    "description": "One or more severity/threshold conditions. Multiple conditions enable multi-severity monitors (e.g. warn at one threshold, page at a higher one).\n"
                },
                "labelMatchers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsOverrideLabelMatcher:MonitorSeriesConditionsOverrideLabelMatcher"
                    },
                    "description": "List of label matchers used to select a subset of series.\n"
                }
            },
            "type": "object",
            "required": [
                "conditions",
                "labelMatchers"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsOverrideCondition:MonitorSeriesConditionsOverrideCondition": {
            "properties": {
                "op": {
                    "type": "string",
                    "description": "Comparison operator between the query value and `value` (e.g. `gt`, `lt`, `eq`).\n"
                },
                "resolveSustain": {
                    "type": "string",
                    "description": "Duration the condition must remain false continuously before an active signal resolves.\n"
                },
                "resolveValue": {
                    "$ref": "#/types/chronosphere:index/MonitorSeriesConditionsOverrideConditionResolveValue:MonitorSeriesConditionsOverrideConditionResolveValue",
                    "description": "Optional separate threshold used for resolution, enabling hysteresis (e.g. fire at \u003e90, resolve at \\n\\n).\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity assigned when this condition matches (e.g. `warn`, `critical`). Case-sensitive.\n"
                },
                "sustain": {
                    "type": "string",
                    "description": "Duration the condition must hold continuously before a signal fires.\n"
                },
                "value": {
                    "type": "number",
                    "description": "Resolution threshold value.\n"
                }
            },
            "type": "object",
            "required": [
                "op",
                "severity"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsOverrideConditionResolveValue:MonitorSeriesConditionsOverrideConditionResolveValue": {
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "Whether the resolve-value threshold is active.\n"
                },
                "value": {
                    "type": "number",
                    "description": "Resolution threshold value.\n"
                }
            },
            "type": "object",
            "required": [
                "enabled",
                "value"
            ]
        },
        "chronosphere:index/MonitorSeriesConditionsOverrideLabelMatcher:MonitorSeriesConditionsOverrideLabelMatcher": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Match operator: one of `=`, `!=`, `=~` (regex), `!~` (regex negation).\n"
                },
                "value": {
                    "type": "string",
                    "description": "Resolution threshold value.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "type",
                "value"
            ]
        },
        "chronosphere:index/MonitorSignalGrouping:MonitorSignalGrouping": {
            "properties": {
                "labelNames": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to group by. Series sharing the same values for these labels produce one signal. Defaults to no grouping (one signal per series).\n"
                },
                "signalPerSeries": {
                    "type": "boolean",
                    "description": "If true, treat each individual series as its own signal. Mutually exclusive with `label_names`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/NotificationPolicyOverride:NotificationPolicyOverride": {
            "properties": {
                "alertLabelMatchers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideAlertLabelMatcher:NotificationPolicyOverrideAlertLabelMatcher"
                    },
                    "description": "List of label matchers used to select a subset of series.\n"
                },
                "routes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRoute:NotificationPolicyOverrideRoute"
                    },
                    "description": "Per-severity routing rules. Each entry maps a severity (e.g. `warn`, `critical`) to a set of notifiers, destinations, grouping, and repeat behavior.\n"
                }
            },
            "type": "object",
            "required": [
                "alertLabelMatchers"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideAlertLabelMatcher:NotificationPolicyOverrideAlertLabelMatcher": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Match operator: one of `=`, `!=`, `=~` (regex), `!~` (regex negation).\n"
                },
                "value": {
                    "type": "string",
                    "description": "Label value (or regex pattern, for regex matchers) to match against.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "type",
                "value"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRoute:NotificationPolicyOverrideRoute": {
            "properties": {
                "destinations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestination:NotificationPolicyOverrideRouteDestination"
                    },
                    "description": "Inline notification destinations defined directly on the route. Each block sets at most one of `slack`, `pagerduty`, `webhook`, `ops_genie`, `victor_ops`, or `email`. Cannot be combined with `notifiers`.\n"
                },
                "groupBy": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteGroupBy:NotificationPolicyOverrideRouteGroupBy",
                    "description": "Optional grouping configuration controlling how alerts are batched before delivery.\n"
                },
                "notifiers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slugs of notifier resources that receive alerts at this severity. Cannot be combined with `destination`.\n"
                },
                "repeatInterval": {
                    "type": "string",
                    "description": "How often to resend unresolved alerts at this severity (e.g. `4h`).\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity this route applies to (e.g. `warn`, `critical`). Case-sensitive.\n"
                }
            },
            "type": "object",
            "required": [
                "severity"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestination:NotificationPolicyOverrideRouteDestination": {
            "properties": {
                "disableResolves": {
                    "type": "boolean",
                    "description": "If true, do not send notifications when alerts resolve. Defaults to false.\n"
                },
                "email": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationEmail:NotificationPolicyOverrideRouteDestinationEmail",
                    "description": "Email delivery configuration for this destination.\n"
                },
                "opsGenie": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationOpsGenie:NotificationPolicyOverrideRouteDestinationOpsGenie",
                    "description": "OpsGenie delivery configuration for this destination.\n"
                },
                "pagerduty": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationPagerduty:NotificationPolicyOverrideRouteDestinationPagerduty",
                    "description": "PagerDuty delivery configuration for this destination.\n"
                },
                "slack": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationSlack:NotificationPolicyOverrideRouteDestinationSlack",
                    "description": "Slack delivery configuration for this destination.\n"
                },
                "victorOps": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationVictorOps:NotificationPolicyOverrideRouteDestinationVictorOps",
                    "description": "VictorOps (Splunk On-Call) delivery configuration for this destination.\n"
                },
                "webhook": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationWebhook:NotificationPolicyOverrideRouteDestinationWebhook",
                    "description": "Generic webhook delivery configuration for this destination.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationEmail:NotificationPolicyOverrideRouteDestinationEmail": {
            "properties": {
                "addresses": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Email addresses to deliver notifications to.\n"
                }
            },
            "type": "object",
            "required": [
                "addresses"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationOpsGenie:NotificationPolicyOverrideRouteDestinationOpsGenie": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationPagerduty:NotificationPolicyOverrideRouteDestinationPagerduty": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationSlack:NotificationPolicyOverrideRouteDestinationSlack": {
            "properties": {
                "channels": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slack channels to send notifications to.\n"
                },
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationVictorOps:NotificationPolicyOverrideRouteDestinationVictorOps": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                },
                "routingKeys": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "VictorOps routing keys identifying the destination escalation policies.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug",
                "routingKeys"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationWebhook:NotificationPolicyOverrideRouteDestinationWebhook": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                },
                "queryParameters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverrideRouteDestinationWebhookQueryParameter:NotificationPolicyOverrideRouteDestinationWebhookQueryParameter"
                    },
                    "description": "Additional query parameters appended to the webhook URL when delivering this notification.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteDestinationWebhookQueryParameter:NotificationPolicyOverrideRouteDestinationWebhookQueryParameter": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Query parameter name.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Label value (or regex pattern, for regex matchers) to match against.\n"
                }
            },
            "type": "object",
            "required": [
                "key",
                "value"
            ]
        },
        "chronosphere:index/NotificationPolicyOverrideRouteGroupBy:NotificationPolicyOverrideRouteGroupBy": {
            "properties": {
                "labelNames": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Label names to group alerts by. Alerts with identical values for these labels are bundled into a single notification.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/NotificationPolicyRoute:NotificationPolicyRoute": {
            "properties": {
                "destinations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestination:NotificationPolicyRouteDestination"
                    },
                    "description": "Inline notification destinations defined directly on the route. Each block sets at most one of `slack`, `pagerduty`, `webhook`, `ops_genie`, `victor_ops`, or `email`. Cannot be combined with `notifiers`.\n"
                },
                "groupBy": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteGroupBy:NotificationPolicyRouteGroupBy",
                    "description": "Optional grouping configuration controlling how alerts are batched before delivery.\n"
                },
                "notifiers": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slugs of notifier resources that receive alerts at this severity. Cannot be combined with `destination`.\n"
                },
                "repeatInterval": {
                    "type": "string",
                    "description": "How often to resend unresolved alerts at this severity (e.g. `4h`).\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity this route applies to (e.g. `warn`, `critical`). Case-sensitive.\n"
                }
            },
            "type": "object",
            "required": [
                "severity"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestination:NotificationPolicyRouteDestination": {
            "properties": {
                "disableResolves": {
                    "type": "boolean",
                    "description": "If true, do not send notifications when alerts resolve. Defaults to false.\n"
                },
                "email": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationEmail:NotificationPolicyRouteDestinationEmail",
                    "description": "Email delivery configuration for this destination.\n"
                },
                "opsGenie": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationOpsGenie:NotificationPolicyRouteDestinationOpsGenie",
                    "description": "OpsGenie delivery configuration for this destination.\n"
                },
                "pagerduty": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationPagerduty:NotificationPolicyRouteDestinationPagerduty",
                    "description": "PagerDuty delivery configuration for this destination.\n"
                },
                "slack": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationSlack:NotificationPolicyRouteDestinationSlack",
                    "description": "Slack delivery configuration for this destination.\n"
                },
                "victorOps": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationVictorOps:NotificationPolicyRouteDestinationVictorOps",
                    "description": "VictorOps (Splunk On-Call) delivery configuration for this destination.\n"
                },
                "webhook": {
                    "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationWebhook:NotificationPolicyRouteDestinationWebhook",
                    "description": "Generic webhook delivery configuration for this destination.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/NotificationPolicyRouteDestinationEmail:NotificationPolicyRouteDestinationEmail": {
            "properties": {
                "addresses": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Email addresses to deliver notifications to.\n"
                }
            },
            "type": "object",
            "required": [
                "addresses"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationOpsGenie:NotificationPolicyRouteDestinationOpsGenie": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationPagerduty:NotificationPolicyRouteDestinationPagerduty": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationSlack:NotificationPolicyRouteDestinationSlack": {
            "properties": {
                "channels": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slack channels to send notifications to.\n"
                },
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationVictorOps:NotificationPolicyRouteDestinationVictorOps": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                },
                "routingKeys": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "VictorOps routing keys identifying the destination escalation policies.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug",
                "routingKeys"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationWebhook:NotificationPolicyRouteDestinationWebhook": {
            "properties": {
                "externalConnectionSlug": {
                    "type": "string",
                    "description": "Slug of the OpsGenie external connection holding the integration credentials.\n"
                },
                "queryParameters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyRouteDestinationWebhookQueryParameter:NotificationPolicyRouteDestinationWebhookQueryParameter"
                    },
                    "description": "Additional query parameters appended to the webhook URL when delivering this notification.\n"
                }
            },
            "type": "object",
            "required": [
                "externalConnectionSlug"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteDestinationWebhookQueryParameter:NotificationPolicyRouteDestinationWebhookQueryParameter": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Query parameter name.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Label value (or regex pattern, for regex matchers) to match against.\n"
                }
            },
            "type": "object",
            "required": [
                "key",
                "value"
            ]
        },
        "chronosphere:index/NotificationPolicyRouteGroupBy:NotificationPolicyRouteGroupBy": {
            "properties": {
                "labelNames": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Label names to group alerts by. Alerts with identical values for these labels are bundled into a single notification.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/OpsgenieAlertNotifierResponder:OpsgenieAlertNotifierResponder": {
            "properties": {
                "id": {
                    "type": "string",
                    "description": "Opsgenie identifier of the responder. Use instead of `name` or `username`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the responder team, schedule, or escalation policy.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Responder type. One of `team`, `user`, `escalation`, or `schedule`.\n"
                },
                "username": {
                    "type": "string",
                    "description": "Username of a user responder.\n"
                }
            },
            "type": "object",
            "required": [
                "type"
            ]
        },
        "chronosphere:index/OtelMetricsIngestionResourceAttributes:OtelMetricsIngestionResourceAttributes": {
            "properties": {
                "excludeKeys": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Resource attribute keys to exclude from the flatten operation, interpreted according to `filter_mode`.\n"
                },
                "filterMode": {
                    "type": "string",
                    "description": "Controls how `exclude_keys` is interpreted (e.g. allow-list vs. block-list semantics).\n"
                },
                "flattenMode": {
                    "type": "string",
                    "description": "Controls how OTel resource attributes are flattened onto each metric's labels.\n"
                },
                "generateTargetInfo": {
                    "type": "boolean",
                    "description": "If true, generates a `target_info` time series with labels derived from resource attributes. `filter_mode` and `exclude_keys` apply identically to this series. Defaults to false.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/PagerdutyAlertNotifierImage:PagerdutyAlertNotifierImage": {
            "properties": {
                "alt": {
                    "type": "string",
                    "description": "Alternate text shown when the image cannot be rendered.\n"
                },
                "href": {
                    "type": "string",
                    "description": "Optional URL the image links to when clicked.\n"
                },
                "src": {
                    "type": "string",
                    "description": "URL of the image to attach.\n"
                }
            },
            "type": "object",
            "required": [
                "src"
            ]
        },
        "chronosphere:index/PagerdutyAlertNotifierLink:PagerdutyAlertNotifierLink": {
            "properties": {
                "href": {
                    "type": "string",
                    "description": "URL the link points to.\n"
                },
                "text": {
                    "type": "string",
                    "description": "Display text for the link.\n"
                }
            },
            "type": "object",
            "required": [
                "href"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPool:ResourcePoolsConfigDefaultPool": {
            "properties": {
                "allocation": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocation:ResourcePoolsConfigDefaultPoolAllocation",
                    "description": "License allocation for the pool. Can be expressed as a percentage of the license (`percent_of_license`) or as per-license fixed values (`fixed_value`).\n"
                },
                "priorities": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolPriorities:ResourcePoolsConfigDefaultPoolPriorities",
                    "description": "Optional high/low priority sub-classifications within the pool. Low-priority metrics are dropped first; high-priority metrics are dropped last when limits are hit.\n"
                },
                "priorityThresholds": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThreshold:ResourcePoolsConfigDefaultPoolPriorityThreshold"
                    },
                    "description": "Per-license drop thresholds for `PERSISTED_CARDINALITY_STANDARD` and `PERSISTED_CARDINALITY_HISTOGRAM` only. Defines strict upper bounds beyond which new consumption is dropped, optionally segmented by priority class.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocation:ResourcePoolsConfigDefaultPoolAllocation": {
            "properties": {
                "fixedValues": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationFixedValue:ResourcePoolsConfigDefaultPoolAllocationFixedValue"
                    },
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfLicense": {
                    "type": "number",
                    "description": "Percent of each license to allocate to this pool, between 0 and 100. Across non-default pools, the sum must not exceed 100; the default pool receives the remainder.\n"
                },
                "priorityThresholds": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThreshold:ResourcePoolsConfigDefaultPoolAllocationPriorityThreshold"
                    },
                    "description": "Per-license drop thresholds for `PERSISTED_CARDINALITY_STANDARD` and `PERSISTED_CARDINALITY_HISTOGRAM` only. Defines strict upper bounds beyond which new consumption is dropped, optionally segmented by priority class.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationFixedValue:ResourcePoolsConfigDefaultPoolAllocationFixedValue": {
            "properties": {
                "license": {
                    "type": "string",
                    "description": "License this fixed-value allocation applies to (e.g. `PERSISTED_WRITES`).\n"
                },
                "value": {
                    "type": "integer",
                    "description": "Fixed amount of the license to allocate, in the license's native unit.\n"
                }
            },
            "type": "object",
            "required": [
                "license",
                "value"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThreshold:ResourcePoolsConfigDefaultPoolAllocationPriorityThreshold": {
            "properties": {
                "allPriorities": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdAllPriorities:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdAllPriorities",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "defaultAndLowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdDefaultAndLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "license": {
                    "type": "string",
                    "description": "License this fixed-value allocation applies to (e.g. `PERSISTED_WRITES`).\n"
                },
                "lowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdLowPriority:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                }
            },
            "type": "object",
            "required": [
                "license"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdAllPriorities:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdAllPriorities": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdDefaultAndLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdLowPriority:ResourcePoolsConfigDefaultPoolAllocationPriorityThresholdLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolPriorities:ResourcePoolsConfigDefaultPoolPriorities": {
            "properties": {
                "highPriorityMatchRules": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Matchers selecting metrics within the pool that are treated as high priority and dropped last.\n"
                },
                "lowPriorityMatchRules": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Matchers selecting metrics within the pool that are treated as low priority and dropped first.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThreshold:ResourcePoolsConfigDefaultPoolPriorityThreshold": {
            "properties": {
                "allPriorities": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdAllPriorities:ResourcePoolsConfigDefaultPoolPriorityThresholdAllPriorities",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "defaultAndLowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigDefaultPoolPriorityThresholdDefaultAndLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "license": {
                    "type": "string",
                    "description": "License this fixed-value allocation applies to (e.g. `PERSISTED_WRITES`).\n"
                },
                "lowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdLowPriority:ResourcePoolsConfigDefaultPoolPriorityThresholdLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                }
            },
            "type": "object",
            "required": [
                "license"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdAllPriorities:ResourcePoolsConfigDefaultPoolPriorityThresholdAllPriorities": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigDefaultPoolPriorityThresholdDefaultAndLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigDefaultPoolPriorityThresholdLowPriority:ResourcePoolsConfigDefaultPoolPriorityThresholdLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool": {
            "properties": {
                "allocation": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocation:ResourcePoolsConfigPoolAllocation",
                    "description": "License allocation for the pool. Can be expressed as a percentage of the license (`percent_of_license`) or as per-license fixed values (`fixed_value`).\n"
                },
                "matchRule": {
                    "type": "string",
                    "description": "Deprecated: use `match_rules` instead. Single matcher selecting metrics that belong to this pool.\n",
                    "deprecationMessage": "use match_rules"
                },
                "matchRules": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Matchers selecting metrics that map to this pool. A metric matching any rule is assigned to the pool.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Unique name of the pool.\n"
                },
                "priorities": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolPriorities:ResourcePoolsConfigPoolPriorities",
                    "description": "Optional high/low priority sub-classifications within the pool. Low-priority metrics are dropped first; high-priority metrics are dropped last when limits are hit.\n"
                }
            },
            "type": "object",
            "required": [
                "name"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocation:ResourcePoolsConfigPoolAllocation": {
            "properties": {
                "fixedValues": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocationFixedValue:ResourcePoolsConfigPoolAllocationFixedValue"
                    },
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfLicense": {
                    "type": "number",
                    "description": "Percent of each license to allocate to this pool, between 0 and 100. Across non-default pools, the sum must not exceed 100; the default pool receives the remainder.\n"
                },
                "priorityThresholds": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThreshold:ResourcePoolsConfigPoolAllocationPriorityThreshold"
                    },
                    "description": "Per-license drop thresholds for `PERSISTED_CARDINALITY_STANDARD` and `PERSISTED_CARDINALITY_HISTOGRAM` only. Defines strict upper bounds beyond which new consumption is dropped, optionally segmented by priority class.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocationFixedValue:ResourcePoolsConfigPoolAllocationFixedValue": {
            "properties": {
                "license": {
                    "type": "string",
                    "description": "License this fixed-value allocation applies to (e.g. `PERSISTED_WRITES`).\n"
                },
                "value": {
                    "type": "integer",
                    "description": "Fixed amount of the license to allocate, in the license's native unit.\n"
                }
            },
            "type": "object",
            "required": [
                "license",
                "value"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThreshold:ResourcePoolsConfigPoolAllocationPriorityThreshold": {
            "properties": {
                "allPriorities": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdAllPriorities:ResourcePoolsConfigPoolAllocationPriorityThresholdAllPriorities",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "defaultAndLowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigPoolAllocationPriorityThresholdDefaultAndLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                },
                "license": {
                    "type": "string",
                    "description": "License this fixed-value allocation applies to (e.g. `PERSISTED_WRITES`).\n"
                },
                "lowPriority": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdLowPriority:ResourcePoolsConfigPoolAllocationPriorityThresholdLowPriority",
                    "description": "Threshold value, expressed as either a percent of the pool's allocation or as a fixed value in license units.\n"
                }
            },
            "type": "object",
            "required": [
                "license"
            ]
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdAllPriorities:ResourcePoolsConfigPoolAllocationPriorityThresholdAllPriorities": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdDefaultAndLowPriority:ResourcePoolsConfigPoolAllocationPriorityThresholdDefaultAndLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigPoolAllocationPriorityThresholdLowPriority:ResourcePoolsConfigPoolAllocationPriorityThresholdLowPriority": {
            "properties": {
                "fixedValue": {
                    "type": "integer",
                    "description": "Per-license fixed allocations that override `percent_of_license` for the named licenses. When any pool sets a fixed value for a license, every pool must also set one for that license.\n"
                },
                "percentOfPoolAllocation": {
                    "type": "number",
                    "description": "Threshold as a percent of the pool's allocation. `100` equals the full allocation; values above 100 allow the pool to exceed its baseline allocation.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/ResourcePoolsConfigPoolPriorities:ResourcePoolsConfigPoolPriorities": {
            "properties": {
                "highPriorityMatchRules": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Matchers selecting metrics within the pool that are treated as high priority and dropped last.\n"
                },
                "lowPriorityMatchRules": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Matchers selecting metrics within the pool that are treated as low priority and dropped first.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/RollupRuleGraphiteLabelPolicy:RollupRuleGraphiteLabelPolicy": {
            "properties": {
                "replaces": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/RollupRuleGraphiteLabelPolicyReplace:RollupRuleGraphiteLabelPolicyReplace"
                    },
                    "description": "List of positional Graphite label replacements applied to the output metric.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/RollupRuleGraphiteLabelPolicyReplace:RollupRuleGraphiteLabelPolicyReplace": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Positional Graphite label to replace (e.g. `__g1__`).\n"
                },
                "newValue": {
                    "type": "string",
                    "description": "Replacement value for the named positional label.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "newValue"
            ]
        },
        "chronosphere:index/RollupRuleStoragePolicies:RollupRuleStoragePolicies": {
            "properties": {
                "resolution": {
                    "type": "string",
                    "description": "Resolution at which rolled-up data points are stored.\n"
                },
                "retention": {
                    "type": "string",
                    "description": "Retention duration for rolled-up data points.\n"
                }
            },
            "type": "object",
            "required": [
                "resolution",
                "retention"
            ]
        },
        "chronosphere:index/SLODefinition:SLODefinition": {
            "properties": {
                "burnRateAlertingConfigs": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SLODefinitionBurnRateAlertingConfig:SLODefinitionBurnRateAlertingConfig"
                    },
                    "description": "Custom burn-rate alert definitions. If omitted, the system default burn rates are used. Only takes effect when `enable_burn_rate_alerting` is true.\n"
                },
                "enableBurnRateAlerting": {
                    "type": "boolean",
                    "description": "Whether burn-rate alerting is enabled for this SLO.\n"
                },
                "objective": {
                    "type": "number",
                    "description": "Target SLO percentage representing the desired availability (e.g. `99.9`).\n"
                },
                "timeWindow": {
                    "$ref": "#/types/chronosphere:index/SLODefinitionTimeWindow:SLODefinitionTimeWindow",
                    "description": "Rolling time window over which the SLO objective is evaluated.\n"
                }
            },
            "type": "object",
            "required": [
                "objective"
            ],
            "language": {
                "nodejs": {
                    "requiredOutputs": [
                        "burnRateAlertingConfigs",
                        "enableBurnRateAlerting",
                        "objective",
                        "timeWindow"
                    ]
                }
            }
        },
        "chronosphere:index/SLODefinitionBurnRateAlertingConfig:SLODefinitionBurnRateAlertingConfig": {
            "properties": {
                "budget": {
                    "type": "number",
                    "description": "Percentage of the error budget that can be consumed during `window` before the alert fires. Must be between 0.0 and 100.0 exclusive.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional labels attached when this burn-rate alert fires. Can be used by notification policies to route different burn rates to different destinations.\n"
                },
                "severity": {
                    "type": "string",
                    "description": "Severity assigned when the burn rate fires. Must be `critical` or `warn`.\n"
                },
                "window": {
                    "type": "string",
                    "description": "Time window for the burn-rate calculation (e.g. `1h`, `6h`).\n"
                }
            },
            "type": "object",
            "required": [
                "budget",
                "severity",
                "window"
            ]
        },
        "chronosphere:index/SLODefinitionTimeWindow:SLODefinitionTimeWindow": {
            "properties": {
                "duration": {
                    "type": "string",
                    "description": "Length of the evaluation window (e.g. `28d`, `24h`).\n"
                }
            },
            "type": "object",
            "required": [
                "duration"
            ]
        },
        "chronosphere:index/SLOSignalGrouping:SLOSignalGrouping": {
            "properties": {
                "labelNames": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to group by. Series sharing the same values for these labels produce one signal. Defaults to no grouping (one signal per series).\n"
                },
                "signalPerSeries": {
                    "type": "boolean",
                    "description": "If true, treat each individual series as its own signal. Mutually exclusive with `label_names`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/SLOSli:SLOSli": {
            "properties": {
                "additionalPromqlFilters": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SLOSliAdditionalPromqlFilter:SLOSliAdditionalPromqlFilter"
                    },
                    "description": "Additional PromQL label matchers applied to SLI queries via the `{{.AdditionalFilters}}` template variable. Used to narrow the metrics scope.\n"
                },
                "customDimensionLabels": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Additional labels exported from the underlying queries to group the error budget by. Available in PromQL templates via `{{.GroupBy}}`.\n"
                },
                "customIndicator": {
                    "$ref": "#/types/chronosphere:index/SLOSliCustomIndicator:SLOSliCustomIndicator",
                    "description": "Error-ratio SLI defined by good/bad/total PromQL query templates. Mutually exclusive with `custom_timeslice_indicator`.\n"
                },
                "customTimesliceIndicator": {
                    "$ref": "#/types/chronosphere:index/SLOSliCustomTimesliceIndicator:SLOSliCustomTimesliceIndicator",
                    "description": "Time-slice SLI that evaluates a PromQL query over fixed time slices against a threshold condition. Mutually exclusive with `custom_indicator`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/SLOSliAdditionalPromqlFilter:SLOSliAdditionalPromqlFilter": {
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Prometheus label name to match.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Matcher type (e.g. `=`, `!=`, `=~`, `!~`).\n"
                },
                "value": {
                    "type": "string",
                    "description": "Label value to match against using the chosen matcher `type`.\n"
                }
            },
            "type": "object",
            "required": [
                "name",
                "type",
                "value"
            ]
        },
        "chronosphere:index/SLOSliCustomIndicator:SLOSliCustomIndicator": {
            "properties": {
                "badQueryTemplate": {
                    "type": "string",
                    "description": "PromQL query template measuring the count of bad events. Mutually exclusive with `good_query_template`.\n"
                },
                "goodQueryTemplate": {
                    "type": "string",
                    "description": "PromQL query template measuring the count of good events. Mutually exclusive with `bad_query_template`.\n"
                },
                "totalQueryTemplate": {
                    "type": "string",
                    "description": "PromQL query template measuring the total count of events. Required for error-ratio SLOs.\n"
                }
            },
            "type": "object",
            "required": [
                "totalQueryTemplate"
            ]
        },
        "chronosphere:index/SLOSliCustomTimesliceIndicator:SLOSliCustomTimesliceIndicator": {
            "properties": {
                "condition": {
                    "$ref": "#/types/chronosphere:index/SLOSliCustomTimesliceIndicatorCondition:SLOSliCustomTimesliceIndicatorCondition",
                    "description": "Condition used to classify each time slice as good or bad based on the query result.\n"
                },
                "queryTemplate": {
                    "type": "string",
                    "description": "PromQL query template evaluated against each time slice.\n"
                },
                "timesliceSize": {
                    "type": "string",
                    "description": "Size of each time slice evaluated by the query (e.g. `1m`, `5m`).\n"
                }
            },
            "type": "object",
            "required": [
                "condition",
                "queryTemplate",
                "timesliceSize"
            ]
        },
        "chronosphere:index/SLOSliCustomTimesliceIndicatorCondition:SLOSliCustomTimesliceIndicatorCondition": {
            "properties": {
                "op": {
                    "type": "string",
                    "description": "Comparison operator between the query value and `value` (e.g. `gt`, `lt`, `eq`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Label value to match against using the chosen matcher `type`.\n"
                }
            },
            "type": "object",
            "required": [
                "op",
                "value"
            ]
        },
        "chronosphere:index/ServiceAccountRestriction:ServiceAccountRestriction": {
            "properties": {
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Optional label matchers further scoping the restriction to metrics whose labels match these key/value pairs.\n"
                },
                "permission": {
                    "type": "string",
                    "description": "Permission level granted by this restriction (e.g. metric read/write).\n"
                }
            },
            "type": "object",
            "required": [
                "permission"
            ]
        },
        "chronosphere:index/SlackAlertNotifierAction:SlackAlertNotifierAction": {
            "properties": {
                "actionConfirmDismissText": {
                    "type": "string",
                    "description": "Label for the cancel button in the confirmation dialog.\n"
                },
                "actionConfirmOkText": {
                    "type": "string",
                    "description": "Label for the confirm button in the confirmation dialog.\n"
                },
                "actionConfirmText": {
                    "type": "string",
                    "description": "Body text of the confirmation dialog shown before the action runs.\n"
                },
                "actionConfirmTile": {
                    "type": "string",
                    "description": "Title of the confirmation dialog shown before the action runs.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Identifier sent back to Slack when the button is clicked.\n"
                },
                "style": {
                    "type": "string",
                    "description": "Visual style of the button: `default`, `primary`, or `danger`.\n"
                },
                "text": {
                    "type": "string",
                    "description": "Label shown on the button.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Action type. Typically `button`.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Link the button navigates to when clicked.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Opaque value sent back to Slack alongside `name` when the button is clicked.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/SlackAlertNotifierField:SlackAlertNotifierField": {
            "properties": {
                "short": {
                    "type": "boolean",
                    "description": "If true, the field is short enough to be shown side-by-side with the next field.\n"
                },
                "title": {
                    "type": "string",
                    "description": "Bold heading shown above the value.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Value text. Supports Go templating.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategy": {
            "properties": {
                "perOperationStrategies": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategies:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategies",
                    "description": "Per-operation sampling configuration with a service-wide default and optional per-operation overrides.\n"
                },
                "probabilisticStrategy": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategy",
                    "description": "Probabilistic sampling: each trace is sampled with a fixed probability.\n"
                },
                "rateLimitingStrategy": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategy",
                    "description": "Rate-limiting sampling: cap the number of sampled traces per second using a leaky bucket.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategies:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategies": {
            "properties": {
                "defaultLowerBoundTracesPerSecond": {
                    "type": "number",
                    "description": "Minimum number of traces per second sampled for any operation in the service, even when the probabilistic rate would yield fewer.\n"
                },
                "defaultSamplingRate": {
                    "type": "number",
                    "description": "Service-wide sampling probability in the range `[0.0, 1.0]` applied when no per-operation override matches.\n"
                },
                "defaultUpperBoundTracesPerSecond": {
                    "type": "number",
                    "description": "Maximum number of traces per second sampled for any operation in the service, regardless of matching per-operation strategy.\n"
                },
                "perOperationStrategies": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategy"
                    },
                    "description": "Per-operation sampling configuration with a service-wide default and optional per-operation overrides.\n"
                }
            },
            "type": "object",
            "required": [
                "defaultSamplingRate"
            ]
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategy": {
            "properties": {
                "operation": {
                    "type": "string",
                    "description": "Span operation (span name) this override applies to.\n"
                },
                "probabilisticStrategy": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategyProbabilisticStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategyProbabilisticStrategy",
                    "description": "Probabilistic sampling configuration applied to spans whose operation matches.\n"
                }
            },
            "type": "object",
            "required": [
                "operation",
                "probabilisticStrategy"
            ]
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategyProbabilisticStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyPerOperationStrategiesPerOperationStrategyProbabilisticStrategy": {
            "properties": {
                "samplingRate": {
                    "type": "number",
                    "description": "Probability in the range `[0.0, 1.0]` that any given trace is sampled. `0` samples no traces, `1` samples every trace.\n"
                }
            },
            "type": "object",
            "required": [
                "samplingRate"
            ]
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategy": {
            "properties": {
                "samplingRate": {
                    "type": "number",
                    "description": "Probability in the range `[0.0, 1.0]` that any given trace is sampled. `0` samples no traces, `1` samples every trace.\n"
                }
            },
            "type": "object",
            "required": [
                "samplingRate"
            ]
        },
        "chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategy": {
            "properties": {
                "maxTracesPerSecond": {
                    "type": "integer",
                    "description": "Maximum number of traces to sample per second for the service.\n"
                }
            },
            "type": "object",
            "required": [
                "maxTracesPerSecond"
            ]
        },
        "chronosphere:index/TraceMetricsRuleGroupBy:TraceMetricsRuleGroupBy": {
            "properties": {
                "key": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleGroupByKey:TraceMetricsRuleGroupByKey",
                    "description": "Span attribute to group by.\n"
                },
                "label": {
                    "type": "string",
                    "description": "Name of the resulting metric label.\n"
                }
            },
            "type": "object",
            "required": [
                "key",
                "label"
            ]
        },
        "chronosphere:index/TraceMetricsRuleGroupByKey:TraceMetricsRuleGroupByKey": {
            "properties": {
                "namedKey": {
                    "type": "string",
                    "description": "Name of the span tag when `type` requires one (for example `TAG`). Ignored for fixed-key types.\n"
                },
                "type": {
                    "type": "string",
                    "description": "Category of span attribute to group by (for example a well-known field such as `SERVICE` or `OPERATION`, or a generic span `TAG`).\n"
                }
            },
            "type": "object",
            "required": [
                "type"
            ]
        },
        "chronosphere:index/TraceMetricsRuleScopeFilter:TraceMetricsRuleScopeFilter": {
            "properties": {
                "spanScopes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScope:TraceMetricsRuleScopeFilterSpanScope"
                    },
                    "description": "Span conditions that select which spans are aggregated. Spans must match at least one block to be included.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScope:TraceMetricsRuleScopeFilterSpanScope": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeDuration:TraceMetricsRuleScopeFilterSpanScopeDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeError:TraceMetricsRuleScopeFilterSpanScopeError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeIsRootSpan:TraceMetricsRuleScopeFilterSpanScopeIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeOperation:TraceMetricsRuleScopeFilterSpanScopeOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeParentOperation:TraceMetricsRuleScopeFilterSpanScopeParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeParentService:TraceMetricsRuleScopeFilterSpanScopeParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeService:TraceMetricsRuleScopeFilterSpanScopeService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeSpanCount:TraceMetricsRuleScopeFilterSpanScopeSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTag:TraceMetricsRuleScopeFilterSpanScopeTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeDuration:TraceMetricsRuleScopeFilterSpanScopeDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeError:TraceMetricsRuleScopeFilterSpanScopeError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeIsRootSpan:TraceMetricsRuleScopeFilterSpanScopeIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeOperation:TraceMetricsRuleScopeFilterSpanScopeOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeParentOperation:TraceMetricsRuleScopeFilterSpanScopeParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeParentService:TraceMetricsRuleScopeFilterSpanScopeParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeService:TraceMetricsRuleScopeFilterSpanScopeService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeSpanCount:TraceMetricsRuleScopeFilterSpanScopeSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTag:TraceMetricsRuleScopeFilterSpanScopeTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Span attribute to group by.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTagNumericValue:TraceMetricsRuleScopeFilterSpanScopeTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTagValue:TraceMetricsRuleScopeFilterSpanScopeTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTagNumericValue:TraceMetricsRuleScopeFilterSpanScopeTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleScopeFilterSpanScopeTagValue:TraceMetricsRuleScopeFilterSpanScopeTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilter:TraceMetricsRuleTraceFilter": {
            "properties": {
                "scopeFilter": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilter:TraceMetricsRuleTraceFilterScopeFilter",
                    "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                },
                "spans": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpan:TraceMetricsRuleTraceFilterSpan"
                    },
                    "description": "Span-level conditions. Each block defines a set of conditions that must all be satisfied by a single span in the trace for the trace to match.\n"
                },
                "trace": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterTrace:TraceMetricsRuleTraceFilterTrace",
                    "description": "Trace-level conditions evaluated against the whole trace (aggregated duration and error status).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilter:TraceMetricsRuleTraceFilterScopeFilter": {
            "properties": {
                "spanScopes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScope:TraceMetricsRuleTraceFilterScopeFilterSpanScope"
                    },
                    "description": "Span conditions that select which spans are aggregated. Spans must match at least one block to be included.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScope:TraceMetricsRuleTraceFilterScopeFilterSpanScope": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeDuration:TraceMetricsRuleTraceFilterScopeFilterSpanScopeDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeError:TraceMetricsRuleTraceFilterScopeFilterSpanScopeError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeIsRootSpan:TraceMetricsRuleTraceFilterScopeFilterSpanScopeIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeOperation:TraceMetricsRuleTraceFilterScopeFilterSpanScopeOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentOperation:TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentService:TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeService:TraceMetricsRuleTraceFilterScopeFilterSpanScopeService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeSpanCount:TraceMetricsRuleTraceFilterScopeFilterSpanScopeSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTag:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeDuration:TraceMetricsRuleTraceFilterScopeFilterSpanScopeDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeError:TraceMetricsRuleTraceFilterScopeFilterSpanScopeError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeIsRootSpan:TraceMetricsRuleTraceFilterScopeFilterSpanScopeIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeOperation:TraceMetricsRuleTraceFilterScopeFilterSpanScopeOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentOperation:TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentService:TraceMetricsRuleTraceFilterScopeFilterSpanScopeParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeService:TraceMetricsRuleTraceFilterScopeFilterSpanScopeService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeSpanCount:TraceMetricsRuleTraceFilterScopeFilterSpanScopeSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTag:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Span attribute to group by.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagNumericValue:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagValue:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagNumericValue:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagValue:TraceMetricsRuleTraceFilterScopeFilterSpanScopeTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpan:TraceMetricsRuleTraceFilterSpan": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanDuration:TraceMetricsRuleTraceFilterSpanDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanError:TraceMetricsRuleTraceFilterSpanError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanIsRootSpan:TraceMetricsRuleTraceFilterSpanIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanOperation:TraceMetricsRuleTraceFilterSpanOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanParentOperation:TraceMetricsRuleTraceFilterSpanParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanParentService:TraceMetricsRuleTraceFilterSpanParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanService:TraceMetricsRuleTraceFilterSpanService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanSpanCount:TraceMetricsRuleTraceFilterSpanSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanTag:TraceMetricsRuleTraceFilterSpanTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanDuration:TraceMetricsRuleTraceFilterSpanDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanError:TraceMetricsRuleTraceFilterSpanError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanIsRootSpan:TraceMetricsRuleTraceFilterSpanIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanOperation:TraceMetricsRuleTraceFilterSpanOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanParentOperation:TraceMetricsRuleTraceFilterSpanParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanParentService:TraceMetricsRuleTraceFilterSpanParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanService:TraceMetricsRuleTraceFilterSpanService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanSpanCount:TraceMetricsRuleTraceFilterSpanSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanTag:TraceMetricsRuleTraceFilterSpanTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Span attribute to group by.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanTagNumericValue:TraceMetricsRuleTraceFilterSpanTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterSpanTagValue:TraceMetricsRuleTraceFilterSpanTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanTagNumericValue:TraceMetricsRuleTraceFilterSpanTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterSpanTagValue:TraceMetricsRuleTraceFilterSpanTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterTrace:TraceMetricsRuleTraceFilterTrace": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterTraceDuration:TraceMetricsRuleTraceFilterTraceDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilterTraceError:TraceMetricsRuleTraceFilterTraceError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterTraceDuration:TraceMetricsRuleTraceFilterTraceDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceMetricsRuleTraceFilterTraceError:TraceMetricsRuleTraceFilterTraceError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesDefaultSampleRate:TraceTailSamplingRulesDefaultSampleRate": {
            "properties": {
                "enabled": {
                    "type": "boolean",
                    "description": "Whether to override the platform default sample rate with `sample_rate`.\n"
                },
                "sampleRate": {
                    "type": "number",
                    "description": "Fraction of matching traces to keep, in the range `[0.0, 1.0]`. `0` drops all matches, `1` keeps every match.\n"
                }
            },
            "type": "object",
            "required": [
                "sampleRate"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRule:TraceTailSamplingRulesRule": {
            "properties": {
                "filter": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilter:TraceTailSamplingRulesRuleFilter",
                    "description": "Filter that selects traces and spans. A trace matches when its trace-level conditions hold and every `span` block is satisfied by at least one span in the trace.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Human-readable name of the rule.\n"
                },
                "sampleRate": {
                    "type": "number",
                    "description": "Fraction of matching traces to keep, in the range `[0.0, 1.0]`. `0` drops all matches, `1` keeps every match.\n"
                },
                "systemName": {
                    "type": "string",
                    "description": "Stable identifier used as the metric label value on metrics emitted by this rule.\n"
                }
            },
            "type": "object",
            "required": [
                "filter",
                "sampleRate"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilter:TraceTailSamplingRulesRuleFilter": {
            "properties": {
                "scopeFilter": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilter:TraceTailSamplingRulesRuleFilterScopeFilter",
                    "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                },
                "spans": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpan:TraceTailSamplingRulesRuleFilterSpan"
                    },
                    "description": "Span-level conditions. Each block defines a set of conditions that must all be satisfied by a single span in the trace for the trace to match.\n"
                },
                "trace": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterTrace:TraceTailSamplingRulesRuleFilterTrace",
                    "description": "Trace-level conditions evaluated against the whole trace (aggregated duration and error status).\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilter:TraceTailSamplingRulesRuleFilterScopeFilter": {
            "properties": {
                "spanScopes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScope:TraceTailSamplingRulesRuleFilterScopeFilterSpanScope"
                    },
                    "description": "Span conditions that select which spans are aggregated. Spans must match at least one block to be included.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScope:TraceTailSamplingRulesRuleFilterScopeFilterSpanScope": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeDuration:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeError:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeIsRootSpan:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeOperation:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentOperation:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentService:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeService:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeSpanCount:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTag:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeDuration:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeError:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeIsRootSpan:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeOperation:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentOperation:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentService:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeService:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeSpanCount:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTag:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Name of the span tag (span attribute) inspected by this filter.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagNumericValue:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagValue:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagNumericValue:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagValue:TraceTailSamplingRulesRuleFilterScopeFilterSpanScopeTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpan:TraceTailSamplingRulesRuleFilterSpan": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanDuration:TraceTailSamplingRulesRuleFilterSpanDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanError:TraceTailSamplingRulesRuleFilterSpanError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "isRootSpan": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanIsRootSpan:TraceTailSamplingRulesRuleFilterSpanIsRootSpan",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                },
                "matchType": {
                    "type": "string",
                    "description": "Whether matching spans are included (`INCLUDE`) or excluded (`EXCLUDE`) from the scope. Defaults to `INCLUDE`.\n"
                },
                "operation": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanOperation:TraceTailSamplingRulesRuleFilterSpanOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentOperation": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanParentOperation:TraceTailSamplingRulesRuleFilterSpanParentOperation",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "parentService": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanParentService:TraceTailSamplingRulesRuleFilterSpanParentService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "service": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanService:TraceTailSamplingRulesRuleFilterSpanService",
                    "description": "Matches traces or spans where the target string field satisfies the match condition.\n"
                },
                "spanCount": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanSpanCount:TraceTailSamplingRulesRuleFilterSpanSpanCount",
                    "description": "Matches traces where the number of spans satisfying the surrounding span conditions falls within the inclusive `[min, max]` range.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTag:TraceTailSamplingRulesRuleFilterSpanTag"
                    },
                    "description": "Matches spans whose tag (span attribute) with the given `key` has a value satisfying the nested string or numeric filter.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanDuration:TraceTailSamplingRulesRuleFilterSpanDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanError:TraceTailSamplingRulesRuleFilterSpanError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanIsRootSpan:TraceTailSamplingRulesRuleFilterSpanIsRootSpan": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanOperation:TraceTailSamplingRulesRuleFilterSpanOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanParentOperation:TraceTailSamplingRulesRuleFilterSpanParentOperation": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanParentService:TraceTailSamplingRulesRuleFilterSpanParentService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanService:TraceTailSamplingRulesRuleFilterSpanService": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanSpanCount:TraceTailSamplingRulesRuleFilterSpanSpanCount": {
            "properties": {
                "max": {
                    "type": "integer",
                    "description": "Maximum number of matching spans, inclusive. `0` means no upper bound.\n"
                },
                "min": {
                    "type": "integer",
                    "description": "Minimum number of matching spans, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTag:TraceTailSamplingRulesRuleFilterSpanTag": {
            "properties": {
                "key": {
                    "type": "string",
                    "description": "Name of the span tag (span attribute) inspected by this filter.\n"
                },
                "numericValue": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTagNumericValue:TraceTailSamplingRulesRuleFilterSpanTagNumericValue",
                    "description": "Matches traces or spans where the target numeric field satisfies the comparison against `value`.\n"
                },
                "value": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTagValue:TraceTailSamplingRulesRuleFilterSpanTagValue",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTagNumericValue:TraceTailSamplingRulesRuleFilterSpanTagNumericValue": {
            "properties": {
                "comparison": {
                    "type": "string",
                    "description": "Numeric comparison operator (for example `EQUALS`, `GREATER_THAN`, `LESS_THAN_OR_EQUAL`).\n"
                },
                "value": {
                    "type": "number",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "comparison",
                "value"
            ]
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterSpanTagValue:TraceTailSamplingRulesRuleFilterSpanTagValue": {
            "properties": {
                "inValues": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Set of strings tested against the target field. Used with `IN` and `NOT_IN` match types.\n"
                },
                "match": {
                    "type": "string",
                    "description": "Match operator applied to `value` or `in_values`. One of `EXACT`, `REGEX`, `IN`, or `NOT_IN`. Defaults to `EXACT`.\n"
                },
                "value": {
                    "type": "string",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterTrace:TraceTailSamplingRulesRuleFilterTrace": {
            "properties": {
                "duration": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterTraceDuration:TraceTailSamplingRulesRuleFilterTraceDuration",
                    "description": "Matches traces or spans whose duration in seconds falls within the inclusive `[min_secs, max_secs]` range.\n"
                },
                "error": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRuleFilterTraceError:TraceTailSamplingRulesRuleFilterTraceError",
                    "description": "Matches traces or spans where the target boolean field equals `value`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterTraceDuration:TraceTailSamplingRulesRuleFilterTraceDuration": {
            "properties": {
                "maxSecs": {
                    "type": "number",
                    "description": "Maximum duration in seconds, inclusive. Omit for no upper bound.\n"
                },
                "minSecs": {
                    "type": "number",
                    "description": "Minimum duration in seconds, inclusive. Defaults to `0`.\n"
                }
            },
            "type": "object"
        },
        "chronosphere:index/TraceTailSamplingRulesRuleFilterTraceError:TraceTailSamplingRulesRuleFilterTraceError": {
            "properties": {
                "value": {
                    "type": "boolean",
                    "description": "Boolean value the target field is compared against.\n"
                }
            },
            "type": "object",
            "required": [
                "value"
            ]
        }
    },
    "provider": {
        "description": "The provider type for the chronosphere package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n",
        "properties": {
            "apiToken": {
                "type": "string",
                "description": "API token used to authenticate against the Chronosphere API. Treat as a secret. Falls back to the\n`CHRONOSPHERE_API_TOKEN` environment variable.\n",
                "secret": true
            },
            "disableDryrun": {
                "type": "boolean",
                "description": "Disable the dry-run validation step that runs before every apply. Falls back to the\n`CHRONOSPHERE_DRY_RUN_VALIDATION_DISABLED` environment variable (set to `1` to disable).\n"
            },
            "entityNamespace": {
                "type": "string",
                "description": "Optional namespace prefix applied to entity slugs managed by this provider instance, so multiple Terraform\nconfigurations can coexist in one Chronosphere org. Falls back to the `CHRONOSPHERE_ENTITY_NAMESPACE` environment\nvariable.\n"
            },
            "org": {
                "type": "string",
                "description": "Chronosphere organization name (the subdomain of `\u003corg\u003e.chronosphere.io`). Falls back to the `CHRONOSPHERE_ORG` or\n`CHRONOSPHERE_ORG_NAME` environment variables.\n"
            },
            "unstable": {
                "type": "boolean",
                "description": "Opt into resources and behaviors backed by Chronosphere's unstable config API. Subject to breaking change without\nnotice. Falls back to the `CHRONOSPHERE_UNSTABLE` environment variable (set to `1` to enable).\n"
            }
        },
        "inputProperties": {
            "apiToken": {
                "type": "string",
                "description": "API token used to authenticate against the Chronosphere API. Treat as a secret. Falls back to the\n`CHRONOSPHERE_API_TOKEN` environment variable.\n",
                "defaultInfo": {
                    "environment": [
                        "CHRONOSPHERE_API_TOKEN"
                    ]
                },
                "secret": true
            },
            "disableDryrun": {
                "type": "boolean",
                "description": "Disable the dry-run validation step that runs before every apply. Falls back to the\n`CHRONOSPHERE_DRY_RUN_VALIDATION_DISABLED` environment variable (set to `1` to disable).\n"
            },
            "entityNamespace": {
                "type": "string",
                "description": "Optional namespace prefix applied to entity slugs managed by this provider instance, so multiple Terraform\nconfigurations can coexist in one Chronosphere org. Falls back to the `CHRONOSPHERE_ENTITY_NAMESPACE` environment\nvariable.\n"
            },
            "org": {
                "type": "string",
                "description": "Chronosphere organization name (the subdomain of `\u003corg\u003e.chronosphere.io`). Falls back to the `CHRONOSPHERE_ORG` or\n`CHRONOSPHERE_ORG_NAME` environment variables.\n",
                "defaultInfo": {
                    "environment": [
                        "CHRONOSPHERE_ORG",
                        "CHRONOSPHERE_ORG_NAME"
                    ]
                }
            },
            "unstable": {
                "type": "boolean",
                "description": "Opt into resources and behaviors backed by Chronosphere's unstable config API. Subject to breaking change without\nnotice. Falls back to the `CHRONOSPHERE_UNSTABLE` environment variable (set to `1` to enable).\n"
            }
        }
    },
    "resources": {
        "chronosphere:index/azureMetricsIntegration:AzureMetricsIntegration": {
            "description": "Scrapes Azure Monitor metrics from the configured subscriptions, locations, and resource types using a service-principal credential.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst subscription = new chronosphere.AzureMetricsIntegration(\"subscription\", {\n    countMetricsEnabled: true,\n    name: \"Azure Metrics\",\n    principal: {\n        clientId: \"00000000-0000-0000-0000-000000000000\",\n        tenantId: \"00000000-0000-0000-0000-000000000000\",\n    },\n    propagateTags: true,\n    scrapeConfig: {\n        locations: [\n            \"eastus\",\n            \"westus\",\n        ],\n        resourceTypes: [\n            {\n                name: \"Microsoft.Compute/virtualMachines\",\n            },\n            {\n                metricNames: [\"UsedCapacity\"],\n                name: \"Microsoft.Storage/storageAccounts\",\n            },\n        ],\n        subscriptionIds: [\"00000000-0000-0000-0000-000000000000\"],\n    },\n    slug: \"azure-metrics\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nsubscription = chronosphere.AzureMetricsIntegration(\"subscription\",\n    count_metrics_enabled=True,\n    name=\"Azure Metrics\",\n    principal=chronosphere.AzureMetricsIntegrationPrincipalArgs(\n        client_id=\"00000000-0000-0000-0000-000000000000\",\n        tenant_id=\"00000000-0000-0000-0000-000000000000\",\n    ),\n    propagate_tags=True,\n    scrape_config=chronosphere.AzureMetricsIntegrationScrapeConfigArgs(\n        locations=[\n            \"eastus\",\n            \"westus\",\n        ],\n        resource_types=[\n            chronosphere.AzureMetricsIntegrationScrapeConfigResourceTypeArgs(\n                name=\"Microsoft.Compute/virtualMachines\",\n            ),\n            chronosphere.AzureMetricsIntegrationScrapeConfigResourceTypeArgs(\n                metric_names=[\"UsedCapacity\"],\n                name=\"Microsoft.Storage/storageAccounts\",\n            ),\n        ],\n        subscription_ids=[\"00000000-0000-0000-0000-000000000000\"],\n    ),\n    slug=\"azure-metrics\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var subscription = new Pulumi.AzureMetricsIntegration(\"subscription\", new()\n    {\n        CountMetricsEnabled = true,\n        Name = \"Azure Metrics\",\n        Principal = new Pulumi.Inputs.AzureMetricsIntegrationPrincipalArgs\n        {\n            ClientId = \"00000000-0000-0000-0000-000000000000\",\n            TenantId = \"00000000-0000-0000-0000-000000000000\",\n        },\n        PropagateTags = true,\n        ScrapeConfig = new Pulumi.Inputs.AzureMetricsIntegrationScrapeConfigArgs\n        {\n            Locations = new[]\n            {\n                \"eastus\",\n                \"westus\",\n            },\n            ResourceTypes = new[]\n            {\n                new Pulumi.Inputs.AzureMetricsIntegrationScrapeConfigResourceTypeArgs\n                {\n                    Name = \"Microsoft.Compute/virtualMachines\",\n                },\n                new Pulumi.Inputs.AzureMetricsIntegrationScrapeConfigResourceTypeArgs\n                {\n                    MetricNames = new[]\n                    {\n                        \"UsedCapacity\",\n                    },\n                    Name = \"Microsoft.Storage/storageAccounts\",\n                },\n            },\n            SubscriptionIds = new[]\n            {\n                \"00000000-0000-0000-0000-000000000000\",\n            },\n        },\n        Slug = \"azure-metrics\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewAzureMetricsIntegration(ctx, \"subscription\", \u0026chronosphere.AzureMetricsIntegrationArgs{\n\t\t\tCountMetricsEnabled: pulumi.Bool(true),\n\t\t\tName:                pulumi.String(\"Azure Metrics\"),\n\t\t\tPrincipal: \u0026chronosphere.AzureMetricsIntegrationPrincipalArgs{\n\t\t\t\tClientId: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\t\tTenantId: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\t},\n\t\t\tPropagateTags: pulumi.Bool(true),\n\t\t\tScrapeConfig: \u0026chronosphere.AzureMetricsIntegrationScrapeConfigArgs{\n\t\t\t\tLocations: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"eastus\"),\n\t\t\t\t\tpulumi.String(\"westus\"),\n\t\t\t\t},\n\t\t\t\tResourceTypes: chronosphere.AzureMetricsIntegrationScrapeConfigResourceTypeArray{\n\t\t\t\t\t\u0026chronosphere.AzureMetricsIntegrationScrapeConfigResourceTypeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"Microsoft.Compute/virtualMachines\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026chronosphere.AzureMetricsIntegrationScrapeConfigResourceTypeArgs{\n\t\t\t\t\t\tMetricNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"UsedCapacity\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tName: pulumi.String(\"Microsoft.Storage/storageAccounts\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSubscriptionIds: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSlug: pulumi.String(\"azure-metrics\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.AzureMetricsIntegration;\nimport com.pulumi.chronosphere.AzureMetricsIntegrationArgs;\nimport com.pulumi.chronosphere.inputs.AzureMetricsIntegrationPrincipalArgs;\nimport com.pulumi.chronosphere.inputs.AzureMetricsIntegrationScrapeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var subscription = new AzureMetricsIntegration(\"subscription\", AzureMetricsIntegrationArgs.builder()        \n            .countMetricsEnabled(true)\n            .name(\"Azure Metrics\")\n            .principal(AzureMetricsIntegrationPrincipalArgs.builder()\n                .clientId(\"00000000-0000-0000-0000-000000000000\")\n                .tenantId(\"00000000-0000-0000-0000-000000000000\")\n                .build())\n            .propagateTags(true)\n            .scrapeConfig(AzureMetricsIntegrationScrapeConfigArgs.builder()\n                .locations(                \n                    \"eastus\",\n                    \"westus\")\n                .resourceTypes(                \n                    AzureMetricsIntegrationScrapeConfigResourceTypeArgs.builder()\n                        .name(\"Microsoft.Compute/virtualMachines\")\n                        .build(),\n                    AzureMetricsIntegrationScrapeConfigResourceTypeArgs.builder()\n                        .metricNames(\"UsedCapacity\")\n                        .name(\"Microsoft.Storage/storageAccounts\")\n                        .build())\n                .subscriptionIds(\"00000000-0000-0000-0000-000000000000\")\n                .build())\n            .slug(\"azure-metrics\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  subscription:\n    type: chronosphere:AzureMetricsIntegration\n    properties:\n      countMetricsEnabled: true\n      name: Azure Metrics\n      principal:\n        clientId: 00000000-0000-0000-0000-000000000000\n        tenantId: 00000000-0000-0000-0000-000000000000\n      propagateTags: true\n      scrapeConfig:\n        locations:\n          - eastus\n          - westus\n        resourceTypes:\n          - name: Microsoft.Compute/virtualMachines\n          - metricNames:\n              - UsedCapacity\n            name: Microsoft.Storage/storageAccounts\n        subscriptionIds:\n          - 00000000-0000-0000-0000-000000000000\n      slug: azure-metrics\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "countMetricsEnabled": {
                    "type": "boolean",
                    "description": "If true, enables Azure count metrics for the configured resources.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Azure resource type identifier (e.g. `Microsoft.Compute/virtualMachines`).\n"
                },
                "principal": {
                    "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationPrincipal:AzureMetricsIntegrationPrincipal",
                    "description": "Azure managed identity principal used to authenticate with Azure Monitor.\n"
                },
                "propagateTags": {
                    "type": "boolean",
                    "description": "If true, propagates Azure resource, group, and subscription tags as metric labels.\n"
                },
                "scrapeConfig": {
                    "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationScrapeConfig:AzureMetricsIntegrationScrapeConfig",
                    "description": "Scope of Azure subscriptions, locations, and resource types from which to ingest metrics.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "usageMetricsEnabled": {
                    "type": "boolean",
                    "description": "If true, enables collection of Azure usage metrics under this principal (Microsoft.Compute, Microsoft.Network, Microsoft.Storage).\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "countMetricsEnabled": {
                    "type": "boolean",
                    "description": "If true, enables Azure count metrics for the configured resources.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Azure resource type identifier (e.g. `Microsoft.Compute/virtualMachines`).\n"
                },
                "principal": {
                    "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationPrincipal:AzureMetricsIntegrationPrincipal",
                    "description": "Azure managed identity principal used to authenticate with Azure Monitor.\n"
                },
                "propagateTags": {
                    "type": "boolean",
                    "description": "If true, propagates Azure resource, group, and subscription tags as metric labels.\n"
                },
                "scrapeConfig": {
                    "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationScrapeConfig:AzureMetricsIntegrationScrapeConfig",
                    "description": "Scope of Azure subscriptions, locations, and resource types from which to ingest metrics.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "usageMetricsEnabled": {
                    "type": "boolean",
                    "description": "If true, enables collection of Azure usage metrics under this principal (Microsoft.Compute, Microsoft.Network, Microsoft.Storage).\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering AzureMetricsIntegration resources.\n",
                "properties": {
                    "countMetricsEnabled": {
                        "type": "boolean",
                        "description": "If true, enables Azure count metrics for the configured resources.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Azure resource type identifier (e.g. `Microsoft.Compute/virtualMachines`).\n"
                    },
                    "principal": {
                        "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationPrincipal:AzureMetricsIntegrationPrincipal",
                        "description": "Azure managed identity principal used to authenticate with Azure Monitor.\n"
                    },
                    "propagateTags": {
                        "type": "boolean",
                        "description": "If true, propagates Azure resource, group, and subscription tags as metric labels.\n"
                    },
                    "scrapeConfig": {
                        "$ref": "#/types/chronosphere:index/AzureMetricsIntegrationScrapeConfig:AzureMetricsIntegrationScrapeConfig",
                        "description": "Scope of Azure subscriptions, locations, and resource types from which to ingest metrics.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "usageMetricsEnabled": {
                        "type": "boolean",
                        "description": "If true, enables collection of Azure usage metrics under this principal (Microsoft.Compute, Microsoft.Network, Microsoft.Storage).\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/blackholeAlertNotifier:BlackholeAlertNotifier": {
            "description": "Blackhole notifier that discards every signal routed to it. Reference from a notification policy route to silence alerts without delivering them anywhere.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst blackhole = new chronosphere.BlackholeAlertNotifier(\"blackhole\", {name: \"Blackhole\"});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nblackhole = chronosphere.BlackholeAlertNotifier(\"blackhole\", name=\"Blackhole\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var blackhole = new Pulumi.BlackholeAlertNotifier(\"blackhole\", new()\n    {\n        Name = \"Blackhole\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewBlackholeAlertNotifier(ctx, \"blackhole\", \u0026chronosphere.BlackholeAlertNotifierArgs{\n\t\t\tName: pulumi.String(\"Blackhole\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.BlackholeAlertNotifier;\nimport com.pulumi.chronosphere.BlackholeAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var blackhole = new BlackholeAlertNotifier(\"blackhole\", BlackholeAlertNotifierArgs.builder()        \n            .name(\"Blackhole\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  blackhole:\n    type: chronosphere:BlackholeAlertNotifier\n    properties:\n      name: Blackhole\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering BlackholeAlertNotifier resources.\n",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Display name of the notifier.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/bucket:Bucket": {
            "description": "A legacy container for monitors, dashboards, and other resources, predating collections. Buckets can also own an inline notification policy via `notification_policy_data`. New configurations should generally use `chronosphere.Collection`.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst bucket = new chronosphere.Bucket(\"bucket\", {\n    name: \"Bucket\",\n    description: \"bucket created by terraform examples\",\n    labels: {\n        foo: \"bar\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nbucket = chronosphere.Bucket(\"bucket\",\n    name=\"Bucket\",\n    description=\"bucket created by terraform examples\",\n    labels={\n        \"foo\": \"bar\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var bucket = new Pulumi.Bucket(\"bucket\", new()\n    {\n        Name = \"Bucket\",\n        Description = \"bucket created by terraform examples\",\n        Labels = \n        {\n            { \"foo\", \"bar\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewBucket(ctx, \"bucket\", \u0026chronosphere.BucketArgs{\n\t\t\tName:        pulumi.String(\"Bucket\"),\n\t\t\tDescription: pulumi.String(\"bucket created by terraform examples\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Bucket;\nimport com.pulumi.chronosphere.BucketArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var bucket = new Bucket(\"bucket\", BucketArgs.builder()        \n            .name(\"Bucket\")\n            .description(\"bucket created by terraform examples\")\n            .labels(Map.of(\"foo\", \"bar\"))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  bucket:\n    type: chronosphere:Bucket\n    properties:\n      name: Bucket\n      description: bucket created by terraform examples\n      labels:\n        foo: bar\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the bucket.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to the bucket for organization and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the bucket. Can be changed after creation.\n"
                },
                "notificationPolicyData": {
                    "type": "string",
                    "description": "Inline notification policy serialized as JSON. Conflicts with `notification_policy_id`. For reusability, reference a named policy instead.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the default notification policy applied to monitors in this bucket that do not explicitly reference one. Conflicts with `notification_policy_data`.\n"
                },
                "notificationPolicySlug": {
                    "type": "string",
                    "description": "Internal field tracking the slug of an inline notification policy defined via `notification_policy_data`. Use `notification_policy_id` to reference a named policy.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the bucket. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this bucket.\n"
                }
            },
            "required": [
                "name",
                "notificationPolicySlug",
                "slug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the bucket.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to the bucket for organization and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the bucket. Can be changed after creation.\n"
                },
                "notificationPolicyData": {
                    "type": "string",
                    "description": "Inline notification policy serialized as JSON. Conflicts with `notification_policy_id`. For reusability, reference a named policy instead.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the default notification policy applied to monitors in this bucket that do not explicitly reference one. Conflicts with `notification_policy_data`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the bucket. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this bucket.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Bucket resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the bucket.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Key/value labels attached to the bucket for organization and filtering.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the bucket. Can be changed after creation.\n"
                    },
                    "notificationPolicyData": {
                        "type": "string",
                        "description": "Inline notification policy serialized as JSON. Conflicts with `notification_policy_id`. For reusability, reference a named policy instead.\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "ID of the default notification policy applied to monitors in this bucket that do not explicitly reference one. Conflicts with `notification_policy_data`.\n"
                    },
                    "notificationPolicySlug": {
                        "type": "string",
                        "description": "Internal field tracking the slug of an inline notification policy defined via `notification_policy_data`. Use `notification_policy_id` to reference a named policy.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the bucket. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "teamId": {
                        "type": "string",
                        "description": "ID of the team that owns this bucket.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/classicDashboard:ClassicDashboard": {
            "description": "A Grafana-compatible dashboard rendered by Chronosphere. The dashboard's `name` and `slug` are derived from the `title` and `uid` fields inside `dashboard_json`. For native Chronosphere dashboards, use `chronosphere.Dashboard` instead.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst collection = new chronosphere.Collection(\"collection\", {name: \"Platform\"});\nconst platform = new chronosphere.ClassicDashboard(\"platform\", {\n    collectionId: collection.id,\n    dashboardJson: JSON.stringify({\n        title: \"Dashboard\",\n        panels: [{\n            gridPos: {\n                h: 12,\n                w: 24,\n                x: 0,\n                y: 0,\n            },\n            id: 2,\n            targets: [{\n                expr: \"up\",\n            }],\n            title: \"Up by instance\",\n            type: \"graph\",\n        }],\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_chronosphere as chronosphere\n\ncollection = chronosphere.Collection(\"collection\", name=\"Platform\")\nplatform = chronosphere.ClassicDashboard(\"platform\",\n    collection_id=collection.id,\n    dashboard_json=json.dumps({\n        \"title\": \"Dashboard\",\n        \"panels\": [{\n            \"gridPos\": {\n                \"h\": 12,\n                \"w\": 24,\n                \"x\": 0,\n                \"y\": 0,\n            },\n            \"id\": 2,\n            \"targets\": [{\n                \"expr\": \"up\",\n            }],\n            \"title\": \"Up by instance\",\n            \"type\": \"graph\",\n        }],\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var collection = new Pulumi.Collection(\"collection\", new()\n    {\n        Name = \"Platform\",\n    });\n\n    var platform = new Pulumi.ClassicDashboard(\"platform\", new()\n    {\n        CollectionId = collection.Id,\n        DashboardJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"title\"] = \"Dashboard\",\n            [\"panels\"] = new[]\n            {\n                new Dictionary\u003cstring, object?\u003e\n                {\n                    [\"gridPos\"] = new Dictionary\u003cstring, object?\u003e\n                    {\n                        [\"h\"] = 12,\n                        [\"w\"] = 24,\n                        [\"x\"] = 0,\n                        [\"y\"] = 0,\n                    },\n                    [\"id\"] = 2,\n                    [\"targets\"] = new[]\n                    {\n                        new Dictionary\u003cstring, object?\u003e\n                        {\n                            [\"expr\"] = \"up\",\n                        },\n                    },\n                    [\"title\"] = \"Up by instance\",\n                    [\"type\"] = \"graph\",\n                },\n            },\n        }),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcollection, err := chronosphere.NewCollection(ctx, \"collection\", \u0026chronosphere.CollectionArgs{\n\t\t\tName: pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"title\": \"Dashboard\",\n\t\t\t\"panels\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"gridPos\": map[string]interface{}{\n\t\t\t\t\t\t\"h\": 12,\n\t\t\t\t\t\t\"w\": 24,\n\t\t\t\t\t\t\"x\": 0,\n\t\t\t\t\t\t\"y\": 0,\n\t\t\t\t\t},\n\t\t\t\t\t\"id\": 2,\n\t\t\t\t\t\"targets\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"expr\": \"up\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"title\": \"Up by instance\",\n\t\t\t\t\t\"type\":  \"graph\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = chronosphere.NewClassicDashboard(ctx, \"platform\", \u0026chronosphere.ClassicDashboardArgs{\n\t\t\tCollectionId:  collection.ID(),\n\t\t\tDashboardJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Collection;\nimport com.pulumi.chronosphere.CollectionArgs;\nimport com.pulumi.chronosphere.ClassicDashboard;\nimport com.pulumi.chronosphere.ClassicDashboardArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var collection = new Collection(\"collection\", CollectionArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var platform = new ClassicDashboard(\"platform\", ClassicDashboardArgs.builder()        \n            .collectionId(collection.id())\n            .dashboardJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"title\", \"Dashboard\"),\n                    jsonProperty(\"panels\", jsonArray(jsonObject(\n                        jsonProperty(\"gridPos\", jsonObject(\n                            jsonProperty(\"h\", 12),\n                            jsonProperty(\"w\", 24),\n                            jsonProperty(\"x\", 0),\n                            jsonProperty(\"y\", 0)\n                        )),\n                        jsonProperty(\"id\", 2),\n                        jsonProperty(\"targets\", jsonArray(jsonObject(\n                            jsonProperty(\"expr\", \"up\")\n                        ))),\n                        jsonProperty(\"title\", \"Up by instance\"),\n                        jsonProperty(\"type\", \"graph\")\n                    )))\n                )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  collection:\n    type: chronosphere:Collection\n    properties:\n      name: Platform\n  platform:\n    type: chronosphere:ClassicDashboard\n    properties:\n      collectionId: ${collection.id}\n      dashboardJson:\n        fn::toJSON:\n          title: Dashboard\n          panels:\n            - gridPos:\n                h: 12\n                w: 24\n                x: 0\n                y: 0\n              id: 2\n              targets:\n                - expr: up\n              title: Up by instance\n              type: graph\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "dashboardJson": {
                    "type": "string",
                    "description": "Grafana-compatible dashboard definition serialized as JSON. The `id` and `version` fields are stripped before diffing.\n"
                }
            },
            "required": [
                "dashboardJson"
            ],
            "inputProperties": {
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "dashboardJson": {
                    "type": "string",
                    "description": "Grafana-compatible dashboard definition serialized as JSON. The `id` and `version` fields are stripped before diffing.\n"
                }
            },
            "requiredInputs": [
                "dashboardJson"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ClassicDashboard resources.\n",
                "properties": {
                    "bucketId": {
                        "type": "string",
                        "description": "ID of the bucket the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                    },
                    "collectionId": {
                        "type": "string",
                        "description": "ID of the collection the dashboard belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                    },
                    "dashboardJson": {
                        "type": "string",
                        "description": "Grafana-compatible dashboard definition serialized as JSON. The `id` and `version` fields are stripped before diffing.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/collection:Collection": {
            "description": "A logical grouping of monitors, dashboards, SLOs, and other resources, typically aligned with a team or system. Provides a default notification policy for contained monitors and SLOs that do not explicitly reference one.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst infra = new chronosphere.Collection(\"infra\", {\n    description: \"Collection of resources related to infrastructure services.\",\n    name: \"Infrastructure Collection\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ninfra = chronosphere.Collection(\"infra\",\n    description=\"Collection of resources related to infrastructure services.\",\n    name=\"Infrastructure Collection\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var infra = new Pulumi.Collection(\"infra\", new()\n    {\n        Description = \"Collection of resources related to infrastructure services.\",\n        Name = \"Infrastructure Collection\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewCollection(ctx, \"infra\", \u0026chronosphere.CollectionArgs{\n\t\t\tDescription: pulumi.String(\"Collection of resources related to infrastructure services.\"),\n\t\t\tName:        pulumi.String(\"Infrastructure Collection\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Collection;\nimport com.pulumi.chronosphere.CollectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var infra = new Collection(\"infra\", CollectionArgs.builder()        \n            .description(\"Collection of resources related to infrastructure services.\")\n            .name(\"Infrastructure Collection\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  infra:\n    type: chronosphere:Collection\n    properties:\n      description: Collection of resources related to infrastructure services.\n      name: Infrastructure Collection\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the collection.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the collection. Can be changed after creation.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the default notification policy applied to monitors in this collection that do not explicitly reference one. Monitors that set their own `notification_policy_id` are not overridden.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the collection. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this collection.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the collection.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the collection. Can be changed after creation.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the default notification policy applied to monitors in this collection that do not explicitly reference one. Monitors that set their own `notification_policy_id` are not overridden.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the collection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this collection.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Collection resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the collection.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the collection. Can be changed after creation.\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "ID of the default notification policy applied to monitors in this collection that do not explicitly reference one. Monitors that set their own `notification_policy_id` are not overridden.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the collection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "teamId": {
                        "type": "string",
                        "description": "ID of the team that owns this collection.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/consumptionBudget:ConsumptionBudget": {
            "description": "A per-partition quota on a consumption_config partition with thresholds that trigger drop, alert, or pause actions when metric or log usage breaches them.\n",
            "properties": {
                "alertActionConfig": {
                    "$ref": "#/types/chronosphere:index/ConsumptionBudgetAlertActionConfig:ConsumptionBudgetAlertActionConfig",
                    "description": "Optional configuration applied to monitors generated by alerting thresholds.\n"
                },
                "consumptionConfigId": {
                    "type": "string",
                    "description": "ID of the singleton `chronosphere.ConsumptionConfig` resource this budget depends on. Acts as an explicit dependency pointer; the actual partition is selected via `partition_slug_path`.\n"
                },
                "defaultPriority": {
                    "type": "integer",
                    "description": "Priority assigned to requests that do not match any entry in `priority`. Defaults to 10 (dropped first) if unset.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the consumption budget. Can be changed after creation.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy used to route alerts generated by `ALERT_WARN`/`ALERT_CRITICAL` thresholds. Required only if such thresholds are configured.\n"
                },
                "partitionSlugPath": {
                    "type": "string",
                    "description": "Forward-slash-delimited path identifying the partition the budget applies to (e.g. `global/gateway/dev`). Must start with the `global` partition slug.\n"
                },
                "priorities": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetPriority:ConsumptionBudgetPriority"
                    },
                    "description": "Priority order used when dropping data. Priority `10` is dropped first; priority `1` is dropped last.\n"
                },
                "resource": {
                    "type": "string",
                    "description": "Deprecated: use `threshold.sku_group` and `threshold.unit` instead. Identifies the resource type the budget governs.\n",
                    "deprecationMessage": "use threshold.sku_group and threshold.unit instead"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the consumption budget. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "thresholds": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetThreshold:ConsumptionBudgetThreshold"
                    },
                    "description": "Threshold actions to take when budget consumption crosses configured levels.\n"
                }
            },
            "required": [
                "consumptionConfigId",
                "name",
                "slug"
            ],
            "inputProperties": {
                "alertActionConfig": {
                    "$ref": "#/types/chronosphere:index/ConsumptionBudgetAlertActionConfig:ConsumptionBudgetAlertActionConfig",
                    "description": "Optional configuration applied to monitors generated by alerting thresholds.\n"
                },
                "consumptionConfigId": {
                    "type": "string",
                    "description": "ID of the singleton `chronosphere.ConsumptionConfig` resource this budget depends on. Acts as an explicit dependency pointer; the actual partition is selected via `partition_slug_path`.\n"
                },
                "defaultPriority": {
                    "type": "integer",
                    "description": "Priority assigned to requests that do not match any entry in `priority`. Defaults to 10 (dropped first) if unset.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the consumption budget. Can be changed after creation.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy used to route alerts generated by `ALERT_WARN`/`ALERT_CRITICAL` thresholds. Required only if such thresholds are configured.\n"
                },
                "partitionSlugPath": {
                    "type": "string",
                    "description": "Forward-slash-delimited path identifying the partition the budget applies to (e.g. `global/gateway/dev`). Must start with the `global` partition slug.\n"
                },
                "priorities": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetPriority:ConsumptionBudgetPriority"
                    },
                    "description": "Priority order used when dropping data. Priority `10` is dropped first; priority `1` is dropped last.\n"
                },
                "resource": {
                    "type": "string",
                    "description": "Deprecated: use `threshold.sku_group` and `threshold.unit` instead. Identifies the resource type the budget governs.\n",
                    "deprecationMessage": "use threshold.sku_group and threshold.unit instead"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the consumption budget. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "thresholds": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetThreshold:ConsumptionBudgetThreshold"
                    },
                    "description": "Threshold actions to take when budget consumption crosses configured levels.\n"
                }
            },
            "requiredInputs": [
                "consumptionConfigId",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ConsumptionBudget resources.\n",
                "properties": {
                    "alertActionConfig": {
                        "$ref": "#/types/chronosphere:index/ConsumptionBudgetAlertActionConfig:ConsumptionBudgetAlertActionConfig",
                        "description": "Optional configuration applied to monitors generated by alerting thresholds.\n"
                    },
                    "consumptionConfigId": {
                        "type": "string",
                        "description": "ID of the singleton `chronosphere.ConsumptionConfig` resource this budget depends on. Acts as an explicit dependency pointer; the actual partition is selected via `partition_slug_path`.\n"
                    },
                    "defaultPriority": {
                        "type": "integer",
                        "description": "Priority assigned to requests that do not match any entry in `priority`. Defaults to 10 (dropped first) if unset.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the consumption budget. Can be changed after creation.\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "ID of the notification policy used to route alerts generated by `ALERT_WARN`/`ALERT_CRITICAL` thresholds. Required only if such thresholds are configured.\n"
                    },
                    "partitionSlugPath": {
                        "type": "string",
                        "description": "Forward-slash-delimited path identifying the partition the budget applies to (e.g. `global/gateway/dev`). Must start with the `global` partition slug.\n"
                    },
                    "priorities": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/ConsumptionBudgetPriority:ConsumptionBudgetPriority"
                        },
                        "description": "Priority order used when dropping data. Priority `10` is dropped first; priority `1` is dropped last.\n"
                    },
                    "resource": {
                        "type": "string",
                        "description": "Deprecated: use `threshold.sku_group` and `threshold.unit` instead. Identifies the resource type the budget governs.\n",
                        "deprecationMessage": "use threshold.sku_group and threshold.unit instead"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the consumption budget. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "thresholds": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/ConsumptionBudgetThreshold:ConsumptionBudgetThreshold"
                        },
                        "description": "Threshold actions to take when budget consumption crosses configured levels.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/consumptionConfig:ConsumptionConfig": {
            "description": "Singleton tree of consumption partitions that classify metric and log data into hierarchical groups so that consumption_budget resources can enforce quotas against them.\n",
            "properties": {
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartition:ConsumptionConfigPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                }
            },
            "inputProperties": {
                "partitions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ConsumptionConfigPartition:ConsumptionConfigPartition"
                    },
                    "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ConsumptionConfig resources.\n",
                "properties": {
                    "partitions": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/ConsumptionConfigPartition:ConsumptionConfigPartition"
                        },
                        "description": "Child partitions of this partition. Evaluated in order; requests not matching any child fall into an implicit `default` child partition.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/dashboard:Dashboard": {
            "description": "A Chronosphere dashboard composed of panels, layouts, and variables defined by `dashboard_json`. For Grafana-compatible dashboards, use `chronosphere.ClassicDashboard` instead.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst collection = new chronosphere.Collection(\"collection\", {name: \"Platform\"});\nconst platform = new chronosphere.Dashboard(\"platform\", {\n    name: \"Platform Overview\",\n    slug: \"platform-overview\",\n    collectionId: collection.id,\n    labels: {\n        team: \"platform\",\n    },\n    dashboardJson: JSON.stringify({\n        kind: \"Dashboard\",\n        spec: {\n            events: [],\n            panels: {},\n            layouts: [],\n            variables: [],\n            duration: \"30m\",\n        },\n        spec_version: \"1\",\n    }),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_chronosphere as chronosphere\n\ncollection = chronosphere.Collection(\"collection\", name=\"Platform\")\nplatform = chronosphere.Dashboard(\"platform\",\n    name=\"Platform Overview\",\n    slug=\"platform-overview\",\n    collection_id=collection.id,\n    labels={\n        \"team\": \"platform\",\n    },\n    dashboard_json=json.dumps({\n        \"kind\": \"Dashboard\",\n        \"spec\": {\n            \"events\": [],\n            \"panels\": {},\n            \"layouts\": [],\n            \"variables\": [],\n            \"duration\": \"30m\",\n        },\n        \"spec_version\": \"1\",\n    }))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var collection = new Pulumi.Collection(\"collection\", new()\n    {\n        Name = \"Platform\",\n    });\n\n    var platform = new Pulumi.Dashboard(\"platform\", new()\n    {\n        Name = \"Platform Overview\",\n        Slug = \"platform-overview\",\n        CollectionId = collection.Id,\n        Labels = \n        {\n            { \"team\", \"platform\" },\n        },\n        DashboardJson = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n        {\n            [\"kind\"] = \"Dashboard\",\n            [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n            {\n                [\"events\"] = new[]\n                {\n                },\n                [\"panels\"] = new Dictionary\u003cstring, object?\u003e\n                {\n                },\n                [\"layouts\"] = new[]\n                {\n                },\n                [\"variables\"] = new[]\n                {\n                },\n                [\"duration\"] = \"30m\",\n            },\n            [\"spec_version\"] = \"1\",\n        }),\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcollection, err := chronosphere.NewCollection(ctx, \"collection\", \u0026chronosphere.CollectionArgs{\n\t\t\tName: pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"kind\": \"Dashboard\",\n\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\"events\":    []interface{}{},\n\t\t\t\t\"panels\":    nil,\n\t\t\t\t\"layouts\":   []interface{}{},\n\t\t\t\t\"variables\": []interface{}{},\n\t\t\t\t\"duration\":  \"30m\",\n\t\t\t},\n\t\t\t\"spec_version\": \"1\",\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = chronosphere.NewDashboard(ctx, \"platform\", \u0026chronosphere.DashboardArgs{\n\t\t\tName:         pulumi.String(\"Platform Overview\"),\n\t\t\tSlug:         pulumi.String(\"platform-overview\"),\n\t\t\tCollectionId: collection.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"team\": pulumi.String(\"platform\"),\n\t\t\t},\n\t\t\tDashboardJson: pulumi.String(json0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Collection;\nimport com.pulumi.chronosphere.CollectionArgs;\nimport com.pulumi.chronosphere.Dashboard;\nimport com.pulumi.chronosphere.DashboardArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var collection = new Collection(\"collection\", CollectionArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var platform = new Dashboard(\"platform\", DashboardArgs.builder()        \n            .name(\"Platform Overview\")\n            .slug(\"platform-overview\")\n            .collectionId(collection.id())\n            .labels(Map.of(\"team\", \"platform\"))\n            .dashboardJson(serializeJson(\n                jsonObject(\n                    jsonProperty(\"kind\", \"Dashboard\"),\n                    jsonProperty(\"spec\", jsonObject(\n                        jsonProperty(\"events\", jsonArray(\n                        )),\n                        jsonProperty(\"panels\", jsonObject(\n\n                        )),\n                        jsonProperty(\"layouts\", jsonArray(\n                        )),\n                        jsonProperty(\"variables\", jsonArray(\n                        )),\n                        jsonProperty(\"duration\", \"30m\")\n                    )),\n                    jsonProperty(\"spec_version\", \"1\")\n                )))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  collection:\n    type: chronosphere:Collection\n    properties:\n      name: Platform\n  platform:\n    type: chronosphere:Dashboard\n    properties:\n      name: Platform Overview\n      slug: platform-overview\n      collectionId: ${collection.id}\n      labels:\n        team: platform\n      dashboardJson:\n        fn::toJSON:\n          kind: Dashboard\n          spec:\n            events: []\n            panels: {}\n            layouts: []\n            variables: []\n            duration: 30m\n          spec_version: '1'\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection that owns this dashboard.\n"
                },
                "dashboardJson": {
                    "type": "string",
                    "description": "JSON payload describing the dashboard's panels, layouts, variables, and other content. Wrap with `jsonencode({...})` in HCL. The provider sanitizes the JSON before diffing, so cosmetic differences (key ordering, whitespace) do not cause spurious plans.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to the dashboard for organization and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the dashboard. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the dashboard. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "dashboardJson",
                "slug"
            ],
            "inputProperties": {
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection that owns this dashboard.\n"
                },
                "dashboardJson": {
                    "type": "string",
                    "description": "JSON payload describing the dashboard's panels, layouts, variables, and other content. Wrap with `jsonencode({...})` in HCL. The provider sanitizes the JSON before diffing, so cosmetic differences (key ordering, whitespace) do not cause spurious plans.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to the dashboard for organization and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the dashboard. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the dashboard. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "dashboardJson"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Dashboard resources.\n",
                "properties": {
                    "collectionId": {
                        "type": "string",
                        "description": "ID of the collection that owns this dashboard.\n"
                    },
                    "dashboardJson": {
                        "type": "string",
                        "description": "JSON payload describing the dashboard's panels, layouts, variables, and other content. Wrap with `jsonencode({...})` in HCL. The provider sanitizes the JSON before diffing, so cosmetic differences (key ordering, whitespace) do not cause spurious plans.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Key/value labels attached to the dashboard for organization and filtering.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the dashboard. Can be changed after creation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the dashboard. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/dataset:Dataset": {
            "description": "A saved selection of telemetry data, defined by match criteria over traces or logs, that can be referenced by other Chronosphere features such as dashboards and alerts.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Dataset;\nimport com.pulumi.chronosphere.DatasetArgs;\nimport com.pulumi.chronosphere.inputs.DatasetConfigurationArgs;\nimport com.pulumi.chronosphere.inputs.DatasetConfigurationTraceDatasetArgs;\nimport com.pulumi.chronosphere.inputs.DatasetConfigurationTraceDatasetMatchCriteriaArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var paymentsTraces = new Dataset(\"paymentsTraces\", DatasetArgs.builder()        \n            .configuration(DatasetConfigurationArgs.builder()\n                .traceDataset(DatasetConfigurationTraceDatasetArgs.builder()\n                    .matchCriteria(DatasetConfigurationTraceDatasetMatchCriteriaArgs.builder()\n                        .span(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                        .build())\n                    .build())\n                .type(\"TRACES\")\n                .build())\n            .description(\"Traces passing through the payments service in production\")\n            .name(\"Production payments traces\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  paymentsTraces:\n    type: chronosphere:Dataset\n    properties:\n      configuration:\n        traceDataset:\n          matchCriteria:\n            span:\n              - duration:\n                  minSecs: 1\n                error:\n                  value: true\n                matchType: INCLUDE\n                service:\n                  match: EXACT\n                  value: payments\n        type: TRACES\n      description: Traces passing through the payments service in production\n      name: Production payments traces\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "configuration": {
                    "$ref": "#/types/chronosphere:index/DatasetConfiguration:DatasetConfiguration",
                    "description": "Configuration block selecting the dataset type and its match criteria.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Free-form description of the dataset.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the dataset. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the dataset. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "configuration",
                "name",
                "slug"
            ],
            "inputProperties": {
                "configuration": {
                    "$ref": "#/types/chronosphere:index/DatasetConfiguration:DatasetConfiguration",
                    "description": "Configuration block selecting the dataset type and its match criteria.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Free-form description of the dataset.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the dataset. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the dataset. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "configuration",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Dataset resources.\n",
                "properties": {
                    "configuration": {
                        "$ref": "#/types/chronosphere:index/DatasetConfiguration:DatasetConfiguration",
                        "description": "Configuration block selecting the dataset type and its match criteria.\n"
                    },
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the dataset.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the dataset. Can be changed after creation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the dataset. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/derivedLabel:DerivedLabel": {
            "description": "Defines a synthetic label whose value is derived from existing metric labels or trace span tags via mapping or constructed-value rules. The derived label can then be referenced in queries as if it were a real label on the source series.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst tier = new chronosphere.DerivedLabel(\"tier\", {\n    description: \"Derives a 'tier' label (read/write/admin) from the instance label\",\n    labelName: \"tier\",\n    metricLabel: {\n        constructedLabel: {\n            valueDefinitions: [\n                {\n                    filters: [{\n                        name: \"instance\",\n                        valueGlob: \"reader-*\",\n                    }],\n                    value: \"read\",\n                },\n                {\n                    filters: [{\n                        name: \"instance\",\n                        valueGlob: \"writer-*\",\n                    }],\n                    value: \"write\",\n                },\n                {\n                    filters: [{\n                        name: \"instance\",\n                        valueGlob: \"admin-*\",\n                    }],\n                    value: \"admin\",\n                },\n            ],\n        },\n    },\n    name: \"Tier from instance name\",\n    slug: \"tier-from-instance\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ntier = chronosphere.DerivedLabel(\"tier\",\n    description=\"Derives a 'tier' label (read/write/admin) from the instance label\",\n    label_name=\"tier\",\n    metric_label=chronosphere.DerivedLabelMetricLabelArgs(\n        constructed_label=chronosphere.DerivedLabelMetricLabelConstructedLabelArgs(\n            value_definitions=[\n                chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs(\n                    filters=[chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs(\n                        name=\"instance\",\n                        value_glob=\"reader-*\",\n                    )],\n                    value=\"read\",\n                ),\n                chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs(\n                    filters=[chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs(\n                        name=\"instance\",\n                        value_glob=\"writer-*\",\n                    )],\n                    value=\"write\",\n                ),\n                chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs(\n                    filters=[chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs(\n                        name=\"instance\",\n                        value_glob=\"admin-*\",\n                    )],\n                    value=\"admin\",\n                ),\n            ],\n        ),\n    ),\n    name=\"Tier from instance name\",\n    slug=\"tier-from-instance\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var tier = new Pulumi.DerivedLabel(\"tier\", new()\n    {\n        Description = \"Derives a 'tier' label (read/write/admin) from the instance label\",\n        LabelName = \"tier\",\n        MetricLabel = new Pulumi.Inputs.DerivedLabelMetricLabelArgs\n        {\n            ConstructedLabel = new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelArgs\n            {\n                ValueDefinitions = new[]\n                {\n                    new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs\n                    {\n                        Filters = new[]\n                        {\n                            new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs\n                            {\n                                Name = \"instance\",\n                                ValueGlob = \"reader-*\",\n                            },\n                        },\n                        Value = \"read\",\n                    },\n                    new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs\n                    {\n                        Filters = new[]\n                        {\n                            new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs\n                            {\n                                Name = \"instance\",\n                                ValueGlob = \"writer-*\",\n                            },\n                        },\n                        Value = \"write\",\n                    },\n                    new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs\n                    {\n                        Filters = new[]\n                        {\n                            new Pulumi.Inputs.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs\n                            {\n                                Name = \"instance\",\n                                ValueGlob = \"admin-*\",\n                            },\n                        },\n                        Value = \"admin\",\n                    },\n                },\n            },\n        },\n        Name = \"Tier from instance name\",\n        Slug = \"tier-from-instance\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewDerivedLabel(ctx, \"tier\", \u0026chronosphere.DerivedLabelArgs{\n\t\t\tDescription: pulumi.String(\"Derives a 'tier' label (read/write/admin) from the instance label\"),\n\t\t\tLabelName:   pulumi.String(\"tier\"),\n\t\t\tMetricLabel: \u0026chronosphere.DerivedLabelMetricLabelArgs{\n\t\t\t\tConstructedLabel: \u0026chronosphere.DerivedLabelMetricLabelConstructedLabelArgs{\n\t\t\t\t\tValueDefinitions: chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArray{\n\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs{\n\t\t\t\t\t\t\tFilters: chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArray{\n\t\t\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs{\n\t\t\t\t\t\t\t\t\tName:      pulumi.String(\"instance\"),\n\t\t\t\t\t\t\t\t\tValueGlob: pulumi.String(\"reader-*\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tValue: pulumi.String(\"read\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs{\n\t\t\t\t\t\t\tFilters: chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArray{\n\t\t\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs{\n\t\t\t\t\t\t\t\t\tName:      pulumi.String(\"instance\"),\n\t\t\t\t\t\t\t\t\tValueGlob: pulumi.String(\"writer-*\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tValue: pulumi.String(\"write\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs{\n\t\t\t\t\t\t\tFilters: chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArray{\n\t\t\t\t\t\t\t\t\u0026chronosphere.DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs{\n\t\t\t\t\t\t\t\t\tName:      pulumi.String(\"instance\"),\n\t\t\t\t\t\t\t\t\tValueGlob: pulumi.String(\"admin-*\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tValue: pulumi.String(\"admin\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tName: pulumi.String(\"Tier from instance name\"),\n\t\t\tSlug: pulumi.String(\"tier-from-instance\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.DerivedLabel;\nimport com.pulumi.chronosphere.DerivedLabelArgs;\nimport com.pulumi.chronosphere.inputs.DerivedLabelMetricLabelArgs;\nimport com.pulumi.chronosphere.inputs.DerivedLabelMetricLabelConstructedLabelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var tier = new DerivedLabel(\"tier\", DerivedLabelArgs.builder()        \n            .description(\"Derives a 'tier' label (read/write/admin) from the instance label\")\n            .labelName(\"tier\")\n            .metricLabel(DerivedLabelMetricLabelArgs.builder()\n                .constructedLabel(DerivedLabelMetricLabelConstructedLabelArgs.builder()\n                    .valueDefinitions(                    \n                        DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs.builder()\n                            .filters(DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs.builder()\n                                .name(\"instance\")\n                                .valueGlob(\"reader-*\")\n                                .build())\n                            .value(\"read\")\n                            .build(),\n                        DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs.builder()\n                            .filters(DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs.builder()\n                                .name(\"instance\")\n                                .valueGlob(\"writer-*\")\n                                .build())\n                            .value(\"write\")\n                            .build(),\n                        DerivedLabelMetricLabelConstructedLabelValueDefinitionArgs.builder()\n                            .filters(DerivedLabelMetricLabelConstructedLabelValueDefinitionFilterArgs.builder()\n                                .name(\"instance\")\n                                .valueGlob(\"admin-*\")\n                                .build())\n                            .value(\"admin\")\n                            .build())\n                    .build())\n                .build())\n            .name(\"Tier from instance name\")\n            .slug(\"tier-from-instance\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  tier:\n    type: chronosphere:DerivedLabel\n    properties:\n      description: Derives a 'tier' label (read/write/admin) from the instance label\n      labelName: tier\n      metricLabel:\n        constructedLabel:\n          valueDefinitions:\n            - filters:\n                - name: instance\n                  valueGlob: reader-*\n              value: read\n            - filters:\n                - name: instance\n                  valueGlob: writer-*\n              value: write\n            - filters:\n                - name: instance\n                  valueGlob: admin-*\n              value: admin\n      name: Tier from instance name\n      slug: tier-from-instance\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the derived label.\n"
                },
                "existingLabelPolicy": {
                    "type": "string",
                    "description": "Policy controlling behavior when the target label already exists on the source series (e.g. keep, replace).\n"
                },
                "labelName": {
                    "type": "string",
                    "description": "Name of the label exposed on derived series. Must be unique across the system.\n"
                },
                "metricLabel": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabel:DerivedLabelMetricLabel",
                    "description": "Derives a label for metrics, either by constructing a new value from filters or by mapping an existing label. Mutually exclusive with `span_tag`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the label to match.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the derived label. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "spanTag": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelSpanTag:DerivedLabelSpanTag",
                    "description": "Derives a label for trace spans by mapping from an existing span tag. Mutually exclusive with `metric_label`.\n"
                }
            },
            "required": [
                "labelName",
                "name",
                "slug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the derived label.\n"
                },
                "existingLabelPolicy": {
                    "type": "string",
                    "description": "Policy controlling behavior when the target label already exists on the source series (e.g. keep, replace).\n"
                },
                "labelName": {
                    "type": "string",
                    "description": "Name of the label exposed on derived series. Must be unique across the system.\n"
                },
                "metricLabel": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabel:DerivedLabelMetricLabel",
                    "description": "Derives a label for metrics, either by constructing a new value from filters or by mapping an existing label. Mutually exclusive with `span_tag`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the label to match.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the derived label. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "spanTag": {
                    "$ref": "#/types/chronosphere:index/DerivedLabelSpanTag:DerivedLabelSpanTag",
                    "description": "Derives a label for trace spans by mapping from an existing span tag. Mutually exclusive with `metric_label`.\n"
                }
            },
            "requiredInputs": [
                "labelName",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering DerivedLabel resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the derived label.\n"
                    },
                    "existingLabelPolicy": {
                        "type": "string",
                        "description": "Policy controlling behavior when the target label already exists on the source series (e.g. keep, replace).\n"
                    },
                    "labelName": {
                        "type": "string",
                        "description": "Name of the label exposed on derived series. Must be unique across the system.\n"
                    },
                    "metricLabel": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelMetricLabel:DerivedLabelMetricLabel",
                        "description": "Derives a label for metrics, either by constructing a new value from filters or by mapping an existing label. Mutually exclusive with `span_tag`.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the label to match.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the derived label. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "spanTag": {
                        "$ref": "#/types/chronosphere:index/DerivedLabelSpanTag:DerivedLabelSpanTag",
                        "description": "Derives a label for trace spans by mapping from an existing span tag. Mutually exclusive with `metric_label`.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/derivedMetric:DerivedMetric": {
            "description": "A virtual metric whose value is computed on demand from one of several underlying PromQL queries. The query selected at evaluation time is determined by matching the usage's labels against the configured selectors.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst requestRate = new chronosphere.DerivedMetric(\"requestRate\", {\n    description: \"Per-service request rate, with selector-aware variants\",\n    metricName: \"request_rate\",\n    name: \"request_rate\",\n    queries: [\n        {\n            query: {\n                expr: \"sum by (service) (rate(http_requests_total{label1=\\\"value1\\\"}[5m]))\",\n                variables: [{\n                    defaultSelector: \"service=default\",\n                    name: \"service\",\n                }],\n            },\n            selector: {\n                labels: {\n                    label1: \"value1\",\n                },\n            },\n        },\n        {\n            query: {\n                expr: \"sum by (service) (rate(http_requests_total[5m]))\",\n            },\n        },\n    ],\n    slug: \"request-rate\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nrequest_rate = chronosphere.DerivedMetric(\"requestRate\",\n    description=\"Per-service request rate, with selector-aware variants\",\n    metric_name=\"request_rate\",\n    name=\"request_rate\",\n    queries=[\n        chronosphere.DerivedMetricQueryArgs(\n            query=chronosphere.DerivedMetricQueryQueryArgs(\n                expr=\"sum by (service) (rate(http_requests_total{label1=\\\"value1\\\"}[5m]))\",\n                variables=[chronosphere.DerivedMetricQueryQueryVariableArgs(\n                    default_selector=\"service=default\",\n                    name=\"service\",\n                )],\n            ),\n            selector=chronosphere.DerivedMetricQuerySelectorArgs(\n                labels={\n                    \"label1\": \"value1\",\n                },\n            ),\n        ),\n        chronosphere.DerivedMetricQueryArgs(\n            query=chronosphere.DerivedMetricQueryQueryArgs(\n                expr=\"sum by (service) (rate(http_requests_total[5m]))\",\n            ),\n        ),\n    ],\n    slug=\"request-rate\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var requestRate = new Pulumi.DerivedMetric(\"requestRate\", new()\n    {\n        Description = \"Per-service request rate, with selector-aware variants\",\n        MetricName = \"request_rate\",\n        Name = \"request_rate\",\n        Queries = new[]\n        {\n            new Pulumi.Inputs.DerivedMetricQueryArgs\n            {\n                Query = new Pulumi.Inputs.DerivedMetricQueryQueryArgs\n                {\n                    Expr = \"sum by (service) (rate(http_requests_total{label1=\\\"value1\\\"}[5m]))\",\n                    Variables = new[]\n                    {\n                        new Pulumi.Inputs.DerivedMetricQueryQueryVariableArgs\n                        {\n                            DefaultSelector = \"service=default\",\n                            Name = \"service\",\n                        },\n                    },\n                },\n                Selector = new Pulumi.Inputs.DerivedMetricQuerySelectorArgs\n                {\n                    Labels = \n                    {\n                        { \"label1\", \"value1\" },\n                    },\n                },\n            },\n            new Pulumi.Inputs.DerivedMetricQueryArgs\n            {\n                Query = new Pulumi.Inputs.DerivedMetricQueryQueryArgs\n                {\n                    Expr = \"sum by (service) (rate(http_requests_total[5m]))\",\n                },\n            },\n        },\n        Slug = \"request-rate\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewDerivedMetric(ctx, \"requestRate\", \u0026chronosphere.DerivedMetricArgs{\n\t\t\tDescription: pulumi.String(\"Per-service request rate, with selector-aware variants\"),\n\t\t\tMetricName:  pulumi.String(\"request_rate\"),\n\t\t\tName:        pulumi.String(\"request_rate\"),\n\t\t\tQueries: chronosphere.DerivedMetricQueryArray{\n\t\t\t\t\u0026chronosphere.DerivedMetricQueryArgs{\n\t\t\t\t\tQuery: \u0026chronosphere.DerivedMetricQueryQueryArgs{\n\t\t\t\t\t\tExpr: pulumi.String(\"sum by (service) (rate(http_requests_total{label1=\\\"value1\\\"}[5m]))\"),\n\t\t\t\t\t\tVariables: chronosphere.DerivedMetricQueryQueryVariableArray{\n\t\t\t\t\t\t\t\u0026chronosphere.DerivedMetricQueryQueryVariableArgs{\n\t\t\t\t\t\t\t\tDefaultSelector: pulumi.String(\"service=default\"),\n\t\t\t\t\t\t\t\tName:            pulumi.String(\"service\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tSelector: \u0026chronosphere.DerivedMetricQuerySelectorArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"label1\": pulumi.String(\"value1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026chronosphere.DerivedMetricQueryArgs{\n\t\t\t\t\tQuery: \u0026chronosphere.DerivedMetricQueryQueryArgs{\n\t\t\t\t\t\tExpr: pulumi.String(\"sum by (service) (rate(http_requests_total[5m]))\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSlug: pulumi.String(\"request-rate\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.DerivedMetric;\nimport com.pulumi.chronosphere.DerivedMetricArgs;\nimport com.pulumi.chronosphere.inputs.DerivedMetricQueryArgs;\nimport com.pulumi.chronosphere.inputs.DerivedMetricQueryQueryArgs;\nimport com.pulumi.chronosphere.inputs.DerivedMetricQuerySelectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var requestRate = new DerivedMetric(\"requestRate\", DerivedMetricArgs.builder()        \n            .description(\"Per-service request rate, with selector-aware variants\")\n            .metricName(\"request_rate\")\n            .name(\"request_rate\")\n            .queries(            \n                DerivedMetricQueryArgs.builder()\n                    .query(DerivedMetricQueryQueryArgs.builder()\n                        .expr(\"sum by (service) (rate(http_requests_total{label1=\\\"value1\\\"}[5m]))\")\n                        .variables(DerivedMetricQueryQueryVariableArgs.builder()\n                            .defaultSelector(\"service=default\")\n                            .name(\"service\")\n                            .build())\n                        .build())\n                    .selector(DerivedMetricQuerySelectorArgs.builder()\n                        .labels(Map.of(\"label1\", \"value1\"))\n                        .build())\n                    .build(),\n                DerivedMetricQueryArgs.builder()\n                    .query(DerivedMetricQueryQueryArgs.builder()\n                        .expr(\"sum by (service) (rate(http_requests_total[5m]))\")\n                        .build())\n                    .build())\n            .slug(\"request-rate\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  requestRate:\n    type: chronosphere:DerivedMetric\n    properties:\n      description: Per-service request rate, with selector-aware variants\n      metricName: request_rate\n      name: request_rate\n      queries:\n        - query:\n            expr: sum by (service) (rate(http_requests_total{label1=\"value1\"}[5m]))\n            variables:\n              - defaultSelector: service=default\n                name: service\n          selector:\n            labels:\n              label1: value1\n        - query:\n            expr: sum by (service) (rate(http_requests_total[5m]))\n      slug: request-rate\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the derived metric.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Name of the derived metric as referenced in queries. Must be unique across the system.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Variable name as referenced in `expr` (e.g. `service` for `$service`).\n"
                },
                "queries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedMetricQuery:DerivedMetricQuery"
                    },
                    "description": "Ordered list of selector/query pairs. When the derived metric is used, the first entry whose `selector` matches the usage's labels supplies the PromQL `query`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the derived metric. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "metricName",
                "name",
                "queries",
                "slug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the derived metric.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Name of the derived metric as referenced in queries. Must be unique across the system.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Variable name as referenced in `expr` (e.g. `service` for `$service`).\n"
                },
                "queries": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/DerivedMetricQuery:DerivedMetricQuery"
                    },
                    "description": "Ordered list of selector/query pairs. When the derived metric is used, the first entry whose `selector` matches the usage's labels supplies the PromQL `query`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the derived metric. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "metricName",
                "name",
                "queries"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering DerivedMetric resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the derived metric.\n"
                    },
                    "metricName": {
                        "type": "string",
                        "description": "Name of the derived metric as referenced in queries. Must be unique across the system.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Variable name as referenced in `expr` (e.g. `service` for `$service`).\n"
                    },
                    "queries": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/DerivedMetricQuery:DerivedMetricQuery"
                        },
                        "description": "Ordered list of selector/query pairs. When the derived metric is used, the first entry whose `selector` matches the usage's labels supplies the PromQL `query`.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the derived metric. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/dropRule:DropRule": {
            "description": "Discards matching metric data at ingest time before it is stored. Supports unconditional drops, NaN-value drops, value-based drops, and conditional drops that activate only when a cardinality threshold is exceeded.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst noisyMetric = new chronosphere.DropRule(\"noisyMetric\", {\n    mode: \"ENABLED\",\n    name: \"Drop noisy metric\",\n    queries: [\"__name__:noisy_metric_name\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nnoisy_metric = chronosphere.DropRule(\"noisyMetric\",\n    mode=\"ENABLED\",\n    name=\"Drop noisy metric\",\n    queries=[\"__name__:noisy_metric_name\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var noisyMetric = new Pulumi.DropRule(\"noisyMetric\", new()\n    {\n        Mode = \"ENABLED\",\n        Name = \"Drop noisy metric\",\n        Queries = new[]\n        {\n            \"__name__:noisy_metric_name\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewDropRule(ctx, \"noisyMetric\", \u0026chronosphere.DropRuleArgs{\n\t\t\tMode: pulumi.String(\"ENABLED\"),\n\t\t\tName: pulumi.String(\"Drop noisy metric\"),\n\t\t\tQueries: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"__name__:noisy_metric_name\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.DropRule;\nimport com.pulumi.chronosphere.DropRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var noisyMetric = new DropRule(\"noisyMetric\", DropRuleArgs.builder()        \n            .mode(\"ENABLED\")\n            .name(\"Drop noisy metric\")\n            .queries(\"__name__:noisy_metric_name\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  noisyMetric:\n    type: chronosphere:DropRule\n    properties:\n      mode: ENABLED\n      name: Drop noisy metric\n      queries:\n        - __name__:noisy_metric_name\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "activatedDropDuration": {
                    "type": "string",
                    "description": "Once a conditional drop activates, how long it stays activated before re-checking against `rate_limit_threshold`.\n"
                },
                "active": {
                    "type": "boolean",
                    "description": "Whether the drop rule is active. Deprecated: use `mode` instead.\n",
                    "deprecationMessage": "use `mode` instead"
                },
                "conditionalDrop": {
                    "type": "boolean",
                    "description": "If `true`, the drop only activates when the configured `rate_limit_threshold` is exceeded.\n"
                },
                "dropNanValue": {
                    "type": "boolean",
                    "description": "If `true`, drops data points whose value is NaN, including any associated staleness markers.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Drop rule mode controlling whether it is enabled, disabled, or in a preview state. Defaults to `ENABLED`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the drop rule. Can be changed after creation.\n"
                },
                "queries": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of label filter queries that select which metrics to drop. A metric is dropped if it matches all filters in any one query.\n"
                },
                "rateLimitThreshold": {
                    "type": "number",
                    "description": "Percentage of the licensed metrics limit (0-100) at which a conditional drop activates.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the drop rule. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "valueBasedDrop": {
                    "$ref": "#/types/chronosphere:index/DropRuleValueBasedDrop:DropRuleValueBasedDrop",
                    "description": "Configuration for dropping data points whose value matches a target.\n"
                }
            },
            "required": [
                "name",
                "queries",
                "slug"
            ],
            "inputProperties": {
                "activatedDropDuration": {
                    "type": "string",
                    "description": "Once a conditional drop activates, how long it stays activated before re-checking against `rate_limit_threshold`.\n"
                },
                "active": {
                    "type": "boolean",
                    "description": "Whether the drop rule is active. Deprecated: use `mode` instead.\n",
                    "deprecationMessage": "use `mode` instead"
                },
                "conditionalDrop": {
                    "type": "boolean",
                    "description": "If `true`, the drop only activates when the configured `rate_limit_threshold` is exceeded.\n"
                },
                "dropNanValue": {
                    "type": "boolean",
                    "description": "If `true`, drops data points whose value is NaN, including any associated staleness markers.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Drop rule mode controlling whether it is enabled, disabled, or in a preview state. Defaults to `ENABLED`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the drop rule. Can be changed after creation.\n"
                },
                "queries": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "List of label filter queries that select which metrics to drop. A metric is dropped if it matches all filters in any one query.\n"
                },
                "rateLimitThreshold": {
                    "type": "number",
                    "description": "Percentage of the licensed metrics limit (0-100) at which a conditional drop activates.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the drop rule. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "valueBasedDrop": {
                    "$ref": "#/types/chronosphere:index/DropRuleValueBasedDrop:DropRuleValueBasedDrop",
                    "description": "Configuration for dropping data points whose value matches a target.\n"
                }
            },
            "requiredInputs": [
                "name",
                "queries"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering DropRule resources.\n",
                "properties": {
                    "activatedDropDuration": {
                        "type": "string",
                        "description": "Once a conditional drop activates, how long it stays activated before re-checking against `rate_limit_threshold`.\n"
                    },
                    "active": {
                        "type": "boolean",
                        "description": "Whether the drop rule is active. Deprecated: use `mode` instead.\n",
                        "deprecationMessage": "use `mode` instead"
                    },
                    "conditionalDrop": {
                        "type": "boolean",
                        "description": "If `true`, the drop only activates when the configured `rate_limit_threshold` is exceeded.\n"
                    },
                    "dropNanValue": {
                        "type": "boolean",
                        "description": "If `true`, drops data points whose value is NaN, including any associated staleness markers.\n"
                    },
                    "mode": {
                        "type": "string",
                        "description": "Drop rule mode controlling whether it is enabled, disabled, or in a preview state. Defaults to `ENABLED`.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the drop rule. Can be changed after creation.\n"
                    },
                    "queries": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "List of label filter queries that select which metrics to drop. A metric is dropped if it matches all filters in any one query.\n"
                    },
                    "rateLimitThreshold": {
                        "type": "number",
                        "description": "Percentage of the licensed metrics limit (0-100) at which a conditional drop activates.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the drop rule. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "valueBasedDrop": {
                        "$ref": "#/types/chronosphere:index/DropRuleValueBasedDrop:DropRuleValueBasedDrop",
                        "description": "Configuration for dropping data points whose value matches a target.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/emailAlertNotifier:EmailAlertNotifier": {
            "description": "Email notifier that delivers monitor signals to a recipient address with templated HTML and/or plain-text bodies. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst email = new chronosphere.EmailAlertNotifier(\"email\", {\n    name: \"Email Blackhole\",\n    to: \"blackhole@chronosphere.io\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nemail = chronosphere.EmailAlertNotifier(\"email\",\n    name=\"Email Blackhole\",\n    to=\"blackhole@chronosphere.io\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var email = new Pulumi.EmailAlertNotifier(\"email\", new()\n    {\n        Name = \"Email Blackhole\",\n        To = \"blackhole@chronosphere.io\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewEmailAlertNotifier(ctx, \"email\", \u0026chronosphere.EmailAlertNotifierArgs{\n\t\t\tName: pulumi.String(\"Email Blackhole\"),\n\t\t\tTo:   pulumi.String(\"blackhole@chronosphere.io\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.EmailAlertNotifier;\nimport com.pulumi.chronosphere.EmailAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var email = new EmailAlertNotifier(\"email\", EmailAlertNotifierArgs.builder()        \n            .name(\"Email Blackhole\")\n            .to(\"blackhole@chronosphere.io\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  email:\n    type: chronosphere:EmailAlertNotifier\n    properties:\n      name: Email Blackhole\n      to: blackhole@chronosphere.io\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "html": {
                    "type": "string",
                    "description": "Body of the email in HTML format. Supports Go templating.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "text": {
                    "type": "string",
                    "description": "Body of the email in plain text format. Supports Go templating.\n"
                },
                "to": {
                    "type": "string",
                    "description": "Email address to send notifications to.\n"
                }
            },
            "required": [
                "name",
                "slug",
                "to"
            ],
            "inputProperties": {
                "html": {
                    "type": "string",
                    "description": "Body of the email in HTML format. Supports Go templating.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "text": {
                    "type": "string",
                    "description": "Body of the email in plain text format. Supports Go templating.\n"
                },
                "to": {
                    "type": "string",
                    "description": "Email address to send notifications to.\n"
                }
            },
            "requiredInputs": [
                "name",
                "to"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering EmailAlertNotifier resources.\n",
                "properties": {
                    "html": {
                        "type": "string",
                        "description": "Body of the email in HTML format. Supports Go templating.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the notifier.\n"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "text": {
                        "type": "string",
                        "description": "Body of the email in plain text format. Supports Go templating.\n"
                    },
                    "to": {
                        "type": "string",
                        "description": "Email address to send notifications to.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/gcpMetricsIntegration:GcpMetricsIntegration": {
            "description": "Scrapes Google Cloud Monitoring metrics from the configured projects and metric prefixes using a GCP service-account credential, with optional filters and rollup rules.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst customer = new chronosphere.GcpMetricsIntegration(\"customer\", {\n    name: \"GCP Metrics Integration\",\n    serviceAccount: {\n        clientEmail: \"chronosphere-collector@my-project.iam.gserviceaccount.com\",\n    },\n    slug: \"gcp-metrics-integration\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ncustomer = chronosphere.GcpMetricsIntegration(\"customer\",\n    name=\"GCP Metrics Integration\",\n    service_account=chronosphere.GcpMetricsIntegrationServiceAccountArgs(\n        client_email=\"chronosphere-collector@my-project.iam.gserviceaccount.com\",\n    ),\n    slug=\"gcp-metrics-integration\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var customer = new Pulumi.GcpMetricsIntegration(\"customer\", new()\n    {\n        Name = \"GCP Metrics Integration\",\n        ServiceAccount = new Pulumi.Inputs.GcpMetricsIntegrationServiceAccountArgs\n        {\n            ClientEmail = \"chronosphere-collector@my-project.iam.gserviceaccount.com\",\n        },\n        Slug = \"gcp-metrics-integration\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewGcpMetricsIntegration(ctx, \"customer\", \u0026chronosphere.GcpMetricsIntegrationArgs{\n\t\t\tName: pulumi.String(\"GCP Metrics Integration\"),\n\t\t\tServiceAccount: \u0026chronosphere.GcpMetricsIntegrationServiceAccountArgs{\n\t\t\t\tClientEmail: pulumi.String(\"chronosphere-collector@my-project.iam.gserviceaccount.com\"),\n\t\t\t},\n\t\t\tSlug: pulumi.String(\"gcp-metrics-integration\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.GcpMetricsIntegration;\nimport com.pulumi.chronosphere.GcpMetricsIntegrationArgs;\nimport com.pulumi.chronosphere.inputs.GcpMetricsIntegrationServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var customer = new GcpMetricsIntegration(\"customer\", GcpMetricsIntegrationArgs.builder()        \n            .name(\"GCP Metrics Integration\")\n            .serviceAccount(GcpMetricsIntegrationServiceAccountArgs.builder()\n                .clientEmail(\"chronosphere-collector@my-project.iam.gserviceaccount.com\")\n                .build())\n            .slug(\"gcp-metrics-integration\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  customer:\n    type: chronosphere:GcpMetricsIntegration\n    properties:\n      name: GCP Metrics Integration\n      serviceAccount:\n        clientEmail: chronosphere-collector@my-project.iam.gserviceaccount.com\n      slug: gcp-metrics-integration\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "metricGroups": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroup:GcpMetricsIntegrationMetricGroup"
                    },
                    "description": "Groups of Google Cloud metrics to ingest. Each group targets a specific project and set of metric prefixes.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to filter on.\n"
                },
                "serviceAccount": {
                    "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationServiceAccount:GcpMetricsIntegrationServiceAccount",
                    "description": "Google Cloud service account that Chronosphere impersonates to read metrics.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "name"
            ],
            "inputProperties": {
                "metricGroups": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroup:GcpMetricsIntegrationMetricGroup"
                    },
                    "description": "Groups of Google Cloud metrics to ingest. Each group targets a specific project and set of metric prefixes.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to filter on.\n"
                },
                "serviceAccount": {
                    "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationServiceAccount:GcpMetricsIntegrationServiceAccount",
                    "description": "Google Cloud service account that Chronosphere impersonates to read metrics.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering GcpMetricsIntegration resources.\n",
                "properties": {
                    "metricGroups": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationMetricGroup:GcpMetricsIntegrationMetricGroup"
                        },
                        "description": "Groups of Google Cloud metrics to ingest. Each group targets a specific project and set of metric prefixes.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Label name to filter on.\n"
                    },
                    "serviceAccount": {
                        "$ref": "#/types/chronosphere:index/GcpMetricsIntegrationServiceAccount:GcpMetricsIntegrationServiceAccount",
                        "description": "Google Cloud service account that Chronosphere impersonates to read metrics.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the integration. Generated from `name` if omitted. Immutable after creation.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logAllocationConfig:LogAllocationConfig": {
            "description": "Singleton config that allocates a portion of the org's log ingest quota to each dataset by priority, controlling which logs are kept when the quota is exceeded.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogAllocationConfig;\nimport com.pulumi.chronosphere.LogAllocationConfigArgs;\nimport com.pulumi.chronosphere.inputs.LogAllocationConfigDefaultDatasetArgs;\nimport com.pulumi.chronosphere.inputs.LogAllocationConfigDefaultDatasetAllocationArgs;\nimport com.pulumi.chronosphere.inputs.LogAllocationConfigDefaultDatasetPrioritiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var config = new LogAllocationConfig(\"config\", LogAllocationConfigArgs.builder()        \n            .defaultDataset(LogAllocationConfigDefaultDatasetArgs.builder()\n                .allocation(LogAllocationConfigDefaultDatasetAllocationArgs.builder()\n                    .percentOfLicense(100)\n                    .build())\n                .priorities(LogAllocationConfigDefaultDatasetPrioritiesArgs.builder()\n                    .highPriorityFilter(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .lowPriorityFilter(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  config:\n    type: chronosphere:LogAllocationConfig\n    properties:\n      defaultDataset:\n        allocation:\n          percentOfLicense: 100\n        priorities:\n          highPriorityFilter:\n            - query: severity = 'error'\n          lowPriorityFilter:\n            - query: severity = 'debug'\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "datasetAllocations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocation:LogAllocationConfigDatasetAllocation"
                    },
                    "description": "Per-dataset allocation and priority overrides. Datasets are evaluated in order; the first match wins.\n"
                },
                "defaultDataset": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDataset:LogAllocationConfigDefaultDataset",
                    "description": "Allocation and priority configuration for the default dataset, which receives any logs not matched by a `dataset_allocation` entry.\n"
                }
            },
            "required": [
                "defaultDataset"
            ],
            "inputProperties": {
                "datasetAllocations": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocation:LogAllocationConfigDatasetAllocation"
                    },
                    "description": "Per-dataset allocation and priority overrides. Datasets are evaluated in order; the first match wins.\n"
                },
                "defaultDataset": {
                    "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDataset:LogAllocationConfigDefaultDataset",
                    "description": "Allocation and priority configuration for the default dataset, which receives any logs not matched by a `dataset_allocation` entry.\n"
                }
            },
            "requiredInputs": [
                "defaultDataset"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogAllocationConfig resources.\n",
                "properties": {
                    "datasetAllocations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/LogAllocationConfigDatasetAllocation:LogAllocationConfigDatasetAllocation"
                        },
                        "description": "Per-dataset allocation and priority overrides. Datasets are evaluated in order; the first match wins.\n"
                    },
                    "defaultDataset": {
                        "$ref": "#/types/chronosphere:index/LogAllocationConfigDefaultDataset:LogAllocationConfigDefaultDataset",
                        "description": "Allocation and priority configuration for the default dataset, which receives any logs not matched by a `dataset_allocation` entry.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logControlConfig:LogControlConfig": {
            "description": "Singleton org-wide pipeline of rules that sample, drop, replace, parse, or emit metrics from logs at ingest.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst config = new chronosphere.LogControlConfig(\"config\", {rules: [\n    {\n        filter: \"service = 'sample-service' AND severity = 'debug'\",\n        mode: \"ENABLED\",\n        name: \"sample-debug\",\n        sample: {\n            rate: 0.01,\n        },\n        type: \"SAMPLE\",\n    },\n    {\n        filter: \"service = 'deprecated-service'\",\n        mode: \"ENABLED\",\n        name: \"drop-deprecated\",\n        type: \"DROP\",\n    },\n    {\n        dropField: {\n            fieldRegex: \"password|secret|api_key\",\n            parentPath: {\n                selector: \"kubernetes['labels']\",\n            },\n        },\n        filter: \"service = 'api-gateway'\",\n        mode: \"ENABLED\",\n        name: \"drop-sensitive-fields\",\n        type: \"DROP_FIELD\",\n    },\n    {\n        filter: \"service = 'api-gateway'\",\n        mode: \"ENABLED\",\n        name: \"shorten-trace-ids\",\n        replaceField: {\n            field: {\n                selector: \"trace_id\",\n            },\n            replaceAll: false,\n            replaceMode: \"STATIC_VALUE\",\n            replaceRegex: \"[0-9a-f]{32}\",\n            staticValue: {\n                value: \"[trace-id]\",\n            },\n        },\n        type: \"REPLACE_FIELD\",\n    },\n]});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nconfig = chronosphere.LogControlConfig(\"config\", rules=[\n    chronosphere.LogControlConfigRuleArgs(\n        filter=\"service = 'sample-service' AND severity = 'debug'\",\n        mode=\"ENABLED\",\n        name=\"sample-debug\",\n        sample=chronosphere.LogControlConfigRuleSampleArgs(\n            rate=0.01,\n        ),\n        type=\"SAMPLE\",\n    ),\n    chronosphere.LogControlConfigRuleArgs(\n        filter=\"service = 'deprecated-service'\",\n        mode=\"ENABLED\",\n        name=\"drop-deprecated\",\n        type=\"DROP\",\n    ),\n    chronosphere.LogControlConfigRuleArgs(\n        drop_field=chronosphere.LogControlConfigRuleDropFieldArgs(\n            field_regex=\"password|secret|api_key\",\n            parent_path=chronosphere.LogControlConfigRuleDropFieldParentPathArgs(\n                selector=\"kubernetes['labels']\",\n            ),\n        ),\n        filter=\"service = 'api-gateway'\",\n        mode=\"ENABLED\",\n        name=\"drop-sensitive-fields\",\n        type=\"DROP_FIELD\",\n    ),\n    chronosphere.LogControlConfigRuleArgs(\n        filter=\"service = 'api-gateway'\",\n        mode=\"ENABLED\",\n        name=\"shorten-trace-ids\",\n        replace_field=chronosphere.LogControlConfigRuleReplaceFieldArgs(\n            field=chronosphere.LogControlConfigRuleReplaceFieldFieldArgs(\n                selector=\"trace_id\",\n            ),\n            replace_all=False,\n            replace_mode=\"STATIC_VALUE\",\n            replace_regex=\"[0-9a-f]{32}\",\n            static_value=chronosphere.LogControlConfigRuleReplaceFieldStaticValueArgs(\n                value=\"[trace-id]\",\n            ),\n        ),\n        type=\"REPLACE_FIELD\",\n    ),\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Pulumi.LogControlConfig(\"config\", new()\n    {\n        Rules = new[]\n        {\n            new Pulumi.Inputs.LogControlConfigRuleArgs\n            {\n                Filter = \"service = 'sample-service' AND severity = 'debug'\",\n                Mode = \"ENABLED\",\n                Name = \"sample-debug\",\n                Sample = new Pulumi.Inputs.LogControlConfigRuleSampleArgs\n                {\n                    Rate = 0.01,\n                },\n                Type = \"SAMPLE\",\n            },\n            new Pulumi.Inputs.LogControlConfigRuleArgs\n            {\n                Filter = \"service = 'deprecated-service'\",\n                Mode = \"ENABLED\",\n                Name = \"drop-deprecated\",\n                Type = \"DROP\",\n            },\n            new Pulumi.Inputs.LogControlConfigRuleArgs\n            {\n                DropField = new Pulumi.Inputs.LogControlConfigRuleDropFieldArgs\n                {\n                    FieldRegex = \"password|secret|api_key\",\n                    ParentPath = new Pulumi.Inputs.LogControlConfigRuleDropFieldParentPathArgs\n                    {\n                        Selector = \"kubernetes['labels']\",\n                    },\n                },\n                Filter = \"service = 'api-gateway'\",\n                Mode = \"ENABLED\",\n                Name = \"drop-sensitive-fields\",\n                Type = \"DROP_FIELD\",\n            },\n            new Pulumi.Inputs.LogControlConfigRuleArgs\n            {\n                Filter = \"service = 'api-gateway'\",\n                Mode = \"ENABLED\",\n                Name = \"shorten-trace-ids\",\n                ReplaceField = new Pulumi.Inputs.LogControlConfigRuleReplaceFieldArgs\n                {\n                    Field = new Pulumi.Inputs.LogControlConfigRuleReplaceFieldFieldArgs\n                    {\n                        Selector = \"trace_id\",\n                    },\n                    ReplaceAll = false,\n                    ReplaceMode = \"STATIC_VALUE\",\n                    ReplaceRegex = \"[0-9a-f]{32}\",\n                    StaticValue = new Pulumi.Inputs.LogControlConfigRuleReplaceFieldStaticValueArgs\n                    {\n                        Value = \"[trace-id]\",\n                    },\n                },\n                Type = \"REPLACE_FIELD\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewLogControlConfig(ctx, \"config\", \u0026chronosphere.LogControlConfigArgs{\n\t\t\tRules: chronosphere.LogControlConfigRuleArray{\n\t\t\t\t\u0026chronosphere.LogControlConfigRuleArgs{\n\t\t\t\t\tFilter: pulumi.String(\"service = 'sample-service' AND severity = 'debug'\"),\n\t\t\t\t\tMode:   pulumi.String(\"ENABLED\"),\n\t\t\t\t\tName:   pulumi.String(\"sample-debug\"),\n\t\t\t\t\tSample: \u0026chronosphere.LogControlConfigRuleSampleArgs{\n\t\t\t\t\t\tRate: pulumi.Float64(0.01),\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"SAMPLE\"),\n\t\t\t\t},\n\t\t\t\t\u0026chronosphere.LogControlConfigRuleArgs{\n\t\t\t\t\tFilter: pulumi.String(\"service = 'deprecated-service'\"),\n\t\t\t\t\tMode:   pulumi.String(\"ENABLED\"),\n\t\t\t\t\tName:   pulumi.String(\"drop-deprecated\"),\n\t\t\t\t\tType:   pulumi.String(\"DROP\"),\n\t\t\t\t},\n\t\t\t\t\u0026chronosphere.LogControlConfigRuleArgs{\n\t\t\t\t\tDropField: \u0026chronosphere.LogControlConfigRuleDropFieldArgs{\n\t\t\t\t\t\tFieldRegex: pulumi.String(\"password|secret|api_key\"),\n\t\t\t\t\t\tParentPath: \u0026chronosphere.LogControlConfigRuleDropFieldParentPathArgs{\n\t\t\t\t\t\t\tSelector: pulumi.String(\"kubernetes['labels']\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tFilter: pulumi.String(\"service = 'api-gateway'\"),\n\t\t\t\t\tMode:   pulumi.String(\"ENABLED\"),\n\t\t\t\t\tName:   pulumi.String(\"drop-sensitive-fields\"),\n\t\t\t\t\tType:   pulumi.String(\"DROP_FIELD\"),\n\t\t\t\t},\n\t\t\t\t\u0026chronosphere.LogControlConfigRuleArgs{\n\t\t\t\t\tFilter: pulumi.String(\"service = 'api-gateway'\"),\n\t\t\t\t\tMode:   pulumi.String(\"ENABLED\"),\n\t\t\t\t\tName:   pulumi.String(\"shorten-trace-ids\"),\n\t\t\t\t\tReplaceField: \u0026chronosphere.LogControlConfigRuleReplaceFieldArgs{\n\t\t\t\t\t\tField: \u0026chronosphere.LogControlConfigRuleReplaceFieldFieldArgs{\n\t\t\t\t\t\t\tSelector: pulumi.String(\"trace_id\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tReplaceAll:   pulumi.Bool(false),\n\t\t\t\t\t\tReplaceMode:  pulumi.String(\"STATIC_VALUE\"),\n\t\t\t\t\t\tReplaceRegex: pulumi.String(\"[0-9a-f]{32}\"),\n\t\t\t\t\t\tStaticValue: \u0026chronosphere.LogControlConfigRuleReplaceFieldStaticValueArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"[trace-id]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tType: pulumi.String(\"REPLACE_FIELD\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogControlConfig;\nimport com.pulumi.chronosphere.LogControlConfigArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleSampleArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleDropFieldArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleDropFieldParentPathArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleReplaceFieldArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleReplaceFieldFieldArgs;\nimport com.pulumi.chronosphere.inputs.LogControlConfigRuleReplaceFieldStaticValueArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var config = new LogControlConfig(\"config\", LogControlConfigArgs.builder()        \n            .rules(            \n                LogControlConfigRuleArgs.builder()\n                    .filter(\"service = 'sample-service' AND severity = 'debug'\")\n                    .mode(\"ENABLED\")\n                    .name(\"sample-debug\")\n                    .sample(LogControlConfigRuleSampleArgs.builder()\n                        .rate(0.01)\n                        .build())\n                    .type(\"SAMPLE\")\n                    .build(),\n                LogControlConfigRuleArgs.builder()\n                    .filter(\"service = 'deprecated-service'\")\n                    .mode(\"ENABLED\")\n                    .name(\"drop-deprecated\")\n                    .type(\"DROP\")\n                    .build(),\n                LogControlConfigRuleArgs.builder()\n                    .dropField(LogControlConfigRuleDropFieldArgs.builder()\n                        .fieldRegex(\"password|secret|api_key\")\n                        .parentPath(LogControlConfigRuleDropFieldParentPathArgs.builder()\n                            .selector(\"kubernetes['labels']\")\n                            .build())\n                        .build())\n                    .filter(\"service = 'api-gateway'\")\n                    .mode(\"ENABLED\")\n                    .name(\"drop-sensitive-fields\")\n                    .type(\"DROP_FIELD\")\n                    .build(),\n                LogControlConfigRuleArgs.builder()\n                    .filter(\"service = 'api-gateway'\")\n                    .mode(\"ENABLED\")\n                    .name(\"shorten-trace-ids\")\n                    .replaceField(LogControlConfigRuleReplaceFieldArgs.builder()\n                        .field(LogControlConfigRuleReplaceFieldFieldArgs.builder()\n                            .selector(\"trace_id\")\n                            .build())\n                        .replaceAll(false)\n                        .replaceMode(\"STATIC_VALUE\")\n                        .replaceRegex(\"[0-9a-f]{32}\")\n                        .staticValue(LogControlConfigRuleReplaceFieldStaticValueArgs.builder()\n                            .value(\"[trace-id]\")\n                            .build())\n                        .build())\n                    .type(\"REPLACE_FIELD\")\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  config:\n    type: chronosphere:LogControlConfig\n    properties:\n      rules:\n        - filter: service = 'sample-service' AND severity = 'debug'\n          mode: ENABLED\n          name: sample-debug\n          sample:\n            rate: 0.01\n          type: SAMPLE\n        - filter: service = 'deprecated-service'\n          mode: ENABLED\n          name: drop-deprecated\n          type: DROP\n        - dropField:\n            fieldRegex: password|secret|api_key\n            parentPath:\n              selector: kubernetes['labels']\n          filter: service = 'api-gateway'\n          mode: ENABLED\n          name: drop-sensitive-fields\n          type: DROP_FIELD\n        - filter: service = 'api-gateway'\n          mode: ENABLED\n          name: shorten-trace-ids\n          replaceField:\n            field:\n              selector: trace_id\n            replaceAll: false\n            replaceMode: STATIC_VALUE\n            replaceRegex: '[0-9a-f]{32}'\n            staticValue:\n              value: '[trace-id]'\n          type: REPLACE_FIELD\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "rules": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogControlConfigRule:LogControlConfigRule"
                    },
                    "description": "Ordered list of log control rules applied to the log ingest pipeline. Rules are evaluated in order.\n"
                }
            },
            "inputProperties": {
                "rules": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogControlConfigRule:LogControlConfigRule"
                    },
                    "description": "Ordered list of log control rules applied to the log ingest pipeline. Rules are evaluated in order.\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogControlConfig resources.\n",
                "properties": {
                    "rules": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/LogControlConfigRule:LogControlConfigRule"
                        },
                        "description": "Ordered list of log control rules applied to the log ingest pipeline. Rules are evaluated in order.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logIngestConfig:LogIngestConfig": {
            "description": "Singleton per-tenant parser configuration controlling how raw log payloads are parsed into structured fields and how timestamps, severities, services, and other fields are normalized.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogIngestConfig;\nimport com.pulumi.chronosphere.LogIngestConfigArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldNormalizationArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldNormalizationMessageArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldNormalizationServiceArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldNormalizationSeverityArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldNormalizationTimestampArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldParserArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldParserParserArgs;\nimport com.pulumi.chronosphere.inputs.LogIngestConfigFieldParserSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var config = new LogIngestConfig(\"config\", LogIngestConfigArgs.builder()        \n            .fieldNormalization(LogIngestConfigFieldNormalizationArgs.builder()\n                .message(LogIngestConfigFieldNormalizationMessageArgs.builder()\n                    .defaultValue(\"no message\")\n                    .source(                    \n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference),\n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .build())\n                .service(LogIngestConfigFieldNormalizationServiceArgs.builder()\n                    .defaultValue(\"UNKNOWN\")\n                    .source(                    \n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference),\n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .build())\n                .severity(LogIngestConfigFieldNormalizationSeverityArgs.builder()\n                    .defaultValue(\"INFO\")\n                    .source(                    \n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference),\n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .valueMap(Map.ofEntries(\n                        Map.entry(\"debug\", \"DEBUG\"),\n                        Map.entry(\"error\", \"ERROR\"),\n                        Map.entry(\"fatal\", \"CRITICAL\"),\n                        Map.entry(\"info\", \"INFO\"),\n                        Map.entry(\"warn\", \"WARNING\")\n                    ))\n                    .build())\n                .timestamp(LogIngestConfigFieldNormalizationTimestampArgs.builder()\n                    .source(                    \n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference),\n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference),\n                        %!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .build())\n                .build())\n            .fieldParsers(LogIngestConfigFieldParserArgs.builder()\n                .mode(\"ENABLED\")\n                .parser(LogIngestConfigFieldParserParserArgs.builder()\n                    .parserType(\"JSON\")\n                    .build())\n                .source(LogIngestConfigFieldParserSourceArgs.builder()\n                    .selector(\"raw_message\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  config:\n    type: chronosphere:LogIngestConfig\n    properties:\n      # Normalize common fields across heterogeneous log sources.\n      fieldNormalization:\n        message:\n          defaultValue: no message\n          source:\n            - selector: message\n            - selector: msg\n        service:\n          defaultValue: UNKNOWN\n          source:\n            - selector: service\n            - selector: app\n        severity:\n          defaultValue: INFO\n          source:\n            - selector: level\n            - selector: severity\n          valueMap:\n            debug: DEBUG\n            error: ERROR\n            fatal: CRITICAL\n            info: INFO\n            warn: WARNING\n        timestamp:\n          source:\n            - selector: timestamp\n            - selector: ts\n            - selector: '@timestamp'\n      # Parse raw JSON log lines into structured fields.\n      fieldParsers:\n        - mode: ENABLED\n          parser:\n            parserType: JSON\n          source:\n            selector: raw_message\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "fieldNormalization": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalization:LogIngestConfigFieldNormalization",
                    "description": "Field normalization rules that map and standardize well-known fields (timestamp, severity, message, service) across log formats. Runs after parsing.\n"
                },
                "fieldParsers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParser:LogIngestConfigFieldParser"
                    },
                    "description": "Parsers applied to specific fields within structured logs (or to fields produced by a plaintext parser).\n"
                },
                "plaintextParsers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParser:LogIngestConfigPlaintextParser"
                    },
                    "description": "Parsers applied to plaintext logs as they enter the ingest pipeline. The first parser that matches a log is used.\n"
                }
            },
            "inputProperties": {
                "fieldNormalization": {
                    "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalization:LogIngestConfigFieldNormalization",
                    "description": "Field normalization rules that map and standardize well-known fields (timestamp, severity, message, service) across log formats. Runs after parsing.\n"
                },
                "fieldParsers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParser:LogIngestConfigFieldParser"
                    },
                    "description": "Parsers applied to specific fields within structured logs (or to fields produced by a plaintext parser).\n"
                },
                "plaintextParsers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParser:LogIngestConfigPlaintextParser"
                    },
                    "description": "Parsers applied to plaintext logs as they enter the ingest pipeline. The first parser that matches a log is used.\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogIngestConfig resources.\n",
                "properties": {
                    "fieldNormalization": {
                        "$ref": "#/types/chronosphere:index/LogIngestConfigFieldNormalization:LogIngestConfigFieldNormalization",
                        "description": "Field normalization rules that map and standardize well-known fields (timestamp, severity, message, service) across log formats. Runs after parsing.\n"
                    },
                    "fieldParsers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/LogIngestConfigFieldParser:LogIngestConfigFieldParser"
                        },
                        "description": "Parsers applied to specific fields within structured logs (or to fields produced by a plaintext parser).\n"
                    },
                    "plaintextParsers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/LogIngestConfigPlaintextParser:LogIngestConfigPlaintextParser"
                        },
                        "description": "Parsers applied to plaintext logs as they enter the ingest pipeline. The first parser that matches a log is used.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logRetentionConfig:LogRetentionConfig": {
            "description": "A retention policy dictating how long logs matching a given filter are kept before being deleted.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst productionErrors = new chronosphere.LogRetentionConfig(\"productionErrors\", {\n    filter: \"severity = 'error' AND env = 'production'\",\n    mode: \"ENABLED\",\n    name: \"Production Error Logs Long-term Retention\",\n    retentionDays: 365,\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nproduction_errors = chronosphere.LogRetentionConfig(\"productionErrors\",\n    filter=\"severity = 'error' AND env = 'production'\",\n    mode=\"ENABLED\",\n    name=\"Production Error Logs Long-term Retention\",\n    retention_days=365)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var productionErrors = new Pulumi.LogRetentionConfig(\"productionErrors\", new()\n    {\n        Filter = \"severity = 'error' AND env = 'production'\",\n        Mode = \"ENABLED\",\n        Name = \"Production Error Logs Long-term Retention\",\n        RetentionDays = 365,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewLogRetentionConfig(ctx, \"productionErrors\", \u0026chronosphere.LogRetentionConfigArgs{\n\t\t\tFilter:        pulumi.String(\"severity = 'error' AND env = 'production'\"),\n\t\t\tMode:          pulumi.String(\"ENABLED\"),\n\t\t\tName:          pulumi.String(\"Production Error Logs Long-term Retention\"),\n\t\t\tRetentionDays: pulumi.Int(365),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogRetentionConfig;\nimport com.pulumi.chronosphere.LogRetentionConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var productionErrors = new LogRetentionConfig(\"productionErrors\", LogRetentionConfigArgs.builder()        \n            .filter(\"severity = 'error' AND env = 'production'\")\n            .mode(\"ENABLED\")\n            .name(\"Production Error Logs Long-term Retention\")\n            .retentionDays(365)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  productionErrors:\n    type: chronosphere:LogRetentionConfig\n    properties:\n      filter: severity = 'error' AND env = 'production'\n      mode: ENABLED\n      name: Production Error Logs Long-term Retention\n      retentionDays: 365\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "filter": {
                    "type": "string",
                    "description": "Log query filter. The retention policy applies only to logs that match.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mode that determines how matching logs are retained in long-term (Iceberg) storage.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the log retention config.\n"
                },
                "retentionDays": {
                    "type": "integer",
                    "description": "Number of days to retain matching logs in long-term (Iceberg) storage after they are exported. When multiple configs overlap, the longest retention wins.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the log retention config. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "filter",
                "mode",
                "name",
                "retentionDays",
                "slug"
            ],
            "inputProperties": {
                "filter": {
                    "type": "string",
                    "description": "Log query filter. The retention policy applies only to logs that match.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mode that determines how matching logs are retained in long-term (Iceberg) storage.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the log retention config.\n"
                },
                "retentionDays": {
                    "type": "integer",
                    "description": "Number of days to retain matching logs in long-term (Iceberg) storage after they are exported. When multiple configs overlap, the longest retention wins.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the log retention config. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "filter",
                "mode",
                "name",
                "retentionDays"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogRetentionConfig resources.\n",
                "properties": {
                    "filter": {
                        "type": "string",
                        "description": "Log query filter. The retention policy applies only to logs that match.\n"
                    },
                    "mode": {
                        "type": "string",
                        "description": "Mode that determines how matching logs are retained in long-term (Iceberg) storage.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the log retention config.\n"
                    },
                    "retentionDays": {
                        "type": "integer",
                        "description": "Number of days to retain matching logs in long-term (Iceberg) storage after they are exported. When multiple configs overlap, the longest retention wins.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the log retention config. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logscaleAction:LogscaleAction": {
            "description": "A CrowdStrike Falcon LogScale (formerly Humio) action target (email, Slack, webhook, PagerDuty, OpsGenie, VictorOps, or upload-file) invoked by a logscale_alert when it fires.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst email = new chronosphere.LogscaleAction(\"email\", {\n    emailAction: {\n        attachCsv: true,\n        bodyTemplate: \"{{query.results}}\",\n        recipients: [\"oncall@example.com\"],\n        subjectTemplate: \"Logscale alert: {{alert.name}}\",\n        useProxy: false,\n    },\n    name: \"Email on-call\",\n    repository: \"default\",\n});\nconst pagerduty = new chronosphere.LogscaleAction(\"pagerduty\", {\n    name: \"PagerDuty page\",\n    pagerDutyAction: {\n        routingKey: \"XXXXX\",\n        severity: \"ERROR\",\n        useProxy: false,\n    },\n    repository: \"default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nemail = chronosphere.LogscaleAction(\"email\",\n    email_action=chronosphere.LogscaleActionEmailActionArgs(\n        attach_csv=True,\n        body_template=\"{{query.results}}\",\n        recipients=[\"oncall@example.com\"],\n        subject_template=\"Logscale alert: {{alert.name}}\",\n        use_proxy=False,\n    ),\n    name=\"Email on-call\",\n    repository=\"default\")\npagerduty = chronosphere.LogscaleAction(\"pagerduty\",\n    name=\"PagerDuty page\",\n    pager_duty_action=chronosphere.LogscaleActionPagerDutyActionArgs(\n        routing_key=\"XXXXX\",\n        severity=\"ERROR\",\n        use_proxy=False,\n    ),\n    repository=\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var email = new Pulumi.LogscaleAction(\"email\", new()\n    {\n        EmailAction = new Pulumi.Inputs.LogscaleActionEmailActionArgs\n        {\n            AttachCsv = true,\n            BodyTemplate = \"{{query.results}}\",\n            Recipients = new[]\n            {\n                \"oncall@example.com\",\n            },\n            SubjectTemplate = \"Logscale alert: {{alert.name}}\",\n            UseProxy = false,\n        },\n        Name = \"Email on-call\",\n        Repository = \"default\",\n    });\n\n    var pagerduty = new Pulumi.LogscaleAction(\"pagerduty\", new()\n    {\n        Name = \"PagerDuty page\",\n        PagerDutyAction = new Pulumi.Inputs.LogscaleActionPagerDutyActionArgs\n        {\n            RoutingKey = \"XXXXX\",\n            Severity = \"ERROR\",\n            UseProxy = false,\n        },\n        Repository = \"default\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewLogscaleAction(ctx, \"email\", \u0026chronosphere.LogscaleActionArgs{\n\t\t\tEmailAction: \u0026chronosphere.LogscaleActionEmailActionArgs{\n\t\t\t\tAttachCsv:    pulumi.Bool(true),\n\t\t\t\tBodyTemplate: pulumi.String(\"{{query.results}}\"),\n\t\t\t\tRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"oncall@example.com\"),\n\t\t\t\t},\n\t\t\t\tSubjectTemplate: pulumi.String(\"Logscale alert: {{alert.name}}\"),\n\t\t\t\tUseProxy:        pulumi.Bool(false),\n\t\t\t},\n\t\t\tName:       pulumi.String(\"Email on-call\"),\n\t\t\tRepository: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewLogscaleAction(ctx, \"pagerduty\", \u0026chronosphere.LogscaleActionArgs{\n\t\t\tName: pulumi.String(\"PagerDuty page\"),\n\t\t\tPagerDutyAction: \u0026chronosphere.LogscaleActionPagerDutyActionArgs{\n\t\t\t\tRoutingKey: pulumi.String(\"XXXXX\"),\n\t\t\t\tSeverity:   pulumi.String(\"ERROR\"),\n\t\t\t\tUseProxy:   pulumi.Bool(false),\n\t\t\t},\n\t\t\tRepository: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogscaleAction;\nimport com.pulumi.chronosphere.LogscaleActionArgs;\nimport com.pulumi.chronosphere.inputs.LogscaleActionEmailActionArgs;\nimport com.pulumi.chronosphere.inputs.LogscaleActionPagerDutyActionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var email = new LogscaleAction(\"email\", LogscaleActionArgs.builder()        \n            .emailAction(LogscaleActionEmailActionArgs.builder()\n                .attachCsv(true)\n                .bodyTemplate(\"{{query.results}}\")\n                .recipients(\"oncall@example.com\")\n                .subjectTemplate(\"Logscale alert: {{alert.name}}\")\n                .useProxy(false)\n                .build())\n            .name(\"Email on-call\")\n            .repository(\"default\")\n            .build());\n\n        var pagerduty = new LogscaleAction(\"pagerduty\", LogscaleActionArgs.builder()        \n            .name(\"PagerDuty page\")\n            .pagerDutyAction(LogscaleActionPagerDutyActionArgs.builder()\n                .routingKey(\"XXXXX\")\n                .severity(\"ERROR\")\n                .useProxy(false)\n                .build())\n            .repository(\"default\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  email:\n    type: chronosphere:LogscaleAction\n    properties:\n      emailAction:\n        attachCsv: true\n        bodyTemplate: '{{query.results}}'\n        recipients:\n          - oncall@example.com\n        subjectTemplate: 'Logscale alert: {{alert.name}}'\n        useProxy: false\n      name: Email on-call\n      repository: default\n  pagerduty:\n    type: chronosphere:LogscaleAction\n    properties:\n      name: PagerDuty page\n      pagerDutyAction:\n        routingKey: XXXXX\n        severity: ERROR\n        useProxy: false\n      repository: default\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "emailAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionEmailAction:LogscaleActionEmailAction",
                    "description": "Send email when the alert triggers. Exactly one action type must be set.\n"
                },
                "humioAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionHumioAction:LogscaleActionHumioAction",
                    "description": "Forward results to another LogScale (Humio) repository via its ingest token. Exactly one action type must be set.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the LogScale action.\n"
                },
                "opsGenieAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionOpsGenieAction:LogscaleActionOpsGenieAction",
                    "description": "Send an OpsGenie alert when the alert triggers. Exactly one action type must be set.\n"
                },
                "pagerDutyAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionPagerDutyAction:LogscaleActionPagerDutyAction",
                    "description": "Send a PagerDuty event when the alert triggers. Exactly one action type must be set.\n"
                },
                "repository": {
                    "type": "string",
                    "description": "Name of the LogScale repository the action belongs to. Immutable after creation.\n"
                },
                "slackAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionSlackAction:LogscaleActionSlackAction",
                    "description": "Post a message to a Slack incoming webhook when the alert triggers. Exactly one action type must be set.\n"
                },
                "slackPostMessageAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionSlackPostMessageAction:LogscaleActionSlackPostMessageAction",
                    "description": "Post a message to Slack channels using the Slack `chat.postMessage` API. Exactly one action type must be set.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the LogScale action. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "uploadFileAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionUploadFileAction:LogscaleActionUploadFileAction",
                    "description": "Upload the query result as a file in LogScale. Exactly one action type must be set.\n"
                },
                "victorOpsAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionVictorOpsAction:LogscaleActionVictorOpsAction",
                    "description": "Send a VictorOps (Splunk On-Call) event when the alert triggers. Exactly one action type must be set.\n"
                },
                "webhookAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionWebhookAction:LogscaleActionWebhookAction",
                    "description": "Send an HTTP or HTTPS webhook when the alert triggers. Exactly one action type must be set.\n"
                }
            },
            "required": [
                "name",
                "repository",
                "slug"
            ],
            "inputProperties": {
                "emailAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionEmailAction:LogscaleActionEmailAction",
                    "description": "Send email when the alert triggers. Exactly one action type must be set.\n"
                },
                "humioAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionHumioAction:LogscaleActionHumioAction",
                    "description": "Forward results to another LogScale (Humio) repository via its ingest token. Exactly one action type must be set.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the LogScale action.\n"
                },
                "opsGenieAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionOpsGenieAction:LogscaleActionOpsGenieAction",
                    "description": "Send an OpsGenie alert when the alert triggers. Exactly one action type must be set.\n"
                },
                "pagerDutyAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionPagerDutyAction:LogscaleActionPagerDutyAction",
                    "description": "Send a PagerDuty event when the alert triggers. Exactly one action type must be set.\n"
                },
                "repository": {
                    "type": "string",
                    "description": "Name of the LogScale repository the action belongs to. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "slackAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionSlackAction:LogscaleActionSlackAction",
                    "description": "Post a message to a Slack incoming webhook when the alert triggers. Exactly one action type must be set.\n"
                },
                "slackPostMessageAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionSlackPostMessageAction:LogscaleActionSlackPostMessageAction",
                    "description": "Post a message to Slack channels using the Slack `chat.postMessage` API. Exactly one action type must be set.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the LogScale action. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "uploadFileAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionUploadFileAction:LogscaleActionUploadFileAction",
                    "description": "Upload the query result as a file in LogScale. Exactly one action type must be set.\n"
                },
                "victorOpsAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionVictorOpsAction:LogscaleActionVictorOpsAction",
                    "description": "Send a VictorOps (Splunk On-Call) event when the alert triggers. Exactly one action type must be set.\n"
                },
                "webhookAction": {
                    "$ref": "#/types/chronosphere:index/LogscaleActionWebhookAction:LogscaleActionWebhookAction",
                    "description": "Send an HTTP or HTTPS webhook when the alert triggers. Exactly one action type must be set.\n"
                }
            },
            "requiredInputs": [
                "name",
                "repository"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogscaleAction resources.\n",
                "properties": {
                    "emailAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionEmailAction:LogscaleActionEmailAction",
                        "description": "Send email when the alert triggers. Exactly one action type must be set.\n"
                    },
                    "humioAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionHumioAction:LogscaleActionHumioAction",
                        "description": "Forward results to another LogScale (Humio) repository via its ingest token. Exactly one action type must be set.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the LogScale action.\n"
                    },
                    "opsGenieAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionOpsGenieAction:LogscaleActionOpsGenieAction",
                        "description": "Send an OpsGenie alert when the alert triggers. Exactly one action type must be set.\n"
                    },
                    "pagerDutyAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionPagerDutyAction:LogscaleActionPagerDutyAction",
                        "description": "Send a PagerDuty event when the alert triggers. Exactly one action type must be set.\n"
                    },
                    "repository": {
                        "type": "string",
                        "description": "Name of the LogScale repository the action belongs to. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "slackAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionSlackAction:LogscaleActionSlackAction",
                        "description": "Post a message to a Slack incoming webhook when the alert triggers. Exactly one action type must be set.\n"
                    },
                    "slackPostMessageAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionSlackPostMessageAction:LogscaleActionSlackPostMessageAction",
                        "description": "Post a message to Slack channels using the Slack `chat.postMessage` API. Exactly one action type must be set.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the LogScale action. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "uploadFileAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionUploadFileAction:LogscaleActionUploadFileAction",
                        "description": "Upload the query result as a file in LogScale. Exactly one action type must be set.\n"
                    },
                    "victorOpsAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionVictorOpsAction:LogscaleActionVictorOpsAction",
                        "description": "Send a VictorOps (Splunk On-Call) event when the alert triggers. Exactly one action type must be set.\n"
                    },
                    "webhookAction": {
                        "$ref": "#/types/chronosphere:index/LogscaleActionWebhookAction:LogscaleActionWebhookAction",
                        "description": "Send an HTTP or HTTPS webhook when the alert triggers. Exactly one action type must be set.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/logscaleAlert:LogscaleAlert": {
            "description": "A LogScale alert that runs a saved LogScale query on a schedule and fires the configured logscale_action targets when the query returns results.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst email = new chronosphere.LogscaleAction(\"email\", {\n    repository: \"default\",\n    name: \"Email on-call\",\n    emailAction: {\n        recipients: [\"oncall@example.com\"],\n        subjectTemplate: \"Logscale alert: {{alert.name}}\",\n        bodyTemplate: \"{{query.results}}\",\n    },\n});\nconst highErrorRate = new chronosphere.LogscaleAlert(\"highErrorRate\", {\n    repository: \"default\",\n    name: \"High error rate\",\n    description: \"More than 500 errors in a 60s window\",\n    alertType: \"STANDARD\",\n    query: \"level = ERROR | count(as=numErrors) | numErrors \u003e 500\",\n    timeWindow: \"60s\",\n    throttleDuration: \"60s\",\n    throttleField: \"service\",\n    tags: [\n        \"errors\",\n        \"platform\",\n    ],\n    disabled: false,\n    actionIds: [email.id],\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nemail = chronosphere.LogscaleAction(\"email\",\n    repository=\"default\",\n    name=\"Email on-call\",\n    email_action=chronosphere.LogscaleActionEmailActionArgs(\n        recipients=[\"oncall@example.com\"],\n        subject_template=\"Logscale alert: {{alert.name}}\",\n        body_template=\"{{query.results}}\",\n    ))\nhigh_error_rate = chronosphere.LogscaleAlert(\"highErrorRate\",\n    repository=\"default\",\n    name=\"High error rate\",\n    description=\"More than 500 errors in a 60s window\",\n    alert_type=\"STANDARD\",\n    query=\"level = ERROR | count(as=numErrors) | numErrors \u003e 500\",\n    time_window=\"60s\",\n    throttle_duration=\"60s\",\n    throttle_field=\"service\",\n    tags=[\n        \"errors\",\n        \"platform\",\n    ],\n    disabled=False,\n    action_ids=[email.id])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var email = new Pulumi.LogscaleAction(\"email\", new()\n    {\n        Repository = \"default\",\n        Name = \"Email on-call\",\n        EmailAction = new Pulumi.Inputs.LogscaleActionEmailActionArgs\n        {\n            Recipients = new[]\n            {\n                \"oncall@example.com\",\n            },\n            SubjectTemplate = \"Logscale alert: {{alert.name}}\",\n            BodyTemplate = \"{{query.results}}\",\n        },\n    });\n\n    var highErrorRate = new Pulumi.LogscaleAlert(\"highErrorRate\", new()\n    {\n        Repository = \"default\",\n        Name = \"High error rate\",\n        Description = \"More than 500 errors in a 60s window\",\n        AlertType = \"STANDARD\",\n        Query = \"level = ERROR | count(as=numErrors) | numErrors \u003e 500\",\n        TimeWindow = \"60s\",\n        ThrottleDuration = \"60s\",\n        ThrottleField = \"service\",\n        Tags = new[]\n        {\n            \"errors\",\n            \"platform\",\n        },\n        Disabled = false,\n        ActionIds = new[]\n        {\n            email.Id,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\temail, err := chronosphere.NewLogscaleAction(ctx, \"email\", \u0026chronosphere.LogscaleActionArgs{\n\t\t\tRepository: pulumi.String(\"default\"),\n\t\t\tName:       pulumi.String(\"Email on-call\"),\n\t\t\tEmailAction: \u0026chronosphere.LogscaleActionEmailActionArgs{\n\t\t\t\tRecipients: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"oncall@example.com\"),\n\t\t\t\t},\n\t\t\t\tSubjectTemplate: pulumi.String(\"Logscale alert: {{alert.name}}\"),\n\t\t\t\tBodyTemplate:    pulumi.String(\"{{query.results}}\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewLogscaleAlert(ctx, \"highErrorRate\", \u0026chronosphere.LogscaleAlertArgs{\n\t\t\tRepository:       pulumi.String(\"default\"),\n\t\t\tName:             pulumi.String(\"High error rate\"),\n\t\t\tDescription:      pulumi.String(\"More than 500 errors in a 60s window\"),\n\t\t\tAlertType:        pulumi.String(\"STANDARD\"),\n\t\t\tQuery:            pulumi.String(\"level = ERROR | count(as=numErrors) | numErrors \u003e 500\"),\n\t\t\tTimeWindow:       pulumi.String(\"60s\"),\n\t\t\tThrottleDuration: pulumi.String(\"60s\"),\n\t\t\tThrottleField:    pulumi.String(\"service\"),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"errors\"),\n\t\t\t\tpulumi.String(\"platform\"),\n\t\t\t},\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tActionIds: pulumi.StringArray{\n\t\t\t\temail.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.LogscaleAction;\nimport com.pulumi.chronosphere.LogscaleActionArgs;\nimport com.pulumi.chronosphere.inputs.LogscaleActionEmailActionArgs;\nimport com.pulumi.chronosphere.LogscaleAlert;\nimport com.pulumi.chronosphere.LogscaleAlertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var email = new LogscaleAction(\"email\", LogscaleActionArgs.builder()        \n            .repository(\"default\")\n            .name(\"Email on-call\")\n            .emailAction(LogscaleActionEmailActionArgs.builder()\n                .recipients(\"oncall@example.com\")\n                .subjectTemplate(\"Logscale alert: {{alert.name}}\")\n                .bodyTemplate(\"{{query.results}}\")\n                .build())\n            .build());\n\n        var highErrorRate = new LogscaleAlert(\"highErrorRate\", LogscaleAlertArgs.builder()        \n            .repository(\"default\")\n            .name(\"High error rate\")\n            .description(\"More than 500 errors in a 60s window\")\n            .alertType(\"STANDARD\")\n            .query(\"level = ERROR | count(as=numErrors) | numErrors \u003e 500\")\n            .timeWindow(\"60s\")\n            .throttleDuration(\"60s\")\n            .throttleField(\"service\")\n            .tags(            \n                \"errors\",\n                \"platform\")\n            .disabled(false)\n            .actionIds(email.id())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  email:\n    type: chronosphere:LogscaleAction\n    properties:\n      repository: default\n      name: Email on-call\n      emailAction:\n        recipients:\n          - oncall@example.com\n        subjectTemplate: 'Logscale alert: {{alert.name}}'\n        bodyTemplate: '{{query.results}}'\n  highErrorRate:\n    type: chronosphere:LogscaleAlert\n    properties:\n      repository: default\n      name: High error rate\n      description: More than 500 errors in a 60s window\n      alertType: STANDARD\n      query: level = ERROR | count(as=numErrors) | numErrors \u003e 500\n      timeWindow: 60s\n      throttleDuration: 60s\n      throttleField: service\n      tags:\n        - errors\n        - platform\n      disabled: false\n      actionIds:\n        - ${email.id}\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "actionIds": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slugs of LogScale actions to invoke when the alert triggers. The alert does not fire if this list is empty.\n"
                },
                "alertType": {
                    "type": "string",
                    "description": "Type of LogScale alert. `STANDARD` runs the query on a schedule over a time window; `FILTER` evaluates the query against each incoming event.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Human-readable description of the alert.\n"
                },
                "disabled": {
                    "type": "boolean",
                    "description": "If `true`, the alert will not evaluate or trigger actions.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the LogScale alert.\n"
                },
                "query": {
                    "type": "string",
                    "description": "LogScale query that the alert evaluates. Example: `level = ERROR | severity \u003e 3 | count(as=numErrors) | numErrors \u003e 500`.\n"
                },
                "repository": {
                    "type": "string",
                    "description": "Name of the LogScale repository the alert belongs to. Immutable after creation.\n"
                },
                "runAsUser": {
                    "type": "string",
                    "description": "Email of the user that the alert runs on behalf of\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the LogScale alert. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Tags attached to the alert for organization and filtering.\n"
                },
                "throttleDuration": {
                    "type": "string",
                    "description": "Minimum interval between consecutive triggers of the alert. Required for `STANDARD` alerts, optional for `FILTER` alerts.\n"
                },
                "throttleField": {
                    "type": "string",
                    "description": "Optional field whose value is used to scope throttling, so the alert is throttled per distinct value of this field rather than globally.\n"
                },
                "timeWindow": {
                    "type": "string",
                    "description": "Lookback window for the alert query. Required for `STANDARD` alerts, ignored for `FILTER` alerts.\n"
                }
            },
            "required": [
                "alertType",
                "name",
                "repository",
                "runAsUser",
                "slug"
            ],
            "inputProperties": {
                "actionIds": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Slugs of LogScale actions to invoke when the alert triggers. The alert does not fire if this list is empty.\n"
                },
                "alertType": {
                    "type": "string",
                    "description": "Type of LogScale alert. `STANDARD` runs the query on a schedule over a time window; `FILTER` evaluates the query against each incoming event.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Human-readable description of the alert.\n"
                },
                "disabled": {
                    "type": "boolean",
                    "description": "If `true`, the alert will not evaluate or trigger actions.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the LogScale alert.\n"
                },
                "query": {
                    "type": "string",
                    "description": "LogScale query that the alert evaluates. Example: `level = ERROR | severity \u003e 3 | count(as=numErrors) | numErrors \u003e 500`.\n"
                },
                "repository": {
                    "type": "string",
                    "description": "Name of the LogScale repository the alert belongs to. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "runAsUser": {
                    "type": "string",
                    "description": "Email of the user that the alert runs on behalf of\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the LogScale alert. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Tags attached to the alert for organization and filtering.\n"
                },
                "throttleDuration": {
                    "type": "string",
                    "description": "Minimum interval between consecutive triggers of the alert. Required for `STANDARD` alerts, optional for `FILTER` alerts.\n"
                },
                "throttleField": {
                    "type": "string",
                    "description": "Optional field whose value is used to scope throttling, so the alert is throttled per distinct value of this field rather than globally.\n"
                },
                "timeWindow": {
                    "type": "string",
                    "description": "Lookback window for the alert query. Required for `STANDARD` alerts, ignored for `FILTER` alerts.\n"
                }
            },
            "requiredInputs": [
                "alertType",
                "name",
                "repository",
                "runAsUser"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering LogscaleAlert resources.\n",
                "properties": {
                    "actionIds": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Slugs of LogScale actions to invoke when the alert triggers. The alert does not fire if this list is empty.\n"
                    },
                    "alertType": {
                        "type": "string",
                        "description": "Type of LogScale alert. `STANDARD` runs the query on a schedule over a time window; `FILTER` evaluates the query against each incoming event.\n"
                    },
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the alert.\n"
                    },
                    "disabled": {
                        "type": "boolean",
                        "description": "If `true`, the alert will not evaluate or trigger actions.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the LogScale alert.\n"
                    },
                    "query": {
                        "type": "string",
                        "description": "LogScale query that the alert evaluates. Example: `level = ERROR | severity \u003e 3 | count(as=numErrors) | numErrors \u003e 500`.\n"
                    },
                    "repository": {
                        "type": "string",
                        "description": "Name of the LogScale repository the alert belongs to. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "runAsUser": {
                        "type": "string",
                        "description": "Email of the user that the alert runs on behalf of\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the LogScale alert. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Tags attached to the alert for organization and filtering.\n"
                    },
                    "throttleDuration": {
                        "type": "string",
                        "description": "Minimum interval between consecutive triggers of the alert. Required for `STANDARD` alerts, optional for `FILTER` alerts.\n"
                    },
                    "throttleField": {
                        "type": "string",
                        "description": "Optional field whose value is used to scope throttling, so the alert is throttled per distinct value of this field rather than globally.\n"
                    },
                    "timeWindow": {
                        "type": "string",
                        "description": "Lookback window for the alert query. Required for `STANDARD` alerts, ignored for `FILTER` alerts.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/mappingRule:MappingRule": {
            "description": "Selects metrics by label filter and either drops them or applies an aggregation policy controlling their storage interval and aggregation function. Use `chronosphere.DropRule` for drop-only rules and `chronosphere.RollupRule` for label-reducing aggregations.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Bucket;\nimport com.pulumi.chronosphere.BucketArgs;\nimport com.pulumi.chronosphere.MappingRule;\nimport com.pulumi.chronosphere.MappingRuleArgs;\nimport com.pulumi.chronosphere.inputs.MappingRuleStoragePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var bucket = new Bucket(\"bucket\", BucketArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var httpRequestDuration = new MappingRule(\"httpRequestDuration\", MappingRuleArgs.builder()        \n            .name(\"http request duration\")\n            .bucketId(bucket.id())\n            .filter(\"__name__:http_request_duration k8s_pod:*\")\n            .aggregations(\"LAST\")\n            .storagePolicy(MappingRuleStoragePolicyArgs.builder()\n                .resolution(\"30s\")\n                .retention(\"120h\")\n                .build())\n            .mode(\"PREVIEW\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  bucket:\n    type: chronosphere:Bucket\n    properties:\n      name: Platform\n  httpRequestDuration:\n    type: chronosphere:MappingRule\n    properties:\n      name: http request duration\n      bucketId: ${bucket.id}\n      filter: __name__:http_request_duration k8s_pod:*\n      # See https://docs.chronosphere.io/control/shaping/shape-metrics/rules/rollup\n      #   # for supported aggregation operations.\n      aggregations:\n        - LAST\n      storagePolicy:\n        resolution: 30s\n        retention: 120h\n      mode: PREVIEW\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "aggregations": {
                    "type": "string",
                    "description": "Aggregation type applied to matching metrics. Cannot be set if `drop` is `true`.\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the mapping rule belongs to.\n"
                },
                "drop": {
                    "type": "boolean",
                    "description": "If `true`, drops the matching metrics instead of aggregating them. Cannot be set together with `aggregations`. Defaults to `false`.\n"
                },
                "dropTimestamp": {
                    "type": "boolean",
                    "description": "Deprecated: no longer supported.\n",
                    "deprecationMessage": "drop timestamp is no longer supported"
                },
                "filter": {
                    "type": "string",
                    "description": "Space-delimited list of `label=value_glob` matchers that select the metrics this rule applies to. A metric must match every filter to be considered.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Interval between aggregated data points produced by this mapping rule. Defaults to a server-side value when unset. Conflicts with `storage_policy`.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mapping rule mode controlling whether it is active or in a preview state.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the mapping rule. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the mapping rule. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "storagePolicy": {
                    "$ref": "#/types/chronosphere:index/MappingRuleStoragePolicy:MappingRuleStoragePolicy",
                    "description": "Storage policy controlling resolution and retention of mapped metrics. Deprecated: use `interval` instead.\n",
                    "deprecationMessage": "use `interval` instead"
                }
            },
            "required": [
                "filter",
                "interval",
                "name",
                "slug"
            ],
            "inputProperties": {
                "aggregations": {
                    "type": "string",
                    "description": "Aggregation type applied to matching metrics. Cannot be set if `drop` is `true`.\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the mapping rule belongs to.\n"
                },
                "drop": {
                    "type": "boolean",
                    "description": "If `true`, drops the matching metrics instead of aggregating them. Cannot be set together with `aggregations`. Defaults to `false`.\n"
                },
                "dropTimestamp": {
                    "type": "boolean",
                    "description": "Deprecated: no longer supported.\n",
                    "deprecationMessage": "drop timestamp is no longer supported"
                },
                "filter": {
                    "type": "string",
                    "description": "Space-delimited list of `label=value_glob` matchers that select the metrics this rule applies to. A metric must match every filter to be considered.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Interval between aggregated data points produced by this mapping rule. Defaults to a server-side value when unset. Conflicts with `storage_policy`.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Mapping rule mode controlling whether it is active or in a preview state.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the mapping rule. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the mapping rule. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "storagePolicy": {
                    "$ref": "#/types/chronosphere:index/MappingRuleStoragePolicy:MappingRuleStoragePolicy",
                    "description": "Storage policy controlling resolution and retention of mapped metrics. Deprecated: use `interval` instead.\n",
                    "deprecationMessage": "use `interval` instead"
                }
            },
            "requiredInputs": [
                "filter",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering MappingRule resources.\n",
                "properties": {
                    "aggregations": {
                        "type": "string",
                        "description": "Aggregation type applied to matching metrics. Cannot be set if `drop` is `true`.\n"
                    },
                    "bucketId": {
                        "type": "string",
                        "description": "ID of the bucket the mapping rule belongs to.\n"
                    },
                    "drop": {
                        "type": "boolean",
                        "description": "If `true`, drops the matching metrics instead of aggregating them. Cannot be set together with `aggregations`. Defaults to `false`.\n"
                    },
                    "dropTimestamp": {
                        "type": "boolean",
                        "description": "Deprecated: no longer supported.\n",
                        "deprecationMessage": "drop timestamp is no longer supported"
                    },
                    "filter": {
                        "type": "string",
                        "description": "Space-delimited list of `label=value_glob` matchers that select the metrics this rule applies to. A metric must match every filter to be considered.\n"
                    },
                    "interval": {
                        "type": "string",
                        "description": "Interval between aggregated data points produced by this mapping rule. Defaults to a server-side value when unset. Conflicts with `storage_policy`.\n"
                    },
                    "mode": {
                        "type": "string",
                        "description": "Mapping rule mode controlling whether it is active or in a preview state.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the mapping rule. Can be changed after creation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the mapping rule. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "storagePolicy": {
                        "$ref": "#/types/chronosphere:index/MappingRuleStoragePolicy:MappingRuleStoragePolicy",
                        "description": "Storage policy controlling resolution and retention of mapped metrics. Deprecated: use `interval` instead.\n",
                        "deprecationMessage": "use `interval` instead"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/monitor:Monitor": {
            "description": "A monitor evaluates a query against time-series, log, or trace data and produces signals when configured thresholds are crossed. Signals are routed to notifiers via the referenced notification policy or the parent collection's default policy.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst collection = new chronosphere.Collection(\"collection\", {name: \"Platform\"});\nconst namespaceUp = new chronosphere.Monitor(\"namespaceUp\", {\n    name: \"Namespace up\",\n    collectionId: collection.id,\n    query: {\n        prometheusExpr: `sum by (kubernetes_namespace) (\n  up{kubernetes_namespace=\"production\"}\n)\n`,\n    },\n    signalGrouping: {\n        labelNames: [\"kubernetes_namespace\"],\n    },\n    seriesConditions: {\n        conditions: [{\n            severity: \"warn\",\n            value: 20,\n            op: \"GT\",\n        }],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ncollection = chronosphere.Collection(\"collection\", name=\"Platform\")\nnamespace_up = chronosphere.Monitor(\"namespaceUp\",\n    name=\"Namespace up\",\n    collection_id=collection.id,\n    query=chronosphere.MonitorQueryArgs(\n        prometheus_expr=\"\"\"sum by (kubernetes_namespace) (\n  up{kubernetes_namespace=\"production\"}\n)\n\"\"\",\n    ),\n    signal_grouping=chronosphere.MonitorSignalGroupingArgs(\n        label_names=[\"kubernetes_namespace\"],\n    ),\n    series_conditions=chronosphere.MonitorSeriesConditionsArgs(\n        conditions=[chronosphere.MonitorSeriesConditionsConditionArgs(\n            severity=\"warn\",\n            value=20,\n            op=\"GT\",\n        )],\n    ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var collection = new Pulumi.Collection(\"collection\", new()\n    {\n        Name = \"Platform\",\n    });\n\n    var namespaceUp = new Pulumi.Monitor(\"namespaceUp\", new()\n    {\n        Name = \"Namespace up\",\n        CollectionId = collection.Id,\n        Query = new Pulumi.Inputs.MonitorQueryArgs\n        {\n            PrometheusExpr = @\"sum by (kubernetes_namespace) (\n  up{kubernetes_namespace=\"\"production\"\"}\n)\n\",\n        },\n        SignalGrouping = new Pulumi.Inputs.MonitorSignalGroupingArgs\n        {\n            LabelNames = new[]\n            {\n                \"kubernetes_namespace\",\n            },\n        },\n        SeriesConditions = new Pulumi.Inputs.MonitorSeriesConditionsArgs\n        {\n            Conditions = new[]\n            {\n                new Pulumi.Inputs.MonitorSeriesConditionsConditionArgs\n                {\n                    Severity = \"warn\",\n                    Value = 20,\n                    Op = \"GT\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcollection, err := chronosphere.NewCollection(ctx, \"collection\", \u0026chronosphere.CollectionArgs{\n\t\t\tName: pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewMonitor(ctx, \"namespaceUp\", \u0026chronosphere.MonitorArgs{\n\t\t\tName:         pulumi.String(\"Namespace up\"),\n\t\t\tCollectionId: collection.ID(),\n\t\t\tQuery: \u0026chronosphere.MonitorQueryArgs{\n\t\t\t\tPrometheusExpr: pulumi.String(\"sum by (kubernetes_namespace) (\\n  up{kubernetes_namespace=\\\"production\\\"}\\n)\\n\"),\n\t\t\t},\n\t\t\tSignalGrouping: \u0026chronosphere.MonitorSignalGroupingArgs{\n\t\t\t\tLabelNames: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"kubernetes_namespace\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSeriesConditions: \u0026chronosphere.MonitorSeriesConditionsArgs{\n\t\t\t\tConditions: chronosphere.MonitorSeriesConditionsConditionArray{\n\t\t\t\t\t\u0026chronosphere.MonitorSeriesConditionsConditionArgs{\n\t\t\t\t\t\tSeverity: pulumi.String(\"warn\"),\n\t\t\t\t\t\tValue:    pulumi.Float64(20),\n\t\t\t\t\t\tOp:       pulumi.String(\"GT\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Collection;\nimport com.pulumi.chronosphere.CollectionArgs;\nimport com.pulumi.chronosphere.Monitor;\nimport com.pulumi.chronosphere.MonitorArgs;\nimport com.pulumi.chronosphere.inputs.MonitorQueryArgs;\nimport com.pulumi.chronosphere.inputs.MonitorSignalGroupingArgs;\nimport com.pulumi.chronosphere.inputs.MonitorSeriesConditionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var collection = new Collection(\"collection\", CollectionArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var namespaceUp = new Monitor(\"namespaceUp\", MonitorArgs.builder()        \n            .name(\"Namespace up\")\n            .collectionId(collection.id())\n            .query(MonitorQueryArgs.builder()\n                .prometheusExpr(\"\"\"\nsum by (kubernetes_namespace) (\n  up{kubernetes_namespace=\"production\"}\n)\n                \"\"\")\n                .build())\n            .signalGrouping(MonitorSignalGroupingArgs.builder()\n                .labelNames(\"kubernetes_namespace\")\n                .build())\n            .seriesConditions(MonitorSeriesConditionsArgs.builder()\n                .conditions(MonitorSeriesConditionsConditionArgs.builder()\n                    .severity(\"warn\")\n                    .value(20)\n                    .op(\"GT\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  collection:\n    type: chronosphere:Collection\n    properties:\n      name: Platform\n  namespaceUp:\n    type: chronosphere:Monitor\n    properties:\n      name: Namespace up\n      collectionId: ${collection.id}\n      query:\n        prometheusExpr: |\n          sum by (kubernetes_namespace) (\n            up{kubernetes_namespace=\"production\"}\n          )\n      signalGrouping:\n        labelNames:\n          - kubernetes_namespace\n      seriesConditions:\n        conditions:\n          - severity: warn\n            value: 20\n            op: GT\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "annotations": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Free-form key/value pairs attached to every signal, intended for human consumption such as runbook URLs and descriptions.\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to the system default if unset.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to every signal emitted by the monitor. Used for routing and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy that routes signals from this monitor. If omitted, the parent collection's default policy applies. Must reference a named policy (anonymous policies are rejected).\n"
                },
                "notificationTemplate": {
                    "$ref": "#/types/chronosphere:index/MonitorNotificationTemplate:MonitorNotificationTemplate",
                    "description": "Templated title/description rendered into outbound notifications. Supports Go templating with access to signal labels and annotations.\n"
                },
                "query": {
                    "$ref": "#/types/chronosphere:index/MonitorQuery:MonitorQuery",
                    "description": "Query that produces the time series evaluated by the monitor. Exactly one of `prometheus_expr`, `graphite_expr`, or `logging_expr` must be set.\n"
                },
                "schedule": {
                    "$ref": "#/types/chronosphere:index/MonitorSchedule:MonitorSchedule",
                    "description": "Optional schedule restricting when the monitor evaluates and fires.\n"
                },
                "seriesConditions": {
                    "$ref": "#/types/chronosphere:index/MonitorSeriesConditions:MonitorSeriesConditions",
                    "description": "Conditions that determine when a series fires a signal.\n"
                },
                "signalGrouping": {
                    "$ref": "#/types/chronosphere:index/MonitorSignalGrouping:MonitorSignalGrouping",
                    "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the monitor. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "name",
                "query",
                "seriesConditions",
                "slug"
            ],
            "inputProperties": {
                "annotations": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Free-form key/value pairs attached to every signal, intended for human consumption such as runbook URLs and descriptions.\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to the system default if unset.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels attached to every signal emitted by the monitor. Used for routing and filtering.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy that routes signals from this monitor. If omitted, the parent collection's default policy applies. Must reference a named policy (anonymous policies are rejected).\n"
                },
                "notificationTemplate": {
                    "$ref": "#/types/chronosphere:index/MonitorNotificationTemplate:MonitorNotificationTemplate",
                    "description": "Templated title/description rendered into outbound notifications. Supports Go templating with access to signal labels and annotations.\n"
                },
                "query": {
                    "$ref": "#/types/chronosphere:index/MonitorQuery:MonitorQuery",
                    "description": "Query that produces the time series evaluated by the monitor. Exactly one of `prometheus_expr`, `graphite_expr`, or `logging_expr` must be set.\n"
                },
                "schedule": {
                    "$ref": "#/types/chronosphere:index/MonitorSchedule:MonitorSchedule",
                    "description": "Optional schedule restricting when the monitor evaluates and fires.\n"
                },
                "seriesConditions": {
                    "$ref": "#/types/chronosphere:index/MonitorSeriesConditions:MonitorSeriesConditions",
                    "description": "Conditions that determine when a series fires a signal.\n"
                },
                "signalGrouping": {
                    "$ref": "#/types/chronosphere:index/MonitorSignalGrouping:MonitorSignalGrouping",
                    "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the monitor. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "name",
                "query",
                "seriesConditions"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Monitor resources.\n",
                "properties": {
                    "annotations": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Free-form key/value pairs attached to every signal, intended for human consumption such as runbook URLs and descriptions.\n"
                    },
                    "bucketId": {
                        "type": "string",
                        "description": "ID of the bucket the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                    },
                    "collectionId": {
                        "type": "string",
                        "description": "ID of the collection the monitor belongs to. Exactly one of `bucket_id` or `collection_id` must be set.\n"
                    },
                    "interval": {
                        "type": "string",
                        "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to the system default if unset.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Key/value labels attached to every signal emitted by the monitor. Used for routing and filtering.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Label name to match.\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "ID of the notification policy that routes signals from this monitor. If omitted, the parent collection's default policy applies. Must reference a named policy (anonymous policies are rejected).\n"
                    },
                    "notificationTemplate": {
                        "$ref": "#/types/chronosphere:index/MonitorNotificationTemplate:MonitorNotificationTemplate",
                        "description": "Templated title/description rendered into outbound notifications. Supports Go templating with access to signal labels and annotations.\n"
                    },
                    "query": {
                        "$ref": "#/types/chronosphere:index/MonitorQuery:MonitorQuery",
                        "description": "Query that produces the time series evaluated by the monitor. Exactly one of `prometheus_expr`, `graphite_expr`, or `logging_expr` must be set.\n"
                    },
                    "schedule": {
                        "$ref": "#/types/chronosphere:index/MonitorSchedule:MonitorSchedule",
                        "description": "Optional schedule restricting when the monitor evaluates and fires.\n"
                    },
                    "seriesConditions": {
                        "$ref": "#/types/chronosphere:index/MonitorSeriesConditions:MonitorSeriesConditions",
                        "description": "Conditions that determine when a series fires a signal.\n"
                    },
                    "signalGrouping": {
                        "$ref": "#/types/chronosphere:index/MonitorSignalGrouping:MonitorSignalGrouping",
                        "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the monitor. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/notificationPolicy:NotificationPolicy": {
            "description": "Routes alert signals from monitors and SLOs to notifiers, with per-severity routing and label-matcher-based overrides. If `name` is set the policy is independent (referenceable by ID); if `name` is omitted the policy is inline and can only be embedded in another resource (e.g. a bucket).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst platformTeam = new chronosphere.Team(\"platformTeam\", {name: \"Platform\"});\nconst email = new chronosphere.EmailAlertNotifier(\"email\", {\n    name: \"Platform Email\",\n    to: \"platform@example.com\",\n});\nconst platformNotificationPolicy = new chronosphere.NotificationPolicy(\"platformNotificationPolicy\", {\n    name: \"Platform Policy\",\n    teamId: platformTeam.id,\n    routes: [{\n        severity: \"warn\",\n        notifiers: [email.id],\n        groupBy: {\n            labelNames: [\"service\"],\n        },\n    }],\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nplatform_team = chronosphere.Team(\"platformTeam\", name=\"Platform\")\nemail = chronosphere.EmailAlertNotifier(\"email\",\n    name=\"Platform Email\",\n    to=\"platform@example.com\")\nplatform_notification_policy = chronosphere.NotificationPolicy(\"platformNotificationPolicy\",\n    name=\"Platform Policy\",\n    team_id=platform_team.id,\n    routes=[chronosphere.NotificationPolicyRouteArgs(\n        severity=\"warn\",\n        notifiers=[email.id],\n        group_by=chronosphere.NotificationPolicyRouteGroupByArgs(\n            label_names=[\"service\"],\n        ),\n    )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var platformTeam = new Pulumi.Team(\"platformTeam\", new()\n    {\n        Name = \"Platform\",\n    });\n\n    var email = new Pulumi.EmailAlertNotifier(\"email\", new()\n    {\n        Name = \"Platform Email\",\n        To = \"platform@example.com\",\n    });\n\n    var platformNotificationPolicy = new Pulumi.NotificationPolicy(\"platformNotificationPolicy\", new()\n    {\n        Name = \"Platform Policy\",\n        TeamId = platformTeam.Id,\n        Routes = new[]\n        {\n            new Pulumi.Inputs.NotificationPolicyRouteArgs\n            {\n                Severity = \"warn\",\n                Notifiers = new[]\n                {\n                    email.Id,\n                },\n                GroupBy = new Pulumi.Inputs.NotificationPolicyRouteGroupByArgs\n                {\n                    LabelNames = new[]\n                    {\n                        \"service\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tplatformTeam, err := chronosphere.NewTeam(ctx, \"platformTeam\", \u0026chronosphere.TeamArgs{\n\t\t\tName: pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\temail, err := chronosphere.NewEmailAlertNotifier(ctx, \"email\", \u0026chronosphere.EmailAlertNotifierArgs{\n\t\t\tName: pulumi.String(\"Platform Email\"),\n\t\t\tTo:   pulumi.String(\"platform@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewNotificationPolicy(ctx, \"platformNotificationPolicy\", \u0026chronosphere.NotificationPolicyArgs{\n\t\t\tName:   pulumi.String(\"Platform Policy\"),\n\t\t\tTeamId: platformTeam.ID(),\n\t\t\tRoutes: chronosphere.NotificationPolicyRouteArray{\n\t\t\t\t\u0026chronosphere.NotificationPolicyRouteArgs{\n\t\t\t\t\tSeverity: pulumi.String(\"warn\"),\n\t\t\t\t\tNotifiers: pulumi.StringArray{\n\t\t\t\t\t\temail.ID(),\n\t\t\t\t\t},\n\t\t\t\t\tGroupBy: \u0026chronosphere.NotificationPolicyRouteGroupByArgs{\n\t\t\t\t\t\tLabelNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"service\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Team;\nimport com.pulumi.chronosphere.TeamArgs;\nimport com.pulumi.chronosphere.EmailAlertNotifier;\nimport com.pulumi.chronosphere.EmailAlertNotifierArgs;\nimport com.pulumi.chronosphere.NotificationPolicy;\nimport com.pulumi.chronosphere.NotificationPolicyArgs;\nimport com.pulumi.chronosphere.inputs.NotificationPolicyRouteArgs;\nimport com.pulumi.chronosphere.inputs.NotificationPolicyRouteGroupByArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var platformTeam = new Team(\"platformTeam\", TeamArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var email = new EmailAlertNotifier(\"email\", EmailAlertNotifierArgs.builder()        \n            .name(\"Platform Email\")\n            .to(\"platform@example.com\")\n            .build());\n\n        var platformNotificationPolicy = new NotificationPolicy(\"platformNotificationPolicy\", NotificationPolicyArgs.builder()        \n            .name(\"Platform Policy\")\n            .teamId(platformTeam.id())\n            .routes(NotificationPolicyRouteArgs.builder()\n                .severity(\"warn\")\n                .notifiers(email.id())\n                .groupBy(NotificationPolicyRouteGroupByArgs.builder()\n                    .labelNames(\"service\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  platformTeam:\n    type: chronosphere:Team\n    properties:\n      name: Platform\n  email:\n    type: chronosphere:EmailAlertNotifier\n    properties:\n      name: Platform Email\n      to: platform@example.com\n  platformNotificationPolicy:\n    type: chronosphere:NotificationPolicy\n    properties:\n      name: Platform Policy\n      teamId: ${platformTeam.id}\n      routes:\n        - severity: warn\n          notifiers:\n            - ${email.id}\n          groupBy:\n            labelNames:\n              - service\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "isIndependent": {
                    "type": "boolean",
                    "description": "Read-only internal marker tracking whether the policy is independent (named) or inline. Used to force replacement when transitioning between the two.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "notificationPolicyData": {
                    "type": "string",
                    "description": "Computed/optional JSON serialization of the policy. Primarily used to attach inline policy data to other resources (e.g. buckets).\n"
                },
                "overrides": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverride:NotificationPolicyOverride"
                    },
                    "description": "Ordered overrides that route alerts matching specific label matchers to different destinations. The first matching override is applied; non-matching alerts fall through to the default `route`.\n"
                },
                "routes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyRoute:NotificationPolicyRoute"
                    },
                    "description": "Per-severity routing rules. Each entry maps a severity (e.g. `warn`, `critical`) to a set of notifiers, destinations, grouping, and repeat behavior.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notification policy. Can only be set when `name` is set. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this notification policy. Required when `name` is set (anonymous policies cannot be owned).\n"
                }
            },
            "required": [
                "isIndependent",
                "notificationPolicyData",
                "slug"
            ],
            "inputProperties": {
                "name": {
                    "type": "string",
                    "description": "Label name to match.\n"
                },
                "notificationPolicyData": {
                    "type": "string",
                    "description": "Computed/optional JSON serialization of the policy. Primarily used to attach inline policy data to other resources (e.g. buckets).\n"
                },
                "overrides": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyOverride:NotificationPolicyOverride"
                    },
                    "description": "Ordered overrides that route alerts matching specific label matchers to different destinations. The first matching override is applied; non-matching alerts fall through to the default `route`.\n"
                },
                "routes": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/NotificationPolicyRoute:NotificationPolicyRoute"
                    },
                    "description": "Per-severity routing rules. Each entry maps a severity (e.g. `warn`, `critical`) to a set of notifiers, destinations, grouping, and repeat behavior.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notification policy. Can only be set when `name` is set. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "teamId": {
                    "type": "string",
                    "description": "ID of the team that owns this notification policy. Required when `name` is set (anonymous policies cannot be owned).\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering NotificationPolicy resources.\n",
                "properties": {
                    "isIndependent": {
                        "type": "boolean",
                        "description": "Read-only internal marker tracking whether the policy is independent (named) or inline. Used to force replacement when transitioning between the two.\n",
                        "willReplaceOnChanges": true
                    },
                    "name": {
                        "type": "string",
                        "description": "Label name to match.\n"
                    },
                    "notificationPolicyData": {
                        "type": "string",
                        "description": "Computed/optional JSON serialization of the policy. Primarily used to attach inline policy data to other resources (e.g. buckets).\n"
                    },
                    "overrides": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/NotificationPolicyOverride:NotificationPolicyOverride"
                        },
                        "description": "Ordered overrides that route alerts matching specific label matchers to different destinations. The first matching override is applied; non-matching alerts fall through to the default `route`.\n"
                    },
                    "routes": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/NotificationPolicyRoute:NotificationPolicyRoute"
                        },
                        "description": "Per-severity routing rules. Each entry maps a severity (e.g. `warn`, `critical`) to a set of notifiers, destinations, grouping, and repeat behavior.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notification policy. Can only be set when `name` is set. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "teamId": {
                        "type": "string",
                        "description": "ID of the team that owns this notification policy. Required when `name` is set (anonymous policies cannot be owned).\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/opsgenieAlertNotifier:OpsgenieAlertNotifier": {
            "description": "OpsGenie notifier that delivers monitor signals to OpsGenie as alerts via its API integration. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst opsgenie = new chronosphere.OpsgenieAlertNotifier(\"opsgenie\", {\n    apiKey: \"XXXXX\",\n    apiUrl: \"https://api.opsgenie.com/\",\n    name: \"infra_compute_opsgenie\",\n    priority: \"P1\",\n    responders: [{\n        name: \"Productivity Platform - Compute\",\n        type: \"TEAM\",\n    }],\n    sendResolved: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nopsgenie = chronosphere.OpsgenieAlertNotifier(\"opsgenie\",\n    api_key=\"XXXXX\",\n    api_url=\"https://api.opsgenie.com/\",\n    name=\"infra_compute_opsgenie\",\n    priority=\"P1\",\n    responders=[chronosphere.OpsgenieAlertNotifierResponderArgs(\n        name=\"Productivity Platform - Compute\",\n        type=\"TEAM\",\n    )],\n    send_resolved=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var opsgenie = new Pulumi.OpsgenieAlertNotifier(\"opsgenie\", new()\n    {\n        ApiKey = \"XXXXX\",\n        ApiUrl = \"https://api.opsgenie.com/\",\n        Name = \"infra_compute_opsgenie\",\n        Priority = \"P1\",\n        Responders = new[]\n        {\n            new Pulumi.Inputs.OpsgenieAlertNotifierResponderArgs\n            {\n                Name = \"Productivity Platform - Compute\",\n                Type = \"TEAM\",\n            },\n        },\n        SendResolved = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewOpsgenieAlertNotifier(ctx, \"opsgenie\", \u0026chronosphere.OpsgenieAlertNotifierArgs{\n\t\t\tApiKey:   pulumi.String(\"XXXXX\"),\n\t\t\tApiUrl:   pulumi.String(\"https://api.opsgenie.com/\"),\n\t\t\tName:     pulumi.String(\"infra_compute_opsgenie\"),\n\t\t\tPriority: pulumi.String(\"P1\"),\n\t\t\tResponders: chronosphere.OpsgenieAlertNotifierResponderArray{\n\t\t\t\t\u0026chronosphere.OpsgenieAlertNotifierResponderArgs{\n\t\t\t\t\tName: pulumi.String(\"Productivity Platform - Compute\"),\n\t\t\t\t\tType: pulumi.String(\"TEAM\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSendResolved: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.OpsgenieAlertNotifier;\nimport com.pulumi.chronosphere.OpsgenieAlertNotifierArgs;\nimport com.pulumi.chronosphere.inputs.OpsgenieAlertNotifierResponderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var opsgenie = new OpsgenieAlertNotifier(\"opsgenie\", OpsgenieAlertNotifierArgs.builder()        \n            .apiKey(\"XXXXX\")\n            .apiUrl(\"https://api.opsgenie.com/\")\n            .name(\"infra_compute_opsgenie\")\n            .priority(\"P1\")\n            .responders(OpsgenieAlertNotifierResponderArgs.builder()\n                .name(\"Productivity Platform - Compute\")\n                .type(\"TEAM\")\n                .build())\n            .sendResolved(true)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  opsgenie:\n    type: chronosphere:OpsgenieAlertNotifier\n    properties:\n      apiKey: XXXXX\n      apiUrl: https://api.opsgenie.com/\n      name: infra_compute_opsgenie\n      priority: P1\n      responders:\n        - name: Productivity Platform - Compute\n          type: TEAM\n      sendResolved: true\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "apiKey": {
                    "type": "string",
                    "description": "Opsgenie API key used to authenticate requests. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Opsgenie API URL to send requests to (e.g. `https://api.opsgenie.com/`).\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the Opsgenie API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the Opsgenie API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the Opsgenie API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Detailed description of the alert. Supports Go templating.\n"
                },
                "details": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs attached to the alert as additional context. Values support Go templating.\n"
                },
                "message": {
                    "type": "string",
                    "description": "Alert text shown in Opsgenie. Supports Go templating.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the responder team, schedule, or escalation policy.\n"
                },
                "note": {
                    "type": "string",
                    "description": "Additional note appended to the alert. Supports Go templating.\n"
                },
                "priority": {
                    "type": "string",
                    "description": "Priority level of the alert. One of `P1`, `P2`, `P3`, `P4`, or `P5`.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "responders": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/OpsgenieAlertNotifierResponder:OpsgenieAlertNotifierResponder"
                    },
                    "description": "Responders that Opsgenie will notify for the alert. See https://docs.opsgenie.com/docs/alert-api for accepted shapes.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "source": {
                    "type": "string",
                    "description": "Backlink to the sender of the notification. Supports Go templating.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Tags attached to the Opsgenie alert.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the Opsgenie API. Disable only in trusted environments.\n"
                }
            },
            "required": [
                "apiKey",
                "name",
                "slug"
            ],
            "inputProperties": {
                "apiKey": {
                    "type": "string",
                    "description": "Opsgenie API key used to authenticate requests. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Opsgenie API URL to send requests to (e.g. `https://api.opsgenie.com/`).\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the Opsgenie API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the Opsgenie API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the Opsgenie API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Detailed description of the alert. Supports Go templating.\n"
                },
                "details": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs attached to the alert as additional context. Values support Go templating.\n"
                },
                "message": {
                    "type": "string",
                    "description": "Alert text shown in Opsgenie. Supports Go templating.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the responder team, schedule, or escalation policy.\n"
                },
                "note": {
                    "type": "string",
                    "description": "Additional note appended to the alert. Supports Go templating.\n"
                },
                "priority": {
                    "type": "string",
                    "description": "Priority level of the alert. One of `P1`, `P2`, `P3`, `P4`, or `P5`.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "responders": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/OpsgenieAlertNotifierResponder:OpsgenieAlertNotifierResponder"
                    },
                    "description": "Responders that Opsgenie will notify for the alert. See https://docs.opsgenie.com/docs/alert-api for accepted shapes.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "source": {
                    "type": "string",
                    "description": "Backlink to the sender of the notification. Supports Go templating.\n"
                },
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Tags attached to the Opsgenie alert.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the Opsgenie API. Disable only in trusted environments.\n"
                }
            },
            "requiredInputs": [
                "apiKey",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering OpsgenieAlertNotifier resources.\n",
                "properties": {
                    "apiKey": {
                        "type": "string",
                        "description": "Opsgenie API key used to authenticate requests. Treat as a secret.\n",
                        "secret": true
                    },
                    "apiUrl": {
                        "type": "string",
                        "description": "Opsgenie API URL to send requests to (e.g. `https://api.opsgenie.com/`).\n"
                    },
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the Opsgenie API. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the Opsgenie API. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the Opsgenie API. Treat as a secret. Mutually exclusive with basic auth.\n"
                    },
                    "description": {
                        "type": "string",
                        "description": "Detailed description of the alert. Supports Go templating.\n"
                    },
                    "details": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Arbitrary key/value pairs attached to the alert as additional context. Values support Go templating.\n"
                    },
                    "message": {
                        "type": "string",
                        "description": "Alert text shown in Opsgenie. Supports Go templating.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the responder team, schedule, or escalation policy.\n"
                    },
                    "note": {
                        "type": "string",
                        "description": "Additional note appended to the alert. Supports Go templating.\n"
                    },
                    "priority": {
                        "type": "string",
                        "description": "Priority level of the alert. One of `P1`, `P2`, `P3`, `P4`, or `P5`.\n"
                    },
                    "proxyUrl": {
                        "type": "string",
                        "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                        "deprecationMessage": "custom proxy URLs are not supported"
                    },
                    "responders": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/OpsgenieAlertNotifierResponder:OpsgenieAlertNotifierResponder"
                        },
                        "description": "Responders that Opsgenie will notify for the alert. See https://docs.opsgenie.com/docs/alert-api for accepted shapes.\n"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "source": {
                        "type": "string",
                        "description": "Backlink to the sender of the notification. Supports Go templating.\n"
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Tags attached to the Opsgenie alert.\n"
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the Opsgenie API. Disable only in trusted environments.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/opsgenieExternalConnection:OpsgenieExternalConnection": {
            "description": "Workspace-scoped OpsGenie credentials that downstream notifiers and LogScale actions can reference. Centralizes the OpsGenie API key so it isn't duplicated across individual notifiers; modern equivalent of the per-notifier credentials.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst opsgenie = new chronosphere.OpsgenieExternalConnection(\"opsgenie\", {\n    apiKey: \"XXXXX\",\n    apiUrl: \"https://api.opsgenie.com/\",\n    name: \"OpsGenie\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nopsgenie = chronosphere.OpsgenieExternalConnection(\"opsgenie\",\n    api_key=\"XXXXX\",\n    api_url=\"https://api.opsgenie.com/\",\n    name=\"OpsGenie\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var opsgenie = new Pulumi.OpsgenieExternalConnection(\"opsgenie\", new()\n    {\n        ApiKey = \"XXXXX\",\n        ApiUrl = \"https://api.opsgenie.com/\",\n        Name = \"OpsGenie\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewOpsgenieExternalConnection(ctx, \"opsgenie\", \u0026chronosphere.OpsgenieExternalConnectionArgs{\n\t\t\tApiKey: pulumi.String(\"XXXXX\"),\n\t\t\tApiUrl: pulumi.String(\"https://api.opsgenie.com/\"),\n\t\t\tName:   pulumi.String(\"OpsGenie\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.OpsgenieExternalConnection;\nimport com.pulumi.chronosphere.OpsgenieExternalConnectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var opsgenie = new OpsgenieExternalConnection(\"opsgenie\", OpsgenieExternalConnectionArgs.builder()        \n            .apiKey(\"XXXXX\")\n            .apiUrl(\"https://api.opsgenie.com/\")\n            .name(\"OpsGenie\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  opsgenie:\n    type: chronosphere:OpsgenieExternalConnection\n    properties:\n      apiKey: XXXXX\n      apiUrl: https://api.opsgenie.com/\n      name: OpsGenie\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "apiKey": {
                    "type": "string",
                    "description": "OpsGenie integration API key used to authenticate alert delivery. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Base URL of the OpsGenie API. Override to target the EU region or a custom endpoint.\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling OpsGenie. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling OpsGenie. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling OpsGenie. Mutually exclusive with basic auth. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling OpsGenie. Disable only in trusted environments.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "apiKey": {
                    "type": "string",
                    "description": "OpsGenie integration API key used to authenticate alert delivery. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Base URL of the OpsGenie API. Override to target the EU region or a custom endpoint.\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling OpsGenie. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling OpsGenie. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling OpsGenie. Mutually exclusive with basic auth. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling OpsGenie. Disable only in trusted environments.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering OpsgenieExternalConnection resources.\n",
                "properties": {
                    "apiKey": {
                        "type": "string",
                        "description": "OpsGenie integration API key used to authenticate alert delivery. Treat as a secret.\n",
                        "secret": true
                    },
                    "apiUrl": {
                        "type": "string",
                        "description": "Base URL of the OpsGenie API. Override to target the EU region or a custom endpoint.\n"
                    },
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling OpsGenie. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling OpsGenie. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling OpsGenie. Mutually exclusive with basic auth. Treat as a secret.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the external connection.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling OpsGenie. Disable only in trusted environments.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/otelMetricsIngestion:OtelMetricsIngestion": {
            "description": "Configures how incoming OTLP metric payloads have their OpenTelemetry resource attributes flattened, filtered, and mapped onto Prometheus-style labels at ingestion.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst config = new chronosphere.OtelMetricsIngestion(\"config\", {resourceAttributes: {\n    excludeKeys: [\n        \"host.id\",\n        \"process.pid\",\n    ],\n    filterMode: \"APPEND_DEFAULT_EXCLUDE_KEYS\",\n    flattenMode: \"MERGE\",\n    generateTargetInfo: false,\n}});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nconfig = chronosphere.OtelMetricsIngestion(\"config\", resource_attributes=chronosphere.OtelMetricsIngestionResourceAttributesArgs(\n    exclude_keys=[\n        \"host.id\",\n        \"process.pid\",\n    ],\n    filter_mode=\"APPEND_DEFAULT_EXCLUDE_KEYS\",\n    flatten_mode=\"MERGE\",\n    generate_target_info=False,\n))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var config = new Pulumi.OtelMetricsIngestion(\"config\", new()\n    {\n        ResourceAttributes = new Pulumi.Inputs.OtelMetricsIngestionResourceAttributesArgs\n        {\n            ExcludeKeys = new[]\n            {\n                \"host.id\",\n                \"process.pid\",\n            },\n            FilterMode = \"APPEND_DEFAULT_EXCLUDE_KEYS\",\n            FlattenMode = \"MERGE\",\n            GenerateTargetInfo = false,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewOtelMetricsIngestion(ctx, \"config\", \u0026chronosphere.OtelMetricsIngestionArgs{\n\t\t\tResourceAttributes: \u0026chronosphere.OtelMetricsIngestionResourceAttributesArgs{\n\t\t\t\tExcludeKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"host.id\"),\n\t\t\t\t\tpulumi.String(\"process.pid\"),\n\t\t\t\t},\n\t\t\t\tFilterMode:         pulumi.String(\"APPEND_DEFAULT_EXCLUDE_KEYS\"),\n\t\t\t\tFlattenMode:        pulumi.String(\"MERGE\"),\n\t\t\t\tGenerateTargetInfo: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.OtelMetricsIngestion;\nimport com.pulumi.chronosphere.OtelMetricsIngestionArgs;\nimport com.pulumi.chronosphere.inputs.OtelMetricsIngestionResourceAttributesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var config = new OtelMetricsIngestion(\"config\", OtelMetricsIngestionArgs.builder()        \n            .resourceAttributes(OtelMetricsIngestionResourceAttributesArgs.builder()\n                .excludeKeys(                \n                    \"host.id\",\n                    \"process.pid\")\n                .filterMode(\"APPEND_DEFAULT_EXCLUDE_KEYS\")\n                .flattenMode(\"MERGE\")\n                .generateTargetInfo(false)\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  config:\n    type: chronosphere:OtelMetricsIngestion\n    properties:\n      resourceAttributes:\n        excludeKeys:\n          - host.id\n          - process.pid\n        filterMode: APPEND_DEFAULT_EXCLUDE_KEYS\n        flattenMode: MERGE\n        generateTargetInfo: false\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "resourceAttributes": {
                    "$ref": "#/types/chronosphere:index/OtelMetricsIngestionResourceAttributes:OtelMetricsIngestionResourceAttributes",
                    "description": "Controls how OpenTelemetry resource attributes are mapped to Prometheus labels at ingest.\n"
                }
            },
            "inputProperties": {
                "resourceAttributes": {
                    "$ref": "#/types/chronosphere:index/OtelMetricsIngestionResourceAttributes:OtelMetricsIngestionResourceAttributes",
                    "description": "Controls how OpenTelemetry resource attributes are mapped to Prometheus labels at ingest.\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering OtelMetricsIngestion resources.\n",
                "properties": {
                    "resourceAttributes": {
                        "$ref": "#/types/chronosphere:index/OtelMetricsIngestionResourceAttributes:OtelMetricsIngestionResourceAttributes",
                        "description": "Controls how OpenTelemetry resource attributes are mapped to Prometheus labels at ingest.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/pagerdutyAlertNotifier:PagerdutyAlertNotifier": {
            "description": "PagerDuty notifier that delivers monitor signals to PagerDuty as incidents via the Events API. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst pagerduty = new chronosphere.PagerdutyAlertNotifier(\"pagerduty\", {\n    details: {\n        runbook: \"http://runbook\",\n    },\n    name: \"PagerDuty Notifier\",\n    routingKey: \"XXXXX\",\n    sendResolved: true,\n    severity: \"info\",\n    url: \"https://events.pagerduty.com/v2/enqueue\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\npagerduty = chronosphere.PagerdutyAlertNotifier(\"pagerduty\",\n    details={\n        \"runbook\": \"http://runbook\",\n    },\n    name=\"PagerDuty Notifier\",\n    routing_key=\"XXXXX\",\n    send_resolved=True,\n    severity=\"info\",\n    url=\"https://events.pagerduty.com/v2/enqueue\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var pagerduty = new Pulumi.PagerdutyAlertNotifier(\"pagerduty\", new()\n    {\n        Details = \n        {\n            { \"runbook\", \"http://runbook\" },\n        },\n        Name = \"PagerDuty Notifier\",\n        RoutingKey = \"XXXXX\",\n        SendResolved = true,\n        Severity = \"info\",\n        Url = \"https://events.pagerduty.com/v2/enqueue\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewPagerdutyAlertNotifier(ctx, \"pagerduty\", \u0026chronosphere.PagerdutyAlertNotifierArgs{\n\t\t\tDetails: pulumi.StringMap{\n\t\t\t\t\"runbook\": pulumi.String(\"http://runbook\"),\n\t\t\t},\n\t\t\tName:         pulumi.String(\"PagerDuty Notifier\"),\n\t\t\tRoutingKey:   pulumi.String(\"XXXXX\"),\n\t\t\tSendResolved: pulumi.Bool(true),\n\t\t\tSeverity:     pulumi.String(\"info\"),\n\t\t\tUrl:          pulumi.String(\"https://events.pagerduty.com/v2/enqueue\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.PagerdutyAlertNotifier;\nimport com.pulumi.chronosphere.PagerdutyAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var pagerduty = new PagerdutyAlertNotifier(\"pagerduty\", PagerdutyAlertNotifierArgs.builder()        \n            .details(Map.of(\"runbook\", \"http://runbook\"))\n            .name(\"PagerDuty Notifier\")\n            .routingKey(\"XXXXX\")\n            .sendResolved(true)\n            .severity(\"info\")\n            .url(\"https://events.pagerduty.com/v2/enqueue\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  pagerduty:\n    type: chronosphere:PagerdutyAlertNotifier\n    properties:\n      details:\n        runbook: http://runbook\n      name: PagerDuty Notifier\n      routingKey: XXXXX\n      sendResolved: true\n      severity: info\n      url: https://events.pagerduty.com/v2/enqueue\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the PagerDuty API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the PagerDuty API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the PagerDuty API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "class": {
                    "type": "string",
                    "description": "Class of the event reported to PagerDuty (e.g. `cpu`, `database`). Supports Go templating.\n"
                },
                "client": {
                    "type": "string",
                    "description": "Name of the monitoring client identified in the notification.\n"
                },
                "clientUrl": {
                    "type": "string",
                    "description": "Backlink to the sender of the notification, shown in PagerDuty.\n"
                },
                "component": {
                    "type": "string",
                    "description": "Part or component of the affected system that is broken. Supports Go templating.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Summary of the incident. Supports Go templating.\n"
                },
                "details": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs attached to the incident as additional context. Values support Go templating.\n"
                },
                "group": {
                    "type": "string",
                    "description": "Logical grouping of services the incident belongs to. Supports Go templating.\n"
                },
                "images": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierImage:PagerdutyAlertNotifierImage"
                    },
                    "description": "Images attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                },
                "links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierLink:PagerdutyAlertNotifierLink"
                    },
                    "description": "Hyperlinks attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "routingKey": {
                    "type": "string",
                    "description": "PagerDuty integration key when using the `Events API v2` integration type. Treat as a secret. Mutually exclusive with `service_key`.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "serviceKey": {
                    "type": "string",
                    "description": "PagerDuty integration key when using the `Prometheus` integration type. Treat as a secret. Mutually exclusive with `routing_key`.\n",
                    "secret": true
                },
                "severity": {
                    "type": "string",
                    "description": "Severity of the incident. One of `critical`, `error`, `warning`, or `info`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the PagerDuty API. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "PagerDuty API URL to send events to (e.g. `https://events.pagerduty.com/v2/enqueue`).\n"
                }
            },
            "required": [
                "name",
                "severity",
                "slug",
                "url"
            ],
            "inputProperties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the PagerDuty API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the PagerDuty API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the PagerDuty API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "class": {
                    "type": "string",
                    "description": "Class of the event reported to PagerDuty (e.g. `cpu`, `database`). Supports Go templating.\n"
                },
                "client": {
                    "type": "string",
                    "description": "Name of the monitoring client identified in the notification.\n"
                },
                "clientUrl": {
                    "type": "string",
                    "description": "Backlink to the sender of the notification, shown in PagerDuty.\n"
                },
                "component": {
                    "type": "string",
                    "description": "Part or component of the affected system that is broken. Supports Go templating.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Summary of the incident. Supports Go templating.\n"
                },
                "details": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs attached to the incident as additional context. Values support Go templating.\n"
                },
                "group": {
                    "type": "string",
                    "description": "Logical grouping of services the incident belongs to. Supports Go templating.\n"
                },
                "images": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierImage:PagerdutyAlertNotifierImage"
                    },
                    "description": "Images attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                },
                "links": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierLink:PagerdutyAlertNotifierLink"
                    },
                    "description": "Hyperlinks attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "routingKey": {
                    "type": "string",
                    "description": "PagerDuty integration key when using the `Events API v2` integration type. Treat as a secret. Mutually exclusive with `service_key`.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "serviceKey": {
                    "type": "string",
                    "description": "PagerDuty integration key when using the `Prometheus` integration type. Treat as a secret. Mutually exclusive with `routing_key`.\n",
                    "secret": true
                },
                "severity": {
                    "type": "string",
                    "description": "Severity of the incident. One of `critical`, `error`, `warning`, or `info`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the PagerDuty API. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "PagerDuty API URL to send events to (e.g. `https://events.pagerduty.com/v2/enqueue`).\n"
                }
            },
            "requiredInputs": [
                "name",
                "severity",
                "url"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering PagerdutyAlertNotifier resources.\n",
                "properties": {
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the PagerDuty API. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the PagerDuty API. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the PagerDuty API. Treat as a secret. Mutually exclusive with basic auth.\n"
                    },
                    "class": {
                        "type": "string",
                        "description": "Class of the event reported to PagerDuty (e.g. `cpu`, `database`). Supports Go templating.\n"
                    },
                    "client": {
                        "type": "string",
                        "description": "Name of the monitoring client identified in the notification.\n"
                    },
                    "clientUrl": {
                        "type": "string",
                        "description": "Backlink to the sender of the notification, shown in PagerDuty.\n"
                    },
                    "component": {
                        "type": "string",
                        "description": "Part or component of the affected system that is broken. Supports Go templating.\n"
                    },
                    "description": {
                        "type": "string",
                        "description": "Summary of the incident. Supports Go templating.\n"
                    },
                    "details": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Arbitrary key/value pairs attached to the incident as additional context. Values support Go templating.\n"
                    },
                    "group": {
                        "type": "string",
                        "description": "Logical grouping of services the incident belongs to. Supports Go templating.\n"
                    },
                    "images": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierImage:PagerdutyAlertNotifierImage"
                        },
                        "description": "Images attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                    },
                    "links": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/PagerdutyAlertNotifierLink:PagerdutyAlertNotifierLink"
                        },
                        "description": "Hyperlinks attached to the PagerDuty incident. See https://developer.pagerduty.com/docs/events-api-v2/trigger-events/.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the notifier.\n"
                    },
                    "proxyUrl": {
                        "type": "string",
                        "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                        "deprecationMessage": "custom proxy URLs are not supported"
                    },
                    "routingKey": {
                        "type": "string",
                        "description": "PagerDuty integration key when using the `Events API v2` integration type. Treat as a secret. Mutually exclusive with `service_key`.\n"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "serviceKey": {
                        "type": "string",
                        "description": "PagerDuty integration key when using the `Prometheus` integration type. Treat as a secret. Mutually exclusive with `routing_key`.\n",
                        "secret": true
                    },
                    "severity": {
                        "type": "string",
                        "description": "Severity of the incident. One of `critical`, `error`, `warning`, or `info`.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the PagerDuty API. Disable only in trusted environments.\n"
                    },
                    "url": {
                        "type": "string",
                        "description": "PagerDuty API URL to send events to (e.g. `https://events.pagerduty.com/v2/enqueue`).\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/pagerdutyExternalConnection:PagerdutyExternalConnection": {
            "description": "Workspace-scoped PagerDuty credentials that downstream notifiers and LogScale actions can reference. Holds either a PagerDuty Events integration key (for alert delivery) or a REST API token (for incident note polling); modern equivalent of the per-notifier credentials.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst pagerduty = new chronosphere.PagerdutyExternalConnection(\"pagerduty\", {\n    name: \"PagerDuty\",\n    pagerdutyApiKey: \"XXXXX\",\n    pagerdutyEventsVersion: \"PAGERDUTY_EVENTS_VERSION_V2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\npagerduty = chronosphere.PagerdutyExternalConnection(\"pagerduty\",\n    name=\"PagerDuty\",\n    pagerduty_api_key=\"XXXXX\",\n    pagerduty_events_version=\"PAGERDUTY_EVENTS_VERSION_V2\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var pagerduty = new Pulumi.PagerdutyExternalConnection(\"pagerduty\", new()\n    {\n        Name = \"PagerDuty\",\n        PagerdutyApiKey = \"XXXXX\",\n        PagerdutyEventsVersion = \"PAGERDUTY_EVENTS_VERSION_V2\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewPagerdutyExternalConnection(ctx, \"pagerduty\", \u0026chronosphere.PagerdutyExternalConnectionArgs{\n\t\t\tName:                   pulumi.String(\"PagerDuty\"),\n\t\t\tPagerdutyApiKey:        pulumi.String(\"XXXXX\"),\n\t\t\tPagerdutyEventsVersion: pulumi.String(\"PAGERDUTY_EVENTS_VERSION_V2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.PagerdutyExternalConnection;\nimport com.pulumi.chronosphere.PagerdutyExternalConnectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var pagerduty = new PagerdutyExternalConnection(\"pagerduty\", PagerdutyExternalConnectionArgs.builder()        \n            .name(\"PagerDuty\")\n            .pagerdutyApiKey(\"XXXXX\")\n            .pagerdutyEventsVersion(\"PAGERDUTY_EVENTS_VERSION_V2\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  pagerduty:\n    type: chronosphere:PagerdutyExternalConnection\n    properties:\n      name: PagerDuty\n      pagerdutyApiKey: XXXXX\n      pagerdutyEventsVersion: PAGERDUTY_EVENTS_VERSION_V2\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "pagerdutyApiKey": {
                    "type": "string",
                    "description": "PagerDuty Events API integration key used to authenticate alert delivery. Called the routing key in Events v2 and the service key in Events v1. Treat as a secret. Mutually exclusive with `pagerduty_rest_api_key`.\n",
                    "secret": true
                },
                "pagerdutyEventsVersion": {
                    "type": "string",
                    "description": "PagerDuty Events API version used to deliver alerts: `PAGERDUTY_EVENTS_VERSION_V1` (legacy) or `PAGERDUTY_EVENTS_VERSION_V2` (default, recommended). Mutually exclusive with `pagerduty_rest_api_key`.\n"
                },
                "pagerdutyRestApiKey": {
                    "type": "string",
                    "description": "PagerDuty REST API token used to authenticate incident note polling. Treat as a secret. Mutually exclusive with `pagerduty_api_key` and `pagerduty_events_version`.\n",
                    "secret": true
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "pagerdutyApiKey": {
                    "type": "string",
                    "description": "PagerDuty Events API integration key used to authenticate alert delivery. Called the routing key in Events v2 and the service key in Events v1. Treat as a secret. Mutually exclusive with `pagerduty_rest_api_key`.\n",
                    "secret": true
                },
                "pagerdutyEventsVersion": {
                    "type": "string",
                    "description": "PagerDuty Events API version used to deliver alerts: `PAGERDUTY_EVENTS_VERSION_V1` (legacy) or `PAGERDUTY_EVENTS_VERSION_V2` (default, recommended). Mutually exclusive with `pagerduty_rest_api_key`.\n"
                },
                "pagerdutyRestApiKey": {
                    "type": "string",
                    "description": "PagerDuty REST API token used to authenticate incident note polling. Treat as a secret. Mutually exclusive with `pagerduty_api_key` and `pagerduty_events_version`.\n",
                    "secret": true
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering PagerdutyExternalConnection resources.\n",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Display name of the external connection.\n"
                    },
                    "pagerdutyApiKey": {
                        "type": "string",
                        "description": "PagerDuty Events API integration key used to authenticate alert delivery. Called the routing key in Events v2 and the service key in Events v1. Treat as a secret. Mutually exclusive with `pagerduty_rest_api_key`.\n",
                        "secret": true
                    },
                    "pagerdutyEventsVersion": {
                        "type": "string",
                        "description": "PagerDuty Events API version used to deliver alerts: `PAGERDUTY_EVENTS_VERSION_V1` (legacy) or `PAGERDUTY_EVENTS_VERSION_V2` (default, recommended). Mutually exclusive with `pagerduty_rest_api_key`.\n"
                    },
                    "pagerdutyRestApiKey": {
                        "type": "string",
                        "description": "PagerDuty REST API token used to authenticate incident note polling. Treat as a secret. Mutually exclusive with `pagerduty_api_key` and `pagerduty_events_version`.\n",
                        "secret": true
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/recordingRule:RecordingRule": {
            "description": "Evaluates a PromQL expression at a fixed interval and writes the result to a new time series. Useful for precomputing expensive queries or producing derived metrics.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst upByNamespace = new chronosphere.RecordingRule(\"upByNamespace\", {\n    expr: \"sum by (kubernetes_namespace) (up)\",\n    interval: \"60s\",\n    labels: {\n        owner: \"platform\",\n    },\n    metricName: \"up:by_namespace\",\n    name: \"up:by_namespace\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nup_by_namespace = chronosphere.RecordingRule(\"upByNamespace\",\n    expr=\"sum by (kubernetes_namespace) (up)\",\n    interval=\"60s\",\n    labels={\n        \"owner\": \"platform\",\n    },\n    metric_name=\"up:by_namespace\",\n    name=\"up:by_namespace\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var upByNamespace = new Pulumi.RecordingRule(\"upByNamespace\", new()\n    {\n        Expr = \"sum by (kubernetes_namespace) (up)\",\n        Interval = \"60s\",\n        Labels = \n        {\n            { \"owner\", \"platform\" },\n        },\n        MetricName = \"up:by_namespace\",\n        Name = \"up:by_namespace\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewRecordingRule(ctx, \"upByNamespace\", \u0026chronosphere.RecordingRuleArgs{\n\t\t\tExpr:     pulumi.String(\"sum by (kubernetes_namespace) (up)\"),\n\t\t\tInterval: pulumi.String(\"60s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"owner\": pulumi.String(\"platform\"),\n\t\t\t},\n\t\t\tMetricName: pulumi.String(\"up:by_namespace\"),\n\t\t\tName:       pulumi.String(\"up:by_namespace\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.RecordingRule;\nimport com.pulumi.chronosphere.RecordingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var upByNamespace = new RecordingRule(\"upByNamespace\", RecordingRuleArgs.builder()        \n            .expr(\"sum by (kubernetes_namespace) (up)\")\n            .interval(\"60s\")\n            .labels(Map.of(\"owner\", \"platform\"))\n            .metricName(\"up:by_namespace\")\n            .name(\"up:by_namespace\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  upByNamespace:\n    type: chronosphere:RecordingRule\n    properties:\n      expr: sum by (kubernetes_namespace) (up)\n      interval: 60s\n      labels:\n        owner: platform\n      metricName: up:by_namespace\n      name: up:by_namespace\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the recording rule belongs to. At least one of `bucket_id` or `execution_group` must be set; if both are set their values must match.\n"
                },
                "executionGroup": {
                    "type": "string",
                    "description": "Slug of the execution group in which the rule is evaluated. Rules in the same group run sequentially at the configured interval; all rules in a group must finish before the next iteration starts. At least one of `bucket_id` or `execution_group` must be set.\n"
                },
                "executionMode": {
                    "type": "string",
                    "description": "Execution mode controlling whether the recording rule is active.\n"
                },
                "expr": {
                    "type": "string",
                    "description": "PromQL expression evaluated at each interval. The result is written to a new series named by `metric_name` (or `name` if unset).\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to `60s` when unset.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels added to every series produced by this recording rule.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Name of the output time series produced by `expr`. Must be a valid metric name. Defaults to `name` if omitted.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the recording rule. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the recording rule. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "expr",
                "name",
                "slug"
            ],
            "inputProperties": {
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the recording rule belongs to. At least one of `bucket_id` or `execution_group` must be set; if both are set their values must match.\n"
                },
                "executionGroup": {
                    "type": "string",
                    "description": "Slug of the execution group in which the rule is evaluated. Rules in the same group run sequentially at the configured interval; all rules in a group must finish before the next iteration starts. At least one of `bucket_id` or `execution_group` must be set.\n"
                },
                "executionMode": {
                    "type": "string",
                    "description": "Execution mode controlling whether the recording rule is active.\n"
                },
                "expr": {
                    "type": "string",
                    "description": "PromQL expression evaluated at each interval. The result is written to a new series named by `metric_name` (or `name` if unset).\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to `60s` when unset.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Key/value labels added to every series produced by this recording rule.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Name of the output time series produced by `expr`. Must be a valid metric name. Defaults to `name` if omitted.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the recording rule. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the recording rule. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "expr",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering RecordingRule resources.\n",
                "properties": {
                    "bucketId": {
                        "type": "string",
                        "description": "ID of the bucket the recording rule belongs to. At least one of `bucket_id` or `execution_group` must be set; if both are set their values must match.\n"
                    },
                    "executionGroup": {
                        "type": "string",
                        "description": "Slug of the execution group in which the rule is evaluated. Rules in the same group run sequentially at the configured interval; all rules in a group must finish before the next iteration starts. At least one of `bucket_id` or `execution_group` must be set.\n"
                    },
                    "executionMode": {
                        "type": "string",
                        "description": "Execution mode controlling whether the recording rule is active.\n"
                    },
                    "expr": {
                        "type": "string",
                        "description": "PromQL expression evaluated at each interval. The result is written to a new series named by `metric_name` (or `name` if unset).\n"
                    },
                    "interval": {
                        "type": "string",
                        "description": "Evaluation interval (e.g. `30s`, `1m`). Defaults to `60s` when unset.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Key/value labels added to every series produced by this recording rule.\n"
                    },
                    "metricName": {
                        "type": "string",
                        "description": "Name of the output time series produced by `expr`. Must be a valid metric name. Defaults to `name` if omitted.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the recording rule. Can be changed after creation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the recording rule. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/resourcePoolsConfig:ResourcePoolsConfig": {
            "description": "Singleton allocation of metric license capacity into named pools that match metrics by label filter, each with priority-based dropping when the pool's allocation is exceeded.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ResourcePoolsConfig;\nimport com.pulumi.chronosphere.ResourcePoolsConfigArgs;\nimport com.pulumi.chronosphere.inputs.ResourcePoolsConfigDefaultPoolArgs;\nimport com.pulumi.chronosphere.inputs.ResourcePoolsConfigDefaultPoolPrioritiesArgs;\nimport com.pulumi.chronosphere.inputs.ResourcePoolsConfigPoolArgs;\nimport com.pulumi.chronosphere.inputs.ResourcePoolsConfigPoolAllocationArgs;\nimport com.pulumi.chronosphere.inputs.ResourcePoolsConfigPoolPrioritiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var default_ = new ResourcePoolsConfig(\"default\", ResourcePoolsConfigArgs.builder()        \n            .defaultPool(ResourcePoolsConfigDefaultPoolArgs.builder()\n                .priorities(ResourcePoolsConfigDefaultPoolPrioritiesArgs.builder()\n                    .highPriorityMatchRules(\"cluster:production*\")\n                    .lowPriorityMatchRules(\"cluster:test*\")\n                    .build())\n                .build())\n            .pools(ResourcePoolsConfigPoolArgs.builder()\n                .allocation(ResourcePoolsConfigPoolAllocationArgs.builder()\n                    .fixedValue(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                    .percentOfLicense(49.9)\n                    .build())\n                .matchRules(                \n                    \"team:platform\",\n                    \"env:production\")\n                .name(\"first\")\n                .priorities(ResourcePoolsConfigPoolPrioritiesArgs.builder()\n                    .highPriorityMatchRules(\"cluster:production*\")\n                    .lowPriorityMatchRules(\"cluster:test*\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  default:\n    type: chronosphere:ResourcePoolsConfig\n    properties:\n      defaultPool:\n        priorities:\n          highPriorityMatchRules:\n            - cluster:production*\n          lowPriorityMatchRules:\n            - cluster:test*\n      pools:\n        - allocation:\n            fixedValue:\n              - license: PERSISTED_WRITES_STANDARD\n                value: 1000\n            percentOfLicense: 49.9\n          matchRules:\n            - team:platform\n            - env:production\n          name: first\n          priorities:\n            highPriorityMatchRules:\n              - cluster:production*\n            lowPriorityMatchRules:\n              - cluster:test*\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "defaultPool": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPool:ResourcePoolsConfigDefaultPool",
                    "description": "Catch-all pool that receives metrics not matched by any other pool. Also receives any license allocation left unassigned by the other pools.\n"
                },
                "pool": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                    },
                    "description": "Named pools that partition each license across teams or workloads. Pools are matched in declaration order via their `match_rules`.\n"
                },
                "pools": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                    },
                    "description": "Deprecated: use `pool` instead. Set of named pools that partition the license.\n",
                    "deprecationMessage": "Use pool instead of pools"
                }
            },
            "inputProperties": {
                "defaultPool": {
                    "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPool:ResourcePoolsConfigDefaultPool",
                    "description": "Catch-all pool that receives metrics not matched by any other pool. Also receives any license allocation left unassigned by the other pools.\n"
                },
                "pool": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                    },
                    "description": "Named pools that partition each license across teams or workloads. Pools are matched in declaration order via their `match_rules`.\n"
                },
                "pools": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                    },
                    "description": "Deprecated: use `pool` instead. Set of named pools that partition the license.\n",
                    "deprecationMessage": "Use pool instead of pools"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ResourcePoolsConfig resources.\n",
                "properties": {
                    "defaultPool": {
                        "$ref": "#/types/chronosphere:index/ResourcePoolsConfigDefaultPool:ResourcePoolsConfigDefaultPool",
                        "description": "Catch-all pool that receives metrics not matched by any other pool. Also receives any license allocation left unassigned by the other pools.\n"
                    },
                    "pool": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                        },
                        "description": "Named pools that partition each license across teams or workloads. Pools are matched in declaration order via their `match_rules`.\n"
                    },
                    "pools": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/ResourcePoolsConfigPool:ResourcePoolsConfigPool"
                        },
                        "description": "Deprecated: use `pool` instead. Set of named pools that partition the license.\n",
                        "deprecationMessage": "Use pool instead of pools"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/rollupRule:RollupRule": {
            "description": "Aggregates matching input metrics into a lower-cardinality output series at ingest time, reducing storage cost and query load. Selects input series by filter, applies an aggregation function (e.g. `sum`, `max`), and emits a new metric grouped by the specified labels.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst bucket = new chronosphere.Bucket(\"bucket\", {name: \"Platform\"});\nconst rollupRule = new chronosphere.RollupRule(\"rollupRule\", {\n    name: \"RollupRule\",\n    slug: \"rollup-rule\",\n    bucketId: bucket.id,\n    filter: \"__name__:metric_name\",\n    aggregation: \"SUM\",\n    dropRaw: true,\n    groupBies: [\"service\"],\n    metricType: \"COUNTER\",\n    metricTypeTag: false,\n    newMetric: \"new_metric_name\",\n    permissive: true,\n    storagePolicies: {\n        resolution: \"30s\",\n        retention: \"120h\",\n    },\n    mode: \"PREVIEW\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nbucket = chronosphere.Bucket(\"bucket\", name=\"Platform\")\nrollup_rule = chronosphere.RollupRule(\"rollupRule\",\n    name=\"RollupRule\",\n    slug=\"rollup-rule\",\n    bucket_id=bucket.id,\n    filter=\"__name__:metric_name\",\n    aggregation=\"SUM\",\n    drop_raw=True,\n    group_bies=[\"service\"],\n    metric_type=\"COUNTER\",\n    metric_type_tag=False,\n    new_metric=\"new_metric_name\",\n    permissive=True,\n    storage_policies=chronosphere.RollupRuleStoragePoliciesArgs(\n        resolution=\"30s\",\n        retention=\"120h\",\n    ),\n    mode=\"PREVIEW\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var bucket = new Pulumi.Bucket(\"bucket\", new()\n    {\n        Name = \"Platform\",\n    });\n\n    var rollupRule = new Pulumi.RollupRule(\"rollupRule\", new()\n    {\n        Name = \"RollupRule\",\n        Slug = \"rollup-rule\",\n        BucketId = bucket.Id,\n        Filter = \"__name__:metric_name\",\n        Aggregation = \"SUM\",\n        DropRaw = true,\n        GroupBies = new[]\n        {\n            \"service\",\n        },\n        MetricType = \"COUNTER\",\n        MetricTypeTag = false,\n        NewMetric = \"new_metric_name\",\n        Permissive = true,\n        StoragePolicies = new Pulumi.Inputs.RollupRuleStoragePoliciesArgs\n        {\n            Resolution = \"30s\",\n            Retention = \"120h\",\n        },\n        Mode = \"PREVIEW\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := chronosphere.NewBucket(ctx, \"bucket\", \u0026chronosphere.BucketArgs{\n\t\t\tName: pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewRollupRule(ctx, \"rollupRule\", \u0026chronosphere.RollupRuleArgs{\n\t\t\tName:        pulumi.String(\"RollupRule\"),\n\t\t\tSlug:        pulumi.String(\"rollup-rule\"),\n\t\t\tBucketId:    bucket.ID(),\n\t\t\tFilter:      pulumi.String(\"__name__:metric_name\"),\n\t\t\tAggregation: pulumi.String(\"SUM\"),\n\t\t\tDropRaw:     pulumi.Bool(true),\n\t\t\tGroupBies: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"service\"),\n\t\t\t},\n\t\t\tMetricType:    pulumi.String(\"COUNTER\"),\n\t\t\tMetricTypeTag: pulumi.Bool(false),\n\t\t\tNewMetric:     pulumi.String(\"new_metric_name\"),\n\t\t\tPermissive:    pulumi.Bool(true),\n\t\t\tStoragePolicies: \u0026chronosphere.RollupRuleStoragePoliciesArgs{\n\t\t\t\tResolution: pulumi.String(\"30s\"),\n\t\t\t\tRetention:  pulumi.String(\"120h\"),\n\t\t\t},\n\t\t\tMode: pulumi.String(\"PREVIEW\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Bucket;\nimport com.pulumi.chronosphere.BucketArgs;\nimport com.pulumi.chronosphere.RollupRule;\nimport com.pulumi.chronosphere.RollupRuleArgs;\nimport com.pulumi.chronosphere.inputs.RollupRuleStoragePoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var bucket = new Bucket(\"bucket\", BucketArgs.builder()        \n            .name(\"Platform\")\n            .build());\n\n        var rollupRule = new RollupRule(\"rollupRule\", RollupRuleArgs.builder()        \n            .name(\"RollupRule\")\n            .slug(\"rollup-rule\")\n            .bucketId(bucket.id())\n            .filter(\"__name__:metric_name\")\n            .aggregation(\"SUM\")\n            .dropRaw(true)\n            .groupBies(\"service\")\n            .metricType(\"COUNTER\")\n            .metricTypeTag(false)\n            .newMetric(\"new_metric_name\")\n            .permissive(true)\n            .storagePolicies(RollupRuleStoragePoliciesArgs.builder()\n                .resolution(\"30s\")\n                .retention(\"120h\")\n                .build())\n            .mode(\"PREVIEW\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  bucket:\n    type: chronosphere:Bucket\n    properties:\n      name: Platform\n  rollupRule:\n    type: chronosphere:RollupRule\n    properties:\n      name: RollupRule\n      slug: rollup-rule\n      bucketId: ${bucket.id}\n      filter: __name__:metric_name\n      aggregation: SUM\n      dropRaw: true\n      groupBies:\n        - service\n      metricType: COUNTER\n      metricTypeTag: false\n      newMetric: new_metric_name\n      permissive: true\n      storagePolicies:\n        resolution: 30s\n        retention: 120h\n      mode: PREVIEW\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "aggregation": {
                    "type": "string",
                    "description": "Aggregation function applied across grouped series (e.g. `sum`, `min`, `max`, `last`).\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the rollup rule belongs to.\n"
                },
                "dropRaw": {
                    "type": "boolean",
                    "description": "If `true`, automatically generates a drop rule that removes the raw input metrics matching this rollup. Defaults to `false`.\n"
                },
                "excludeBies": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to drop when aggregating; all other labels are preserved. Mutually exclusive with `group_by`.\n"
                },
                "filter": {
                    "type": "string",
                    "description": "Space-delimited list of `label:value_glob` matchers that select the input series. Supports glob patterns and special filters like `__name__`, `__metric_type__`, and `__metric_source__`.\n"
                },
                "graphiteLabelPolicy": {
                    "$ref": "#/types/chronosphere:index/RollupRuleGraphiteLabelPolicy:RollupRuleGraphiteLabelPolicy",
                    "description": "Graphite-specific label policy applied to positional labels (`__gX__`) on the output metric.\n"
                },
                "groupBies": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to preserve when aggregating; all other labels are dropped. Mutually exclusive with `exclude_by`.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Interval between aggregated data points produced by the rollup. Defaults to a server-side value when unset. Conflicts with `storage_policies`.\n"
                },
                "metricType": {
                    "type": "string",
                    "description": "Type of the source metric being rolled up (e.g. `gauge`, `counter`, `histogram`).\n"
                },
                "metricTypeTag": {
                    "type": "boolean",
                    "description": "Whether to add a `__rollup_type__` label to the output metric identifying the rollup type. Defaults to `false`.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Rollup mode controlling whether the rule is active or in a preview state.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Positional Graphite label to replace (e.g. `__g1__`).\n"
                },
                "newMetric": {
                    "type": "string",
                    "description": "Name of the output metric produced by the rollup. Supports the `{{.MetricName}}` template variable to reference the source metric name. Optional for Graphite rollup rules.\n"
                },
                "permissive": {
                    "type": "boolean",
                    "description": "Deprecated: no longer supported.\n",
                    "deprecationMessage": "permissive is no longer supported"
                },
                "skipOnConflict": {
                    "type": "boolean",
                    "description": "If `true`, this rule is skipped when another rollup rule already produces a metric with the same output name. Defaults to `false`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the rollup rule. Immutable after creation. Unlike most resources, the slug is required and is not auto-generated from `name`.\n"
                },
                "storagePolicies": {
                    "$ref": "#/types/chronosphere:index/RollupRuleStoragePolicies:RollupRuleStoragePolicies",
                    "description": "Storage policy controlling resolution and retention of rolled-up metrics. Deprecated: use `interval` instead.\n",
                    "deprecationMessage": "use `interval` instead"
                }
            },
            "required": [
                "filter",
                "interval",
                "metricType",
                "name",
                "slug"
            ],
            "inputProperties": {
                "aggregation": {
                    "type": "string",
                    "description": "Aggregation function applied across grouped series (e.g. `sum`, `min`, `max`, `last`).\n"
                },
                "bucketId": {
                    "type": "string",
                    "description": "ID of the bucket the rollup rule belongs to.\n"
                },
                "dropRaw": {
                    "type": "boolean",
                    "description": "If `true`, automatically generates a drop rule that removes the raw input metrics matching this rollup. Defaults to `false`.\n"
                },
                "excludeBies": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to drop when aggregating; all other labels are preserved. Mutually exclusive with `group_by`.\n"
                },
                "filter": {
                    "type": "string",
                    "description": "Space-delimited list of `label:value_glob` matchers that select the input series. Supports glob patterns and special filters like `__name__`, `__metric_type__`, and `__metric_source__`.\n"
                },
                "graphiteLabelPolicy": {
                    "$ref": "#/types/chronosphere:index/RollupRuleGraphiteLabelPolicy:RollupRuleGraphiteLabelPolicy",
                    "description": "Graphite-specific label policy applied to positional labels (`__gX__`) on the output metric.\n"
                },
                "groupBies": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Labels to preserve when aggregating; all other labels are dropped. Mutually exclusive with `exclude_by`.\n"
                },
                "interval": {
                    "type": "string",
                    "description": "Interval between aggregated data points produced by the rollup. Defaults to a server-side value when unset. Conflicts with `storage_policies`.\n"
                },
                "metricType": {
                    "type": "string",
                    "description": "Type of the source metric being rolled up (e.g. `gauge`, `counter`, `histogram`).\n"
                },
                "metricTypeTag": {
                    "type": "boolean",
                    "description": "Whether to add a `__rollup_type__` label to the output metric identifying the rollup type. Defaults to `false`.\n"
                },
                "mode": {
                    "type": "string",
                    "description": "Rollup mode controlling whether the rule is active or in a preview state.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Positional Graphite label to replace (e.g. `__g1__`).\n"
                },
                "newMetric": {
                    "type": "string",
                    "description": "Name of the output metric produced by the rollup. Supports the `{{.MetricName}}` template variable to reference the source metric name. Optional for Graphite rollup rules.\n"
                },
                "permissive": {
                    "type": "boolean",
                    "description": "Deprecated: no longer supported.\n",
                    "deprecationMessage": "permissive is no longer supported"
                },
                "skipOnConflict": {
                    "type": "boolean",
                    "description": "If `true`, this rule is skipped when another rollup rule already produces a metric with the same output name. Defaults to `false`.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the rollup rule. Immutable after creation. Unlike most resources, the slug is required and is not auto-generated from `name`.\n",
                    "willReplaceOnChanges": true
                },
                "storagePolicies": {
                    "$ref": "#/types/chronosphere:index/RollupRuleStoragePolicies:RollupRuleStoragePolicies",
                    "description": "Storage policy controlling resolution and retention of rolled-up metrics. Deprecated: use `interval` instead.\n",
                    "deprecationMessage": "use `interval` instead"
                }
            },
            "requiredInputs": [
                "filter",
                "metricType",
                "name",
                "slug"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering RollupRule resources.\n",
                "properties": {
                    "aggregation": {
                        "type": "string",
                        "description": "Aggregation function applied across grouped series (e.g. `sum`, `min`, `max`, `last`).\n"
                    },
                    "bucketId": {
                        "type": "string",
                        "description": "ID of the bucket the rollup rule belongs to.\n"
                    },
                    "dropRaw": {
                        "type": "boolean",
                        "description": "If `true`, automatically generates a drop rule that removes the raw input metrics matching this rollup. Defaults to `false`.\n"
                    },
                    "excludeBies": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Labels to drop when aggregating; all other labels are preserved. Mutually exclusive with `group_by`.\n"
                    },
                    "filter": {
                        "type": "string",
                        "description": "Space-delimited list of `label:value_glob` matchers that select the input series. Supports glob patterns and special filters like `__name__`, `__metric_type__`, and `__metric_source__`.\n"
                    },
                    "graphiteLabelPolicy": {
                        "$ref": "#/types/chronosphere:index/RollupRuleGraphiteLabelPolicy:RollupRuleGraphiteLabelPolicy",
                        "description": "Graphite-specific label policy applied to positional labels (`__gX__`) on the output metric.\n"
                    },
                    "groupBies": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Labels to preserve when aggregating; all other labels are dropped. Mutually exclusive with `exclude_by`.\n"
                    },
                    "interval": {
                        "type": "string",
                        "description": "Interval between aggregated data points produced by the rollup. Defaults to a server-side value when unset. Conflicts with `storage_policies`.\n"
                    },
                    "metricType": {
                        "type": "string",
                        "description": "Type of the source metric being rolled up (e.g. `gauge`, `counter`, `histogram`).\n"
                    },
                    "metricTypeTag": {
                        "type": "boolean",
                        "description": "Whether to add a `__rollup_type__` label to the output metric identifying the rollup type. Defaults to `false`.\n"
                    },
                    "mode": {
                        "type": "string",
                        "description": "Rollup mode controlling whether the rule is active or in a preview state.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Positional Graphite label to replace (e.g. `__g1__`).\n"
                    },
                    "newMetric": {
                        "type": "string",
                        "description": "Name of the output metric produced by the rollup. Supports the `{{.MetricName}}` template variable to reference the source metric name. Optional for Graphite rollup rules.\n"
                    },
                    "permissive": {
                        "type": "boolean",
                        "description": "Deprecated: no longer supported.\n",
                        "deprecationMessage": "permissive is no longer supported"
                    },
                    "skipOnConflict": {
                        "type": "boolean",
                        "description": "If `true`, this rule is skipped when another rollup rule already produces a metric with the same output name. Defaults to `false`.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the rollup rule. Immutable after creation. Unlike most resources, the slug is required and is not auto-generated from `name`.\n",
                        "willReplaceOnChanges": true
                    },
                    "storagePolicies": {
                        "$ref": "#/types/chronosphere:index/RollupRuleStoragePolicies:RollupRuleStoragePolicies",
                        "description": "Storage policy controlling resolution and retention of rolled-up metrics. Deprecated: use `interval` instead.\n",
                        "deprecationMessage": "use `interval` instead"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/sLO:SLO": {
            "description": "A service-level objective that tracks the ratio of good to total events produced by an SLI over a configured time window, with optional multi-window burn-rate alerting.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst payments = new chronosphere.Team(\"payments\", {name: \"Payments\"});\nconst blackhole = new chronosphere.BlackholeAlertNotifier(\"blackhole\", {name: \"Blackhole\"});\nconst np = new chronosphere.NotificationPolicy(\"np\", {\n    name: \"SLO policy\",\n    teamId: payments.id,\n    routes: [{\n        severity: \"warn\",\n        notifiers: [blackhole.id],\n    }],\n});\nconst collection = new chronosphere.Collection(\"collection\", {\n    name: \"Payments\",\n    teamId: payments.id,\n});\nconst requestSuccess = new chronosphere.SLO(\"requestSuccess\", {\n    name: \"payments request success\",\n    collectionId: collection.id,\n    notificationPolicyId: np.id,\n    definition: {\n        objective: 99.95,\n        timeWindow: {\n            duration: \"28d\",\n        },\n        enableBurnRateAlerting: true,\n    },\n    sli: {\n        customIndicator: {\n            badQueryTemplate: \"sum(rate(http_request_duration_seconds_count{error=\\\"true\\\"}[{{ .Window }}]))\",\n            totalQueryTemplate: \"sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\",\n        },\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\npayments = chronosphere.Team(\"payments\", name=\"Payments\")\nblackhole = chronosphere.BlackholeAlertNotifier(\"blackhole\", name=\"Blackhole\")\nnp = chronosphere.NotificationPolicy(\"np\",\n    name=\"SLO policy\",\n    team_id=payments.id,\n    routes=[chronosphere.NotificationPolicyRouteArgs(\n        severity=\"warn\",\n        notifiers=[blackhole.id],\n    )])\ncollection = chronosphere.Collection(\"collection\",\n    name=\"Payments\",\n    team_id=payments.id)\nrequest_success = chronosphere.SLO(\"requestSuccess\",\n    name=\"payments request success\",\n    collection_id=collection.id,\n    notification_policy_id=np.id,\n    definition=chronosphere.SLODefinitionArgs(\n        objective=99.95,\n        time_window=chronosphere.SLODefinitionTimeWindowArgs(\n            duration=\"28d\",\n        ),\n        enable_burn_rate_alerting=True,\n    ),\n    sli=chronosphere.SLOSliArgs(\n        custom_indicator=chronosphere.SLOSliCustomIndicatorArgs(\n            bad_query_template=\"sum(rate(http_request_duration_seconds_count{error=\\\"true\\\"}[{{ .Window }}]))\",\n            total_query_template=\"sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\",\n        ),\n    ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var payments = new Pulumi.Team(\"payments\", new()\n    {\n        Name = \"Payments\",\n    });\n\n    var blackhole = new Pulumi.BlackholeAlertNotifier(\"blackhole\", new()\n    {\n        Name = \"Blackhole\",\n    });\n\n    var np = new Pulumi.NotificationPolicy(\"np\", new()\n    {\n        Name = \"SLO policy\",\n        TeamId = payments.Id,\n        Routes = new[]\n        {\n            new Pulumi.Inputs.NotificationPolicyRouteArgs\n            {\n                Severity = \"warn\",\n                Notifiers = new[]\n                {\n                    blackhole.Id,\n                },\n            },\n        },\n    });\n\n    var collection = new Pulumi.Collection(\"collection\", new()\n    {\n        Name = \"Payments\",\n        TeamId = payments.Id,\n    });\n\n    var requestSuccess = new Pulumi.SLO(\"requestSuccess\", new()\n    {\n        Name = \"payments request success\",\n        CollectionId = collection.Id,\n        NotificationPolicyId = np.Id,\n        Definition = new Pulumi.Inputs.SLODefinitionArgs\n        {\n            Objective = 99.95,\n            TimeWindow = new Pulumi.Inputs.SLODefinitionTimeWindowArgs\n            {\n                Duration = \"28d\",\n            },\n            EnableBurnRateAlerting = true,\n        },\n        Sli = new Pulumi.Inputs.SLOSliArgs\n        {\n            CustomIndicator = new Pulumi.Inputs.SLOSliCustomIndicatorArgs\n            {\n                BadQueryTemplate = \"sum(rate(http_request_duration_seconds_count{error=\\\"true\\\"}[{{ .Window }}]))\",\n                TotalQueryTemplate = \"sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\",\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpayments, err := chronosphere.NewTeam(ctx, \"payments\", \u0026chronosphere.TeamArgs{\n\t\t\tName: pulumi.String(\"Payments\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tblackhole, err := chronosphere.NewBlackholeAlertNotifier(ctx, \"blackhole\", \u0026chronosphere.BlackholeAlertNotifierArgs{\n\t\t\tName: pulumi.String(\"Blackhole\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnp, err := chronosphere.NewNotificationPolicy(ctx, \"np\", \u0026chronosphere.NotificationPolicyArgs{\n\t\t\tName:   pulumi.String(\"SLO policy\"),\n\t\t\tTeamId: payments.ID(),\n\t\t\tRoutes: chronosphere.NotificationPolicyRouteArray{\n\t\t\t\t\u0026chronosphere.NotificationPolicyRouteArgs{\n\t\t\t\t\tSeverity: pulumi.String(\"warn\"),\n\t\t\t\t\tNotifiers: pulumi.StringArray{\n\t\t\t\t\t\tblackhole.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcollection, err := chronosphere.NewCollection(ctx, \"collection\", \u0026chronosphere.CollectionArgs{\n\t\t\tName:   pulumi.String(\"Payments\"),\n\t\t\tTeamId: payments.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewSLO(ctx, \"requestSuccess\", \u0026chronosphere.SLOArgs{\n\t\t\tName:                 pulumi.String(\"payments request success\"),\n\t\t\tCollectionId:         collection.ID(),\n\t\t\tNotificationPolicyId: np.ID(),\n\t\t\tDefinition: \u0026chronosphere.SLODefinitionArgs{\n\t\t\t\tObjective: pulumi.Float64(99.95),\n\t\t\t\tTimeWindow: \u0026chronosphere.SLODefinitionTimeWindowArgs{\n\t\t\t\t\tDuration: pulumi.String(\"28d\"),\n\t\t\t\t},\n\t\t\t\tEnableBurnRateAlerting: pulumi.Bool(true),\n\t\t\t},\n\t\t\tSli: \u0026chronosphere.SLOSliArgs{\n\t\t\t\tCustomIndicator: \u0026chronosphere.SLOSliCustomIndicatorArgs{\n\t\t\t\t\tBadQueryTemplate:   pulumi.String(\"sum(rate(http_request_duration_seconds_count{error=\\\"true\\\"}[{{ .Window }}]))\"),\n\t\t\t\t\tTotalQueryTemplate: pulumi.String(\"sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Team;\nimport com.pulumi.chronosphere.TeamArgs;\nimport com.pulumi.chronosphere.BlackholeAlertNotifier;\nimport com.pulumi.chronosphere.BlackholeAlertNotifierArgs;\nimport com.pulumi.chronosphere.NotificationPolicy;\nimport com.pulumi.chronosphere.NotificationPolicyArgs;\nimport com.pulumi.chronosphere.inputs.NotificationPolicyRouteArgs;\nimport com.pulumi.chronosphere.Collection;\nimport com.pulumi.chronosphere.CollectionArgs;\nimport com.pulumi.chronosphere.SLO;\nimport com.pulumi.chronosphere.SLOArgs;\nimport com.pulumi.chronosphere.inputs.SLODefinitionArgs;\nimport com.pulumi.chronosphere.inputs.SLODefinitionTimeWindowArgs;\nimport com.pulumi.chronosphere.inputs.SLOSliArgs;\nimport com.pulumi.chronosphere.inputs.SLOSliCustomIndicatorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var payments = new Team(\"payments\", TeamArgs.builder()        \n            .name(\"Payments\")\n            .build());\n\n        var blackhole = new BlackholeAlertNotifier(\"blackhole\", BlackholeAlertNotifierArgs.builder()        \n            .name(\"Blackhole\")\n            .build());\n\n        var np = new NotificationPolicy(\"np\", NotificationPolicyArgs.builder()        \n            .name(\"SLO policy\")\n            .teamId(payments.id())\n            .routes(NotificationPolicyRouteArgs.builder()\n                .severity(\"warn\")\n                .notifiers(blackhole.id())\n                .build())\n            .build());\n\n        var collection = new Collection(\"collection\", CollectionArgs.builder()        \n            .name(\"Payments\")\n            .teamId(payments.id())\n            .build());\n\n        var requestSuccess = new SLO(\"requestSuccess\", SLOArgs.builder()        \n            .name(\"payments request success\")\n            .collectionId(collection.id())\n            .notificationPolicyId(np.id())\n            .definition(SLODefinitionArgs.builder()\n                .objective(99.95)\n                .timeWindow(SLODefinitionTimeWindowArgs.builder()\n                    .duration(\"28d\")\n                    .build())\n                .enableBurnRateAlerting(true)\n                .build())\n            .sli(SLOSliArgs.builder()\n                .customIndicator(SLOSliCustomIndicatorArgs.builder()\n                    .badQueryTemplate(\"sum(rate(http_request_duration_seconds_count{error=\\\"true\\\"}[{{ .Window }}]))\")\n                    .totalQueryTemplate(\"sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  payments:\n    type: chronosphere:Team\n    properties:\n      name: Payments\n  blackhole:\n    type: chronosphere:BlackholeAlertNotifier\n    properties:\n      name: Blackhole\n  np:\n    type: chronosphere:NotificationPolicy\n    properties:\n      name: SLO policy\n      teamId: ${payments.id}\n      routes:\n        - severity: warn\n          notifiers:\n            - ${blackhole.id}\n  collection:\n    type: chronosphere:Collection\n    properties:\n      name: Payments\n      teamId: ${payments.id}\n  requestSuccess:\n    type: chronosphere:SLO\n    properties:\n      name: payments request success\n      collectionId: ${collection.id}\n      notificationPolicyId: ${np.id}\n      definition:\n        objective: 99.95\n        timeWindow:\n          duration: 28d\n        enableBurnRateAlerting: true\n      sli:\n        customIndicator:\n          badQueryTemplate: sum(rate(http_request_duration_seconds_count{error=\"true\"}[{{ .Window }}]))\n          totalQueryTemplate: sum(rate(http_request_duration_seconds_count[{{ .Window }}]))\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "annotations": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Free-form key/value pairs included in notifications generated by this SLO. Templated against signal labels.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection that owns this SLO.\n"
                },
                "definition": {
                    "$ref": "#/types/chronosphere:index/SLODefinition:SLODefinition",
                    "description": "SLO definition specifying the objective, time window, and burn-rate alerting configuration.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Free-form description of the SLO.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional labels attached when this burn-rate alert fires. Can be used by notification policies to route different burn rates to different destinations.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Prometheus label name to match.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy used to route burn-rate alerts from this SLO. If omitted, the policy of the parent collection applies. Required if burn-rate alerting is enabled and the collection has no default policy.\n"
                },
                "signalGrouping": {
                    "$ref": "#/types/chronosphere:index/SLOSignalGrouping:SLOSignalGrouping",
                    "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                },
                "sli": {
                    "$ref": "#/types/chronosphere:index/SLOSli:SLOSli",
                    "description": "Service-level indicator (SLI) definition that produces the good/bad event ratio measured by this SLO.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the SLO. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "collectionId",
                "definition",
                "name",
                "sli",
                "slug"
            ],
            "inputProperties": {
                "annotations": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Free-form key/value pairs included in notifications generated by this SLO. Templated against signal labels.\n"
                },
                "collectionId": {
                    "type": "string",
                    "description": "ID of the collection that owns this SLO.\n"
                },
                "definition": {
                    "$ref": "#/types/chronosphere:index/SLODefinition:SLODefinition",
                    "description": "SLO definition specifying the objective, time window, and burn-rate alerting configuration.\n"
                },
                "description": {
                    "type": "string",
                    "description": "Free-form description of the SLO.\n"
                },
                "labels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional labels attached when this burn-rate alert fires. Can be used by notification policies to route different burn rates to different destinations.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Prometheus label name to match.\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "ID of the notification policy used to route burn-rate alerts from this SLO. If omitted, the policy of the parent collection applies. Required if burn-rate alerting is enabled and the collection has no default policy.\n"
                },
                "signalGrouping": {
                    "$ref": "#/types/chronosphere:index/SLOSignalGrouping:SLOSignalGrouping",
                    "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                },
                "sli": {
                    "$ref": "#/types/chronosphere:index/SLOSli:SLOSli",
                    "description": "Service-level indicator (SLI) definition that produces the good/bad event ratio measured by this SLO.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the SLO. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "collectionId",
                "definition",
                "name",
                "sli"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering SLO resources.\n",
                "properties": {
                    "annotations": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Free-form key/value pairs included in notifications generated by this SLO. Templated against signal labels.\n"
                    },
                    "collectionId": {
                        "type": "string",
                        "description": "ID of the collection that owns this SLO.\n"
                    },
                    "definition": {
                        "$ref": "#/types/chronosphere:index/SLODefinition:SLODefinition",
                        "description": "SLO definition specifying the objective, time window, and burn-rate alerting configuration.\n"
                    },
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the SLO.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Additional labels attached when this burn-rate alert fires. Can be used by notification policies to route different burn rates to different destinations.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Prometheus label name to match.\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "ID of the notification policy used to route burn-rate alerts from this SLO. If omitted, the policy of the parent collection applies. Required if burn-rate alerting is enabled and the collection has no default policy.\n"
                    },
                    "signalGrouping": {
                        "$ref": "#/types/chronosphere:index/SLOSignalGrouping:SLOSignalGrouping",
                        "description": "Controls how individual time series are grouped into signals for alerting purposes.\n"
                    },
                    "sli": {
                        "$ref": "#/types/chronosphere:index/SLOSli:SLOSli",
                        "description": "Service-level indicator (SLI) definition that produces the good/bad event ratio measured by this SLO.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the SLO. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/serviceAccount:ServiceAccount": {
            "description": "A non-human identity used to authenticate API requests against Chronosphere. An API token is generated at creation and returned only once; store it securely, as a lost token requires recreating the service account.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst unrestricted = new chronosphere.ServiceAccount(\"unrestricted\", {\n    name: \"ci-deployer\",\n    unrestricted: true,\n});\nconst restrictedReadOnly = new chronosphere.ServiceAccount(\"restrictedReadOnly\", {\n    name: \"metrics-reader\",\n    restriction: {\n        labels: {\n            team: \"platform\",\n        },\n        permission: \"READ_ONLY\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nunrestricted = chronosphere.ServiceAccount(\"unrestricted\",\n    name=\"ci-deployer\",\n    unrestricted=True)\nrestricted_read_only = chronosphere.ServiceAccount(\"restrictedReadOnly\",\n    name=\"metrics-reader\",\n    restriction=chronosphere.ServiceAccountRestrictionArgs(\n        labels={\n            \"team\": \"platform\",\n        },\n        permission=\"READ_ONLY\",\n    ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var unrestricted = new Pulumi.ServiceAccount(\"unrestricted\", new()\n    {\n        Name = \"ci-deployer\",\n        Unrestricted = true,\n    });\n\n    var restrictedReadOnly = new Pulumi.ServiceAccount(\"restrictedReadOnly\", new()\n    {\n        Name = \"metrics-reader\",\n        Restriction = new Pulumi.Inputs.ServiceAccountRestrictionArgs\n        {\n            Labels = \n            {\n                { \"team\", \"platform\" },\n            },\n            Permission = \"READ_ONLY\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewServiceAccount(ctx, \"unrestricted\", \u0026chronosphere.ServiceAccountArgs{\n\t\t\tName:         pulumi.String(\"ci-deployer\"),\n\t\t\tUnrestricted: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewServiceAccount(ctx, \"restrictedReadOnly\", \u0026chronosphere.ServiceAccountArgs{\n\t\t\tName: pulumi.String(\"metrics-reader\"),\n\t\t\tRestriction: \u0026chronosphere.ServiceAccountRestrictionArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"team\": pulumi.String(\"platform\"),\n\t\t\t\t},\n\t\t\t\tPermission: pulumi.String(\"READ_ONLY\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ServiceAccount;\nimport com.pulumi.chronosphere.ServiceAccountArgs;\nimport com.pulumi.chronosphere.inputs.ServiceAccountRestrictionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var unrestricted = new ServiceAccount(\"unrestricted\", ServiceAccountArgs.builder()        \n            .name(\"ci-deployer\")\n            .unrestricted(true)\n            .build());\n\n        var restrictedReadOnly = new ServiceAccount(\"restrictedReadOnly\", ServiceAccountArgs.builder()        \n            .name(\"metrics-reader\")\n            .restriction(ServiceAccountRestrictionArgs.builder()\n                .labels(Map.of(\"team\", \"platform\"))\n                .permission(\"READ_ONLY\")\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  unrestricted:\n    type: chronosphere:ServiceAccount\n    properties:\n      name: ci-deployer\n      unrestricted: true\n  restrictedReadOnly:\n    type: chronosphere:ServiceAccount\n    properties:\n      name: metrics-reader\n      restriction:\n        labels:\n          team: platform\n        permission: READ_ONLY\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "email": {
                    "type": "string",
                    "description": "Read-only: synthetic email address assigned to the service account by the server.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the service account. Immutable after creation.\n"
                },
                "restriction": {
                    "$ref": "#/types/chronosphere:index/ServiceAccountRestriction:ServiceAccountRestriction",
                    "description": "Restricts the service account to a specific permission and optional metric label scope. Exactly one of `unrestricted` or `restriction` must be set.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the service account. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "token": {
                    "type": "string",
                    "description": "Read-only: API token generated for the service account. Returned only at creation time; store it securely. If lost, the service account must be recreated.\n",
                    "secret": true
                },
                "unrestricted": {
                    "type": "boolean",
                    "description": "If true, grants the service account access to all Chronosphere APIs within the access controls defined by team membership. Exactly one of `unrestricted` or `restriction` must be set.\n"
                }
            },
            "required": [
                "email",
                "name",
                "slug",
                "token"
            ],
            "inputProperties": {
                "name": {
                    "type": "string",
                    "description": "Display name of the service account. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "restriction": {
                    "$ref": "#/types/chronosphere:index/ServiceAccountRestriction:ServiceAccountRestriction",
                    "description": "Restricts the service account to a specific permission and optional metric label scope. Exactly one of `unrestricted` or `restriction` must be set.\n",
                    "willReplaceOnChanges": true
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the service account. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "unrestricted": {
                    "type": "boolean",
                    "description": "If true, grants the service account access to all Chronosphere APIs within the access controls defined by team membership. Exactly one of `unrestricted` or `restriction` must be set.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ServiceAccount resources.\n",
                "properties": {
                    "email": {
                        "type": "string",
                        "description": "Read-only: synthetic email address assigned to the service account by the server.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the service account. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "restriction": {
                        "$ref": "#/types/chronosphere:index/ServiceAccountRestriction:ServiceAccountRestriction",
                        "description": "Restricts the service account to a specific permission and optional metric label scope. Exactly one of `unrestricted` or `restriction` must be set.\n",
                        "willReplaceOnChanges": true
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the service account. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "token": {
                        "type": "string",
                        "description": "Read-only: API token generated for the service account. Returned only at creation time; store it securely. If lost, the service account must be recreated.\n",
                        "secret": true
                    },
                    "unrestricted": {
                        "type": "boolean",
                        "description": "If true, grants the service account access to all Chronosphere APIs within the access controls defined by team membership. Exactly one of `unrestricted` or `restriction` must be set.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/serviceAttribute:ServiceAttribute": {
            "description": "Associates metadata with an existing service, such as a human-readable name, description, owning team, and default notification policy. The service itself must already exist; this resource only attaches attributes to it.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst gateway = new chronosphere.ServiceAttribute(\"gateway\", {\n    description: \"Edge API gateway\",\n    name: \"Gateway\",\n    serviceSlug: \"gateway\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ngateway = chronosphere.ServiceAttribute(\"gateway\",\n    description=\"Edge API gateway\",\n    name=\"Gateway\",\n    service_slug=\"gateway\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var gateway = new Pulumi.ServiceAttribute(\"gateway\", new()\n    {\n        Description = \"Edge API gateway\",\n        Name = \"Gateway\",\n        ServiceSlug = \"gateway\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewServiceAttribute(ctx, \"gateway\", \u0026chronosphere.ServiceAttributeArgs{\n\t\t\tDescription: pulumi.String(\"Edge API gateway\"),\n\t\t\tName:        pulumi.String(\"Gateway\"),\n\t\t\tServiceSlug: pulumi.String(\"gateway\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ServiceAttribute;\nimport com.pulumi.chronosphere.ServiceAttributeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var gateway = new ServiceAttribute(\"gateway\", ServiceAttributeArgs.builder()        \n            .description(\"Edge API gateway\")\n            .name(\"Gateway\")\n            .serviceSlug(\"gateway\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  gateway:\n    type: chronosphere:ServiceAttribute\n    properties:\n      description: Edge API gateway\n      name: Gateway\n      serviceSlug: gateway\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Human-readable description of the service\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the service\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "Notification policy ID for alerts\n"
                },
                "serviceSlug": {
                    "type": "string",
                    "description": "The slug of the service to associate attributes with\n"
                },
                "teamId": {
                    "type": "string",
                    "description": "Team that owns the service\n"
                }
            },
            "required": [
                "serviceSlug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Human-readable description of the service\n"
                },
                "name": {
                    "type": "string",
                    "description": "Name of the service\n"
                },
                "notificationPolicyId": {
                    "type": "string",
                    "description": "Notification policy ID for alerts\n"
                },
                "serviceSlug": {
                    "type": "string",
                    "description": "The slug of the service to associate attributes with\n",
                    "willReplaceOnChanges": true
                },
                "teamId": {
                    "type": "string",
                    "description": "Team that owns the service\n"
                }
            },
            "requiredInputs": [
                "serviceSlug"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering ServiceAttribute resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Human-readable description of the service\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the service\n"
                    },
                    "notificationPolicyId": {
                        "type": "string",
                        "description": "Notification policy ID for alerts\n"
                    },
                    "serviceSlug": {
                        "type": "string",
                        "description": "The slug of the service to associate attributes with\n",
                        "willReplaceOnChanges": true
                    },
                    "teamId": {
                        "type": "string",
                        "description": "Team that owns the service\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/slackAlertNotifier:SlackAlertNotifier": {
            "description": "Slack notifier that delivers monitor signals to a Slack channel via an incoming webhook. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst slack = new chronosphere.SlackAlertNotifier(\"slack\", {\n    apiUrl: \"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n    channel: \"alerts\",\n    name: \"Slack Notifier\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nslack = chronosphere.SlackAlertNotifier(\"slack\",\n    api_url=\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n    channel=\"alerts\",\n    name=\"Slack Notifier\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var slack = new Pulumi.SlackAlertNotifier(\"slack\", new()\n    {\n        ApiUrl = \"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n        Channel = \"alerts\",\n        Name = \"Slack Notifier\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewSlackAlertNotifier(ctx, \"slack\", \u0026chronosphere.SlackAlertNotifierArgs{\n\t\t\tApiUrl:  pulumi.String(\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\"),\n\t\t\tChannel: pulumi.String(\"alerts\"),\n\t\t\tName:    pulumi.String(\"Slack Notifier\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.SlackAlertNotifier;\nimport com.pulumi.chronosphere.SlackAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var slack = new SlackAlertNotifier(\"slack\", SlackAlertNotifierArgs.builder()        \n            .apiUrl(\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\")\n            .channel(\"alerts\")\n            .name(\"Slack Notifier\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  slack:\n    type: chronosphere:SlackAlertNotifier\n    properties:\n      apiUrl: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\n      channel: alerts\n      name: Slack Notifier\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "actions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SlackAlertNotifierAction:SlackAlertNotifierAction"
                    },
                    "description": "Interactive buttons appended to the Slack message. See https://api.slack.com/reference/messaging/attachments#action_fields.\n"
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Slack incoming webhook URL that receives the notifications. Treat this as a secret.\n",
                    "secret": true
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth.\n"
                },
                "callbackId": {
                    "type": "string",
                    "description": "Slack callback ID used to identify the source of interactive actions.\n"
                },
                "channel": {
                    "type": "string",
                    "description": "Slack channel to post notifications to (e.g. `#alerts`).\n"
                },
                "color": {
                    "type": "string",
                    "description": "Color of the attachment border. Hex code or one of `good`, `warning`, `danger`. Supports Go templating.\n"
                },
                "fallback": {
                    "type": "string",
                    "description": "Plain-text fallback shown in notifications and clients that don't render attachments. Supports Go templating.\n"
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SlackAlertNotifierField:SlackAlertNotifierField"
                    },
                    "description": "Structured field/value pairs rendered as a table in the attachment.\n"
                },
                "footer": {
                    "type": "string",
                    "description": "Footer text shown at the bottom of the attachment. Supports Go templating.\n"
                },
                "iconEmoji": {
                    "type": "string",
                    "description": "Slack emoji to use as the bot avatar (e.g. `:fire:`). Mutually exclusive with `icon_url` at Slack.\n"
                },
                "iconUrl": {
                    "type": "string",
                    "description": "URL of an image to use as the bot avatar.\n"
                },
                "imageUrl": {
                    "type": "string",
                    "description": "URL of an image attached to the message.\n"
                },
                "linkNames": {
                    "type": "boolean",
                    "description": "If true, find and link channel names and usernames in the message text.\n"
                },
                "mrkdwnIns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Attachment fields in which Slack parses `mrkdwn` formatting. Common values: `pretext`, `text`, `fields`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Identifier sent back to Slack when the button is clicked.\n"
                },
                "pretext": {
                    "type": "string",
                    "description": "Text shown above the attachment. Supports Go templating.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "shortFields": {
                    "type": "boolean",
                    "description": "If true, render all `fields` with `short: true` regardless of per-field setting.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "text": {
                    "type": "string",
                    "description": "Label shown on the button.\n"
                },
                "thumbUrl": {
                    "type": "string",
                    "description": "URL of a small thumbnail image shown to the right of the attachment.\n"
                },
                "title": {
                    "type": "string",
                    "description": "Bold heading shown above the value.\n"
                },
                "titleLink": {
                    "type": "string",
                    "description": "URL the title links to when clicked.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "username": {
                    "type": "string",
                    "description": "Display name of the bot posting the message.\n"
                }
            },
            "required": [
                "apiUrl",
                "channel",
                "name",
                "slug"
            ],
            "inputProperties": {
                "actions": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SlackAlertNotifierAction:SlackAlertNotifierAction"
                    },
                    "description": "Interactive buttons appended to the Slack message. See https://api.slack.com/reference/messaging/attachments#action_fields.\n"
                },
                "apiUrl": {
                    "type": "string",
                    "description": "Slack incoming webhook URL that receives the notifications. Treat this as a secret.\n",
                    "secret": true
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth.\n"
                },
                "callbackId": {
                    "type": "string",
                    "description": "Slack callback ID used to identify the source of interactive actions.\n"
                },
                "channel": {
                    "type": "string",
                    "description": "Slack channel to post notifications to (e.g. `#alerts`).\n"
                },
                "color": {
                    "type": "string",
                    "description": "Color of the attachment border. Hex code or one of `good`, `warning`, `danger`. Supports Go templating.\n"
                },
                "fallback": {
                    "type": "string",
                    "description": "Plain-text fallback shown in notifications and clients that don't render attachments. Supports Go templating.\n"
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/SlackAlertNotifierField:SlackAlertNotifierField"
                    },
                    "description": "Structured field/value pairs rendered as a table in the attachment.\n"
                },
                "footer": {
                    "type": "string",
                    "description": "Footer text shown at the bottom of the attachment. Supports Go templating.\n"
                },
                "iconEmoji": {
                    "type": "string",
                    "description": "Slack emoji to use as the bot avatar (e.g. `:fire:`). Mutually exclusive with `icon_url` at Slack.\n"
                },
                "iconUrl": {
                    "type": "string",
                    "description": "URL of an image to use as the bot avatar.\n"
                },
                "imageUrl": {
                    "type": "string",
                    "description": "URL of an image attached to the message.\n"
                },
                "linkNames": {
                    "type": "boolean",
                    "description": "If true, find and link channel names and usernames in the message text.\n"
                },
                "mrkdwnIns": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Attachment fields in which Slack parses `mrkdwn` formatting. Common values: `pretext`, `text`, `fields`.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Identifier sent back to Slack when the button is clicked.\n"
                },
                "pretext": {
                    "type": "string",
                    "description": "Text shown above the attachment. Supports Go templating.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "shortFields": {
                    "type": "boolean",
                    "description": "If true, render all `fields` with `short: true` regardless of per-field setting.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "text": {
                    "type": "string",
                    "description": "Label shown on the button.\n"
                },
                "thumbUrl": {
                    "type": "string",
                    "description": "URL of a small thumbnail image shown to the right of the attachment.\n"
                },
                "title": {
                    "type": "string",
                    "description": "Bold heading shown above the value.\n"
                },
                "titleLink": {
                    "type": "string",
                    "description": "URL the title links to when clicked.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "username": {
                    "type": "string",
                    "description": "Display name of the bot posting the message.\n"
                }
            },
            "requiredInputs": [
                "apiUrl",
                "channel",
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering SlackAlertNotifier resources.\n",
                "properties": {
                    "actions": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/SlackAlertNotifierAction:SlackAlertNotifierAction"
                        },
                        "description": "Interactive buttons appended to the Slack message. See https://api.slack.com/reference/messaging/attachments#action_fields.\n"
                    },
                    "apiUrl": {
                        "type": "string",
                        "description": "Slack incoming webhook URL that receives the notifications. Treat this as a secret.\n",
                        "secret": true
                    },
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the webhook.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth.\n"
                    },
                    "callbackId": {
                        "type": "string",
                        "description": "Slack callback ID used to identify the source of interactive actions.\n"
                    },
                    "channel": {
                        "type": "string",
                        "description": "Slack channel to post notifications to (e.g. `#alerts`).\n"
                    },
                    "color": {
                        "type": "string",
                        "description": "Color of the attachment border. Hex code or one of `good`, `warning`, `danger`. Supports Go templating.\n"
                    },
                    "fallback": {
                        "type": "string",
                        "description": "Plain-text fallback shown in notifications and clients that don't render attachments. Supports Go templating.\n"
                    },
                    "fields": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/SlackAlertNotifierField:SlackAlertNotifierField"
                        },
                        "description": "Structured field/value pairs rendered as a table in the attachment.\n"
                    },
                    "footer": {
                        "type": "string",
                        "description": "Footer text shown at the bottom of the attachment. Supports Go templating.\n"
                    },
                    "iconEmoji": {
                        "type": "string",
                        "description": "Slack emoji to use as the bot avatar (e.g. `:fire:`). Mutually exclusive with `icon_url` at Slack.\n"
                    },
                    "iconUrl": {
                        "type": "string",
                        "description": "URL of an image to use as the bot avatar.\n"
                    },
                    "imageUrl": {
                        "type": "string",
                        "description": "URL of an image attached to the message.\n"
                    },
                    "linkNames": {
                        "type": "boolean",
                        "description": "If true, find and link channel names and usernames in the message text.\n"
                    },
                    "mrkdwnIns": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Attachment fields in which Slack parses `mrkdwn` formatting. Common values: `pretext`, `text`, `fields`.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Identifier sent back to Slack when the button is clicked.\n"
                    },
                    "pretext": {
                        "type": "string",
                        "description": "Text shown above the attachment. Supports Go templating.\n"
                    },
                    "proxyUrl": {
                        "type": "string",
                        "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                        "deprecationMessage": "custom proxy URLs are not supported"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "shortFields": {
                        "type": "boolean",
                        "description": "If true, render all `fields` with `short: true` regardless of per-field setting.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "text": {
                        "type": "string",
                        "description": "Label shown on the button.\n"
                    },
                    "thumbUrl": {
                        "type": "string",
                        "description": "URL of a small thumbnail image shown to the right of the attachment.\n"
                    },
                    "title": {
                        "type": "string",
                        "description": "Bold heading shown above the value.\n"
                    },
                    "titleLink": {
                        "type": "string",
                        "description": "URL the title links to when clicked.\n"
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                    },
                    "username": {
                        "type": "string",
                        "description": "Display name of the bot posting the message.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/slackExternalConnection:SlackExternalConnection": {
            "description": "Workspace-scoped Slack credentials that downstream notifiers and LogScale actions can reference. Centralizes webhook URLs and bot tokens so they aren't duplicated across notifiers; modern equivalent of the per-notifier credentials.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst slack = new chronosphere.SlackExternalConnection(\"slack\", {\n    apiUrl: \"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n    name: \"Slack\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nslack = chronosphere.SlackExternalConnection(\"slack\",\n    api_url=\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n    name=\"Slack\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var slack = new Pulumi.SlackExternalConnection(\"slack\", new()\n    {\n        ApiUrl = \"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\",\n        Name = \"Slack\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewSlackExternalConnection(ctx, \"slack\", \u0026chronosphere.SlackExternalConnectionArgs{\n\t\t\tApiUrl: pulumi.String(\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\"),\n\t\t\tName:   pulumi.String(\"Slack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.SlackExternalConnection;\nimport com.pulumi.chronosphere.SlackExternalConnectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var slack = new SlackExternalConnection(\"slack\", SlackExternalConnectionArgs.builder()        \n            .apiUrl(\"https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\")\n            .name(\"Slack\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  slack:\n    type: chronosphere:SlackExternalConnection\n    properties:\n      apiUrl: https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX\n      name: Slack\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "apiUrl": {
                    "type": "string",
                    "description": "Slack incoming webhook URL used to deliver messages. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "token": {
                    "type": "string",
                    "description": "Slack bot or app token used to authenticate API calls when posting messages. Treat as a secret.\n",
                    "secret": true
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "apiUrl": {
                    "type": "string",
                    "description": "Slack incoming webhook URL used to deliver messages. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "token": {
                    "type": "string",
                    "description": "Slack bot or app token used to authenticate API calls when posting messages. Treat as a secret.\n",
                    "secret": true
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering SlackExternalConnection resources.\n",
                "properties": {
                    "apiUrl": {
                        "type": "string",
                        "description": "Slack incoming webhook URL used to deliver messages. Treat as a secret.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the external connection.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "token": {
                        "type": "string",
                        "description": "Slack bot or app token used to authenticate API calls when posting messages. Treat as a secret.\n",
                        "secret": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/team:Team": {
            "description": "A named group of users that can own collections, buckets, and other resources. Teams scope access control and serve as the ownership unit for resources across the platform.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst platform = new chronosphere.Team(\"platform\", {\n    description: \"Platform engineering team\",\n    name: \"Platform\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nplatform = chronosphere.Team(\"platform\",\n    description=\"Platform engineering team\",\n    name=\"Platform\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var platform = new Pulumi.Team(\"platform\", new()\n    {\n        Description = \"Platform engineering team\",\n        Name = \"Platform\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewTeam(ctx, \"platform\", \u0026chronosphere.TeamArgs{\n\t\t\tDescription: pulumi.String(\"Platform engineering team\"),\n\t\t\tName:        pulumi.String(\"Platform\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.Team;\nimport com.pulumi.chronosphere.TeamArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var platform = new Team(\"platform\", TeamArgs.builder()        \n            .description(\"Platform engineering team\")\n            .name(\"Platform\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  platform:\n    type: chronosphere:Team\n    properties:\n      description: Platform engineering team\n      name: Platform\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the team.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the team. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the team. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "userEmails": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Unordered set of email addresses identifying the users who are members of this team.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "description": {
                    "type": "string",
                    "description": "Free-form description of the team.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the team. Can be changed after creation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the team. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "userEmails": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "description": "Unordered set of email addresses identifying the users who are members of this team.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering Team resources.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Free-form description of the team.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the team. Can be changed after creation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the team. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "userEmails": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Unordered set of email addresses identifying the users who are members of this team.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/traceJaegerRemoteSamplingStrategy:TraceJaegerRemoteSamplingStrategy": {
            "description": "Per-service Jaeger remote sampling strategy (probabilistic, rate-limiting, or per-operation) served to instrumented applications so they can sample traces at the configured rate.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst probabilistic = new chronosphere.TraceJaegerRemoteSamplingStrategy(\"probabilistic\", {\n    appliedStrategy: {\n        probabilisticStrategy: {\n            samplingRate: 0.01,\n        },\n    },\n    name: \"Probabilistic sampling for service A\",\n    serviceName: \"service-a\",\n});\nconst rateLimited = new chronosphere.TraceJaegerRemoteSamplingStrategy(\"rateLimited\", {\n    appliedStrategy: {\n        rateLimitingStrategy: {\n            maxTracesPerSecond: 2,\n        },\n    },\n    name: \"Rate-limited sampling for service B\",\n    serviceName: \"service-b\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nprobabilistic = chronosphere.TraceJaegerRemoteSamplingStrategy(\"probabilistic\",\n    applied_strategy=chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs(\n        probabilistic_strategy=chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategyArgs(\n            sampling_rate=0.01,\n        ),\n    ),\n    name=\"Probabilistic sampling for service A\",\n    service_name=\"service-a\")\nrate_limited = chronosphere.TraceJaegerRemoteSamplingStrategy(\"rateLimited\",\n    applied_strategy=chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs(\n        rate_limiting_strategy=chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategyArgs(\n            max_traces_per_second=2,\n        ),\n    ),\n    name=\"Rate-limited sampling for service B\",\n    service_name=\"service-b\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var probabilistic = new Pulumi.TraceJaegerRemoteSamplingStrategy(\"probabilistic\", new()\n    {\n        AppliedStrategy = new Pulumi.Inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs\n        {\n            ProbabilisticStrategy = new Pulumi.Inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategyArgs\n            {\n                SamplingRate = 0.01,\n            },\n        },\n        Name = \"Probabilistic sampling for service A\",\n        ServiceName = \"service-a\",\n    });\n\n    var rateLimited = new Pulumi.TraceJaegerRemoteSamplingStrategy(\"rateLimited\", new()\n    {\n        AppliedStrategy = new Pulumi.Inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs\n        {\n            RateLimitingStrategy = new Pulumi.Inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategyArgs\n            {\n                MaxTracesPerSecond = 2,\n            },\n        },\n        Name = \"Rate-limited sampling for service B\",\n        ServiceName = \"service-b\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewTraceJaegerRemoteSamplingStrategy(ctx, \"probabilistic\", \u0026chronosphere.TraceJaegerRemoteSamplingStrategyArgs{\n\t\t\tAppliedStrategy: \u0026chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs{\n\t\t\t\tProbabilisticStrategy: \u0026chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategyArgs{\n\t\t\t\t\tSamplingRate: pulumi.Float64(0.01),\n\t\t\t\t},\n\t\t\t},\n\t\t\tName:        pulumi.String(\"Probabilistic sampling for service A\"),\n\t\t\tServiceName: pulumi.String(\"service-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewTraceJaegerRemoteSamplingStrategy(ctx, \"rateLimited\", \u0026chronosphere.TraceJaegerRemoteSamplingStrategyArgs{\n\t\t\tAppliedStrategy: \u0026chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs{\n\t\t\t\tRateLimitingStrategy: \u0026chronosphere.TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategyArgs{\n\t\t\t\t\tMaxTracesPerSecond: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t\tName:        pulumi.String(\"Rate-limited sampling for service B\"),\n\t\t\tServiceName: pulumi.String(\"service-b\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.TraceJaegerRemoteSamplingStrategy;\nimport com.pulumi.chronosphere.TraceJaegerRemoteSamplingStrategyArgs;\nimport com.pulumi.chronosphere.inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs;\nimport com.pulumi.chronosphere.inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategyArgs;\nimport com.pulumi.chronosphere.inputs.TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var probabilistic = new TraceJaegerRemoteSamplingStrategy(\"probabilistic\", TraceJaegerRemoteSamplingStrategyArgs.builder()        \n            .appliedStrategy(TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs.builder()\n                .probabilisticStrategy(TraceJaegerRemoteSamplingStrategyAppliedStrategyProbabilisticStrategyArgs.builder()\n                    .samplingRate(0.01)\n                    .build())\n                .build())\n            .name(\"Probabilistic sampling for service A\")\n            .serviceName(\"service-a\")\n            .build());\n\n        var rateLimited = new TraceJaegerRemoteSamplingStrategy(\"rateLimited\", TraceJaegerRemoteSamplingStrategyArgs.builder()        \n            .appliedStrategy(TraceJaegerRemoteSamplingStrategyAppliedStrategyArgs.builder()\n                .rateLimitingStrategy(TraceJaegerRemoteSamplingStrategyAppliedStrategyRateLimitingStrategyArgs.builder()\n                    .maxTracesPerSecond(2)\n                    .build())\n                .build())\n            .name(\"Rate-limited sampling for service B\")\n            .serviceName(\"service-b\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  probabilistic:\n    type: chronosphere:TraceJaegerRemoteSamplingStrategy\n    properties:\n      appliedStrategy:\n        probabilisticStrategy:\n          samplingRate: 0.01\n      name: Probabilistic sampling for service A\n      serviceName: service-a\n  rateLimited:\n    type: chronosphere:TraceJaegerRemoteSamplingStrategy\n    properties:\n      appliedStrategy:\n        rateLimitingStrategy:\n          maxTracesPerSecond: 2\n      name: Rate-limited sampling for service B\n      serviceName: service-b\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "appliedStrategy": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategy",
                    "description": "Sampling strategy returned to the Jaeger client. Exactly one of `probabilistic_strategy`, `rate_limiting_strategy`, or `per_operation_strategies` must be set.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the Jaeger remote sampling strategy.\n"
                },
                "serviceName": {
                    "type": "string",
                    "description": "Value of `service.name` the strategy applies to. Jaeger SDK clients reporting under this service receive this sampling configuration.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the Jaeger remote sampling strategy. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "appliedStrategy",
                "name",
                "serviceName",
                "slug"
            ],
            "inputProperties": {
                "appliedStrategy": {
                    "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategy",
                    "description": "Sampling strategy returned to the Jaeger client. Exactly one of `probabilistic_strategy`, `rate_limiting_strategy`, or `per_operation_strategies` must be set.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the Jaeger remote sampling strategy.\n"
                },
                "serviceName": {
                    "type": "string",
                    "description": "Value of `service.name` the strategy applies to. Jaeger SDK clients reporting under this service receive this sampling configuration.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the Jaeger remote sampling strategy. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "appliedStrategy",
                "name",
                "serviceName"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering TraceJaegerRemoteSamplingStrategy resources.\n",
                "properties": {
                    "appliedStrategy": {
                        "$ref": "#/types/chronosphere:index/TraceJaegerRemoteSamplingStrategyAppliedStrategy:TraceJaegerRemoteSamplingStrategyAppliedStrategy",
                        "description": "Sampling strategy returned to the Jaeger client. Exactly one of `probabilistic_strategy`, `rate_limiting_strategy`, or `per_operation_strategies` must be set.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the Jaeger remote sampling strategy.\n"
                    },
                    "serviceName": {
                        "type": "string",
                        "description": "Value of `service.name` the strategy applies to. Jaeger SDK clients reporting under this service receive this sampling configuration.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the Jaeger remote sampling strategy. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/traceMetricsRule:TraceMetricsRule": {
            "description": "A rule that extracts a histogram metric from spans matching a trace filter, with configurable group-by keys and histogram buckets.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst paymentsLatency = new chronosphere.TraceMetricsRule(\"paymentsLatency\", {\n    groupBies: [\"operation\"],\n    histogramBucketsSeconds: [\n        0.1,\n        0.5,\n        1,\n        2,\n        5,\n    ],\n    metricLabels: {\n        service: \"payments\",\n    },\n    metricName: \"payments_request_duration\",\n    name: \"Payments service latency\",\n    slug: \"payments-latency\",\n    traceFilter: {\n        spans: [{\n            matchType: \"include\",\n            service: {\n                match: \"exact\",\n                value: \"payments\",\n            },\n        }],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\npayments_latency = chronosphere.TraceMetricsRule(\"paymentsLatency\",\n    group_bies=[\"operation\"],\n    histogram_buckets_seconds=[\n        0.1,\n        0.5,\n        1,\n        2,\n        5,\n    ],\n    metric_labels={\n        \"service\": \"payments\",\n    },\n    metric_name=\"payments_request_duration\",\n    name=\"Payments service latency\",\n    slug=\"payments-latency\",\n    trace_filter=chronosphere.TraceMetricsRuleTraceFilterArgs(\n        spans=[chronosphere.TraceMetricsRuleTraceFilterSpanArgs(\n            match_type=\"include\",\n            service=chronosphere.TraceMetricsRuleTraceFilterSpanServiceArgs(\n                match=\"exact\",\n                value=\"payments\",\n            ),\n        )],\n    ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var paymentsLatency = new Pulumi.TraceMetricsRule(\"paymentsLatency\", new()\n    {\n        GroupBies = new[]\n        {\n            \"operation\",\n        },\n        HistogramBucketsSeconds = new[]\n        {\n            0.1,\n            0.5,\n            1,\n            2,\n            5,\n        },\n        MetricLabels = \n        {\n            { \"service\", \"payments\" },\n        },\n        MetricName = \"payments_request_duration\",\n        Name = \"Payments service latency\",\n        Slug = \"payments-latency\",\n        TraceFilter = new Pulumi.Inputs.TraceMetricsRuleTraceFilterArgs\n        {\n            Spans = new[]\n            {\n                new Pulumi.Inputs.TraceMetricsRuleTraceFilterSpanArgs\n                {\n                    MatchType = \"include\",\n                    Service = new Pulumi.Inputs.TraceMetricsRuleTraceFilterSpanServiceArgs\n                    {\n                        Match = \"exact\",\n                        Value = \"payments\",\n                    },\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewTraceMetricsRule(ctx, \"paymentsLatency\", \u0026chronosphere.TraceMetricsRuleArgs{\n\t\t\tGroupBies: chronosphere.TraceMetricsRuleGroupByArray{\n\t\t\t\t\"operation\",\n\t\t\t},\n\t\t\tHistogramBucketsSeconds: pulumi.Float64Array{\n\t\t\t\tpulumi.Float64(0.1),\n\t\t\t\tpulumi.Float64(0.5),\n\t\t\t\tpulumi.Float64(1),\n\t\t\t\tpulumi.Float64(2),\n\t\t\t\tpulumi.Float64(5),\n\t\t\t},\n\t\t\tMetricLabels: pulumi.StringMap{\n\t\t\t\t\"service\": pulumi.String(\"payments\"),\n\t\t\t},\n\t\t\tMetricName: pulumi.String(\"payments_request_duration\"),\n\t\t\tName:       pulumi.String(\"Payments service latency\"),\n\t\t\tSlug:       pulumi.String(\"payments-latency\"),\n\t\t\tTraceFilter: \u0026chronosphere.TraceMetricsRuleTraceFilterArgs{\n\t\t\t\tSpans: chronosphere.TraceMetricsRuleTraceFilterSpanArray{\n\t\t\t\t\t\u0026chronosphere.TraceMetricsRuleTraceFilterSpanArgs{\n\t\t\t\t\t\tMatchType: pulumi.String(\"include\"),\n\t\t\t\t\t\tService: \u0026chronosphere.TraceMetricsRuleTraceFilterSpanServiceArgs{\n\t\t\t\t\t\t\tMatch: pulumi.String(\"exact\"),\n\t\t\t\t\t\t\tValue: pulumi.String(\"payments\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.TraceMetricsRule;\nimport com.pulumi.chronosphere.TraceMetricsRuleArgs;\nimport com.pulumi.chronosphere.inputs.TraceMetricsRuleTraceFilterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var paymentsLatency = new TraceMetricsRule(\"paymentsLatency\", TraceMetricsRuleArgs.builder()        \n            .groupBies(\"operation\")\n            .histogramBucketsSeconds(            \n                0.1,\n                0.5,\n                1,\n                2,\n                5)\n            .metricLabels(Map.of(\"service\", \"payments\"))\n            .metricName(\"payments_request_duration\")\n            .name(\"Payments service latency\")\n            .slug(\"payments-latency\")\n            .traceFilter(TraceMetricsRuleTraceFilterArgs.builder()\n                .spans(TraceMetricsRuleTraceFilterSpanArgs.builder()\n                    .matchType(\"include\")\n                    .service(TraceMetricsRuleTraceFilterSpanServiceArgs.builder()\n                        .match(\"exact\")\n                        .value(\"payments\")\n                        .build())\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  paymentsLatency:\n    type: chronosphere:TraceMetricsRule\n    properties:\n      groupBies:\n        - operation\n      histogramBucketsSeconds:\n        - 0.1\n        - 0.5\n        - 1\n        - 2\n        - 5\n      metricLabels:\n        service: payments\n      metricName: payments_request_duration\n      name: Payments service latency\n      slug: payments-latency\n      traceFilter:\n        spans:\n          - matchType: include\n            service:\n              match: exact\n              value: payments\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "groupBies": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleGroupBy:TraceMetricsRuleGroupBy"
                    },
                    "description": "Span attributes to project into metric labels. Each entry maps a key on the matched span to a label on the resulting metric series.\n"
                },
                "histogramBucketsSeconds": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "description": "Histogram bucket upper bounds in seconds for the generated span-duration histogram metric.\n"
                },
                "metricLabels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Static key/value labels added to every metric series emitted by the rule.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Base name of the generated Prometheus metrics emitted by this rule.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the trace metrics rule.\n"
                },
                "scopeFilter": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilter:TraceMetricsRuleScopeFilter",
                    "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the trace metrics rule. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "traceFilter": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilter:TraceMetricsRuleTraceFilter",
                    "description": "Filter that selects traces and spans. A trace matches when its trace-level conditions hold and every `span` block is satisfied by at least one span in the trace.\n"
                }
            },
            "required": [
                "metricName",
                "name",
                "slug",
                "traceFilter"
            ],
            "inputProperties": {
                "groupBies": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleGroupBy:TraceMetricsRuleGroupBy"
                    },
                    "description": "Span attributes to project into metric labels. Each entry maps a key on the matched span to a label on the resulting metric series.\n"
                },
                "histogramBucketsSeconds": {
                    "type": "array",
                    "items": {
                        "type": "number"
                    },
                    "description": "Histogram bucket upper bounds in seconds for the generated span-duration histogram metric.\n"
                },
                "metricLabels": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Static key/value labels added to every metric series emitted by the rule.\n"
                },
                "metricName": {
                    "type": "string",
                    "description": "Base name of the generated Prometheus metrics emitted by this rule.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the trace metrics rule.\n"
                },
                "scopeFilter": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilter:TraceMetricsRuleScopeFilter",
                    "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the trace metrics rule. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "traceFilter": {
                    "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilter:TraceMetricsRuleTraceFilter",
                    "description": "Filter that selects traces and spans. A trace matches when its trace-level conditions hold and every `span` block is satisfied by at least one span in the trace.\n"
                }
            },
            "requiredInputs": [
                "metricName",
                "name",
                "traceFilter"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering TraceMetricsRule resources.\n",
                "properties": {
                    "groupBies": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/TraceMetricsRuleGroupBy:TraceMetricsRuleGroupBy"
                        },
                        "description": "Span attributes to project into metric labels. Each entry maps a key on the matched span to a label on the resulting metric series.\n"
                    },
                    "histogramBucketsSeconds": {
                        "type": "array",
                        "items": {
                            "type": "number"
                        },
                        "description": "Histogram bucket upper bounds in seconds for the generated span-duration histogram metric.\n"
                    },
                    "metricLabels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Static key/value labels added to every metric series emitted by the rule.\n"
                    },
                    "metricName": {
                        "type": "string",
                        "description": "Base name of the generated Prometheus metrics emitted by this rule.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the trace metrics rule.\n"
                    },
                    "scopeFilter": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleScopeFilter:TraceMetricsRuleScopeFilter",
                        "description": "Scope filter that further restricts which spans within a matched trace contribute to metrics or sampling. Only spans matching `span_scopes` are included in aggregation.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the trace metrics rule. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "traceFilter": {
                        "$ref": "#/types/chronosphere:index/TraceMetricsRuleTraceFilter:TraceMetricsRuleTraceFilter",
                        "description": "Filter that selects traces and spans. A trace matches when its trace-level conditions hold and every `span` block is satisfied by at least one span in the trace.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/traceTailSamplingRules:TraceTailSamplingRules": {
            "description": "Tail-sampling rules that match completed traces against filters and apply per-rule sample rates (with a default rate fallback) to decide which traces are retained after the full trace has been observed.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.TraceTailSamplingRules;\nimport com.pulumi.chronosphere.TraceTailSamplingRulesArgs;\nimport com.pulumi.chronosphere.inputs.TraceTailSamplingRulesDefaultSampleRateArgs;\nimport com.pulumi.chronosphere.inputs.TraceTailSamplingRulesRuleArgs;\nimport com.pulumi.chronosphere.inputs.TraceTailSamplingRulesRuleFilterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var rules = new TraceTailSamplingRules(\"rules\", TraceTailSamplingRulesArgs.builder()        \n            .defaultSampleRate(TraceTailSamplingRulesDefaultSampleRateArgs.builder()\n                .enabled(true)\n                .sampleRate(0.5)\n                .build())\n            .rules(            \n                TraceTailSamplingRulesRuleArgs.builder()\n                    .filter(TraceTailSamplingRulesRuleFilterArgs.builder()\n                        .span(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                        .build())\n                    .sampleRate(1)\n                    .build(),\n                TraceTailSamplingRulesRuleArgs.builder()\n                    .filter(TraceTailSamplingRulesRuleFilterArgs.builder()\n                        .span(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n                        .build())\n                    .sampleRate(1)\n                    .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  rules:\n    type: chronosphere:TraceTailSamplingRules\n    properties:\n      defaultSampleRate:\n        enabled: true\n        sampleRate: 0.5\n      rules:\n        - filter:\n            span:\n              - error:\n                  value: true\n                matchType: INCLUDE\n          sampleRate: 1\n        - filter:\n            span:\n              - duration:\n                  minSecs: 1\n                matchType: INCLUDE\n          sampleRate: 1\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "defaultSampleRate": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesDefaultSampleRate:TraceTailSamplingRulesDefaultSampleRate",
                    "description": "Default sampling decision applied after the full trace is observed when no rule in `rules` matches.\n"
                },
                "rules": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRule:TraceTailSamplingRulesRule"
                    },
                    "description": "Ordered list of tail-sampling rules evaluated after the full trace is observed. The first rule whose `filter` matches determines the sample rate; if none match, `default_sample_rate` is applied.\n"
                }
            },
            "inputProperties": {
                "defaultSampleRate": {
                    "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesDefaultSampleRate:TraceTailSamplingRulesDefaultSampleRate",
                    "description": "Default sampling decision applied after the full trace is observed when no rule in `rules` matches.\n"
                },
                "rules": {
                    "type": "array",
                    "items": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRule:TraceTailSamplingRulesRule"
                    },
                    "description": "Ordered list of tail-sampling rules evaluated after the full trace is observed. The first rule whose `filter` matches determines the sample rate; if none match, `default_sample_rate` is applied.\n"
                }
            },
            "stateInputs": {
                "description": "Input properties used for looking up and filtering TraceTailSamplingRules resources.\n",
                "properties": {
                    "defaultSampleRate": {
                        "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesDefaultSampleRate:TraceTailSamplingRulesDefaultSampleRate",
                        "description": "Default sampling decision applied after the full trace is observed when no rule in `rules` matches.\n"
                    },
                    "rules": {
                        "type": "array",
                        "items": {
                            "$ref": "#/types/chronosphere:index/TraceTailSamplingRulesRule:TraceTailSamplingRulesRule"
                        },
                        "description": "Ordered list of tail-sampling rules evaluated after the full trace is observed. The first rule whose `filter` matches determines the sample rate; if none match, `default_sample_rate` is applied.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/victoropsAlertNotifier:VictoropsAlertNotifier": {
            "description": "VictorOps (Splunk On-Call) notifier that delivers monitor signals to a VictorOps routing key via its REST integration. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst victorops = new chronosphere.VictoropsAlertNotifier(\"victorops\", {\n    apiKey: \"00000000-0000-0000-0000-000000000000\",\n    apiUrl: \"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n    name: \"test-victorops\",\n    routingKey: \"test\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nvictorops = chronosphere.VictoropsAlertNotifier(\"victorops\",\n    api_key=\"00000000-0000-0000-0000-000000000000\",\n    api_url=\"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n    name=\"test-victorops\",\n    routing_key=\"test\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var victorops = new Pulumi.VictoropsAlertNotifier(\"victorops\", new()\n    {\n        ApiKey = \"00000000-0000-0000-0000-000000000000\",\n        ApiUrl = \"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n        Name = \"test-victorops\",\n        RoutingKey = \"test\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewVictoropsAlertNotifier(ctx, \"victorops\", \u0026chronosphere.VictoropsAlertNotifierArgs{\n\t\t\tApiKey:     pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tApiUrl:     pulumi.String(\"https://alert.victorops.com/integrations/generic/00000000/alert/\"),\n\t\t\tName:       pulumi.String(\"test-victorops\"),\n\t\t\tRoutingKey: pulumi.String(\"test\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.VictoropsAlertNotifier;\nimport com.pulumi.chronosphere.VictoropsAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var victorops = new VictoropsAlertNotifier(\"victorops\", VictoropsAlertNotifierArgs.builder()        \n            .apiKey(\"00000000-0000-0000-0000-000000000000\")\n            .apiUrl(\"https://alert.victorops.com/integrations/generic/00000000/alert/\")\n            .name(\"test-victorops\")\n            .routingKey(\"test\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  victorops:\n    type: chronosphere:VictoropsAlertNotifier\n    properties:\n      apiKey: 00000000-0000-0000-0000-000000000000\n      apiUrl: https://alert.victorops.com/integrations/generic/00000000/alert/\n      name: test-victorops\n      routingKey: test\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "apiKey": {
                    "type": "string",
                    "description": "VictorOps (Splunk On-Call) API key used to authenticate requests. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "VictorOps REST endpoint URL to send events to.\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the VictorOps API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the VictorOps API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the VictorOps API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "customFields": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs forwarded to VictorOps as custom incident fields. Values support Go templating.\n"
                },
                "entityDisplayName": {
                    "type": "string",
                    "description": "Short summary of the alerted problem shown in VictorOps. Supports Go templating.\n"
                },
                "messageType": {
                    "type": "string",
                    "description": "Behavior of the alert in VictorOps. One of `CRITICAL`, `WARNING`, or `INFO`.\n"
                },
                "monitoringTool": {
                    "type": "string",
                    "description": "Name of the monitoring tool the state message originated from.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "routingKey": {
                    "type": "string",
                    "description": "VictorOps routing key that determines which team or escalation policy receives the alert.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "stateMessage": {
                    "type": "string",
                    "description": "Detailed explanation of the alerted problem. Supports Go templating.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the VictorOps API. Disable only in trusted environments.\n"
                }
            },
            "required": [
                "apiKey",
                "name",
                "routingKey",
                "slug"
            ],
            "inputProperties": {
                "apiKey": {
                    "type": "string",
                    "description": "VictorOps (Splunk On-Call) API key used to authenticate requests. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "VictorOps REST endpoint URL to send events to.\n"
                },
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the VictorOps API. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the VictorOps API. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the VictorOps API. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "customFields": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Arbitrary key/value pairs forwarded to VictorOps as custom incident fields. Values support Go templating.\n"
                },
                "entityDisplayName": {
                    "type": "string",
                    "description": "Short summary of the alerted problem shown in VictorOps. Supports Go templating.\n"
                },
                "messageType": {
                    "type": "string",
                    "description": "Behavior of the alert in VictorOps. One of `CRITICAL`, `WARNING`, or `INFO`.\n"
                },
                "monitoringTool": {
                    "type": "string",
                    "description": "Name of the monitoring tool the state message originated from.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "routingKey": {
                    "type": "string",
                    "description": "VictorOps routing key that determines which team or escalation policy receives the alert.\n"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "stateMessage": {
                    "type": "string",
                    "description": "Detailed explanation of the alerted problem. Supports Go templating.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the VictorOps API. Disable only in trusted environments.\n"
                }
            },
            "requiredInputs": [
                "apiKey",
                "name",
                "routingKey"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering VictoropsAlertNotifier resources.\n",
                "properties": {
                    "apiKey": {
                        "type": "string",
                        "description": "VictorOps (Splunk On-Call) API key used to authenticate requests. Treat as a secret.\n",
                        "secret": true
                    },
                    "apiUrl": {
                        "type": "string",
                        "description": "VictorOps REST endpoint URL to send events to.\n"
                    },
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the VictorOps API. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the VictorOps API. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the VictorOps API. Treat as a secret. Mutually exclusive with basic auth.\n"
                    },
                    "customFields": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Arbitrary key/value pairs forwarded to VictorOps as custom incident fields. Values support Go templating.\n"
                    },
                    "entityDisplayName": {
                        "type": "string",
                        "description": "Short summary of the alerted problem shown in VictorOps. Supports Go templating.\n"
                    },
                    "messageType": {
                        "type": "string",
                        "description": "Behavior of the alert in VictorOps. One of `CRITICAL`, `WARNING`, or `INFO`.\n"
                    },
                    "monitoringTool": {
                        "type": "string",
                        "description": "Name of the monitoring tool the state message originated from.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the notifier.\n"
                    },
                    "proxyUrl": {
                        "type": "string",
                        "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                        "deprecationMessage": "custom proxy URLs are not supported"
                    },
                    "routingKey": {
                        "type": "string",
                        "description": "VictorOps routing key that determines which team or escalation policy receives the alert.\n"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "stateMessage": {
                        "type": "string",
                        "description": "Detailed explanation of the alerted problem. Supports Go templating.\n"
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the VictorOps API. Disable only in trusted environments.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/victoropsExternalConnection:VictoropsExternalConnection": {
            "description": "Workspace-scoped VictorOps (Splunk On-Call) credentials that downstream notifiers and LogScale actions can reference. Centralizes the REST integration API key so it isn't duplicated across notifiers; modern equivalent of the per-notifier credentials.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst victorops = new chronosphere.VictoropsExternalConnection(\"victorops\", {\n    apiKey: \"00000000-0000-0000-0000-000000000000\",\n    apiUrl: \"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n    name: \"VictorOps\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nvictorops = chronosphere.VictoropsExternalConnection(\"victorops\",\n    api_key=\"00000000-0000-0000-0000-000000000000\",\n    api_url=\"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n    name=\"VictorOps\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var victorops = new Pulumi.VictoropsExternalConnection(\"victorops\", new()\n    {\n        ApiKey = \"00000000-0000-0000-0000-000000000000\",\n        ApiUrl = \"https://alert.victorops.com/integrations/generic/00000000/alert/\",\n        Name = \"VictorOps\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewVictoropsExternalConnection(ctx, \"victorops\", \u0026chronosphere.VictoropsExternalConnectionArgs{\n\t\t\tApiKey: pulumi.String(\"00000000-0000-0000-0000-000000000000\"),\n\t\t\tApiUrl: pulumi.String(\"https://alert.victorops.com/integrations/generic/00000000/alert/\"),\n\t\t\tName:   pulumi.String(\"VictorOps\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.VictoropsExternalConnection;\nimport com.pulumi.chronosphere.VictoropsExternalConnectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var victorops = new VictoropsExternalConnection(\"victorops\", VictoropsExternalConnectionArgs.builder()        \n            .apiKey(\"00000000-0000-0000-0000-000000000000\")\n            .apiUrl(\"https://alert.victorops.com/integrations/generic/00000000/alert/\")\n            .name(\"VictorOps\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  victorops:\n    type: chronosphere:VictoropsExternalConnection\n    properties:\n      apiKey: 00000000-0000-0000-0000-000000000000\n      apiUrl: https://alert.victorops.com/integrations/generic/00000000/alert/\n      name: VictorOps\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "apiKey": {
                    "type": "string",
                    "description": "VictorOps (Splunk On-Call) REST integration API key used to authenticate alert delivery. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "VictorOps REST endpoint URL that receives alert payloads. Override to target a custom endpoint.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "apiKey": {
                    "type": "string",
                    "description": "VictorOps (Splunk On-Call) REST integration API key used to authenticate alert delivery. Treat as a secret.\n",
                    "secret": true
                },
                "apiUrl": {
                    "type": "string",
                    "description": "VictorOps REST endpoint URL that receives alert payloads. Override to target a custom endpoint.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering VictoropsExternalConnection resources.\n",
                "properties": {
                    "apiKey": {
                        "type": "string",
                        "description": "VictorOps (Splunk On-Call) REST integration API key used to authenticate alert delivery. Treat as a secret.\n",
                        "secret": true
                    },
                    "apiUrl": {
                        "type": "string",
                        "description": "VictorOps REST endpoint URL that receives alert payloads. Override to target a custom endpoint.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the external connection.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/webhookAlertNotifier:WebhookAlertNotifier": {
            "description": "Webhook notifier that POSTs monitor signal payloads to an arbitrary HTTP endpoint. Referenced from notification policies.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst webhook = new chronosphere.WebhookAlertNotifier(\"webhook\", {\n    bearerToken: \"bearer-token\",\n    name: \"Webhook\",\n    sendResolved: false,\n    url: \"http://example.com/url\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nwebhook = chronosphere.WebhookAlertNotifier(\"webhook\",\n    bearer_token=\"bearer-token\",\n    name=\"Webhook\",\n    send_resolved=False,\n    url=\"http://example.com/url\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var webhook = new Pulumi.WebhookAlertNotifier(\"webhook\", new()\n    {\n        BearerToken = \"bearer-token\",\n        Name = \"Webhook\",\n        SendResolved = false,\n        Url = \"http://example.com/url\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewWebhookAlertNotifier(ctx, \"webhook\", \u0026chronosphere.WebhookAlertNotifierArgs{\n\t\t\tBearerToken:  pulumi.String(\"bearer-token\"),\n\t\t\tName:         pulumi.String(\"Webhook\"),\n\t\t\tSendResolved: pulumi.Bool(false),\n\t\t\tUrl:          pulumi.String(\"http://example.com/url\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.WebhookAlertNotifier;\nimport com.pulumi.chronosphere.WebhookAlertNotifierArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var webhook = new WebhookAlertNotifier(\"webhook\", WebhookAlertNotifierArgs.builder()        \n            .bearerToken(\"bearer-token\")\n            .name(\"Webhook\")\n            .sendResolved(false)\n            .url(\"http://example.com/url\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  webhook:\n    type: chronosphere:WebhookAlertNotifier\n    properties:\n      bearerToken: bearer-token\n      name: Webhook\n      sendResolved: false\n      url: http://example.com/url\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Webhook URL that receives the alert payload via HTTP POST.\n"
                }
            },
            "required": [
                "name",
                "slug",
                "url"
            ],
            "inputProperties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Treat as a secret. Mutually exclusive with basic auth.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the notifier.\n"
                },
                "proxyUrl": {
                    "type": "string",
                    "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                    "deprecationMessage": "custom proxy URLs are not supported"
                },
                "sendResolved": {
                    "type": "boolean",
                    "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Webhook URL that receives the alert payload via HTTP POST.\n"
                }
            },
            "requiredInputs": [
                "name",
                "url"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering WebhookAlertNotifier resources.\n",
                "properties": {
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the webhook. Treat as a secret. Mutually exclusive with basic auth.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the notifier.\n"
                    },
                    "proxyUrl": {
                        "type": "string",
                        "description": "Deprecated and ignored. Custom proxy URLs are not supported.\n",
                        "deprecationMessage": "custom proxy URLs are not supported"
                    },
                    "sendResolved": {
                        "type": "boolean",
                        "description": "Whether to send a follow-up notification when an alert is resolved. Defaults to true.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the notifier. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                    },
                    "url": {
                        "type": "string",
                        "description": "Webhook URL that receives the alert payload via HTTP POST.\n"
                    }
                },
                "type": "object"
            }
        },
        "chronosphere:index/webhookExternalConnection:WebhookExternalConnection": {
            "description": "Workspace-scoped webhook credentials that downstream notifiers and LogScale actions can reference. Centralizes the destination URL and HTTP auth so they aren't duplicated across notifiers; modern equivalent of the per-notifier credentials.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\n\nconst webhook = new chronosphere.WebhookExternalConnection(\"webhook\", {\n    bearerToken: \"XXXXX\",\n    name: \"Webhook\",\n    url: \"https://example.com/notify\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\nwebhook = chronosphere.WebhookExternalConnection(\"webhook\",\n    bearer_token=\"XXXXX\",\n    name=\"Webhook\",\n    url=\"https://example.com/notify\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var webhook = new Pulumi.WebhookExternalConnection(\"webhook\", new()\n    {\n        BearerToken = \"XXXXX\",\n        Name = \"Webhook\",\n        Url = \"https://example.com/notify\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.NewWebhookExternalConnection(ctx, \"webhook\", \u0026chronosphere.WebhookExternalConnectionArgs{\n\t\t\tBearerToken: pulumi.String(\"XXXXX\"),\n\t\t\tName:        pulumi.String(\"Webhook\"),\n\t\t\tUrl:         pulumi.String(\"https://example.com/notify\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.WebhookExternalConnection;\nimport com.pulumi.chronosphere.WebhookExternalConnectionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        var webhook = new WebhookExternalConnection(\"webhook\", WebhookExternalConnectionArgs.builder()        \n            .bearerToken(\"XXXXX\")\n            .name(\"Webhook\")\n            .url(\"https://example.com/notify\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  webhook:\n    type: chronosphere:WebhookExternalConnection\n    properties:\n      bearerToken: XXXXX\n      name: Webhook\n      url: https://example.com/notify\n```\n{{% /example %}}\n{{% /examples %}}",
            "properties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n"
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Destination URL that receives webhook POST requests for this connection.\n"
                }
            },
            "required": [
                "name",
                "slug"
            ],
            "inputProperties": {
                "basicAuthPassword": {
                    "type": "string",
                    "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                    "secret": true
                },
                "basicAuthUsername": {
                    "type": "string",
                    "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                },
                "bearerToken": {
                    "type": "string",
                    "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth. Treat as a secret.\n"
                },
                "name": {
                    "type": "string",
                    "description": "Display name of the external connection.\n"
                },
                "slug": {
                    "type": "string",
                    "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                    "willReplaceOnChanges": true
                },
                "tlsInsecureSkipVerify": {
                    "type": "boolean",
                    "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                },
                "url": {
                    "type": "string",
                    "description": "Destination URL that receives webhook POST requests for this connection.\n"
                }
            },
            "requiredInputs": [
                "name"
            ],
            "stateInputs": {
                "description": "Input properties used for looking up and filtering WebhookExternalConnection resources.\n",
                "properties": {
                    "basicAuthPassword": {
                        "type": "string",
                        "description": "Password for HTTP basic auth when calling the webhook. Treat as a secret.\n",
                        "secret": true
                    },
                    "basicAuthUsername": {
                        "type": "string",
                        "description": "Username for HTTP basic auth when calling the webhook. Mutually exclusive with `bearer_token`.\n"
                    },
                    "bearerToken": {
                        "type": "string",
                        "description": "Bearer token sent in the `Authorization` header when calling the webhook. Mutually exclusive with basic auth. Treat as a secret.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Display name of the external connection.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Stable identifier for the connection. Generated from `name` if omitted. Immutable after creation.\n",
                        "willReplaceOnChanges": true
                    },
                    "tlsInsecureSkipVerify": {
                        "type": "boolean",
                        "description": "If true, skip TLS certificate verification when calling the webhook. Disable only in trusted environments.\n"
                    },
                    "url": {
                        "type": "string",
                        "description": "Destination URL that receives webhook POST requests for this connection.\n"
                    }
                },
                "type": "object"
            }
        }
    },
    "functions": {
        "chronosphere:index/bucketDataSource:BucketDataSource": {
            "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi/chronosphere\";\n\nconst default = chronosphere.BucketDataSource({\n    slug: \"default\",\n});\nconst byName = chronosphere.BucketDataSource({\n    name: \"Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ndefault = chronosphere.bucket_data_source(slug=\"default\")\nby_name = chronosphere.bucket_data_source(name=\"Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Pulumi.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = Pulumi.BucketDataSource.Invoke(new()\n    {\n        Slug = \"default\",\n    });\n\n    var byName = Pulumi.BucketDataSource.Invoke(new()\n    {\n        Name = \"Default\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.BucketDataSource(ctx, \u0026chronosphere.BucketDataSourceArgs{\n\t\t\tSlug: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.BucketDataSource(ctx, \u0026chronosphere.BucketDataSourceArgs{\n\t\t\tName: pulumi.StringRef(\"Default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ChronosphereFunctions;\nimport com.pulumi.chronosphere.inputs.BucketDataSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var default = ChronosphereFunctions.BucketDataSource(BucketDataSourceArgs.builder()\n            .slug(\"default\")\n            .build());\n\n        final var byName = ChronosphereFunctions.BucketDataSource(BucketDataSourceArgs.builder()\n            .name(\"Default\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  default:\n    fn::invoke:\n      Function: chronosphere:BucketDataSource\n      Arguments:\n        slug: default\n  byName:\n    fn::invoke:\n      Function: chronosphere:BucketDataSource\n      Arguments:\n        name: Default\n```\n{{% /example %}}\n{{% /examples %}}",
            "inputs": {
                "description": "A collection of arguments for invoking BucketDataSource.\n",
                "properties": {
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Read-only: key/value labels attached to the bucket.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the bucket to look up. Exactly one of `slug` or `name` must be set.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Slug of the bucket to look up. Exactly one of `slug` or `name` must be set.\n"
                    }
                },
                "type": "object"
            },
            "outputs": {
                "description": "A collection of values returned by BucketDataSource.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Read-only: free-form description of the bucket.\n"
                    },
                    "id": {
                        "type": "string",
                        "description": "The provider-assigned unique ID for this managed resource.\n"
                    },
                    "labels": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "string"
                        },
                        "description": "Read-only: key/value labels attached to the bucket.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Name of the bucket to look up. Exactly one of `slug` or `name` must be set.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Slug of the bucket to look up. Exactly one of `slug` or `name` must be set.\n"
                    }
                },
                "type": "object",
                "required": [
                    "description",
                    "id"
                ]
            }
        },
        "chronosphere:index/collectionDataSource:CollectionDataSource": {
            "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi/chronosphere\";\n\nconst default = chronosphere.CollectionDataSource({\n    slug: \"default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ndefault = chronosphere.collection_data_source(slug=\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Pulumi.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var @default = Pulumi.CollectionDataSource.Invoke(new()\n    {\n        Slug = \"default\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := chronosphere.CollectionDataSource(ctx, \u0026chronosphere.CollectionDataSourceArgs{\n\t\t\tSlug: pulumi.StringRef(\"default\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ChronosphereFunctions;\nimport com.pulumi.chronosphere.inputs.CollectionDataSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var default = ChronosphereFunctions.CollectionDataSource(CollectionDataSourceArgs.builder()\n            .slug(\"default\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  default:\n    fn::invoke:\n      Function: chronosphere:CollectionDataSource\n      Arguments:\n        slug: default\n```\n{{% /example %}}\n{{% /examples %}}",
            "inputs": {
                "description": "A collection of arguments for invoking CollectionDataSource.\n",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "Slug of the collection to look up.\n"
                    }
                },
                "type": "object"
            },
            "outputs": {
                "description": "A collection of values returned by CollectionDataSource.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Read-only: free-form description of the collection.\n"
                    },
                    "id": {
                        "type": "string",
                        "description": "The provider-assigned unique ID for this managed resource.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Read-only: display name of the collection.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Slug of the collection to look up.\n"
                    }
                },
                "type": "object",
                "required": [
                    "description",
                    "name",
                    "id"
                ]
            }
        },
        "chronosphere:index/serviceDataSource:ServiceDataSource": {
            "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as chronosphere from \"@pulumi-chronosphere/pulumi-chronosphere\";\nimport * as chronosphere from \"@pulumi/chronosphere\";\n\nconst gateway = chronosphere.ServiceDataSource({\n    slug: \"gateway\",\n});\nconst gatewayUp = new chronosphere.Monitor(\"gatewayUp\", {\n    name: \"Gateway up\",\n    collectionId: gateway.then(gateway =\u003e gateway.id),\n    query: {\n        prometheusExpr: \"up{service=\\\"gateway\\\"}\",\n    },\n    seriesConditions: {\n        conditions: [{\n            severity: \"warn\",\n            value: 1,\n            op: \"LT\",\n        }],\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_chronosphere as chronosphere\n\ngateway = chronosphere.service_data_source(slug=\"gateway\")\ngateway_up = chronosphere.Monitor(\"gatewayUp\",\n    name=\"Gateway up\",\n    collection_id=gateway.id,\n    query=chronosphere.MonitorQueryArgs(\n        prometheus_expr=\"up{service=\\\"gateway\\\"}\",\n    ),\n    series_conditions=chronosphere.MonitorSeriesConditionsArgs(\n        conditions=[chronosphere.MonitorSeriesConditionsConditionArgs(\n            severity=\"warn\",\n            value=1,\n            op=\"LT\",\n        )],\n    ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Pulumi = Chronosphere.Pulumi;\nusing Pulumi = Pulumi.Pulumi;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n    var gateway = Pulumi.ServiceDataSource.Invoke(new()\n    {\n        Slug = \"gateway\",\n    });\n\n    var gatewayUp = new Pulumi.Monitor(\"gatewayUp\", new()\n    {\n        Name = \"Gateway up\",\n        CollectionId = gateway.Apply(serviceDataSourceResult =\u003e serviceDataSourceResult.Id),\n        Query = new Pulumi.Inputs.MonitorQueryArgs\n        {\n            PrometheusExpr = \"up{service=\\\"gateway\\\"}\",\n        },\n        SeriesConditions = new Pulumi.Inputs.MonitorSeriesConditionsArgs\n        {\n            Conditions = new[]\n            {\n                new Pulumi.Inputs.MonitorSeriesConditionsConditionArgs\n                {\n                    Severity = \"warn\",\n                    Value = 1,\n                    Op = \"LT\",\n                },\n            },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/chronosphereio/pulumi-chronosphere/sdk/go/chronosphere\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgateway, err := chronosphere.ServiceDataSource(ctx, \u0026chronosphere.ServiceDataSourceArgs{\n\t\t\tSlug: \"gateway\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = chronosphere.NewMonitor(ctx, \"gatewayUp\", \u0026chronosphere.MonitorArgs{\n\t\t\tName:         pulumi.String(\"Gateway up\"),\n\t\t\tCollectionId: *pulumi.String(gateway.Id),\n\t\t\tQuery: \u0026chronosphere.MonitorQueryArgs{\n\t\t\t\tPrometheusExpr: pulumi.String(\"up{service=\\\"gateway\\\"}\"),\n\t\t\t},\n\t\t\tSeriesConditions: \u0026chronosphere.MonitorSeriesConditionsArgs{\n\t\t\t\tConditions: chronosphere.MonitorSeriesConditionsConditionArray{\n\t\t\t\t\t\u0026chronosphere.MonitorSeriesConditionsConditionArgs{\n\t\t\t\t\t\tSeverity: pulumi.String(\"warn\"),\n\t\t\t\t\t\tValue:    pulumi.Float64(1),\n\t\t\t\t\t\tOp:       pulumi.String(\"LT\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.chronosphere.ChronosphereFunctions;\nimport com.pulumi.chronosphere.inputs.ServiceDataSourceArgs;\nimport com.pulumi.chronosphere.Monitor;\nimport com.pulumi.chronosphere.MonitorArgs;\nimport com.pulumi.chronosphere.inputs.MonitorQueryArgs;\nimport com.pulumi.chronosphere.inputs.MonitorSeriesConditionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var gateway = ChronosphereFunctions.ServiceDataSource(ServiceDataSourceArgs.builder()\n            .slug(\"gateway\")\n            .build());\n\n        var gatewayUp = new Monitor(\"gatewayUp\", MonitorArgs.builder()        \n            .name(\"Gateway up\")\n            .collectionId(gateway.applyValue(serviceDataSourceResult -\u003e serviceDataSourceResult.id()))\n            .query(MonitorQueryArgs.builder()\n                .prometheusExpr(\"up{service=\\\"gateway\\\"}\")\n                .build())\n            .seriesConditions(MonitorSeriesConditionsArgs.builder()\n                .conditions(MonitorSeriesConditionsConditionArgs.builder()\n                    .severity(\"warn\")\n                    .value(1)\n                    .op(\"LT\")\n                    .build())\n                .build())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  gatewayUp:\n    type: chronosphere:Monitor\n    properties:\n      name: Gateway up\n      collectionId: ${gateway.id}\n      query:\n        prometheusExpr: up{service=\"gateway\"}\n      seriesConditions:\n        conditions:\n          - severity: warn\n            value: 1\n            op: LT\nvariables:\n  gateway:\n    fn::invoke:\n      Function: chronosphere:ServiceDataSource\n      Arguments:\n        slug: gateway\n```\n{{% /example %}}\n{{% /examples %}}",
            "inputs": {
                "description": "A collection of arguments for invoking ServiceDataSource.\n",
                "properties": {
                    "slug": {
                        "type": "string",
                        "description": "Slug of the service to look up.\n"
                    }
                },
                "type": "object",
                "required": [
                    "slug"
                ]
            },
            "outputs": {
                "description": "A collection of values returned by ServiceDataSource.\n",
                "properties": {
                    "description": {
                        "type": "string",
                        "description": "Read-only: free-form description of the service.\n"
                    },
                    "id": {
                        "type": "string",
                        "description": "The provider-assigned unique ID for this managed resource.\n"
                    },
                    "name": {
                        "type": "string",
                        "description": "Read-only: display name of the service.\n"
                    },
                    "slug": {
                        "type": "string",
                        "description": "Slug of the service to look up.\n"
                    }
                },
                "type": "object",
                "required": [
                    "description",
                    "name",
                    "slug",
                    "id"
                ]
            }
        }
    }
}