diff --git a/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md b/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md index 5042aa2a09b..f5d8981ec9e 100644 --- a/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md @@ -13,19 +13,17 @@ title: ElasticsearchDataQuery kind -It extends [DataQuery](#dataquery). - -| Property | Type | Required | Default | Description | -|--------------|-------------------------------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `alias` | string | No | | Alias pattern | -| `bucketAggs` | [BucketAggregation](#bucketaggregation)[] | No | | List of bucket aggregations | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `metrics` | [MetricAggregation](#metricaggregation)[] | No | | List of metric aggregations | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | -| `query` | string | No | | Lucene query | -| `timeField` | string | No | | Name of time field | +| Property | Type | Required | Default | Description | +|--------------|-------------------------------------------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `alias` | string | No | | Alias pattern | +| `bucketAggs` | [BucketAggregation](#bucketaggregation)[] | No | | List of bucket aggregations | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `metrics` | [MetricAggregation](#metricaggregation)[] | No | | List of metric aggregations | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| `query` | string | No | | Lucene query | +| `timeField` | string | No | | Name of time field | ### BucketAggregation @@ -117,19 +115,6 @@ It extends [BucketAggregationWithField](#bucketaggregationwithfield). | `id` | string | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | | `settings` | | No | | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | - ### MetricAggregation | Property | Type | Required | Default | Description | diff --git a/docs/sources/developers/kinds/composable/grafanapyroscopedataquery/schema-reference.md b/docs/sources/developers/kinds/composable/grafanapyroscopedataquery/schema-reference.md index e68af482c4d..2bf55fcfb8b 100644 --- a/docs/sources/developers/kinds/composable/grafanapyroscopedataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/grafanapyroscopedataquery/schema-reference.md @@ -13,30 +13,15 @@ title: GrafanaPyroscopeDataQuery kind -It extends [DataQuery](#dataquery). - -| Property | Type | Required | Default | Description | -|-----------------|----------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `groupBy` | string[] | **Yes** | | Allows to group the results. | -| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | -| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `maxNodes` | integer | No | | Sets the maximum number of nodes in the flamegraph. | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | - -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| Property | Type | Required | Default | Description | +|-----------------|----------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `groupBy` | string[] | **Yes** | | Allows to group the results. | +| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | +| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `maxNodes` | integer | No | | Sets the maximum number of nodes in the flamegraph. | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | diff --git a/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md b/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md index 44a9511a5c6..7bc39d81bce 100644 --- a/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md @@ -13,33 +13,18 @@ title: LokiDataQuery kind -It extends [DataQuery](#dataquery). - -| Property | Type | Required | Default | Description | -|----------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `expr` | string | **Yes** | | The LogQL query. | -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `editorMode` | string | No | | Possible values are: `code`, `builder`. | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `instant` | boolean | No | | @deprecated, now use queryType. | -| `legendFormat` | string | No | | Used to override the name of the series. | -| `maxLines` | integer | No | | Used to limit the number of log rows returned. | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | -| `range` | boolean | No | | @deprecated, now use queryType. | -| `resolution` | integer | No | | Used to scale the interval value. | - -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| Property | Type | Required | Default | Description | +|----------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `expr` | string | **Yes** | | The LogQL query. | +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `editorMode` | string | No | | Possible values are: `code`, `builder`. | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `instant` | boolean | No | | @deprecated, now use queryType. | +| `legendFormat` | string | No | | Used to override the name of the series. | +| `maxLines` | integer | No | | Used to limit the number of log rows returned. | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| `range` | boolean | No | | @deprecated, now use queryType. | +| `resolution` | integer | No | | Used to scale the interval value. | diff --git a/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md b/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md index 55000fe4c4e..21b1c727d2a 100644 --- a/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md @@ -13,28 +13,13 @@ title: ParcaDataQuery kind -It extends [DataQuery](#dataquery). - -| Property | Type | Required | Default | Description | -|-----------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | -| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | - -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| Property | Type | Required | Default | Description | +|-----------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `labelSelector` | string | **Yes** | `{}` | Specifies the query label selectors. | +| `profileTypeId` | string | **Yes** | | Specifies the type of profile to query. | +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | diff --git a/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md b/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md index 88affd762c5..1fc97a0a527 100644 --- a/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md @@ -13,34 +13,19 @@ title: PrometheusDataQuery kind -It extends [DataQuery](#dataquery). - -| Property | Type | Required | Default | Description | -|------------------|---------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `expr` | string | **Yes** | | The actual expression/query that will be evaluated by Prometheus | -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `editorMode` | string | No | | Possible values are: `code`, `builder`. | -| `exemplar` | boolean | No | | Execute an additional query to identify interesting raw samples relevant for the given expr | -| `format` | string | No | | Possible values are: `time_series`, `table`, `heatmap`. | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `instant` | boolean | No | | Returns only the latest value that Prometheus has scraped for the requested time series | -| `intervalFactor` | number | No | | @deprecated Used to specify how many times to divide max data points by. We use max data points under query options
See https://github.com/grafana/grafana/issues/48081 | -| `legendFormat` | string | No | | Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | -| `range` | boolean | No | | Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series | - -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| Property | Type | Required | Default | Description | +|------------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `expr` | string | **Yes** | | The actual expression/query that will be evaluated by Prometheus | +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `editorMode` | string | No | | Possible values are: `code`, `builder`. | +| `exemplar` | boolean | No | | Execute an additional query to identify interesting raw samples relevant for the given expr | +| `format` | string | No | | Possible values are: `time_series`, `table`, `heatmap`. | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `instant` | boolean | No | | Returns only the latest value that Prometheus has scraped for the requested time series | +| `intervalFactor` | number | No | | @deprecated Used to specify how many times to divide max data points by. We use max data points under query options
See https://github.com/grafana/grafana/issues/48081 | +| `legendFormat` | string | No | | Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | +| `range` | boolean | No | | Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series | diff --git a/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md b/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md index 1e65a3db882..1db393887a6 100644 --- a/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md @@ -13,26 +13,24 @@ title: TestDataDataQuery kind -It extends [DataQuery](#dataquery). - | Property | Type | Required | Default | Description | |-------------------|-------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `alias` | string | No | | | | `channel` | string | No | | | | `csvContent` | string | No | | | | `csvFileName` | string | No | | | | `csvWave` | [CSVWave](#csvwave)[] | No | | | -| `datasource` | | No | | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | | `errorType` | string | No | | Possible values are: `server_panic`, `frontend_exception`, `frontend_observable`. | -| `hide` | boolean | No | | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `labels` | string | No | | | | `levelColumn` | boolean | No | | | | `lines` | integer | No | | | | `nodes` | [NodesQuery](#nodesquery) | No | | | | `points` | array[] | No | | | | `pulseWave` | [PulseWaveQuery](#pulsewavequery) | No | | | -| `queryType` | string | No | | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | +| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | | `rawFrameContent` | string | No | | | | `scenarioId` | string | No | | Possible values are: `random_walk`, `slow_query`, `random_walk_with_error`, `random_walk_table`, `exponential_heatmap_bucket_data`, `linear_heatmap_bucket_data`, `no_data_points`, `datapoints_outside_range`, `csv_metric_values`, `predictable_pulse`, `predictable_csv_wave`, `streaming_client`, `simulation`, `usa`, `live`, `grafana_api`, `arrow`, `annotations`, `table_static`, `server_error_500`, `logs`, `node_graph`, `flame_graph`, `raw_frame`, `csv_file`, `csv_content`, `trace`, `manual_entry`, `variables-query`. | | `seriesCount` | integer | No | | | @@ -51,19 +49,6 @@ It extends [DataQuery](#dataquery). | `timeStep` | integer | No | | | | `valuesCSV` | string | No | | | -### DataQuery - -These are the common properties available to all queries in all datasources. -Specific implementations will *extend* this interface, adding the required -properties for the given context. - -| Property | Type | Required | Default | Description | -|--------------|---------|----------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | -| `datasource` | | No | | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | -| `queryType` | string | No | | Specify the query flavor
TODO make this required and give it a default | - ### NodesQuery | Property | Type | Required | Default | Description | diff --git a/docs/sources/developers/kinds/core/dashboard/schema-reference.md b/docs/sources/developers/kinds/core/dashboard/schema-reference.md index 9e002ceeddf..c238e922103 100644 --- a/docs/sources/developers/kinds/core/dashboard/schema-reference.md +++ b/docs/sources/developers/kinds/core/dashboard/schema-reference.md @@ -661,10 +661,10 @@ TODO this appears to be spread all over in the frontend. Concepts will likely ne ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -673,7 +673,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/folder/schema-reference.md b/docs/sources/developers/kinds/core/folder/schema-reference.md index f2d318ca9c1..6e86269e7e5 100644 --- a/docs/sources/developers/kinds/core/folder/schema-reference.md +++ b/docs/sources/developers/kinds/core/folder/schema-reference.md @@ -16,7 +16,7 @@ A folder is a collection of resources that are grouped together and can share pe | Property | Type | Required | Default | Description | |------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `metadata` | [object](#metadata) | **Yes** | | metadata contains embedded CommonMetadata and can be extended with custom string fields
TODO: use CommonMetadata instead of redefining here; currently needs to be defined here
without external reference as using the CommonMetadata reference breaks thema codegen. | -| `spec` | [object](#spec) | **Yes** | | | +| `spec` | [object](#spec) | **Yes** | | TODO:
common metadata will soon support setting the parent folder in the metadata | | `status` | [object](#status) | **Yes** | | | ### Metadata @@ -64,6 +64,9 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Spec +TODO: +common metadata will soon support setting the parent folder in the metadata + | Property | Type | Required | Default | Description | |---------------|--------|----------|---------|--------------------------------------| | `title` | string | **Yes** | | Folder title | @@ -72,10 +75,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -84,7 +87,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/librarypanel/schema-reference.md b/docs/sources/developers/kinds/core/librarypanel/schema-reference.md index 7cb34df6ce7..745566894f5 100644 --- a/docs/sources/developers/kinds/core/librarypanel/schema-reference.md +++ b/docs/sources/developers/kinds/core/librarypanel/schema-reference.md @@ -106,10 +106,10 @@ Typescript: Omit; ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -118,7 +118,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/playlist/schema-reference.md b/docs/sources/developers/kinds/core/playlist/schema-reference.md index f9dff68f48e..97e063b3f30 100644 --- a/docs/sources/developers/kinds/core/playlist/schema-reference.md +++ b/docs/sources/developers/kinds/core/playlist/schema-reference.md @@ -81,10 +81,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -93,7 +93,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/preferences/schema-reference.md b/docs/sources/developers/kinds/core/preferences/schema-reference.md index 42ecb60000e..3f77550e276 100644 --- a/docs/sources/developers/kinds/core/preferences/schema-reference.md +++ b/docs/sources/developers/kinds/core/preferences/schema-reference.md @@ -81,10 +81,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -93,7 +93,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md b/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md index 1001879803e..2b23cbc5e87 100644 --- a/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md +++ b/docs/sources/developers/kinds/core/publicdashboard/schema-reference.md @@ -75,10 +75,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -87,7 +87,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md b/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md index 34a680a7d46..8faa4626bf9 100644 --- a/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md +++ b/docs/sources/developers/kinds/core/serviceaccount/schema-reference.md @@ -79,10 +79,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -91,7 +91,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/docs/sources/developers/kinds/core/team/schema-reference.md b/docs/sources/developers/kinds/core/team/schema-reference.md index 04eab625850..d3db608266d 100644 --- a/docs/sources/developers/kinds/core/team/schema-reference.md +++ b/docs/sources/developers/kinds/core/team/schema-reference.md @@ -71,10 +71,10 @@ extraFields is reserved for any fields that are pulled from the API server metad ### Status -| Property | Type | Required | Default | Description | -|--------------------|----------------------------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | -| `operatorStates` | map[string][joinSchema.status.#OperatorState](#joinschema.status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | +| Property | Type | Required | Default | Description | +|--------------------|------------------------------------------------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `additionalFields` | [object](#additionalfields) | No | | additionalFields is reserved for future use | +| `operatorStates` | map[string][status.#OperatorState](#status.#operatorstate) | No | | operatorStates is a map of operator ID to operator state evaluations.
Any operator which consumes this kind SHOULD add its state evaluation information to this field. | ### AdditionalFields @@ -83,7 +83,7 @@ additionalFields is reserved for future use | Property | Type | Required | Default | Description | |----------|------|----------|---------|-------------| -### JoinSchema.Status.#OperatorState +### Status.#OperatorState | Property | Type | Required | Default | Description | |--------------------|--------------------|----------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| diff --git a/go.mod b/go.mod index 7718d702cca..80588568cb6 100644 --- a/go.mod +++ b/go.mod @@ -264,8 +264,8 @@ require ( github.com/grafana/dataplane/examples v0.0.0-20230404174214-4d6fd58a18ad github.com/grafana/dataplane/sdata v0.0.6 github.com/grafana/go-mssqldb v0.9.1 - github.com/grafana/kindsys v0.0.0-20230508175818-7ad73516220b - github.com/grafana/thema v0.0.0-20230417103609-99b482c479fe + github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482 + github.com/grafana/thema v0.0.0-20230523123227-db9596a7096e github.com/redis/go-redis/v9 v9.0.2 github.com/weaveworks/common v0.0.0-20230208133027-16871410fca4 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f @@ -285,6 +285,9 @@ require ( github.com/bmatcuk/doublestar v1.1.1 // indirect github.com/buildkite/yaml v2.1.0+incompatible // indirect github.com/cloudflare/circl v1.1.0 // indirect + github.com/cockroachdb/errors v1.9.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect + github.com/cockroachdb/redact v1.1.3 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -294,6 +297,7 @@ require ( github.com/drone/drone-go v1.7.1 // indirect github.com/drone/envsubst v1.0.3 // indirect github.com/drone/runner-go v1.12.0 // indirect + github.com/getsentry/sentry-go v0.12.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect @@ -303,6 +307,7 @@ require ( github.com/hashicorp/golang-lru/v2 v2.0.2 // indirect github.com/hashicorp/memberlist v0.5.0 // indirect github.com/invopop/yaml v0.1.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-ieproxy v0.0.3 // indirect @@ -314,6 +319,7 @@ require ( github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect github.com/perimeterx/marshmallow v1.1.4 // indirect github.com/rivo/uniseg v0.3.4 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/rueian/rueidis v0.0.100-go1.18 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/segmentio/asm v1.2.0 // indirect @@ -380,7 +386,6 @@ require ( github.com/wk8/go-ordered-map v1.0.0 github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.1.0 - github.com/yudai/pp v2.0.1+incompatible // indirect go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 // indirect go.opentelemetry.io/proto/otlp v0.19.0 // indirect golang.org/x/mod v0.9.0 // indirect diff --git a/go.sum b/go.sum index f48c753ca7f..653965a65e4 100644 --- a/go.sum +++ b/go.sum @@ -111,6 +111,7 @@ filippo.io/age v1.1.1/go.mod h1:l03SrzDUrBkdBx8+IILdnn2KZysqQdbEBUQ4p3sqEQE= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= github.com/99designs/basicauth-go v0.0.0-20160802081356-2a93ba0f464d/go.mod h1:3cARGAK9CfW3HoxCy1a0G4TKrdiKke8ftOMEOHyySYs= github.com/99designs/httpsignatures-go v0.0.0-20170731043157-88528bf4ca7e/go.mod h1:Xa6lInWHNQnuWoF0YPSsx+INFA9qk7/7pTjwb3PInkY= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-amqp-common-go/v3 v3.2.1/go.mod h1:O6X1iYHP7s2x7NjUKsXVhkwWrQhxrd+d8/3rRadj4CI= github.com/Azure/azure-amqp-common-go/v3 v3.2.2/go.mod h1:O6X1iYHP7s2x7NjUKsXVhkwWrQhxrd+d8/3rRadj4CI= github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= @@ -177,6 +178,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= @@ -187,6 +190,7 @@ github.com/HdrHistogram/hdrhistogram-go v0.9.0/go.mod h1:nxrse8/Tzg2tg3DZcZjm6qE github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= @@ -204,7 +208,6 @@ github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2B github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756 h1:L6S7kR7SlhQKplIBpkra3s6yhcZV51lhRnXmYc4HohI= github.com/ProtonMail/go-crypto v0.0.0-20230426101702-58e86b294756/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= @@ -217,6 +220,7 @@ github.com/RoaringBitmap/real-roaring-datasets v0.0.0-20190726190000-eb7c87156f7 github.com/RoaringBitmap/roaring v0.9.1/go.mod h1:h1B7iIUOmnAeb5ytYMvnHJwxMc6LUrwBnzXWRuqTQUc= github.com/RoaringBitmap/roaring v0.9.4 h1:ckvZSX5gwCRaJYBNe7syNawCU5oruY9gQmjXlp4riwo= github.com/RoaringBitmap/roaring v0.9.4/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= +github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/sarama v1.29.1/go.mod h1:mdtqvCSg8JOxk8PmpTNGyo6wzd4BMm4QXSfDnTXmgkE= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= @@ -228,6 +232,7 @@ github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= +github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= @@ -339,6 +344,7 @@ github.com/aws/smithy-go v1.11.2 h1:eG/N+CcUMAvsdffgMvjMKwfyDzIkjM6pfxMJ8Mzc6mE= github.com/aws/smithy-go v1.11.2/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= github.com/axiomhq/hyperloglog v0.0.0-20191112132149-a4c4c47bc57f h1:y06x6vGnFYfXUoVMbrcP1Uzpj4JG01eB5vRps9G8agM= github.com/axiomhq/hyperloglog v0.0.0-20191112132149-a4c4c47bc57f/go.mod h1:2stgcRjl6QmW+gU2h5E7BQXg4HU0gzxKWDuT5HviN9s= +github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -438,7 +444,15 @@ github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b80 github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= +github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f h1:6jduT9Hfc0njg5jJ1DdKCFPdMBrp/mdZfCpa5h+WM74= +github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/containerd/containerd v1.2.7/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -494,6 +508,7 @@ github.com/deepmap/oapi-codegen v1.12.4/go.mod h1:3lgHGMu6myQ2vqbbTXH2H1o4eXFTGn github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v3 v3.2103.0/go.mod h1:GHMCYxuDWyzbHkh4k3yyg4PM61tJPFfEGSMbE3Vd5QE= github.com/dgraph-io/ristretto v0.0.4-0.20210309073149-3836124cdc5a/go.mod h1:MIonLggsKgZLUSt414ExgwNtlOL5MuEoAJP514mwGe8= github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= @@ -549,6 +564,7 @@ github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20220115173737-adb46da277ac h1:XDAn206aIqKPdF5YczuuJXSQPx+WOen0Pxbxp5Fq8Pg= github.com/elazarl/goproxy v0.0.0-20220115173737-adb46da277ac/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= @@ -567,7 +583,9 @@ github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCw github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.9.1 h1:PS7VIOgmSVhWUEeZwTe7z7zouA22Cr590PzXKbZHOVY= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= @@ -600,6 +618,7 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7RHGAyAK3EP2EsNk= +github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gchaincl/sqlhooks v1.3.0 h1:yKPXxW9a5CjXaVf2HkQn6wn7TZARvbAOAelr3H8vK2Y= github.com/gchaincl/sqlhooks v1.3.0/go.mod h1:9BypXnereMT0+Ys8WGWHqzgkkOfHIhyeUCqXC24ra34= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= @@ -608,10 +627,14 @@ github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getkin/kin-openapi v0.115.0 h1:c8WHRLVY3G8m9jQTy0/DnIuljgRwTCB5twZytQS4JyU= github.com/getkin/kin-openapi v0.115.0/go.mod h1:l5e9PaFUo9fyLJCPGQeXI2ML8c3P8BHOEV2VaAVf/pc= +github.com/getsentry/sentry-go v0.12.0 h1:era7g0re5iY13bHSdN/xMkyV+5zZppjRVQhZrXCaEIk= +github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 h1:Mn26/9ZMNWSw9C9ERFA1PUxfmGpolnw2v0bKOREu5ew= github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32/go.mod h1:GIjDIg/heH5DOkXY3YJ/wNhfHsQHoXGjl8G8amsYQ1I= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.7.3/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= @@ -621,7 +644,10 @@ github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A= github.com/go-asn1-ber/asn1-ber v1.5.4/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= @@ -668,6 +694,7 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -855,6 +882,7 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v0.0.0-20170307180453-100ba4e88506/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -865,6 +893,8 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.0.3/go.mod h1:SavQ51ycCLnc7dGyJxp8YAmudx8xqiVrRf+6IXRsugc= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= @@ -922,6 +952,7 @@ github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219 h1:utua3L2IbQJmauC5IXdEA547bcoU5dozgQAfc8Onsg4= github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= @@ -1065,18 +1096,10 @@ github.com/grafana/grafana-google-sdk-go v0.1.0 h1:LKGY8z2DSxKjYfr2flZsWgTRTZ6HG github.com/grafana/grafana-google-sdk-go v0.1.0/go.mod h1:Vo2TKWfDVmNTELBUM+3lkrZvFtBws0qSZdXhQxRdJrE= github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW39s+c+LetqSCjFj7xxPC5+M= github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk= -github.com/grafana/grafana-plugin-sdk-go v0.160.0 h1:jELbsqee5kRz9vD1hZeP8+984xMZDU/M6uGv0RhOR34= -github.com/grafana/grafana-plugin-sdk-go v0.160.0/go.mod h1:dPhljkVno3Bg/ZYafMrR/BfYjtCRJD2hU2719Nl3QzM= github.com/grafana/grafana-plugin-sdk-go v0.162.0 h1:ij2ARWohf0IoK9yCVC1Wup4Gp6zwBq2AueVXRYsv/to= github.com/grafana/grafana-plugin-sdk-go v0.162.0/go.mod h1:dPhljkVno3Bg/ZYafMrR/BfYjtCRJD2hU2719Nl3QzM= -github.com/grafana/kindsys v0.0.0-20230323180930-c2a9ced5c751 h1:X5jwaMcpUMQ+xv7fKhs9U+oBxfo2x+x8GpHWybDSgk0= -github.com/grafana/kindsys v0.0.0-20230323180930-c2a9ced5c751/go.mod h1:213a3clTiegHfheYcLPLeEyHv/azK/fAF67OEbzuLzw= -github.com/grafana/kindsys v0.0.0-20230427152021-bb328815be7a h1:i2YhC6eTyDp+7Ftv5c6VZDUQskmKX4oIPGf38qfiZiU= -github.com/grafana/kindsys v0.0.0-20230427152021-bb328815be7a/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y= -github.com/grafana/kindsys v0.0.0-20230508172648-19fc432f045a h1:L8Qph5iUyVnLGinQzPmtJYUtPDG4TyT6vGDFT9EdCTU= -github.com/grafana/kindsys v0.0.0-20230508172648-19fc432f045a/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y= -github.com/grafana/kindsys v0.0.0-20230508175818-7ad73516220b h1:x3gw5zsWZ2vxQ0GYucB2PFQ6eISAoWkba5MrQd8ZK0E= -github.com/grafana/kindsys v0.0.0-20230508175818-7ad73516220b/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y= +github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482 h1:1YNoeIhii4UIIQpCPU+EXidnqf449d0C3ZntAEt4KSo= +github.com/grafana/kindsys v0.0.0-20230508162304-452481b63482/go.mod h1:GNcfpy5+SY6RVbNGQW264gC0r336Dm+0zgQ5vt6+M8Y= github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413 h1:bBzCezZNRyYlJpXTkyZdY4fpPxHZUdyeyRWzhtw/P6I= github.com/grafana/phlare/api v0.1.4-0.20230426005640-f90edba05413/go.mod h1:IvwuGG9xa/h96UH/exgvsfy3zE+ZpctkNT9o5aaGdrU= github.com/grafana/prometheus-alertmanager v0.25.1-0.20230508090422-7d5630522a53 h1:X3Jl4PBIGCtlPSMa6Uiu2+3FDNWmddSjivp+1DDznQs= @@ -1087,8 +1110,8 @@ github.com/grafana/saml v0.4.13-0.20230331080031-67cbfa09c7b6 h1:oHn/OOUkECNX06D github.com/grafana/saml v0.4.13-0.20230331080031-67cbfa09c7b6/go.mod h1:igEejV+fihTIlHXYP8zOec3V5A8y3lws5bQBFsTm4gA= github.com/grafana/sqlds/v2 v2.3.10 h1:HWKhE0vR6LoEiE+Is8CSZOgaB//D1yqb2ntkass9Fd4= github.com/grafana/sqlds/v2 v2.3.10/go.mod h1:c6ibxnxRVGxV/0YkEgvy7QpQH/lyifFyV7K/14xvdIs= -github.com/grafana/thema v0.0.0-20230417103609-99b482c479fe h1:Ws23A0XH6XYNaF/XhrOhNiC09rqGisvflCf0aHRhpTM= -github.com/grafana/thema v0.0.0-20230417103609-99b482c479fe/go.mod h1:hjlPua8wL3HO188Qg6GhTeYOPaUOneC04sFYRtcxSNw= +github.com/grafana/thema v0.0.0-20230523123227-db9596a7096e h1:pg6l/d7m7tsmlMQ6JCRI8AHFuqT41I7MWVPj8IADXzE= +github.com/grafana/thema v0.0.0-20230523123227-db9596a7096e/go.mod h1:Pn9nfzCk7nV0mvNgwusgCjCROZP6nm4GpwTnmEhLT24= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6 h1:I9dh1MXGX0wGyxdV/Sl7+ugnki4Dfsy8lv2s5Yf887o= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6/go.mod h1:ZkJLEYLoVyg7amJK/5r779bHyzs2AU8f8VMiP6BM7uY= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -1213,6 +1236,7 @@ github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= +github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -1224,6 +1248,7 @@ github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb v1.7.6/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= github.com/influxdata/influxdb-client-go/v2 v2.6.0 h1:bIOaGTgvvv1Na2hG+nIvqyv7PK2UiU2WrJN1ck1ykyM= @@ -1237,6 +1262,11 @@ github.com/invopop/yaml v0.1.0 h1:YW3WGUoJEXYfzWBjn00zIlrw7brGVD0fUKRYDPAPhrc= github.com/invopop/yaml v0.1.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= github.com/ionos-cloud/sdk-go/v6 v6.1.4 h1:BJHhFA8Q1SZC7VOXqKKr2BV2ysQ2/4hlk1e4hZte7GY= github.com/ionos-cloud/sdk-go/v6 v6.1.4/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= +github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= +github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= +github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= +github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= +github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= @@ -1327,9 +1357,15 @@ github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+ github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.16.2 h1:jgbatWHfRlPYiK85qgevsZTHviWXKwB1TTiKdz5PtRc= github.com/jung-kurt/gofpdf v1.16.2/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= +github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= +github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= +github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= +github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= @@ -1337,7 +1373,9 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.12/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= @@ -1347,6 +1385,7 @@ github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/knadh/koanf v1.2.0/go.mod h1:xpPTwMhsA/aaQLAilyCCqfpEiY1gpa160AiCuWHJUjY= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00= github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= @@ -1372,6 +1411,7 @@ github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LE github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= @@ -1458,10 +1498,13 @@ github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsO github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= @@ -1521,6 +1564,7 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJ github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de h1:D5x39vF5KCwKQaw+OC9ZPiLVHXz3UFw2+psEX+gYcto= github.com/mpvl/unique v0.0.0-20150818121801-cbe035fff7de/go.mod h1:kJun4WP5gFuHZgRjZUWWuH1DTxCtxbHDOIJsudS8jzY= @@ -1568,6 +1612,7 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/olivere/elastic v6.2.35+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= @@ -1641,6 +1686,8 @@ github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pierrec/lz4/v4 v4.1.8/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -1753,6 +1800,7 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= @@ -1779,6 +1827,7 @@ github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.14 h1:yFl3jyaSVLNYXlnNYM5z2pagEk1dYQhfr1p20T1NyKY= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.14/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sdboyer/cue v0.5.0-beta.2.0.20230419165817-251c3ae823d8 h1:R7AphSCwo1rqpRCftz9wn2azIGAtdgn1AjxTiSdFJ1o= github.com/sdboyer/cue v0.5.0-beta.2.0.20230419165817-251c3ae823d8/go.mod h1:okjJBHFQFer+a41sAe2SaGm1glWS8oEb6CmJvn5Zdws= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= @@ -1922,12 +1971,15 @@ github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= github.com/urfave/cli/v2 v2.24.4 h1:0gyJJEBYtCV87zI/x2nZCPyDxD51K6xM8SkwjHFCNEU= github.com/urfave/cli/v2 v2.24.4/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae h1:oyiy3uBj1F4O3AaFh7hUGBrJjAssJhKyAbwxtkslxqo= github.com/vectordotdev/go-datemath v0.1.1-0.20220323213446-f3954d0b18ae/go.mod h1:PnwzbSst7KD3vpBzzlntZU5gjVa455Uqa5QPiKSYJzQ= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= @@ -1968,6 +2020,7 @@ github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/yalue/merged_fs v1.2.2 h1:vXHTpJBluJryju7BBpytr3PDIkzsPMpiEknxVGPhN/I= github.com/yalue/merged_fs v1.2.2/go.mod h1:WqqchfVYQyclV2tnR7wtRhBddzBvLVR83Cjw9BKQw0M= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= @@ -2138,6 +2191,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -2240,6 +2294,7 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -2292,6 +2347,7 @@ golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -2404,6 +2460,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2569,11 +2626,13 @@ golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181112210238-4b1f3b6b1646/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -2784,10 +2843,12 @@ gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBl gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -2795,6 +2856,7 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk= gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/telebot.v3 v3.1.3/go.mod h1:GJKwwWqp9nSkIVN51eRKU78aB5f5OnQuWdwiIZfPbko= @@ -2812,6 +2874,7 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/kinds/dashboard/dashboard_kind.cue b/kinds/dashboard/dashboard_kind.cue index e1e2fe7b6b4..d304c973de8 100644 --- a/kinds/dashboard/dashboard_kind.cue +++ b/kinds/dashboard/dashboard_kind.cue @@ -11,577 +11,575 @@ description: "A Grafana dashboard." crd: dummySchema: true -lineage: seqs: [ - { - schemas: [ - // 0.0 - { - spec: { - // Unique numeric identifier for the dashboard. - // TODO must isolate or remove identifiers local to a Grafana instance...? - id?: int64 - // Unique dashboard identifier that can be generated by anyone. string (8-40) - uid?: string - // Title of dashboard. - title?: string - // Description of dashboard. - description?: string - // This property should only be used in dashboards defined by plugins. It is a quick check - // to see if the version has changed since the last time. Unclear why using the version property - // is insufficient. - revision?: int64 @grafanamaturity(NeedsExpertReview) - // For dashboards imported from the https://grafana.com/grafana/dashboards/ portal - gnetId?: string @grafanamaturity(NeedsExpertReview) - // Tags associated with dashboard. - tags?: [...string] @grafanamaturity(NeedsExpertReview) - // Theme of dashboard. - style: "light" | *"dark" @grafanamaturity(NeedsExpertReview) - // Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc". - timezone?: string | *"browser" - // Whether a dashboard is editable or not. - editable: bool | *true - // Configuration of dashboard cursor sync behavior. - graphTooltip: #DashboardCursorSync - // Time range for dashboard, e.g. last 6 hours, last 7 days, etc - time?: { - from: string | *"now-6h" - to: string | *"now" - } @grafanamaturity(NeedsExpertReview) - - // TODO docs - // TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes - timepicker?: { - // Whether timepicker is collapsed or not. - collapse: bool | *false - // Whether timepicker is enabled or not. - enable: bool | *true - // Whether timepicker is visible or not. - hidden: bool | *false - // Selectable intervals for auto-refresh. - refresh_intervals: [...string] | *["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"] - // TODO docs - time_options: [...string] | *["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"] - } @grafanamaturity(NeedsExpertReview) - // The month that the fiscal year starts on. 0 = January, 11 = December - fiscalYearStartMonth?: uint8 & <12 | *0 - // When set to true, the dashboard will redraw panels at an interval matching the pixel width. - // This will keep data "moving left" regardless of the query refresh rate. This setting helps - // avoid dashboards presenting stale live data - liveNow?: bool @grafanamaturity(NeedsExpertReview) - // TODO docs - weekStart?: string @grafanamaturity(NeedsExpertReview) - - // Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d". - refresh?: string | false - // Version of the JSON schema, incremented each time a Grafana update brings - // changes to said schema. - // TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion - schemaVersion: uint16 | *36 - // Version of the dashboard, incremented each time the dashboard is updated. - version?: uint32 @grafanamaturity(NeedsExpertReview) - panels?: [...(#Panel | #RowPanel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview) - // TODO docs - templating?: { - list?: [...#VariableModel] @grafanamaturity(NeedsExpertReview) - } - - // TODO docs - annotations?: #AnnotationContainer - - // TODO docs - links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview) - - snapshot?: #Snapshot @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafana(TSVeneer="type") - - /////////////////////////////////////// - // Definitions (referenced above) are declared below - - // TODO: this should be a regular DataQuery that depends on the selected dashboard - // these match the properties of the "grafana" datasouce that is default in most dashboards - #AnnotationTarget: { - // Only required/valid for the grafana datasource... - // but code+tests is already depending on it so hard to change - limit: int64 - // Only required/valid for the grafana datasource... - // but code+tests is already depending on it so hard to change - matchAny: bool - // Only required/valid for the grafana datasource... - // but code+tests is already depending on it so hard to change - tags: [...string] - // Only required/valid for the grafana datasource... - // but code+tests is already depending on it so hard to change - type: string - ... // datasource will stick their raw DataQuery here - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - #AnnotationPanelFilter: { - // Should the specified panels be included or excluded - exclude?: bool | *false - - // Panel IDs that should be included or excluded - ids: [...uint8] - } @cuetsy(kind="interface") - - // TODO -- should not be a public interface on its own, but required for Veneer - #AnnotationContainer: { - // annoying... but required so that the list is defined using the nested Veneer - @grafana(TSVeneer="type") - - list?: [...#AnnotationQuery] @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Unique numeric identifier for the dashboard. + // TODO must isolate or remove identifiers local to a Grafana instance...? + id?: int64 + // Unique dashboard identifier that can be generated by anyone. string (8-40) + uid?: string + // Title of dashboard. + title?: string + // Description of dashboard. + description?: string + // This property should only be used in dashboards defined by plugins. It is a quick check + // to see if the version has changed since the last time. Unclear why using the version property + // is insufficient. + revision?: int64 @grafanamaturity(NeedsExpertReview) + // For dashboards imported from the https://grafana.com/grafana/dashboards/ portal + gnetId?: string @grafanamaturity(NeedsExpertReview) + // Tags associated with dashboard. + tags?: [...string] @grafanamaturity(NeedsExpertReview) + // Theme of dashboard. + style: "light" | *"dark" @grafanamaturity(NeedsExpertReview) + // Timezone of dashboard. Accepts IANA TZDB zone ID or "browser" or "utc". + timezone?: string | *"browser" + // Whether a dashboard is editable or not. + editable: bool | *true + // Configuration of dashboard cursor sync behavior. + graphTooltip: #DashboardCursorSync + // Time range for dashboard, e.g. last 6 hours, last 7 days, etc + time?: { + from: string | *"now-6h" + to: string | *"now" + } @grafanamaturity(NeedsExpertReview) + // TODO docs + // TODO this appears to be spread all over in the frontend. Concepts will likely need tidying in tandem with schema changes + timepicker?: { + // Whether timepicker is collapsed or not. + collapse: bool | *false + // Whether timepicker is enabled or not. + enable: bool | *true + // Whether timepicker is visible or not. + hidden: bool | *false + // Selectable intervals for auto-refresh. + refresh_intervals: [...string] | *["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"] // TODO docs - // FROM: AnnotationQuery in grafana-data/src/types/annotations.ts - #AnnotationQuery: { - @grafana(TSVeneer="type") - - // Name of annotation. - name: string - - // TODO: Should be DataSourceRef - datasource: { - type?: string - uid?: string - } @grafanamaturity(NeedsExpertReview) - - // When enabled the annotation query is issued with every dashboard refresh - enable: bool | *true - - // Annotation queries can be toggled on or off at the top of the dashboard. - // When hide is true, the toggle is not shown in the dashboard. - hide?: bool | *false - - // Color to use for the annotation event markers - iconColor: string - - // Optionally - filter?: #AnnotationPanelFilter - - // TODO.. this should just be a normal query target - target?: #AnnotationTarget - - // TODO -- this should not exist here, it is based on the --grafana-- datasource - type?: string @grafanamaturity(NeedsExpertReview) - - // unless datasources have migrated to the target+mapping, - // they just spread their query into the base object :( - ... - } @cuetsy(kind="interface") - - #LoadingState: "NotStarted" | "Loading" | "Streaming" | "Done" | "Error" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) - - // FROM: packages/grafana-data/src/types/templateVars.ts - // TODO docs - // TODO what about what's in public/app/features/types.ts? - // TODO there appear to be a lot of different kinds of [template] vars here? if so need a disjunction - #VariableModel: { - id: string | *"00000000-0000-0000-0000-000000000000" - type: #VariableType - name: string - label?: string - rootStateKey?: string - global: bool | *false - hide: #VariableHide - skipUrlSync: bool | *false - index: int32 | *-1 - state: #LoadingState - error?: {...} - description?: string - // TODO: Move this into a separated QueryVariableModel type - query?: string | {...} - datasource?: #DataSourceRef - ... - } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - #VariableHide: 0 | 1 | 2 @cuetsy(kind="enum",memberNames="dontHide|hideLabel|hideVariable") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - #LoadingState: "NotStarted" | "Loading" | "Streaming" | "Done" | "Error" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) - - // Ref to a DataSource instance - #DataSourceRef: { - // The plugin type-id - type?: string @grafanamaturity(NeedsExpertReview) - - // Specific datasource instance - uid?: string @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - - // FROM public/app/features/dashboard/state/DashboardModels.ts - ish - // TODO docs - #DashboardLink: { - title: string @grafanamaturity(NeedsExpertReview) - type: #DashboardLinkType @grafanamaturity(NeedsExpertReview) - icon: string @grafanamaturity(NeedsExpertReview) - tooltip: string @grafanamaturity(NeedsExpertReview) - url: string @grafanamaturity(NeedsExpertReview) - tags: [...string] @grafanamaturity(NeedsExpertReview) - asDropdown: bool | *false @grafanamaturity(NeedsExpertReview) - targetBlank: bool | *false @grafanamaturity(NeedsExpertReview) - includeVars: bool | *false @grafanamaturity(NeedsExpertReview) - keepTime: bool | *false @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") - - // TODO docs - #DashboardLinkType: "link" | "dashboards" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) - - // FROM: packages/grafana-data/src/types/templateVars.ts - // TODO docs - // TODO this implies some wider pattern/discriminated union, probably? - #VariableType: "query" | "adhoc" | "constant" | "datasource" | "interval" | "textbox" | "custom" | "system" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #FieldColorModeId: "thresholds" | "palette-classic" | "palette-saturated" | "continuous-GrYlRd" | "fixed" @cuetsy(kind="enum",memberNames="Thresholds|PaletteClassic|PaletteSaturated|ContinuousGrYlRd|Fixed") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #FieldColorSeriesByMode: "min" | "max" | "last" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #FieldColor: { - // The main color scheme mode - mode: #FieldColorModeId | string - // Stores the fixed color value if mode is fixed - fixedColor?: string - // Some visualizations need to know how to assign a series color from by value color schemes - seriesBy?: #FieldColorSeriesByMode - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - #GridPos: { - // Panel - h: uint32 & >0 | *9 @grafanamaturity(NeedsExpertReview) - // Panel - w: uint32 & >0 & <=24 | *12 @grafanamaturity(NeedsExpertReview) - // Panel x - x: uint32 & >=0 & <24 | *0 @grafanamaturity(NeedsExpertReview) - // Panel y - y: uint32 & >=0 | *0 @grafanamaturity(NeedsExpertReview) - // true if fixed - static?: bool @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") - - // TODO docs - #Threshold: { - // TODO docs - // FIXME the corresponding typescript field is required/non-optional, but nulls currently appear here when serializing -Infinity to JSON - value?: number @grafanamaturity(NeedsExpertReview) - // TODO docs - color: string @grafanamaturity(NeedsExpertReview) - // Threshold index, an old property that is not needed an should only appear in older dashboards - index?: int32 @grafanamaturity(NeedsExpertReview) - // TODO docs - // TODO are the values here enumerable into a disjunction? - // Some seem to be listed in typescript comment - state?: string @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - #ThresholdsMode: "absolute" | "percentage" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) - - #ThresholdsConfig: { - mode: #ThresholdsMode @grafanamaturity(NeedsExpertReview) - - // Must be sorted by 'value', first value is always -Infinity - steps: [...#Threshold] @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #ValueMapping: #ValueMap | #RangeMap | #RegexMap | #SpecialValueMap @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #MappingType: "value" | "range" | "regex" | "special" @cuetsy(kind="enum",memberNames="ValueToText|RangeToText|RegexToText|SpecialValue") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #ValueMap: { - type: #MappingType & "value" - options: [string]: #ValueMappingResult - } @cuetsy(kind="interface") - - // TODO docs - #RangeMap: { - type: #MappingType & "range" - options: { - // to and from are `number | null` in current ts, really not sure what to do - from: float64 @grafanamaturity(NeedsExpertReview) - to: float64 @grafanamaturity(NeedsExpertReview) - result: #ValueMappingResult - } - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #RegexMap: { - type: #MappingType & "regex" - options: { - pattern: string - result: #ValueMappingResult - } - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #SpecialValueMap: { - type: #MappingType & "special" - options: { - match: "true" | "false" - pattern: string - result: #ValueMappingResult - } - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // TODO docs - #SpecialValueMatch: "true" | "false" | "null" | "nan" | "null+nan" | "empty" @cuetsy(kind="enum",memberNames="True|False|Null|NaN|NullAndNan|Empty") - - // TODO docs - #ValueMappingResult: { - text?: string - color?: string - icon?: string - index?: int32 - } @cuetsy(kind="interface") - - // TODO docs - #DataTransformerConfig: { - @grafana(TSVeneer="type") - - // Unique identifier of transformer - id: string - // Disabled transformations are skipped - disabled?: bool - // Optional frame matcher. When missing it will be applied to all results - filter?: #MatcherConfig - // Options to be passed to the transformer - // Valid options depend on the transformer id - options: _ - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // 0 for no shared crosshair or tooltip (default). - // 1 for shared crosshair. - // 2 for shared crosshair AND shared tooltip. - #DashboardCursorSync: *0 | 1 | 2 @cuetsy(kind="enum",memberNames="Off|Crosshair|Tooltip") - - // Schema for panel targets is specified by datasource - // plugins. We use a placeholder definition, which the Go - // schema loader either left open/as-is with the Base - // variant of the Dashboard and Panel families, or filled - // with types derived from plugins in the Instance variant. - // When working directly from CUE, importers can extend this - // type directly to achieve the same effect. - #Target: {...} @grafanamaturity(NeedsExpertReview) - - // TODO docs - #Snapshot: { - // TODO docs - created: string & t.Time - // TODO docs - expires: string @grafanamaturity(NeedsExpertReview) - // TODO docs - external: bool @grafanamaturity(NeedsExpertReview) - // TODO docs - externalUrl: string @grafanamaturity(NeedsExpertReview) - // TODO docs - id: uint32 @grafanamaturity(NeedsExpertReview) - // TODO docs - key: string @grafanamaturity(NeedsExpertReview) - // TODO docs - name: string @grafanamaturity(NeedsExpertReview) - // TODO docs - orgId: uint32 @grafanamaturity(NeedsExpertReview) - // TODO docs - updated: string & t.Time - // TODO docs - url?: string @grafanamaturity(NeedsExpertReview) - // TODO docs - userId: uint32 @grafanamaturity(NeedsExpertReview) - } @grafanamaturity(NeedsExpertReview) - - // Dashboard panels. Panels are canonically defined inline - // because they share a version timeline with the dashboard - // schema; they do not evolve independently. - #Panel: { - // The panel plugin type id. May not be empty. - type: string & strings.MinRunes(1) @grafanamaturity(NeedsExpertReview) - - // TODO docs - id?: uint32 @grafanamaturity(NeedsExpertReview) - - // FIXME this almost certainly has to be changed in favor of scuemata versions - pluginVersion?: string @grafanamaturity(NeedsExpertReview) - - // TODO docs - tags?: [...string] @grafanamaturity(NeedsExpertReview) - - // TODO docs - targets?: [...#Target] @grafanamaturity(NeedsExpertReview) - - // Panel title. - title?: string @grafanamaturity(NeedsExpertReview) - // Description. - description?: string @grafanamaturity(NeedsExpertReview) - // Whether to display the panel without a background. - transparent: bool | *false @grafanamaturity(NeedsExpertReview) - // The datasource used in all targets. - datasource?: { - type?: string - uid?: string - } @grafanamaturity(NeedsExpertReview) - // Grid position. - gridPos?: #GridPos - // Panel links. - // TODO fill this out - seems there are a couple variants? - links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview) - - // Name of template variable to repeat for. - repeat?: string @grafanamaturity(NeedsExpertReview) - // Direction to repeat in if 'repeat' is set. - // "h" for horizontal, "v" for vertical. - // TODO this is probably optional - repeatDirection: *"h" | "v" @grafanamaturity(NeedsExpertReview) - // Id of the repeating panel. - repeatPanelId?: int64 @grafanamaturity(NeedsExpertReview) - - // TODO docs - maxDataPoints?: number @grafanamaturity(NeedsExpertReview) - - // TODO docs - seems to be an old field from old dashboard alerts? - thresholds?: [...] @grafanamaturity(NeedsExpertReview) - - // TODO docs - timeRegions?: [...] @grafanamaturity(NeedsExpertReview) - - transformations: [...#DataTransformerConfig] @grafanamaturity(NeedsExpertReview) - - // TODO docs - // TODO tighter constraint - interval?: string @grafanamaturity(NeedsExpertReview) - - // TODO docs - // TODO tighter constraint - timeFrom?: string @grafanamaturity(NeedsExpertReview) - - // TODO docs - // TODO tighter constraint - timeShift?: string @grafanamaturity(NeedsExpertReview) - - // Dynamically load the panel - libraryPanel?: #LibraryPanelRef - - // options is specified by the Options field in panel - // plugin schemas. - options: {...} @grafanamaturity(NeedsExpertReview) - - fieldConfig: #FieldConfigSource - } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - - #FieldConfigSource: { - defaults: #FieldConfig - overrides: [...{ - matcher: #MatcherConfig - properties: [...#DynamicConfigValue] - }] @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - - #LibraryPanelRef: { - name: string - uid: string - } @cuetsy(kind="interface") - - #MatcherConfig: { - id: string | *"" @grafanamaturity(NeedsExpertReview) - options?: _ @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafana(TSVeneer="type") - - #DynamicConfigValue: { - id: string | *"" @grafanamaturity(NeedsExpertReview) - value?: _ @grafanamaturity(NeedsExpertReview) - } - - #FieldConfig: { - // The display value for this field. This supports template variables blank is auto - displayName?: string @grafanamaturity(NeedsExpertReview) - - // This can be used by data sources that return and explicit naming structure for values and labels - // When this property is configured, this value is used rather than the default naming strategy. - displayNameFromDS?: string @grafanamaturity(NeedsExpertReview) - - // Human readable field metadata - description?: string @grafanamaturity(NeedsExpertReview) - - // An explicit path to the field in the datasource. When the frame meta includes a path, - // This will default to `${frame.meta.path}/${field.name} - // - // When defined, this value can be used as an identifier within the datasource scope, and - // may be used to update the results - path?: string @grafanamaturity(NeedsExpertReview) - - // True if data source can write a value to the path. Auth/authz are supported separately - writeable?: bool @grafanamaturity(NeedsExpertReview) - - // True if data source field supports ad-hoc filters - filterable?: bool @grafanamaturity(NeedsExpertReview) - - // Numeric Options - unit?: string @grafanamaturity(NeedsExpertReview) - - // Significant digits (for display) - decimals?: number @grafanamaturity(NeedsExpertReview) - - min?: number @grafanamaturity(NeedsExpertReview) - max?: number @grafanamaturity(NeedsExpertReview) - - // Convert input values into a display string - mappings?: [...#ValueMapping] @grafanamaturity(NeedsExpertReview) - - // Map numeric values to states - thresholds?: #ThresholdsConfig @grafanamaturity(NeedsExpertReview) - - // Map values to a display color - color?: #FieldColor @grafanamaturity(NeedsExpertReview) - - // Used when reducing field values - // nullValueMode?: NullValueMode - - // The behavior when clicking on a result - links?: [...] @grafanamaturity(NeedsExpertReview) - - // Alternative to empty string - noValue?: string @grafanamaturity(NeedsExpertReview) - - // custom is specified by the FieldConfig field - // in panel plugin schemas. - custom?: {...} @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) - - // Row panel - #RowPanel: { - type: "row" @grafanamaturity(NeedsExpertReview) - collapsed: bool | *false @grafanamaturity(NeedsExpertReview) - title?: string @grafanamaturity(NeedsExpertReview) - - // Name of default datasource. - datasource?: { - type?: string @grafanamaturity(NeedsExpertReview) - uid?: string @grafanamaturity(NeedsExpertReview) - } @grafanamaturity(NeedsExpertReview) - - gridPos?: #GridPos - id: uint32 @grafanamaturity(NeedsExpertReview) - panels: [...(#Panel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview) - // Name of template variable to repeat for. - repeat?: string @grafanamaturity(NeedsExpertReview) - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - // Support for legacy graph and heatmap panels. - #GraphPanel: { - type: "graph" @grafanamaturity(NeedsExpertReview) - // @deprecated this is part of deprecated graph panel - legend?: { - show: bool | *true - sort?: string - sortDesc?: bool - } - ... - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - - #HeatmapPanel: { - type: "heatmap" @grafanamaturity(NeedsExpertReview) - ... - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - }, - ] - }, + time_options: [...string] | *["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"] + } @grafanamaturity(NeedsExpertReview) + // The month that the fiscal year starts on. 0 = January, 11 = December + fiscalYearStartMonth?: uint8 & <12 | *0 + // When set to true, the dashboard will redraw panels at an interval matching the pixel width. + // This will keep data "moving left" regardless of the query refresh rate. This setting helps + // avoid dashboards presenting stale live data + liveNow?: bool @grafanamaturity(NeedsExpertReview) + // TODO docs + weekStart?: string @grafanamaturity(NeedsExpertReview) + + // Refresh rate of dashboard. Represented via interval string, e.g. "5s", "1m", "1h", "1d". + refresh?: string | false + // Version of the JSON schema, incremented each time a Grafana update brings + // changes to said schema. + // TODO this is the existing schema numbering system. It will be replaced by Thema's themaVersion + schemaVersion: uint16 | *36 + // Version of the dashboard, incremented each time the dashboard is updated. + version?: uint32 @grafanamaturity(NeedsExpertReview) + panels?: [...(#Panel | #RowPanel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview) + // TODO docs + templating?: { + list?: [...#VariableModel] @grafanamaturity(NeedsExpertReview) + } + + // TODO docs + annotations?: #AnnotationContainer + + // TODO docs + links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview) + + snapshot?: #Snapshot @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafana(TSVeneer="type") + + /////////////////////////////////////// + // Definitions (referenced above) are declared below + + // TODO: this should be a regular DataQuery that depends on the selected dashboard + // these match the properties of the "grafana" datasouce that is default in most dashboards + #AnnotationTarget: { + // Only required/valid for the grafana datasource... + // but code+tests is already depending on it so hard to change + limit: int64 + // Only required/valid for the grafana datasource... + // but code+tests is already depending on it so hard to change + matchAny: bool + // Only required/valid for the grafana datasource... + // but code+tests is already depending on it so hard to change + tags: [...string] + // Only required/valid for the grafana datasource... + // but code+tests is already depending on it so hard to change + type: string + ... // datasource will stick their raw DataQuery here + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + #AnnotationPanelFilter: { + // Should the specified panels be included or excluded + exclude?: bool | *false + + // Panel IDs that should be included or excluded + ids: [...uint8] + } @cuetsy(kind="interface") + + // TODO -- should not be a public interface on its own, but required for Veneer + #AnnotationContainer: { + // annoying... but required so that the list is defined using the nested Veneer + @grafana(TSVeneer="type") + + list?: [...#AnnotationQuery] @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") + + // TODO docs + // FROM: AnnotationQuery in grafana-data/src/types/annotations.ts + #AnnotationQuery: { + @grafana(TSVeneer="type") + + // Name of annotation. + name: string + + // TODO: Should be DataSourceRef + datasource: { + type?: string + uid?: string + } @grafanamaturity(NeedsExpertReview) + + // When enabled the annotation query is issued with every dashboard refresh + enable: bool | *true + + // Annotation queries can be toggled on or off at the top of the dashboard. + // When hide is true, the toggle is not shown in the dashboard. + hide?: bool | *false + + // Color to use for the annotation event markers + iconColor: string + + // Optionally + filter?: #AnnotationPanelFilter + + // TODO.. this should just be a normal query target + target?: #AnnotationTarget + + // TODO -- this should not exist here, it is based on the --grafana-- datasource + type?: string @grafanamaturity(NeedsExpertReview) + + // unless datasources have migrated to the target+mapping, + // they just spread their query into the base object :( + ... + } @cuetsy(kind="interface") + + #LoadingState: "NotStarted" | "Loading" | "Streaming" | "Done" | "Error" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) + + // FROM: packages/grafana-data/src/types/templateVars.ts + // TODO docs + // TODO what about what's in public/app/features/types.ts? + // TODO there appear to be a lot of different kinds of [template] vars here? if so need a disjunction + #VariableModel: { + id: string | *"00000000-0000-0000-0000-000000000000" + type: #VariableType + name: string + label?: string + rootStateKey?: string + global: bool | *false + hide: #VariableHide + skipUrlSync: bool | *false + index: int32 | *-1 + state: #LoadingState + error?: {...} + description?: string + // TODO: Move this into a separated QueryVariableModel type + query?: string | {...} + datasource?: #DataSourceRef + ... + } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + #VariableHide: 0 | 1 | 2 @cuetsy(kind="enum",memberNames="dontHide|hideLabel|hideVariable") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + #LoadingState: "NotStarted" | "Loading" | "Streaming" | "Done" | "Error" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) + + // Ref to a DataSource instance + #DataSourceRef: { + // The plugin type-id + type?: string @grafanamaturity(NeedsExpertReview) + + // Specific datasource instance + uid?: string @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + + // FROM public/app/features/dashboard/state/DashboardModels.ts - ish + // TODO docs + #DashboardLink: { + title: string @grafanamaturity(NeedsExpertReview) + type: #DashboardLinkType @grafanamaturity(NeedsExpertReview) + icon: string @grafanamaturity(NeedsExpertReview) + tooltip: string @grafanamaturity(NeedsExpertReview) + url: string @grafanamaturity(NeedsExpertReview) + tags: [...string] @grafanamaturity(NeedsExpertReview) + asDropdown: bool | *false @grafanamaturity(NeedsExpertReview) + targetBlank: bool | *false @grafanamaturity(NeedsExpertReview) + includeVars: bool | *false @grafanamaturity(NeedsExpertReview) + keepTime: bool | *false @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") + + // TODO docs + #DashboardLinkType: "link" | "dashboards" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) + + // FROM: packages/grafana-data/src/types/templateVars.ts + // TODO docs + // TODO this implies some wider pattern/discriminated union, probably? + #VariableType: "query" | "adhoc" | "constant" | "datasource" | "interval" | "textbox" | "custom" | "system" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #FieldColorModeId: "thresholds" | "palette-classic" | "palette-saturated" | "continuous-GrYlRd" | "fixed" @cuetsy(kind="enum",memberNames="Thresholds|PaletteClassic|PaletteSaturated|ContinuousGrYlRd|Fixed") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #FieldColorSeriesByMode: "min" | "max" | "last" @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #FieldColor: { + // The main color scheme mode + mode: #FieldColorModeId | string + // Stores the fixed color value if mode is fixed + fixedColor?: string + // Some visualizations need to know how to assign a series color from by value color schemes + seriesBy?: #FieldColorSeriesByMode + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + #GridPos: { + // Panel + h: uint32 & >0 | *9 @grafanamaturity(NeedsExpertReview) + // Panel + w: uint32 & >0 & <=24 | *12 @grafanamaturity(NeedsExpertReview) + // Panel x + x: uint32 & >=0 & <24 | *0 @grafanamaturity(NeedsExpertReview) + // Panel y + y: uint32 & >=0 | *0 @grafanamaturity(NeedsExpertReview) + // true if fixed + static?: bool @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") + + // TODO docs + #Threshold: { + // TODO docs + // FIXME the corresponding typescript field is required/non-optional, but nulls currently appear here when serializing -Infinity to JSON + value?: number @grafanamaturity(NeedsExpertReview) + // TODO docs + color: string @grafanamaturity(NeedsExpertReview) + // Threshold index, an old property that is not needed an should only appear in older dashboards + index?: int32 @grafanamaturity(NeedsExpertReview) + // TODO docs + // TODO are the values here enumerable into a disjunction? + // Some seem to be listed in typescript comment + state?: string @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + #ThresholdsMode: "absolute" | "percentage" @cuetsy(kind="enum") @grafanamaturity(NeedsExpertReview) + + #ThresholdsConfig: { + mode: #ThresholdsMode @grafanamaturity(NeedsExpertReview) + + // Must be sorted by 'value', first value is always -Infinity + steps: [...#Threshold] @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #ValueMapping: #ValueMap | #RangeMap | #RegexMap | #SpecialValueMap @cuetsy(kind="type") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #MappingType: "value" | "range" | "regex" | "special" @cuetsy(kind="enum",memberNames="ValueToText|RangeToText|RegexToText|SpecialValue") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #ValueMap: { + type: #MappingType & "value" + options: [string]: #ValueMappingResult + } @cuetsy(kind="interface") + + // TODO docs + #RangeMap: { + type: #MappingType & "range" + options: { + // to and from are `number | null` in current ts, really not sure what to do + from: float64 @grafanamaturity(NeedsExpertReview) + to: float64 @grafanamaturity(NeedsExpertReview) + result: #ValueMappingResult + } + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #RegexMap: { + type: #MappingType & "regex" + options: { + pattern: string + result: #ValueMappingResult + } + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #SpecialValueMap: { + type: #MappingType & "special" + options: { + match: "true" | "false" + pattern: string + result: #ValueMappingResult + } + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // TODO docs + #SpecialValueMatch: "true" | "false" | "null" | "nan" | "null+nan" | "empty" @cuetsy(kind="enum",memberNames="True|False|Null|NaN|NullAndNan|Empty") + + // TODO docs + #ValueMappingResult: { + text?: string + color?: string + icon?: string + index?: int32 + } @cuetsy(kind="interface") + + // TODO docs + #DataTransformerConfig: { + @grafana(TSVeneer="type") + + // Unique identifier of transformer + id: string + // Disabled transformations are skipped + disabled?: bool + // Optional frame matcher. When missing it will be applied to all results + filter?: #MatcherConfig + // Options to be passed to the transformer + // Valid options depend on the transformer id + options: _ + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // 0 for no shared crosshair or tooltip (default). + // 1 for shared crosshair. + // 2 for shared crosshair AND shared tooltip. + #DashboardCursorSync: *0 | 1 | 2 @cuetsy(kind="enum",memberNames="Off|Crosshair|Tooltip") + + // Schema for panel targets is specified by datasource + // plugins. We use a placeholder definition, which the Go + // schema loader either left open/as-is with the Base + // variant of the Dashboard and Panel families, or filled + // with types derived from plugins in the Instance variant. + // When working directly from CUE, importers can extend this + // type directly to achieve the same effect. + #Target: {...} @grafanamaturity(NeedsExpertReview) + + // TODO docs + #Snapshot: { + // TODO docs + created: string & t.Time + // TODO docs + expires: string @grafanamaturity(NeedsExpertReview) + // TODO docs + external: bool @grafanamaturity(NeedsExpertReview) + // TODO docs + externalUrl: string @grafanamaturity(NeedsExpertReview) + // TODO docs + id: uint32 @grafanamaturity(NeedsExpertReview) + // TODO docs + key: string @grafanamaturity(NeedsExpertReview) + // TODO docs + name: string @grafanamaturity(NeedsExpertReview) + // TODO docs + orgId: uint32 @grafanamaturity(NeedsExpertReview) + // TODO docs + updated: string & t.Time + // TODO docs + url?: string @grafanamaturity(NeedsExpertReview) + // TODO docs + userId: uint32 @grafanamaturity(NeedsExpertReview) + } @grafanamaturity(NeedsExpertReview) + + // Dashboard panels. Panels are canonically defined inline + // because they share a version timeline with the dashboard + // schema; they do not evolve independently. + #Panel: { + // The panel plugin type id. May not be empty. + type: string & strings.MinRunes(1) @grafanamaturity(NeedsExpertReview) + + // TODO docs + id?: uint32 @grafanamaturity(NeedsExpertReview) + + // FIXME this almost certainly has to be changed in favor of scuemata versions + pluginVersion?: string @grafanamaturity(NeedsExpertReview) + + // TODO docs + tags?: [...string] @grafanamaturity(NeedsExpertReview) + + // TODO docs + targets?: [...#Target] @grafanamaturity(NeedsExpertReview) + + // Panel title. + title?: string @grafanamaturity(NeedsExpertReview) + // Description. + description?: string @grafanamaturity(NeedsExpertReview) + // Whether to display the panel without a background. + transparent: bool | *false @grafanamaturity(NeedsExpertReview) + // The datasource used in all targets. + datasource?: { + type?: string + uid?: string + } @grafanamaturity(NeedsExpertReview) + // Grid position. + gridPos?: #GridPos + // Panel links. + // TODO fill this out - seems there are a couple variants? + links?: [...#DashboardLink] @grafanamaturity(NeedsExpertReview) + + // Name of template variable to repeat for. + repeat?: string @grafanamaturity(NeedsExpertReview) + // Direction to repeat in if 'repeat' is set. + // "h" for horizontal, "v" for vertical. + // TODO this is probably optional + repeatDirection: *"h" | "v" @grafanamaturity(NeedsExpertReview) + // Id of the repeating panel. + repeatPanelId?: int64 @grafanamaturity(NeedsExpertReview) + + // TODO docs + maxDataPoints?: number @grafanamaturity(NeedsExpertReview) + + // TODO docs - seems to be an old field from old dashboard alerts? + thresholds?: [...] @grafanamaturity(NeedsExpertReview) + + // TODO docs + timeRegions?: [...] @grafanamaturity(NeedsExpertReview) + + transformations: [...#DataTransformerConfig] @grafanamaturity(NeedsExpertReview) + + // TODO docs + // TODO tighter constraint + interval?: string @grafanamaturity(NeedsExpertReview) + + // TODO docs + // TODO tighter constraint + timeFrom?: string @grafanamaturity(NeedsExpertReview) + + // TODO docs + // TODO tighter constraint + timeShift?: string @grafanamaturity(NeedsExpertReview) + + // Dynamically load the panel + libraryPanel?: #LibraryPanelRef + + // options is specified by the Options field in panel + // plugin schemas. + options: {...} @grafanamaturity(NeedsExpertReview) + + fieldConfig: #FieldConfigSource + } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + + #FieldConfigSource: { + defaults: #FieldConfig + overrides: [...{ + matcher: #MatcherConfig + properties: [...#DynamicConfigValue] + }] @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + + #LibraryPanelRef: { + name: string + uid: string + } @cuetsy(kind="interface") + + #MatcherConfig: { + id: string | *"" @grafanamaturity(NeedsExpertReview) + options?: _ @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafana(TSVeneer="type") + + #DynamicConfigValue: { + id: string | *"" @grafanamaturity(NeedsExpertReview) + value?: _ @grafanamaturity(NeedsExpertReview) + } + + #FieldConfig: { + // The display value for this field. This supports template variables blank is auto + displayName?: string @grafanamaturity(NeedsExpertReview) + + // This can be used by data sources that return and explicit naming structure for values and labels + // When this property is configured, this value is used rather than the default naming strategy. + displayNameFromDS?: string @grafanamaturity(NeedsExpertReview) + + // Human readable field metadata + description?: string @grafanamaturity(NeedsExpertReview) + + // An explicit path to the field in the datasource. When the frame meta includes a path, + // This will default to `${frame.meta.path}/${field.name} + // + // When defined, this value can be used as an identifier within the datasource scope, and + // may be used to update the results + path?: string @grafanamaturity(NeedsExpertReview) + + // True if data source can write a value to the path. Auth/authz are supported separately + writeable?: bool @grafanamaturity(NeedsExpertReview) + + // True if data source field supports ad-hoc filters + filterable?: bool @grafanamaturity(NeedsExpertReview) + + // Numeric Options + unit?: string @grafanamaturity(NeedsExpertReview) + + // Significant digits (for display) + decimals?: number @grafanamaturity(NeedsExpertReview) + + min?: number @grafanamaturity(NeedsExpertReview) + max?: number @grafanamaturity(NeedsExpertReview) + + // Convert input values into a display string + mappings?: [...#ValueMapping] @grafanamaturity(NeedsExpertReview) + + // Map numeric values to states + thresholds?: #ThresholdsConfig @grafanamaturity(NeedsExpertReview) + + // Map values to a display color + color?: #FieldColor @grafanamaturity(NeedsExpertReview) + + // Used when reducing field values + // nullValueMode?: NullValueMode + + // The behavior when clicking on a result + links?: [...] @grafanamaturity(NeedsExpertReview) + + // Alternative to empty string + noValue?: string @grafanamaturity(NeedsExpertReview) + + // custom is specified by the FieldConfig field + // in panel plugin schemas. + custom?: {...} @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafana(TSVeneer="type") @grafanamaturity(NeedsExpertReview) + + // Row panel + #RowPanel: { + type: "row" @grafanamaturity(NeedsExpertReview) + collapsed: bool | *false @grafanamaturity(NeedsExpertReview) + title?: string @grafanamaturity(NeedsExpertReview) + + // Name of default datasource. + datasource?: { + type?: string @grafanamaturity(NeedsExpertReview) + uid?: string @grafanamaturity(NeedsExpertReview) + } @grafanamaturity(NeedsExpertReview) + + gridPos?: #GridPos + id: uint32 @grafanamaturity(NeedsExpertReview) + panels: [...(#Panel | #GraphPanel | #HeatmapPanel)] @grafanamaturity(NeedsExpertReview) + // Name of template variable to repeat for. + repeat?: string @grafanamaturity(NeedsExpertReview) + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + // Support for legacy graph and heatmap panels. + #GraphPanel: { + type: "graph" @grafanamaturity(NeedsExpertReview) + // @deprecated this is part of deprecated graph panel + legend?: { + show: bool | *true + sort?: string + sortDesc?: bool + } + ... + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + + #HeatmapPanel: { + type: "heatmap" @grafanamaturity(NeedsExpertReview) + ... + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + } + +}, ] diff --git a/kinds/folder/folder_kind.cue b/kinds/folder/folder_kind.cue index b0b5a1b4cc1..06e291f930b 100644 --- a/kinds/folder/folder_kind.cue +++ b/kinds/folder/folder_kind.cue @@ -4,27 +4,22 @@ name: "Folder" maturity: "merged" description: "A folder is a collection of resources that are grouped together and can share permissions." -lineage: seqs: [ - { - schemas: [ - //0.0 - { +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Unique folder id. (will be k8s name) + uid: string - spec: { - // Unique folder id. (will be k8s name) - uid: string + // Folder title + title: string - // Folder title - title: string - - // Description of the folder. - description?: string - } @cuetsy(kind="interface") - // - // TODO: - // common metadata will soon support setting the parent folder in the metadata - // - }, - ] - }, -] + // Description of the folder. + description?: string + } @cuetsy(kind="interface") + // + // TODO: + // common metadata will soon support setting the parent folder in the metadata + // + } +}] diff --git a/kinds/librarypanel/librarypanel_kind.cue b/kinds/librarypanel/librarypanel_kind.cue index 3b7b187a9df..b87ceccb6fc 100644 --- a/kinds/librarypanel/librarypanel_kind.cue +++ b/kinds/librarypanel/librarypanel_kind.cue @@ -9,59 +9,55 @@ name: "LibraryPanel" maturity: "experimental" description: "A standalone panel" -lineage: seqs: [ - { - schemas: [ - // 0.0 - { - spec: { - // Folder UID - folderUid?: string @grafanamaturity(ToMetadata="sys") +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Folder UID + folderUid?: string @grafanamaturity(ToMetadata="sys") - // Library element UID - uid: string + // Library element UID + uid: string - // Panel name (also saved in the model) - name: string & strings.MinRunes(1) + // Panel name (also saved in the model) + name: string & strings.MinRunes(1) - // Panel description - description?: string + // Panel description + description?: string - // The panel type (from inside the model) - type: string & strings.MinRunes(1) + // The panel type (from inside the model) + type: string & strings.MinRunes(1) - // Dashboard version when this was saved (zero if unknown) - schemaVersion?: uint16 + // Dashboard version when this was saved (zero if unknown) + schemaVersion?: uint16 - // panel version, incremented each time the dashboard is updated. - version: int64 @grafanamaturity(NeedsExpertReview) + // panel version, incremented each time the dashboard is updated. + version: int64 @grafanamaturity(NeedsExpertReview) - // TODO: should be the same panel schema defined in dashboard - // Typescript: Omit; - model: {...} + // TODO: should be the same panel schema defined in dashboard + // Typescript: Omit; + model: {...} - // Object storage metadata - meta?: #LibraryElementDTOMeta @grafanamaturity(ToMetadata="sys") - } @cuetsy(kind="interface") @grafana(TSVeneer="type") + // Object storage metadata + meta?: #LibraryElementDTOMeta @grafanamaturity(ToMetadata="sys") + } @cuetsy(kind="interface") @grafana(TSVeneer="type") - #LibraryElementDTOMetaUser: { - id: int64 - name: string - avatarUrl: string - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + #LibraryElementDTOMetaUser: { + id: int64 + name: string + avatarUrl: string + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - #LibraryElementDTOMeta: { - folderName: string - folderUid: string @grafanamaturity(ToMetadata="sys") - connectedDashboards: int64 + #LibraryElementDTOMeta: { + folderName: string + folderUid: string @grafanamaturity(ToMetadata="sys") + connectedDashboards: int64 - created: string & time.Time - updated: string & time.Time + created: string & time.Time + updated: string & time.Time - createdBy: #LibraryElementDTOMetaUser @grafanamaturity(ToMetadata="sys") - updatedBy: #LibraryElementDTOMetaUser @grafanamaturity(ToMetadata="sys") - } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) - }, - ] - }, -] + createdBy: #LibraryElementDTOMetaUser @grafanamaturity(ToMetadata="sys") + updatedBy: #LibraryElementDTOMetaUser @grafanamaturity(ToMetadata="sys") + } @cuetsy(kind="interface") @grafanamaturity(NeedsExpertReview) + } +}] diff --git a/kinds/playlist/playlist_kind.cue b/kinds/playlist/playlist_kind.cue index 6200ca52149..a87e1c01a1e 100644 --- a/kinds/playlist/playlist_kind.cue +++ b/kinds/playlist/playlist_kind.cue @@ -4,48 +4,44 @@ name: "Playlist" maturity: "merged" description: "A playlist is a series of dashboards that is automatically rotated in the browser, on a configurable interval." -lineage: seqs: [ - { - schemas: [ - //0.0 - { - spec: { - // Unique playlist identifier. Generated on creation, either by the - // creator of the playlist of by the application. - uid: string +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Unique playlist identifier. Generated on creation, either by the + // creator of the playlist of by the application. + uid: string - // Name of the playlist. - name: string + // Name of the playlist. + name: string - // Interval sets the time between switching views in a playlist. - // FIXME: Is this based on a standardized format or what options are available? Can datemath be used? - interval: string | *"5m" + // Interval sets the time between switching views in a playlist. + // FIXME: Is this based on a standardized format or what options are available? Can datemath be used? + interval: string | *"5m" - // The ordered list of items that the playlist will iterate over. - // FIXME! This should not be optional, but changing it makes the godegen awkward - items?: [...#PlaylistItem] - } @cuetsy(kind="interface") + // The ordered list of items that the playlist will iterate over. + // FIXME! This should not be optional, but changing it makes the godegen awkward + items?: [...#PlaylistItem] + } @cuetsy(kind="interface") - /////////////////////////////////////// - // Definitions (referenced above) are declared below + /////////////////////////////////////// + // Definitions (referenced above) are declared below - #PlaylistItem: { - // Type of the item. - type: "dashboard_by_uid" | "dashboard_by_id" | "dashboard_by_tag" - // Value depends on type and describes the playlist item. - // - // - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This - // is not portable as the numerical identifier is non-deterministic between different instances. - // Will be replaced by dashboard_by_uid in the future. (deprecated) - // - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All - // dashboards behind the tag will be added to the playlist. - // - dashboard_by_uid: The value is the dashboard UID - value: string + #PlaylistItem: { + // Type of the item. + type: "dashboard_by_uid" | "dashboard_by_id" | "dashboard_by_tag" + // Value depends on type and describes the playlist item. + // + // - dashboard_by_id: The value is an internal numerical identifier set by Grafana. This + // is not portable as the numerical identifier is non-deterministic between different instances. + // Will be replaced by dashboard_by_uid in the future. (deprecated) + // - dashboard_by_tag: The value is a tag which is set on any number of dashboards. All + // dashboards behind the tag will be added to the playlist. + // - dashboard_by_uid: The value is the dashboard UID + value: string - // Title is an unused property -- it will be removed in the future - title?: string - } @cuetsy(kind="interface") - }, - ] - }, -] + // Title is an unused property -- it will be removed in the future + title?: string + } @cuetsy(kind="interface") + } +}] diff --git a/kinds/preferences/preferences_kind.cue b/kinds/preferences/preferences_kind.cue index 2ab47fa6559..906de1c7840 100644 --- a/kinds/preferences/preferences_kind.cue +++ b/kinds/preferences/preferences_kind.cue @@ -4,36 +4,33 @@ name: "Preferences" maturity: "merged" description: "The user or team frontend preferences" -lineage: seqs: [ - { - schemas: [ - { - spec: { - // UID for the home dashboard - homeDashboardUID?: string +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // UID for the home dashboard + homeDashboardUID?: string - // The timezone selection - // TODO: this should use the timezone defined in common - timezone?: string + // The timezone selection + // TODO: this should use the timezone defined in common + timezone?: string - // day of the week (sunday, monday, etc) - weekStart?: string + // day of the week (sunday, monday, etc) + weekStart?: string - // light, dark, empty is default - theme?: string + // light, dark, empty is default + theme?: string - // Selected language (beta) - language?: string + // Selected language (beta) + language?: string - // Explore query history preferences - queryHistory?: #QueryHistoryPreference - } @cuetsy(kind="interface") + // Explore query history preferences + queryHistory?: #QueryHistoryPreference + } @cuetsy(kind="interface") - #QueryHistoryPreference: { - // one of: '' | 'query' | 'starred'; - homeTab?: string - } @cuetsy(kind="interface") - }, - ] - }, -] + #QueryHistoryPreference: { + // one of: '' | 'query' | 'starred'; + homeTab?: string + } @cuetsy(kind="interface") + } +}] diff --git a/kinds/publicdashboard/public_dashboard_kind.cue b/kinds/publicdashboard/public_dashboard_kind.cue index b78295fdb29..f3a569fa334 100644 --- a/kinds/publicdashboard/public_dashboard_kind.cue +++ b/kinds/publicdashboard/public_dashboard_kind.cue @@ -4,26 +4,22 @@ name: "PublicDashboard" maturity: "merged" description: "Public dashboard configuration" -lineage: seqs: [ - { - schemas: [ - // 0.0 - { - spec: { - // Unique public dashboard identifier - uid: string - // Dashboard unique identifier referenced by this public dashboard - dashboardUid: string - // Unique public access token - accessToken?: string - // Flag that indicates if the public dashboard is enabled - isEnabled: bool - // Flag that indicates if annotations are enabled - annotationsEnabled: bool - // Flag that indicates if the time range picker is enabled - timeSelectionEnabled: bool - } @cuetsy(kind="interface") - }, - ] - }, -] +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Unique public dashboard identifier + uid: string + // Dashboard unique identifier referenced by this public dashboard + dashboardUid: string + // Unique public access token + accessToken?: string + // Flag that indicates if the public dashboard is enabled + isEnabled: bool + // Flag that indicates if annotations are enabled + annotationsEnabled: bool + // Flag that indicates if the time range picker is enabled + timeSelectionEnabled: bool + } @cuetsy(kind="interface") + } +}] diff --git a/kinds/serviceaccount/serviceaccount_kind.cue b/kinds/serviceaccount/serviceaccount_kind.cue index ff2ac9682ce..d4884026044 100644 --- a/kinds/serviceaccount/serviceaccount_kind.cue +++ b/kinds/serviceaccount/serviceaccount_kind.cue @@ -4,42 +4,38 @@ name: "ServiceAccount" maturity: "merged" description: "system account" -lineage: seqs: [ - { - schemas: [ - // v0.0 - { - spec: { - // ID is the unique identifier of the service account in the database. - id: int64 @grafanamaturity(ToMetadata="sys") - // OrgId is the ID of an organisation the service account belongs to. - orgId: int64 @grafanamaturity(ToMetadata="sys") - // Name of the service account. - name: string - // Login of the service account. - login: string - // IsDisabled indicates if the service account is disabled. - isDisabled: bool - // Role is the Grafana organization role of the service account which can be 'Viewer', 'Editor', 'Admin'. - role: #OrgRole @grafanamaturity(ToMetadata="kind") - // Tokens is the number of active tokens for the service account. - // Tokens are used to authenticate the service account against Grafana. - tokens: int64 @grafanamaturity(ToMetadata="kind") - // AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front - // of the service account. - avatarUrl: string @grafanamaturity(ToMetadata="kind") - // AccessControl metadata associated with a given resource. - accessControl?: { - [string]: bool @grafanamaturity(ToMetadata="sys") - } +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // ID is the unique identifier of the service account in the database. + id: int64 @grafanamaturity(ToMetadata="sys") + // OrgId is the ID of an organisation the service account belongs to. + orgId: int64 @grafanamaturity(ToMetadata="sys") + // Name of the service account. + name: string + // Login of the service account. + login: string + // IsDisabled indicates if the service account is disabled. + isDisabled: bool + // Role is the Grafana organization role of the service account which can be 'Viewer', 'Editor', 'Admin'. + role: #OrgRole @grafanamaturity(ToMetadata="kind") + // Tokens is the number of active tokens for the service account. + // Tokens are used to authenticate the service account against Grafana. + tokens: int64 @grafanamaturity(ToMetadata="kind") + // AvatarUrl is the service account's avatar URL. It allows the frontend to display a picture in front + // of the service account. + avatarUrl: string @grafanamaturity(ToMetadata="kind") + // AccessControl metadata associated with a given resource. + accessControl?: { + [string]: bool @grafanamaturity(ToMetadata="sys") + } - // Teams is a list of teams the service account belongs to. - teams?: [...string] @grafanamaturity(ToMetadata="sys") - } @cuetsy(kind="interface") + // Teams is a list of teams the service account belongs to. + teams?: [...string] @grafanamaturity(ToMetadata="sys") + } @cuetsy(kind="interface") - // OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'. - #OrgRole: "Admin" | "Editor" | "Viewer" @cuetsy(kind="type") - }, - ] - }, -] + // OrgRole is a Grafana Organization Role which can be 'Viewer', 'Editor', 'Admin'. + #OrgRole: "Admin" | "Editor" | "Viewer" @cuetsy(kind="type") + } +}] diff --git a/kinds/team/team_kind.cue b/kinds/team/team_kind.cue index 59cbc85c843..08237211a29 100644 --- a/kinds/team/team_kind.cue +++ b/kinds/team/team_kind.cue @@ -4,18 +4,14 @@ name: "Team" maturity: "merged" description: "A team is a named grouping of Grafana users to which access control rules may be assigned." -lineage: seqs: [ - { - schemas: [ - // v0.0 - { - spec: { - // Name of the team. - name: string - // Email of the team. - email?: string - } @cuetsy(kind="interface") - }, - ] - }, -] +lineage: schemas: [{ + version: [0, 0] + schema: { + spec: { + // Name of the team. + name: string + // Email of the team. + email?: string + } @cuetsy(kind="interface") + } +}] diff --git a/packages/grafana-schema/src/raw/folder/x/folder_types.gen.ts b/packages/grafana-schema/src/raw/folder/x/folder_types.gen.ts index 45922122c71..77a49f1b3df 100644 --- a/packages/grafana-schema/src/raw/folder/x/folder_types.gen.ts +++ b/packages/grafana-schema/src/raw/folder/x/folder_types.gen.ts @@ -8,6 +8,10 @@ // // Run 'make gen-cue' from repository root to regenerate. +/** + * TODO: + * common metadata will soon support setting the parent folder in the metadata + */ export interface Folder { /** * Description of the folder. diff --git a/pkg/codegen/jenny_go_resources.go b/pkg/codegen/jenny_go_resources.go index c8a02abfa48..d7115f77be9 100644 --- a/pkg/codegen/jenny_go_resources.go +++ b/pkg/codegen/jenny_go_resources.go @@ -13,6 +13,8 @@ import ( "github.com/grafana/thema/encoding/openapi" ) +var schPath = cue.MakePath(cue.Hid("_#schema", "github.com/grafana/thema")) + type ResourceGoTypesJenny struct { ApplyFuncs []dstutil.ApplyFunc ExpandReferences bool @@ -31,7 +33,7 @@ func (ag *ResourceGoTypesJenny) Generate(kind kindsys.Kind) (*codejen.File, erro } sch := sfg.Schema - iter, err := sch.Underlying().Fields() + iter, err := sch.Underlying().LookupPath(schPath).Fields() if err != nil { return nil, err } @@ -77,7 +79,7 @@ func (g *SubresourceGoTypesJenny) Generate(kind kindsys.Kind) (codejen.Files, er // Iterate through all top-level fields and make go types for them // (this should consist of "spec" and arbitrary subresources) - i, err := sch.Underlying().Fields() + i, err := sch.Underlying().LookupPath(schPath).Fields() if err != nil { return nil, err } diff --git a/pkg/codegen/jenny_tsveneerindex.go b/pkg/codegen/jenny_tsveneerindex.go index 528a9a47668..d4d08c310d2 100644 --- a/pkg/codegen/jenny_tsveneerindex.go +++ b/pkg/codegen/jenny_tsveneerindex.go @@ -50,7 +50,13 @@ func (gen *genTSVeneerIndex) Generate(kinds ...kindsys.Kind) (*codejen.File, err if err != nil { return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err) } - renameSpecNode(def.Props().Common().Name, f) + // The obvious approach would be calling renameSpecNode() here, same as in the ts resource jenny, + // to rename the "spec" field to the name of the kind. But that was causing extra + // default elements to generate that didn't actually exist. Instead, + // findDeclNode() is aware of "spec" and does the change on the fly. Preserving this + // as a reminder in case we want to switch back, though. + // renameSpecNode(def.Props().Common().Name, f) + elems, err := gen.extractTSIndexVeneerElements(def, f) if err != nil { return nil, fmt.Errorf("%s: %w", def.Props().Common().Name, err) @@ -66,7 +72,7 @@ func (gen *genTSVeneerIndex) extractTSIndexVeneerElements(def kindsys.Kind, tf * comm := def.Props().Common() // Check the root, then walk the tree - rootv := lin.Latest().Underlying() + rootv := lin.Latest().Underlying().LookupPath(schPath) var raw, custom, rawD, customD ast.Idents @@ -85,18 +91,14 @@ func (gen *genTSVeneerIndex) extractTSIndexVeneerElements(def kindsys.Kind, tf * if !(sels[0].IsDefinition() || sels[0].String() == "spec") { return false } - // It might seem to make sense that we'd strip replaceout the leading # here for + // It might seem to make sense that we'd strip out the leading # here for // definitions. However, cuetsy's tsast actually has the # still present in its - // Ident types, stripping it replaceout on the fly when stringifying. + // Ident types, stripping it out on the fly when stringifying. name = sels[0].String() } - if name == "spec" { - name = comm.Name - } - // Search the generated TS AST for the type and default def nodes - pair := findDeclNode(name, tf) + pair := findDeclNode(name, comm.Name, tf) if pair.T == nil { // No generated type for this item, skip it return false @@ -208,8 +210,13 @@ type tsVeneerAttr struct { target string } -func findDeclNode(name string, tf *ast.File) declPair { +func findDeclNode(name, basename string, tf *ast.File) declPair { var p declPair + + if name == basename { + return declPair{} + } + for _, def := range tf.Nodes { // Peer through export keywords if ex, is := def.(ast.ExportKeyword); is { @@ -221,10 +228,16 @@ func findDeclNode(name string, tf *ast.File) declPair { if x.Name.Name == name { p.T = &x.Name _, p.isEnum = x.Type.(ast.EnumType) + if name == "spec" { + p.T.Name = basename + } } case ast.VarDecl: if x.Names.Idents[0].Name == "default"+name { p.D = &x.Names.Idents[0] + if name == "spec" { + p.D.Name = "default" + basename + } } } } diff --git a/pkg/kinds/dashboard/dashboard_status_gen.go b/pkg/kinds/dashboard/dashboard_status_gen.go index 837817189a6..cff1f440fe4 100644 --- a/pkg/kinds/dashboard/dashboard_status_gen.go +++ b/pkg/kinds/dashboard/dashboard_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/folder/folder_spec_gen.go b/pkg/kinds/folder/folder_spec_gen.go index 9507f09be5b..ab32138ebf1 100644 --- a/pkg/kinds/folder/folder_spec_gen.go +++ b/pkg/kinds/folder/folder_spec_gen.go @@ -9,7 +9,8 @@ package folder -// Spec defines model for Spec. +// TODO: +// common metadata will soon support setting the parent folder in the metadata type Spec struct { // Description of the folder. Description *string `json:"description,omitempty"` diff --git a/pkg/kinds/folder/folder_status_gen.go b/pkg/kinds/folder/folder_status_gen.go index 7084903509d..112778b1c1f 100644 --- a/pkg/kinds/folder/folder_status_gen.go +++ b/pkg/kinds/folder/folder_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/librarypanel/librarypanel_status_gen.go b/pkg/kinds/librarypanel/librarypanel_status_gen.go index e92e5397980..4609c751efc 100644 --- a/pkg/kinds/librarypanel/librarypanel_status_gen.go +++ b/pkg/kinds/librarypanel/librarypanel_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/playlist/playlist_status_gen.go b/pkg/kinds/playlist/playlist_status_gen.go index c928ac191f7..6deb14ecdfe 100644 --- a/pkg/kinds/playlist/playlist_status_gen.go +++ b/pkg/kinds/playlist/playlist_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/preferences/preferences_status_gen.go b/pkg/kinds/preferences/preferences_status_gen.go index 868cf70eea4..7c409b73b6a 100644 --- a/pkg/kinds/preferences/preferences_status_gen.go +++ b/pkg/kinds/preferences/preferences_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/publicdashboard/publicdashboard_status_gen.go b/pkg/kinds/publicdashboard/publicdashboard_status_gen.go index 2761b84af26..8898a08a34b 100644 --- a/pkg/kinds/publicdashboard/publicdashboard_status_gen.go +++ b/pkg/kinds/publicdashboard/publicdashboard_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/serviceaccount/serviceaccount_status_gen.go b/pkg/kinds/serviceaccount/serviceaccount_status_gen.go index cf7d545c34f..ec1490210a2 100644 --- a/pkg/kinds/serviceaccount/serviceaccount_status_gen.go +++ b/pkg/kinds/serviceaccount/serviceaccount_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/kinds/team/team_status_gen.go b/pkg/kinds/team/team_status_gen.go index 088483794d1..ff9964c4011 100644 --- a/pkg/kinds/team/team_status_gen.go +++ b/pkg/kinds/team/team_status_gen.go @@ -16,6 +16,13 @@ const ( OperatorStateStateSuccess OperatorStateState = "success" ) +// Defines values for StatusOperatorStateState. +const ( + StatusOperatorStateStateFailed StatusOperatorStateState = "failed" + StatusOperatorStateStateInProgress StatusOperatorStateState = "in_progress" + StatusOperatorStateStateSuccess StatusOperatorStateState = "success" +) + // OperatorState defines model for OperatorState. type OperatorState struct { // descriptiveState is an optional more descriptive state field which has no requirements on format @@ -43,5 +50,25 @@ type Status struct { // operatorStates is a map of operator ID to operator state evaluations. // Any operator which consumes this kind SHOULD add its state evaluation information to this field. - OperatorStates map[string]OperatorState `json:"operatorStates,omitempty"` + OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"` } + +// StatusOperatorState defines model for status.#OperatorState. +type StatusOperatorState struct { + // descriptiveState is an optional more descriptive state field which has no requirements on format + DescriptiveState *string `json:"descriptiveState,omitempty"` + + // details contains any extra information that is operator-specific + Details map[string]interface{} `json:"details,omitempty"` + + // lastEvaluation is the ResourceVersion last evaluated + LastEvaluation string `json:"lastEvaluation"` + + // state describes the state of the lastEvaluation. + // It is limited to three possible states for machine evaluation. + State StatusOperatorStateState `json:"state"` +} + +// StatusOperatorStateState state describes the state of the lastEvaluation. +// It is limited to three possible states for machine evaluation. +type StatusOperatorStateState string diff --git a/pkg/plugins/manager/testdata/missing-kind-datasource/composable_dataquery.cue b/pkg/plugins/manager/testdata/missing-kind-datasource/composable_dataquery.cue index a439bb18469..fea344cc398 100644 --- a/pkg/plugins/manager/testdata/missing-kind-datasource/composable_dataquery.cue +++ b/pkg/plugins/manager/testdata/missing-kind-datasource/composable_dataquery.cue @@ -1,13 +1,12 @@ package grafanaplugin composableKinds: DataQuery: lineage: { - seqs: [ + schemas: [ { - schemas: [ - { - foo: string - }, - ] + version: [0, 0] + schema: { + foo: string + } }, ] } diff --git a/pkg/plugins/manager/testdata/valid-model-datasource/composable_dataquery.cue b/pkg/plugins/manager/testdata/valid-model-datasource/composable_dataquery.cue index a439bb18469..fea344cc398 100644 --- a/pkg/plugins/manager/testdata/valid-model-datasource/composable_dataquery.cue +++ b/pkg/plugins/manager/testdata/valid-model-datasource/composable_dataquery.cue @@ -1,13 +1,12 @@ package grafanaplugin composableKinds: DataQuery: lineage: { - seqs: [ + schemas: [ { - schemas: [ - { - foo: string - }, - ] + version: [0, 0] + schema: { + foo: string + } }, ] } diff --git a/pkg/plugins/manager/testdata/valid-model-datasource/composable_datasourcecfg.cue b/pkg/plugins/manager/testdata/valid-model-datasource/composable_datasourcecfg.cue index b51d0852dac..bc0e5e50924 100644 --- a/pkg/plugins/manager/testdata/valid-model-datasource/composable_datasourcecfg.cue +++ b/pkg/plugins/manager/testdata/valid-model-datasource/composable_datasourcecfg.cue @@ -1,18 +1,17 @@ package grafanaplugin composableKinds: DataSourceCfg: lineage: { - seqs: [ + schemas: [ { - schemas: [ - { - Options: { - foo: string - } - SecureOptions: { - bar: string - } - }, - ] + version: [0, 0] + schema: { + Options: { + foo: string + } + SecureOptions: { + bar: string + } + } }, ] } diff --git a/pkg/plugins/manager/testdata/valid-model-panel/composable.cue b/pkg/plugins/manager/testdata/valid-model-panel/composable.cue index e5437d645bb..560aab4b589 100644 --- a/pkg/plugins/manager/testdata/valid-model-panel/composable.cue +++ b/pkg/plugins/manager/testdata/valid-model-panel/composable.cue @@ -1,15 +1,14 @@ package grafanaplugin composableKinds: PanelCfg: lineage: { - seqs: [ + schemas: [ { - schemas: [ - { - Options: { - foo: string - } @cuetsy(kind="interface") - }, - ] + version: [0, 0] + schema: { + Options: { + foo: string + } @cuetsy(kind="interface") + } }, ] } diff --git a/pkg/plugins/pfs/decl_parser.go b/pkg/plugins/pfs/decl_parser.go index bc344f813cf..04833a425d5 100644 --- a/pkg/plugins/pfs/decl_parser.go +++ b/pkg/plugins/pfs/decl_parser.go @@ -3,7 +3,6 @@ package pfs import ( "fmt" "io/fs" - "os" "path/filepath" "sort" @@ -39,7 +38,7 @@ func (psr *declParser) Parse(root fs.FS) ([]*PluginDecl, error) { continue } - dir := os.DirFS(path) + dir, _ := fs.Sub(root, path) pp, err := ParsePluginFS(dir, psr.rt) if err != nil { return nil, fmt.Errorf("parsing plugin failed for %s: %s", dir, err) diff --git a/pkg/plugins/pfs/pfs.go b/pkg/plugins/pfs/pfs.go index 98dc59f0563..f1fb5f7d944 100644 --- a/pkg/plugins/pfs/pfs.go +++ b/pkg/plugins/pfs/pfs.go @@ -205,7 +205,13 @@ func ParsePluginFS(fsys fs.FS, rt *thema.Runtime) (ParsedPlugin, error) { }) bi.Files = append(bi.Files, f) - gpi := ctx.BuildInstance(bi).Unify(gpv) + gpi := ctx.BuildInstance(bi) + // Temporary hack while we figure out what in the elasticsearch lineage turns + // this into an endless loop in thema, and why unifying twice is anything other + // than a total no-op. + if pp.Properties.Id != "elasticsearch" { + gpi = gpi.Unify(gpv) + } if gpi.Err() != nil { return ParsedPlugin{}, errors.Wrap(errors.Promote(ErrInvalidGrafanaPluginInstance, pp.Properties.Id), gpi.Err()) } diff --git a/pkg/plugins/plugindef/plugindef.cue b/pkg/plugins/plugindef/plugindef.cue index bfdb0cfe50b..79195b9182d 100644 --- a/pkg/plugins/plugindef/plugindef.cue +++ b/pkg/plugins/plugindef/plugindef.cue @@ -9,404 +9,402 @@ import ( thema.#Lineage name: "plugindef" -seqs: [ - { - schemas: [ - { - // Unique name of the plugin. If the plugin is published on - // grafana.com, then the plugin `id` has to follow the naming - // conventions. - id: string & strings.MinRunes(1) - id: =~"^([0-9a-z]+\\-([0-9a-z]+\\-)?(\(strings.Join([ for t in _types {t}], "|"))))|(alertGroups|alertlist|annolist|barchart|bargauge|candlestick|canvas|dashlist|debug|datagrid|gauge|geomap|gettingstarted|graph|heatmap|histogram|icon|live|logs|news|nodeGraph|piechart|pluginlist|stat|state-timeline|status-history|table|table-old|text|timeseries|trend|traces|welcome|xychart|alertmanager|cloudwatch|dashboard|elasticsearch|grafana|grafana-azure-monitor-datasource|graphite|influxdb|jaeger|loki|mixed|mssql|mysql|opentsdb|postgres|prometheus|stackdriver|tempo|testdata|zipkin|phlare|parca)$" - - // Human-readable name of the plugin that is shown to the user in - // the UI. - name: string - - // The set of all plugin types. This hidden field exists solely - // so that the set can be string-interpolated into other fields. - _types: ["app", "datasource", "panel", "renderer", "secretsmanager"] - - // type indicates which type of Grafana plugin this is, of the defined - // set of Grafana plugin types. - type: or(_types) - - // IncludeType is a string identifier of a plugin include type, which is - // a superset of plugin types. - #IncludeType: type | "dashboard" | "page" - - // Metadata about the plugin - info: #Info - - // Metadata about a Grafana plugin. Some fields are used on the plugins - // page in Grafana and others on grafana.com, if the plugin is published. - #Info: { - // Information about the plugin author - author?: { - // Author's name - name?: string - - // Author's name - email?: string - - // Link to author's website - url?: string - } - - // Build information - build?: #BuildInfo - - // Description of plugin. Used on the plugins page in Grafana and - // for search on grafana.com. - description?: string - - // Array of plugin keywords. Used for search on grafana.com. - keywords: [...string] - // should be this, but CUE to openapi converter screws this up - // by inserting a non-concrete default. - // keywords: [string, ...string] - - // An array of link objects to be displayed on this plugin's - // project page in the form `{name: 'foo', url: - // 'http://example.com'}` - links?: [...{ - name?: string - url?: string - }] - - // SVG images that are used as plugin icons - logos?: { - // Link to the "small" version of the plugin logo, which must be - // an SVG image. "Large" and "small" logos can be the same image. - small: string - - // Link to the "large" version of the plugin logo, which must be - // an SVG image. "Large" and "small" logos can be the same image. - large: string - } - - // An array of screenshot objects in the form `{name: 'bar', path: - // 'img/screenshot.png'}` - screenshots?: [...{ - name?: string - path?: string - }] - - // Date when this plugin was built - updated?: =~"^(\\d{4}-\\d{2}-\\d{2}|\\%TODAY\\%)$" - - // Project version of this commit, e.g. `6.7.x` - version?: =~"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)|(\\%VERSION\\%)$" - } - - #BuildInfo: { - // Time when the plugin was built, as a Unix timestamp - time?: int64 - repo?: string - - // Git branch the plugin was built from - branch?: string - - // Git hash of the commit the plugin was built from - hash?: string - "number"?: int64 - - // GitHub pull request the plugin was built from - pr?: int32 - } - - // Dependency information related to Grafana and other plugins - dependencies: #Dependencies - - #Dependencies: { - // (Deprecated) Required Grafana version for this plugin, e.g. - // `6.x.x 7.x.x` to denote plugin requires Grafana v6.x.x or - // v7.x.x. - grafanaVersion?: =~"^([0-9]+)(\\.[0-9x]+)?(\\.[0-9x])?$" - - // Required Grafana version for this plugin. Validated using - // https://github.com/npm/node-semver. - grafanaDependency: =~"^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x]+)(\\.[0-9x]+))?$" - - // An array of required plugins on which this plugin depends - plugins?: [...#Dependency] - } - - // Dependency describes another plugin on which a plugin depends. - // The id refers to the plugin package identifier, as given on - // the grafana.com plugin marketplace. - #Dependency: { - id: =~"^[0-9a-z]+\\-([0-9a-z]+\\-)?(app|panel|datasource)$" - type: "app" | "datasource" | "panel" - name: string - version: string - ... - } - - // Schema definition for the plugin.json file. Used primarily for schema validation. - $schema?: string - - // For data source plugins, if the plugin supports alerting. Requires `backend` to be set to `true`. - alerting?: bool - - // For data source plugins, if the plugin supports annotation - // queries. - annotations?: bool - - // Set to true for app plugins that should be enabled and pinned to the navigation bar in all orgs. - autoEnabled?: bool - - // If the plugin has a backend component. - backend?: bool - - // [internal only] Indicates whether the plugin is developed and shipped as part - // of Grafana. Also known as a 'core plugin'. - builtIn: bool | *false - - // Plugin category used on the Add data source page. - category?: "tsdb" | "logging" | "cloud" | "tracing" | "profiling" | "sql" | "enterprise" | "iot" | "other" - - // Grafana Enterprise specific features. - enterpriseFeatures?: { - // Enable/Disable health diagnostics errors. Requires Grafana - // >=7.5.5. - healthDiagnosticsErrors?: bool | *false - ... - } - - // The first part of the file name of the backend component - // executable. There can be multiple executables built for - // different operating system and architecture. Grafana will - // check for executables named `_<$GOOS>_<.exe for Windows>`, e.g. `plugin_linux_amd64`. - // Combination of $GOOS and $GOARCH can be found here: - // https://golang.org/doc/install/source#environment. - executable?: string - - // [internal only] Excludes the plugin from listings in Grafana's UI. Only - // allowed for `builtIn` plugins. - hideFromList: bool | *false - - // Resources to include in plugin. - includes?: [...#Include] - - // A resource to be included in a plugin. - #Include: { - // Unique identifier of the included resource - uid?: string - type: #IncludeType - name?: string - - // (Legacy) The Angular component to use for a page. - component?: string - - // The minimum role a user must have to see this page in the navigation menu. - role?: "Admin" | "Editor" | "Viewer" - - // RBAC action the user must have to access the route - action?: string - - // Used for app plugins. - path?: string - - // Add the include to the navigation menu. - addToNav?: bool - - // Page or dashboard when user clicks the icon in the side menu. - defaultNav?: bool - - // Icon to use in the side menu. For information on available - // icon, refer to [Icons - // Overview](https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-icon--icons-overview). - icon?: string - ... - } - - // For data source plugins, if the plugin supports logs. It may be used to filter logs only features. - logs?: bool - - // For data source plugins, if the plugin supports metric queries. - // Used to enable the plugin in the panel editor. - metrics?: bool - - // FIXME there appears to be a bug in thema that prevents this from working. Maybe it'd - // help to refer to it with an alias, but thema can't support using current list syntax. - // syntax (fixed by grafana/thema#82). Either way, for now, pascalName gets populated in Go. - let sani = (strings.ToTitle(regexp.ReplaceAllLiteral("[^a-zA-Z]+", name, ""))) - - // [internal only] The PascalCase name for the plugin. Used for creating machine-friendly - // identifiers, typically in code generation. - // - // If not provided, defaults to name, but title-cased and sanitized (only - // alphabetical characters allowed). - pascalName: string & =~"^([A-Z][a-zA-Z]{1,62})$" | *sani - - // Initialize plugin on startup. By default, the plugin - // initializes on first use. - preload?: bool - - // For data source plugins. There is a query options section in - // the plugin's query editor and these options can be turned on - // if needed. - queryOptions?: { - // For data source plugins. If the `max data points` option should - // be shown in the query options section in the query editor. - maxDataPoints?: bool - - // For data source plugins. If the `min interval` option should be - // shown in the query options section in the query editor. - minInterval?: bool - - // For data source plugins. If the `cache timeout` option should - // be shown in the query options section in the query editor. - cacheTimeout?: bool - } - - // Routes is a list of proxy routes, if any. For datasource plugins only. - routes?: [...#Route] - - // For panel plugins. Hides the query editor. - skipDataQuery?: bool - - // Marks a plugin as a pre-release. - state?: #ReleaseState - - // ReleaseState indicates release maturity state of a plugin. - #ReleaseState: "alpha" | "beta" | "deprecated" | *"stable" - - // For data source plugins, if the plugin supports streaming. Used in Explore to start live streaming. - streaming?: bool - - // For data source plugins, if the plugin supports tracing. Used for example to link logs (e.g. Loki logs) with tracing plugins. - tracing?: bool - - // Optional list of RBAC RoleRegistrations. - // Describes and organizes the default permissions associated with any of the Grafana basic roles, - // which characterizes what viewers, editors, admins, or grafana admins can do on the plugin. - // The Admin basic role inherits its default permissions from the Editor basic role which in turn - // inherits them from the Viewer basic role. - roles?: [...#RoleRegistration] - - // RoleRegistration describes an RBAC role and its assignments to basic roles. - // It organizes related RBAC permissions on the plugin into a role and defines which basic roles - // will get them by default. - // Example: the role 'Schedules Reader' bundles permissions to view all schedules of the plugin - // which will be granted to Admins by default. - #RoleRegistration: { - // RBAC role definition to bundle related RBAC permissions on the plugin. - role: #Role - - // Default assignment of the role to Grafana basic roles (Viewer, Editor, Admin, Grafana Admin) - // The Admin basic role inherits its default permissions from the Editor basic role which in turn - // inherits them from the Viewer basic role. - grants: [...#BasicRole] - } - - // Role describes an RBAC role which allows grouping multiple related permissions on the plugin, - // each of which has an action and an optional scope. - // Example: the role 'Schedules Reader' bundles permissions to view all schedules of the plugin. - #Role: { - name: string - name: =~"^([A-Z][0-9A-Za-z ]+)$" - description: string - permissions: [...#Permission] - } - - // Permission describes an RBAC permission on the plugin. A permission has an action and an optional - // scope. - // Example: action: 'test-app.schedules:read', scope: 'test-app.schedules:*' - #Permission: { - action: string - scope?: string - } - - // BasicRole is a Grafana basic role, which can be 'Viewer', 'Editor', 'Admin' or 'Grafana Admin'. - // With RBAC, the Admin basic role inherits its default permissions from the Editor basic role which - // in turn inherits them from the Viewer basic role. - #BasicRole: "Grafana Admin" | "Admin" | "Editor" | "Viewer" - - // Header describes an HTTP header that is forwarded with a proxied request for - // a plugin route. - #Header: { - name: string - content: string - } - - // URLParam describes query string parameters for - // a url in a plugin route - #URLParam: { - name: string - content: string - } - - // A proxy route used in datasource plugins for plugin authentication - // and adding headers to HTTP requests made by the plugin. - // For more information, refer to [Authentication for data source - // plugins](https://grafana.com/docs/grafana/latest/developers/plugins/authentication/). - #Route: { - // For data source plugins. The route path that is replaced by the - // route URL field when proxying the call. - path?: string - - // For data source plugins. Route method matches the HTTP verb - // like GET or POST. Multiple methods can be provided as a - // comma-separated list. - method?: string - - // For data source plugins. Route URL is where the request is - // proxied to. - url?: string - - urlParams?: [...#URLParam] - reqSignedIn?: bool - reqRole?: string - - // For data source plugins. Route headers adds HTTP headers to the - // proxied request. - headers?: [...#Header] - - // For data source plugins. Route headers set the body content and - // length to the proxied request. - body?: { - ... - } - - // For data source plugins. Token authentication section used with - // an OAuth API. - tokenAuth?: #TokenAuth - - // For data source plugins. Token authentication section used with - // an JWT OAuth API. - jwtTokenAuth?: #JWTTokenAuth - } - - // TODO docs - #TokenAuth: { - // URL to fetch the authentication token. - url?: string - - // The list of scopes that your application should be granted - // access to. - scopes?: [...string] - - // Parameters for the token authentication request. - params: [string]: string - } - - // TODO docs - // TODO should this really be separate from TokenAuth? - #JWTTokenAuth: { - // URL to fetch the JWT token. - url: string - - // The list of scopes that your application should be granted - // access to. - scopes: [...string] - - // Parameters for the JWT token authentication request. - params: [string]: string - } - }, - ] - }, -] +schemas: [{ + version: [0, 0] + schema: { + // Unique name of the plugin. If the plugin is published on + // grafana.com, then the plugin `id` has to follow the naming + // conventions. + id: string & strings.MinRunes(1) + id: =~"^([0-9a-z]+\\-([0-9a-z]+\\-)?(\(strings.Join([ for t in _types {t}], "|"))))|(alertGroups|alertlist|annolist|barchart|bargauge|candlestick|canvas|dashlist|debug|datagrid|gauge|geomap|gettingstarted|graph|heatmap|histogram|icon|live|logs|news|nodeGraph|piechart|pluginlist|stat|state-timeline|status-history|table|table-old|text|timeseries|trend|traces|welcome|xychart|alertmanager|cloudwatch|dashboard|elasticsearch|grafana|grafana-azure-monitor-datasource|graphite|influxdb|jaeger|loki|mixed|mssql|mysql|opentsdb|postgres|prometheus|stackdriver|tempo|testdata|zipkin|phlare|parca)$" + + // Human-readable name of the plugin that is shown to the user in + // the UI. + name: string + + // The set of all plugin types. This hidden field exists solely + // so that the set can be string-interpolated into other fields. + _types: ["app", "datasource", "panel", "renderer", "secretsmanager"] + + // type indicates which type of Grafana plugin this is, of the defined + // set of Grafana plugin types. + type: or(_types) + + // IncludeType is a string identifier of a plugin include type, which is + // a superset of plugin types. + #IncludeType: type | "dashboard" | "page" + + // Metadata about the plugin + info: #Info + + // Metadata about a Grafana plugin. Some fields are used on the plugins + // page in Grafana and others on grafana.com, if the plugin is published. + #Info: { + // Information about the plugin author + author?: { + // Author's name + name?: string + + // Author's name + email?: string + + // Link to author's website + url?: string + } + + // Build information + build?: #BuildInfo + + // Description of plugin. Used on the plugins page in Grafana and + // for search on grafana.com. + description?: string + + // Array of plugin keywords. Used for search on grafana.com. + keywords: [...string] + // should be this, but CUE to openapi converter screws this up + // by inserting a non-concrete default. + // keywords: [string, ...string] + + // An array of link objects to be displayed on this plugin's + // project page in the form `{name: 'foo', url: + // 'http://example.com'}` + links?: [...{ + name?: string + url?: string + }] + + // SVG images that are used as plugin icons + logos?: { + // Link to the "small" version of the plugin logo, which must be + // an SVG image. "Large" and "small" logos can be the same image. + small: string + + // Link to the "large" version of the plugin logo, which must be + // an SVG image. "Large" and "small" logos can be the same image. + large: string + } + + // An array of screenshot objects in the form `{name: 'bar', path: + // 'img/screenshot.png'}` + screenshots?: [...{ + name?: string + path?: string + }] + + // Date when this plugin was built + updated?: =~"^(\\d{4}-\\d{2}-\\d{2}|\\%TODAY\\%)$" + + // Project version of this commit, e.g. `6.7.x` + version?: =~"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)|(\\%VERSION\\%)$" + } + + #BuildInfo: { + // Time when the plugin was built, as a Unix timestamp + time?: int64 + repo?: string + + // Git branch the plugin was built from + branch?: string + + // Git hash of the commit the plugin was built from + hash?: string + number?: int64 + + // GitHub pull request the plugin was built from + pr?: int32 + } + + // Dependency information related to Grafana and other plugins + dependencies: #Dependencies + + #Dependencies: { + // (Deprecated) Required Grafana version for this plugin, e.g. + // `6.x.x 7.x.x` to denote plugin requires Grafana v6.x.x or + // v7.x.x. + grafanaVersion?: =~"^([0-9]+)(\\.[0-9x]+)?(\\.[0-9x])?$" + + // Required Grafana version for this plugin. Validated using + // https://github.com/npm/node-semver. + grafanaDependency: =~"^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x]+)(\\.[0-9x]+))?$" + + // An array of required plugins on which this plugin depends + plugins?: [...#Dependency] + } + + // Dependency describes another plugin on which a plugin depends. + // The id refers to the plugin package identifier, as given on + // the grafana.com plugin marketplace. + #Dependency: { + id: =~"^[0-9a-z]+\\-([0-9a-z]+\\-)?(app|panel|datasource)$" + type: "app" | "datasource" | "panel" + name: string + version: string + ... + } + + // Schema definition for the plugin.json file. Used primarily for schema validation. + $schema?: string + + // For data source plugins, if the plugin supports alerting. Requires `backend` to be set to `true`. + alerting?: bool + + // For data source plugins, if the plugin supports annotation + // queries. + annotations?: bool + + // Set to true for app plugins that should be enabled and pinned to the navigation bar in all orgs. + autoEnabled?: bool + + // If the plugin has a backend component. + backend?: bool + + // [internal only] Indicates whether the plugin is developed and shipped as part + // of Grafana. Also known as a 'core plugin'. + builtIn: bool | *false + + // Plugin category used on the Add data source page. + category?: "tsdb" | "logging" | "cloud" | "tracing" | "profiling" | "sql" | "enterprise" | "iot" | "other" + + // Grafana Enterprise specific features. + enterpriseFeatures?: { + // Enable/Disable health diagnostics errors. Requires Grafana + // >=7.5.5. + healthDiagnosticsErrors?: bool | *false + ... + } + + // The first part of the file name of the backend component + // executable. There can be multiple executables built for + // different operating system and architecture. Grafana will + // check for executables named `_<$GOOS>_<.exe for Windows>`, e.g. `plugin_linux_amd64`. + // Combination of $GOOS and $GOARCH can be found here: + // https://golang.org/doc/install/source#environment. + executable?: string + + // [internal only] Excludes the plugin from listings in Grafana's UI. Only + // allowed for `builtIn` plugins. + hideFromList: bool | *false + + // Resources to include in plugin. + includes?: [...#Include] + + // A resource to be included in a plugin. + #Include: { + // Unique identifier of the included resource + uid?: string + type: #IncludeType + name?: string + + // (Legacy) The Angular component to use for a page. + component?: string + + // The minimum role a user must have to see this page in the navigation menu. + role?: "Admin" | "Editor" | "Viewer" + + // RBAC action the user must have to access the route + action?: string + + // Used for app plugins. + path?: string + + // Add the include to the navigation menu. + addToNav?: bool + + // Page or dashboard when user clicks the icon in the side menu. + defaultNav?: bool + + // Icon to use in the side menu. For information on available + // icon, refer to [Icons + // Overview](https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-icon--icons-overview). + icon?: string + ... + } + + // For data source plugins, if the plugin supports logs. It may be used to filter logs only features. + logs?: bool + + // For data source plugins, if the plugin supports metric queries. + // Used to enable the plugin in the panel editor. + metrics?: bool + + // FIXME there appears to be a bug in thema that prevents this from working. Maybe it'd + // help to refer to it with an alias, but thema can't support using current list syntax. + // syntax (fixed by grafana/thema#82). Either way, for now, pascalName gets populated in Go. + let sani = (strings.ToTitle(regexp.ReplaceAllLiteral("[^a-zA-Z]+", name, ""))) + + // [internal only] The PascalCase name for the plugin. Used for creating machine-friendly + // identifiers, typically in code generation. + // + // If not provided, defaults to name, but title-cased and sanitized (only + // alphabetical characters allowed). + pascalName: string & =~"^([A-Z][a-zA-Z]{1,62})$" | *sani + + // Initialize plugin on startup. By default, the plugin + // initializes on first use. + preload?: bool + + // For data source plugins. There is a query options section in + // the plugin's query editor and these options can be turned on + // if needed. + queryOptions?: { + // For data source plugins. If the `max data points` option should + // be shown in the query options section in the query editor. + maxDataPoints?: bool + + // For data source plugins. If the `min interval` option should be + // shown in the query options section in the query editor. + minInterval?: bool + + // For data source plugins. If the `cache timeout` option should + // be shown in the query options section in the query editor. + cacheTimeout?: bool + } + + // Routes is a list of proxy routes, if any. For datasource plugins only. + routes?: [...#Route] + + // For panel plugins. Hides the query editor. + skipDataQuery?: bool + + // Marks a plugin as a pre-release. + state?: #ReleaseState + + // ReleaseState indicates release maturity state of a plugin. + #ReleaseState: "alpha" | "beta" | "deprecated" | *"stable" + + // For data source plugins, if the plugin supports streaming. Used in Explore to start live streaming. + streaming?: bool + + // For data source plugins, if the plugin supports tracing. Used for example to link logs (e.g. Loki logs) with tracing plugins. + tracing?: bool + + // Optional list of RBAC RoleRegistrations. + // Describes and organizes the default permissions associated with any of the Grafana basic roles, + // which characterizes what viewers, editors, admins, or grafana admins can do on the plugin. + // The Admin basic role inherits its default permissions from the Editor basic role which in turn + // inherits them from the Viewer basic role. + roles?: [...#RoleRegistration] + + // RoleRegistration describes an RBAC role and its assignments to basic roles. + // It organizes related RBAC permissions on the plugin into a role and defines which basic roles + // will get them by default. + // Example: the role 'Schedules Reader' bundles permissions to view all schedules of the plugin + // which will be granted to Admins by default. + #RoleRegistration: { + // RBAC role definition to bundle related RBAC permissions on the plugin. + role: #Role + + // Default assignment of the role to Grafana basic roles (Viewer, Editor, Admin, Grafana Admin) + // The Admin basic role inherits its default permissions from the Editor basic role which in turn + // inherits them from the Viewer basic role. + grants: [...#BasicRole] + } + + // Role describes an RBAC role which allows grouping multiple related permissions on the plugin, + // each of which has an action and an optional scope. + // Example: the role 'Schedules Reader' bundles permissions to view all schedules of the plugin. + #Role: { + name: string + name: =~"^([A-Z][0-9A-Za-z ]+)$" + description: string + permissions: [...#Permission] + } + + // Permission describes an RBAC permission on the plugin. A permission has an action and an optional + // scope. + // Example: action: 'test-app.schedules:read', scope: 'test-app.schedules:*' + #Permission: { + action: string + scope?: string + } + + // BasicRole is a Grafana basic role, which can be 'Viewer', 'Editor', 'Admin' or 'Grafana Admin'. + // With RBAC, the Admin basic role inherits its default permissions from the Editor basic role which + // in turn inherits them from the Viewer basic role. + #BasicRole: "Grafana Admin" | "Admin" | "Editor" | "Viewer" + + // Header describes an HTTP header that is forwarded with a proxied request for + // a plugin route. + #Header: { + name: string + content: string + } + + // URLParam describes query string parameters for + // a url in a plugin route + #URLParam: { + name: string + content: string + } + + // A proxy route used in datasource plugins for plugin authentication + // and adding headers to HTTP requests made by the plugin. + // For more information, refer to [Authentication for data source + // plugins](https://grafana.com/docs/grafana/latest/developers/plugins/authentication/). + #Route: { + // For data source plugins. The route path that is replaced by the + // route URL field when proxying the call. + path?: string + + // For data source plugins. Route method matches the HTTP verb + // like GET or POST. Multiple methods can be provided as a + // comma-separated list. + method?: string + + // For data source plugins. Route URL is where the request is + // proxied to. + url?: string + + urlParams?: [...#URLParam] + reqSignedIn?: bool + reqRole?: string + + // For data source plugins. Route headers adds HTTP headers to the + // proxied request. + headers?: [...#Header] + + // For data source plugins. Route headers set the body content and + // length to the proxied request. + body?: { + ... + } + + // For data source plugins. Token authentication section used with + // an OAuth API. + tokenAuth?: #TokenAuth + + // For data source plugins. Token authentication section used with + // an JWT OAuth API. + jwtTokenAuth?: #JWTTokenAuth + } + + // TODO docs + #TokenAuth: { + // URL to fetch the authentication token. + url?: string + + // The list of scopes that your application should be granted + // access to. + scopes?: [...string] + + // Parameters for the token authentication request. + params: [string]: string + } + + // TODO docs + // TODO should this really be separate from TokenAuth? + #JWTTokenAuth: { + // URL to fetch the JWT token. + url: string + + // The list of scopes that your application should be granted + // access to. + scopes: [...string] + + // Parameters for the JWT token authentication request. + params: [string]: string + } + } +}] +lenses: [] diff --git a/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go b/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go index d442e211870..1b55d5dcd8e 100644 --- a/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go +++ b/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go @@ -287,6 +287,9 @@ const ( ) // Shape of a CloudWatch Annotation query +// +// TS type is CloudWatchDefaultQuery = Omit & CloudWatchMetricsQuery, declared in veneer +// #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind="type") type CloudWatchAnnotationQuery struct { // The ID of the AWS account to query for the metric, specifying `all` will query all accounts that the monitoring account is permitted to query. AccountId *string `json:"accountId,omitempty"` diff --git a/public/app/plugins/datasource/azuremonitor/dataquery.cue b/public/app/plugins/datasource/azuremonitor/dataquery.cue index ed649cf642c..06cc30f8d09 100644 --- a/public/app/plugins/datasource/azuremonitor/dataquery.cue +++ b/public/app/plugins/datasource/azuremonitor/dataquery.cue @@ -26,216 +26,214 @@ composableKinds: DataQuery: { maturity: "merged" lineage: { - seqs: [ - { - schemas: [ - { - #AzureMonitorQuery: common.DataQuery & { - // Azure subscription containing the resource(s) to be queried. - subscription?: string + schemas: [{ + version: [0, 0] + schema: { + #AzureMonitorQuery: common.DataQuery & { + // Azure subscription containing the resource(s) to be queried. + subscription?: string - // Subscriptions to be queried via Azure Resource Graph. - subscriptions?: [...string] + // Subscriptions to be queried via Azure Resource Graph. + subscriptions?: [...string] - // Azure Monitor Metrics sub-query properties. - azureMonitor?: #AzureMetricQuery - // Azure Monitor Logs sub-query properties. - azureLogAnalytics?: #AzureLogsQuery - // Azure Resource Graph sub-query properties. - azureResourceGraph?: #AzureResourceGraphQuery - // Application Insights Traces sub-query properties. - azureTraces?: #AzureTracesQuery - // @deprecated Legacy template variable support. - grafanaTemplateVariableFn?: #GrafanaTemplateVariableQuery + // Azure Monitor Metrics sub-query properties. + azureMonitor?: #AzureMetricQuery + // Azure Monitor Logs sub-query properties. + azureLogAnalytics?: #AzureLogsQuery + // Azure Resource Graph sub-query properties. + azureResourceGraph?: #AzureResourceGraphQuery + // Application Insights Traces sub-query properties. + azureTraces?: #AzureTracesQuery + // @deprecated Legacy template variable support. + grafanaTemplateVariableFn?: #GrafanaTemplateVariableQuery - // Template variables params. These exist for backwards compatiblity with legacy template variables. - resourceGroup?: string - namespace?: string - resource?: string - region?: string - // Azure Monitor query type. - // queryType: #AzureQueryType - } @cuetsy(kind="interface") @grafana(TSVeneer="type") + // Template variables params. These exist for backwards compatiblity with legacy template variables. + resourceGroup?: string + namespace?: string + resource?: string + region?: string + // Azure Monitor query type. + // queryType: #AzureQueryType + } @cuetsy(kind="interface") @grafana(TSVeneer="type") - // Defines the supported queryTypes. GrafanaTemplateVariableFn is deprecated - #AzureQueryType: "Azure Monitor" | "Azure Log Analytics" | "Azure Resource Graph" | "Azure Traces" | "Azure Subscriptions" | "Azure Resource Groups" | "Azure Namespaces" | "Azure Resource Names" | "Azure Metric Names" | "Azure Workspaces" | "Azure Regions" | "Grafana Template Variable Function" @cuetsy(kind="enum", memberNames="AzureMonitor|LogAnalytics|AzureResourceGraph|AzureTraces|SubscriptionsQuery|ResourceGroupsQuery|NamespacesQuery|ResourceNamesQuery|MetricNamesQuery|WorkspacesQuery|LocationsQuery|GrafanaTemplateVariableFn") + // Defines the supported queryTypes. GrafanaTemplateVariableFn is deprecated + #AzureQueryType: "Azure Monitor" | "Azure Log Analytics" | "Azure Resource Graph" | "Azure Traces" | "Azure Subscriptions" | "Azure Resource Groups" | "Azure Namespaces" | "Azure Resource Names" | "Azure Metric Names" | "Azure Workspaces" | "Azure Regions" | "Grafana Template Variable Function" @cuetsy(kind="enum", memberNames="AzureMonitor|LogAnalytics|AzureResourceGraph|AzureTraces|SubscriptionsQuery|ResourceGroupsQuery|NamespacesQuery|ResourceNamesQuery|MetricNamesQuery|WorkspacesQuery|LocationsQuery|GrafanaTemplateVariableFn") - #AzureMetricQuery: { - // Array of resource URIs to be queried. - resources?: [...#AzureMonitorResource] - // metricNamespace is used as the resource type (or resource namespace). - // It's usually equal to the target metric namespace. e.g. microsoft.storage/storageaccounts - // Kept the name of the variable as metricNamespace to avoid backward incompatibility issues. - metricNamespace?: string - // Used as the value for the metricNamespace property when it's different from the resource namespace. - customNamespace?: string - // The metric to query data for within the specified metricNamespace. e.g. UsedCapacity - metricName?: string - // The Azure region containing the resource(s). - region?: string - // The granularity of data points to be queried. Defaults to auto. - timeGrain?: string - // The aggregation to be used within the query. Defaults to the primaryAggregationType defined by the metric. - aggregation?: string - // Filters to reduce the set of data returned. Dimensions that can be filtered on are defined by the metric. - dimensionFilters?: [...#AzureMetricDimension] - // Maximum number of records to return. Defaults to 10. - top?: string - // Time grains that are supported by the metric. - allowedTimeGrainsMs?: [...int64] + #AzureMetricQuery: { + // Array of resource URIs to be queried. + resources?: [...#AzureMonitorResource] + // metricNamespace is used as the resource type (or resource namespace). + // It's usually equal to the target metric namespace. e.g. microsoft.storage/storageaccounts + // Kept the name of the variable as metricNamespace to avoid backward incompatibility issues. + metricNamespace?: string + // Used as the value for the metricNamespace property when it's different from the resource namespace. + customNamespace?: string + // The metric to query data for within the specified metricNamespace. e.g. UsedCapacity + metricName?: string + // The Azure region containing the resource(s). + region?: string + // The granularity of data points to be queried. Defaults to auto. + timeGrain?: string + // The aggregation to be used within the query. Defaults to the primaryAggregationType defined by the metric. + aggregation?: string + // Filters to reduce the set of data returned. Dimensions that can be filtered on are defined by the metric. + dimensionFilters?: [...#AzureMetricDimension] + // Maximum number of records to return. Defaults to 10. + top?: string + // Time grains that are supported by the metric. + allowedTimeGrainsMs?: [...int64] - // Aliases can be set to modify the legend labels. e.g. {{ resourceGroup }}. See docs for more detail. - alias?: string + // Aliases can be set to modify the legend labels. e.g. {{ resourceGroup }}. See docs for more detail. + alias?: string - // @deprecated - timeGrainUnit?: string + // @deprecated + timeGrainUnit?: string - // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration - dimension?: string + // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + dimension?: string - // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration - dimensionFilter?: string + // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + dimensionFilter?: string - // @deprecated Use metricNamespace instead - metricDefinition?: string + // @deprecated Use metricNamespace instead + metricDefinition?: string - // @deprecated Use resourceGroup, resourceName and metricNamespace instead - resourceUri?: string + // @deprecated Use resourceGroup, resourceName and metricNamespace instead + resourceUri?: string - // @deprecated Use resources instead - resourceGroup?: string - // @deprecated Use resources instead - resourceName?: string - } @cuetsy(kind="interface") + // @deprecated Use resources instead + resourceGroup?: string + // @deprecated Use resources instead + resourceName?: string + } @cuetsy(kind="interface") - // Azure Monitor Logs sub-query properties - #AzureLogsQuery: { - // KQL query to be executed. - query?: string - // Specifies the format results should be returned as. - resultFormat?: #ResultFormat - // Array of resource URIs to be queried. - resources?: [...string] - // Workspace ID. This was removed in Grafana 8, but remains for backwards compat - workspace?: string + // Azure Monitor Logs sub-query properties + #AzureLogsQuery: { + // KQL query to be executed. + query?: string + // Specifies the format results should be returned as. + resultFormat?: #ResultFormat + // Array of resource URIs to be queried. + resources?: [...string] + // Workspace ID. This was removed in Grafana 8, but remains for backwards compat + workspace?: string - // @deprecated Use resources instead - resource?: string - } @cuetsy(kind="interface") + // @deprecated Use resources instead + resource?: string + } @cuetsy(kind="interface") - // Application Insights Traces sub-query properties - #AzureTracesQuery: { - // Specifies the format results should be returned as. - resultFormat?: #ResultFormat - // Array of resource URIs to be queried. - resources?: [...string] - // Operation ID. Used only for Traces queries. - operationId?: string - // Types of events to filter by. - traceTypes?: [...string] - // Filters for property values. - filters?: [...#AzureTracesFilter] - // KQL query to be executed. - query?: string - } @cuetsy(kind="interface") + // Application Insights Traces sub-query properties + #AzureTracesQuery: { + // Specifies the format results should be returned as. + resultFormat?: #ResultFormat + // Array of resource URIs to be queried. + resources?: [...string] + // Operation ID. Used only for Traces queries. + operationId?: string + // Types of events to filter by. + traceTypes?: [...string] + // Filters for property values. + filters?: [...#AzureTracesFilter] + // KQL query to be executed. + query?: string + } @cuetsy(kind="interface") - #AzureTracesFilter: { - // Property name, auto-populated based on available traces. - property: string - // Comparison operator to use. Either equals or not equals. - operation: string - // Values to filter by. - filters: [...string] - } @cuetsy(kind="interface") + #AzureTracesFilter: { + // Property name, auto-populated based on available traces. + property: string + // Comparison operator to use. Either equals or not equals. + operation: string + // Values to filter by. + filters: [...string] + } @cuetsy(kind="interface") - #ResultFormat: "table" | "time_series" | "trace" @cuetsy(kind="enum", memberNames="Table|TimeSeries|Trace") + #ResultFormat: "table" | "time_series" | "trace" @cuetsy(kind="enum", memberNames="Table|TimeSeries|Trace") - #AzureResourceGraphQuery: { - // Azure Resource Graph KQL query to be executed. - query?: string - // Specifies the format results should be returned as. Defaults to table. - resultFormat?: string - } @cuetsy(kind="interface") + #AzureResourceGraphQuery: { + // Azure Resource Graph KQL query to be executed. + query?: string + // Specifies the format results should be returned as. Defaults to table. + resultFormat?: string + } @cuetsy(kind="interface") - #AzureMonitorResource: { - subscription?: string - resourceGroup?: string - resourceName?: string - metricNamespace?: string - region?: string - } @cuetsy(kind="interface") + #AzureMonitorResource: { + subscription?: string + resourceGroup?: string + resourceName?: string + metricNamespace?: string + region?: string + } @cuetsy(kind="interface") - #AzureMetricDimension: { - // Name of Dimension to be filtered on. - dimension?: string - // String denoting the filter operation. Supports 'eq' - equals,'ne' - not equals, 'sw' - starts with. Note that some dimensions may not support all operators. - operator?: string - // Values to match with the filter. - filters?: [...string] - // @deprecated filter is deprecated in favour of filters to support multiselect. - filter?: string - } @cuetsy(kind="interface") + #AzureMetricDimension: { + // Name of Dimension to be filtered on. + dimension?: string + // String denoting the filter operation. Supports 'eq' - equals,'ne' - not equals, 'sw' - starts with. Note that some dimensions may not support all operators. + operator?: string + // Values to match with the filter. + filters?: [...string] + // @deprecated filter is deprecated in favour of filters to support multiselect. + filter?: string + } @cuetsy(kind="interface") - #GrafanaTemplateVariableQueryType: "AppInsightsMetricNameQuery" | "AppInsightsGroupByQuery" | "SubscriptionsQuery" | "ResourceGroupsQuery" | "ResourceNamesQuery" | "MetricNamespaceQuery" | "MetricNamesQuery" | "WorkspacesQuery" | "UnknownQuery" @cuetsy(kind="type") - #BaseGrafanaTemplateVariableQuery: { - rawQuery?: string - ... - } @cuetsy(kind="interface") - #UnknownQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "UnknownQuery" - } @cuetsy(kind="interface") - #AppInsightsMetricNameQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "AppInsightsMetricNameQuery" - } @cuetsy(kind="interface") - #AppInsightsGroupByQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "AppInsightsGroupByQuery" - metricName: string - } @cuetsy(kind="interface") - #SubscriptionsQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "SubscriptionsQuery" - } @cuetsy(kind="interface") - #ResourceGroupsQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "ResourceGroupsQuery" - subscription: string - } @cuetsy(kind="interface") - #ResourceNamesQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "ResourceNamesQuery" - subscription: string - resourceGroup: string - metricNamespace: string - } @cuetsy(kind="interface") - #MetricNamespaceQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "MetricNamespaceQuery" + #GrafanaTemplateVariableQueryType: "AppInsightsMetricNameQuery" | "AppInsightsGroupByQuery" | "SubscriptionsQuery" | "ResourceGroupsQuery" | "ResourceNamesQuery" | "MetricNamespaceQuery" | "MetricNamesQuery" | "WorkspacesQuery" | "UnknownQuery" @cuetsy(kind="type") + #BaseGrafanaTemplateVariableQuery: { + rawQuery?: string + ... + } @cuetsy(kind="interface") + #UnknownQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "UnknownQuery" + } @cuetsy(kind="interface") + #AppInsightsMetricNameQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "AppInsightsMetricNameQuery" + } @cuetsy(kind="interface") + #AppInsightsGroupByQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "AppInsightsGroupByQuery" + metricName: string + } @cuetsy(kind="interface") + #SubscriptionsQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "SubscriptionsQuery" + } @cuetsy(kind="interface") + #ResourceGroupsQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "ResourceGroupsQuery" + subscription: string + } @cuetsy(kind="interface") + #ResourceNamesQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "ResourceNamesQuery" + subscription: string + resourceGroup: string + metricNamespace: string + } @cuetsy(kind="interface") + #MetricNamespaceQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "MetricNamespaceQuery" + subscription: string + resourceGroup: string + metricNamespace?: string + resourceName?: string + } @cuetsy(kind="interface") + + // @deprecated Use MetricNamespaceQuery instead + #MetricDefinitionsQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "MetricDefinitionsQuery" subscription: string resourceGroup: string metricNamespace?: string resourceName?: string - } @cuetsy(kind="interface") + } @cuetsy(kind="interface") + #MetricNamesQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "MetricNamesQuery" + subscription: string + resourceGroup: string + resourceName: string + metricNamespace: string + } @cuetsy(kind="interface") + #WorkspacesQuery: #BaseGrafanaTemplateVariableQuery & { + kind: "WorkspacesQuery" + subscription: string + } @cuetsy(kind="interface") - // @deprecated Use MetricNamespaceQuery instead - #MetricDefinitionsQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "MetricDefinitionsQuery" - subscription: string - resourceGroup: string - metricNamespace?: string - resourceName?: string - } @cuetsy(kind="interface") - #MetricNamesQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "MetricNamesQuery" - subscription: string - resourceGroup: string - resourceName: string - metricNamespace: string - } @cuetsy(kind="interface") - #WorkspacesQuery: #BaseGrafanaTemplateVariableQuery & { - kind: "WorkspacesQuery" - subscription: string - } @cuetsy(kind="interface") - - #GrafanaTemplateVariableQuery: #AppInsightsMetricNameQuery | #AppInsightsGroupByQuery | #SubscriptionsQuery | #ResourceGroupsQuery | #ResourceNamesQuery | #MetricNamespaceQuery | #MetricDefinitionsQuery | #MetricNamesQuery | #WorkspacesQuery | #UnknownQuery @cuetsy(kind="type") - }, - ] - }, - ] + #GrafanaTemplateVariableQuery: #AppInsightsMetricNameQuery | #AppInsightsGroupByQuery | #SubscriptionsQuery | #ResourceGroupsQuery | #ResourceNamesQuery | #MetricNamespaceQuery | #MetricDefinitionsQuery | #MetricNamesQuery | #WorkspacesQuery | #UnknownQuery @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/cloud-monitoring/dataquery.cue b/public/app/plugins/datasource/cloud-monitoring/dataquery.cue index 26377d39bd2..8aba4696b68 100644 --- a/public/app/plugins/datasource/cloud-monitoring/dataquery.cue +++ b/public/app/plugins/datasource/cloud-monitoring/dataquery.cue @@ -25,173 +25,170 @@ composableKinds: DataQuery: { maturity: "merged" lineage: { - seqs: [ - { - schemas: [ - { - #CloudMonitoringQuery: common.DataQuery & { - // Aliases can be set to modify the legend labels. e.g. {{metric.label.xxx}}. See docs for more detail. - aliasBy?: string - // GCM query type. - // queryType: #QueryType - // Time Series List sub-query properties. - timeSeriesList?: #TimeSeriesList | #AnnotationQuery - // Time Series sub-query properties. - timeSeriesQuery?: #TimeSeriesQuery - // SLO sub-query properties. - sloQuery?: #SLOQuery - // Time interval in milliseconds. - intervalMs?: number - } @cuetsy(kind="interface") + schemas: [{ + version: [0, 0] + schema: { + #CloudMonitoringQuery: common.DataQuery & { + // Aliases can be set to modify the legend labels. e.g. {{metric.label.xxx}}. See docs for more detail. + aliasBy?: string + // GCM query type. + // queryType: #QueryType + // Time Series List sub-query properties. + timeSeriesList?: #TimeSeriesList | #AnnotationQuery + // Time Series sub-query properties. + timeSeriesQuery?: #TimeSeriesQuery + // SLO sub-query properties. + sloQuery?: #SLOQuery + // Time interval in milliseconds. + intervalMs?: number + } @cuetsy(kind="interface") - // Defines the supported queryTypes. - #QueryType: "timeSeriesList" | "timeSeriesQuery" | "slo" | "annotation" @cuetsy(kind="enum", memberNames="TIME_SERIES_LIST|TIME_SERIES_QUERY|SLO|ANNOTATION") + // Defines the supported queryTypes. + #QueryType: "timeSeriesList" | "timeSeriesQuery" | "slo" | "annotation" @cuetsy(kind="enum", memberNames="TIME_SERIES_LIST|TIME_SERIES_QUERY|SLO|ANNOTATION") - // Time Series List sub-query properties. - #TimeSeriesList: { - // GCP project to execute the query against. - projectName: string - // Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. - crossSeriesReducer: string - // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. - alignmentPeriod?: string - // Alignment function to be used. Defaults to ALIGN_MEAN. - perSeriesAligner?: string - // Array of labels to group data by. - groupBys?: [...string] - // Array of filters to query data by. Labels that can be filtered on are defined by the metric. - filters?: [...string] - // Data view, defaults to FULL. - view?: string + // Time Series List sub-query properties. + #TimeSeriesList: { + // GCP project to execute the query against. + projectName: string + // Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. + crossSeriesReducer: string + // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. + alignmentPeriod?: string + // Alignment function to be used. Defaults to ALIGN_MEAN. + perSeriesAligner?: string + // Array of labels to group data by. + groupBys?: [...string] + // Array of filters to query data by. Labels that can be filtered on are defined by the metric. + filters?: [...string] + // Data view, defaults to FULL. + view?: string - // Only present if a preprocessor is selected. Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. - secondaryCrossSeriesReducer?: string - // Only present if a preprocessor is selected. Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. - secondaryAlignmentPeriod?: string - // Only present if a preprocessor is selected. Alignment function to be used. Defaults to ALIGN_MEAN. - secondaryPerSeriesAligner?: string - // Only present if a preprocessor is selected. Array of labels to group data by. - secondaryGroupBys?: [...string] + // Only present if a preprocessor is selected. Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. + secondaryCrossSeriesReducer?: string + // Only present if a preprocessor is selected. Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. + secondaryAlignmentPeriod?: string + // Only present if a preprocessor is selected. Alignment function to be used. Defaults to ALIGN_MEAN. + secondaryPerSeriesAligner?: string + // Only present if a preprocessor is selected. Array of labels to group data by. + secondaryGroupBys?: [...string] - // Preprocessor is not part of the API, but is used to store the preprocessor and not affect the UI for the rest of parameters - preprocessor?: #PreprocessorType - ... - } @cuetsy(kind="interface") + // Preprocessor is not part of the API, but is used to store the preprocessor and not affect the UI for the rest of parameters + preprocessor?: #PreprocessorType + ... + } @cuetsy(kind="interface") - // Types of pre-processor available. Defined by the metric. - #PreprocessorType: "none" | "rate" | "delta" @cuetsy(kind="enum") + // Types of pre-processor available. Defined by the metric. + #PreprocessorType: "none" | "rate" | "delta" @cuetsy(kind="enum") - // Annotation sub-query properties. - #AnnotationQuery: #TimeSeriesList & { - // Annotation title. - title?: string - // Annotation text. - text?: string - } @cuetsy(kind="interface") + // Annotation sub-query properties. + #AnnotationQuery: #TimeSeriesList & { + // Annotation title. + title?: string + // Annotation text. + text?: string + } @cuetsy(kind="interface") - // Time Series sub-query properties. - #TimeSeriesQuery: { - // GCP project to execute the query against. - projectName: string - // MQL query to be executed. - query: string - // To disable the graphPeriod, it should explictly be set to 'disabled'. - graphPeriod?: "disabled" | string - } @cuetsy(kind="interface") + // Time Series sub-query properties. + #TimeSeriesQuery: { + // GCP project to execute the query against. + projectName: string + // MQL query to be executed. + query: string + // To disable the graphPeriod, it should explictly be set to 'disabled'. + graphPeriod?: "disabled" | string + } @cuetsy(kind="interface") - // SLO sub-query properties. - #SLOQuery: { - // GCP project to execute the query against. - projectName: string - // Alignment function to be used. Defaults to ALIGN_MEAN. - perSeriesAligner?: string - // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. - alignmentPeriod?: string - // SLO selector. - selectorName: string - // ID for the service the SLO is in. - serviceId: string - // Name for the service the SLO is in. - serviceName: string - // ID for the SLO. - sloId: string - // Name of the SLO. - sloName: string - // SLO goal value. - goal?: number - // Specific lookback period for the SLO. - lookbackPeriod?: string - } @cuetsy(kind="interface") + // SLO sub-query properties. + #SLOQuery: { + // GCP project to execute the query against. + projectName: string + // Alignment function to be used. Defaults to ALIGN_MEAN. + perSeriesAligner?: string + // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. + alignmentPeriod?: string + // SLO selector. + selectorName: string + // ID for the service the SLO is in. + serviceId: string + // Name for the service the SLO is in. + serviceName: string + // ID for the SLO. + sloId: string + // Name of the SLO. + sloName: string + // SLO goal value. + goal?: number + // Specific lookback period for the SLO. + lookbackPeriod?: string + } @cuetsy(kind="interface") - // @deprecated This type is for migration purposes only. Replaced by TimeSeriesList Metric sub-query properties. - #MetricQuery: { - // GCP project to execute the query against. - projectName: string - // Alignment function to be used. Defaults to ALIGN_MEAN. - perSeriesAligner?: string - // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. - alignmentPeriod?: string - // Aliases can be set to modify the legend labels. e.g. {{metric.label.xxx}}. See docs for more detail. - aliasBy?: string - editorMode: string - metricType: string - // Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. - crossSeriesReducer: string - // Array of labels to group data by. - groupBys?: [...string] - // Array of filters to query data by. Labels that can be filtered on are defined by the metric. - filters?: [...string] - metricKind?: #MetricKind - valueType?: string - view?: string - // MQL query to be executed. - query: string - // Preprocessor is not part of the API, but is used to store the preprocessor and not affect the UI for the rest of parameters - preprocessor?: #PreprocessorType - // To disable the graphPeriod, it should explictly be set to 'disabled'. - graphPeriod?: "disabled" | string - } @cuetsy(kind="interface") + // @deprecated This type is for migration purposes only. Replaced by TimeSeriesList Metric sub-query properties. + #MetricQuery: { + // GCP project to execute the query against. + projectName: string + // Alignment function to be used. Defaults to ALIGN_MEAN. + perSeriesAligner?: string + // Alignment period to use when regularizing data. Defaults to cloud-monitoring-auto. + alignmentPeriod?: string + // Aliases can be set to modify the legend labels. e.g. {{metric.label.xxx}}. See docs for more detail. + aliasBy?: string + editorMode: string + metricType: string + // Reducer applied across a set of time-series values. Defaults to REDUCE_NONE. + crossSeriesReducer: string + // Array of labels to group data by. + groupBys?: [...string] + // Array of filters to query data by. Labels that can be filtered on are defined by the metric. + filters?: [...string] + metricKind?: #MetricKind + valueType?: string + view?: string + // MQL query to be executed. + query: string + // Preprocessor is not part of the API, but is used to store the preprocessor and not affect the UI for the rest of parameters + preprocessor?: #PreprocessorType + // To disable the graphPeriod, it should explictly be set to 'disabled'. + graphPeriod?: "disabled" | string + } @cuetsy(kind="interface") - #MetricKind: "METRIC_KIND_UNSPECIFIED" | "GAUGE" | "DELTA" | "CUMULATIVE" @cuetsy(kind="enum") + #MetricKind: "METRIC_KIND_UNSPECIFIED" | "GAUGE" | "DELTA" | "CUMULATIVE" @cuetsy(kind="enum") - #ValueTypes: "VALUE_TYPE_UNSPECIFIED" | "BOOL" | "INT64" | "DOUBLE" | "STRING" | "DISTRIBUTION" | "MONEY" @cuetsy(kind="enum") + #ValueTypes: "VALUE_TYPE_UNSPECIFIED" | "BOOL" | "INT64" | "DOUBLE" | "STRING" | "DISTRIBUTION" | "MONEY" @cuetsy(kind="enum") - #AlignmentTypes: "ALIGN_DELTA" | "ALIGN_RATE" | "ALIGN_INTERPOLATE" | "ALIGN_NEXT_OLDER" | "ALIGN_MIN" | "ALIGN_MAX" | "ALIGN_MEAN" | "ALIGN_COUNT" | "ALIGN_SUM" | "ALIGN_STDDEV" | "ALIGN_COUNT_TRUE" | "ALIGN_COUNT_FALSE" | "ALIGN_FRACTION_TRUE" | "ALIGN_PERCENTILE_99" | "ALIGN_PERCENTILE_95" | "ALIGN_PERCENTILE_50" | "ALIGN_PERCENTILE_05" | "ALIGN_PERCENT_CHANGE" | "ALIGN_NONE" @cuetsy(kind="enum") + #AlignmentTypes: "ALIGN_DELTA" | "ALIGN_RATE" | "ALIGN_INTERPOLATE" | "ALIGN_NEXT_OLDER" | "ALIGN_MIN" | "ALIGN_MAX" | "ALIGN_MEAN" | "ALIGN_COUNT" | "ALIGN_SUM" | "ALIGN_STDDEV" | "ALIGN_COUNT_TRUE" | "ALIGN_COUNT_FALSE" | "ALIGN_FRACTION_TRUE" | "ALIGN_PERCENTILE_99" | "ALIGN_PERCENTILE_95" | "ALIGN_PERCENTILE_50" | "ALIGN_PERCENTILE_05" | "ALIGN_PERCENT_CHANGE" | "ALIGN_NONE" @cuetsy(kind="enum") - // @deprecated Use AnnotationQuery instead. Legacy annotation query properties for migration purposes. - #LegacyCloudMonitoringAnnotationQuery: { - // GCP project to execute the query against. - projectName: string - metricType: string - // Query refId. - refId: string - // Array of filters to query data by. Labels that can be filtered on are defined by the metric. - filters: [...string] - metricKind: #MetricKind - valueType: string - // Annotation title. - title: string - // Annotation text. - text: string - } @cuetsy(kind="interface") + // @deprecated Use AnnotationQuery instead. Legacy annotation query properties for migration purposes. + #LegacyCloudMonitoringAnnotationQuery: { + // GCP project to execute the query against. + projectName: string + metricType: string + // Query refId. + refId: string + // Array of filters to query data by. Labels that can be filtered on are defined by the metric. + filters: [...string] + metricKind: #MetricKind + valueType: string + // Annotation title. + title: string + // Annotation text. + text: string + } @cuetsy(kind="interface") - // Query filter representation. - #Filter: { - // Filter key. - key: string - // Filter operator. - operator: string - // Filter value. - value: string - // Filter condition. - condition?: string - } @cuetsy(kind="interface") + // Query filter representation. + #Filter: { + // Filter key. + key: string + // Filter operator. + operator: string + // Filter value. + value: string + // Filter condition. + condition?: string + } @cuetsy(kind="interface") - #MetricFindQueryTypes: "projects" | "services" | "defaultProject" | "metricTypes" | "labelKeys" | "labelValues" | "resourceTypes" | "aggregations" | "aligners" | "alignmentPeriods" | "selectors" | "sloServices" | "slo" @cuetsy(kind="enum", memberNames="Projects|Services|DefaultProject|MetricTypes|LabelKeys|LabelValues|ResourceTypes|Aggregations|Aligners|AlignmentPeriods|Selectors|SLOServices|SLO") - }, - - ] - }, - ] + #MetricFindQueryTypes: "projects" | "services" | "defaultProject" | "metricTypes" | "labelKeys" | "labelValues" | "resourceTypes" | "aggregations" | "aligners" | "alignmentPeriods" | "selectors" | "sloServices" | "slo" @cuetsy(kind="enum", memberNames="Projects|Services|DefaultProject|MetricTypes|LabelKeys|LabelValues|ResourceTypes|Aggregations|Aligners|AlignmentPeriods|Selectors|SLOServices|SLO") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/cloudwatch/dataquery.cue b/public/app/plugins/datasource/cloudwatch/dataquery.cue index 5ca33d0bbff..6b385f6f09c 100644 --- a/public/app/plugins/datasource/cloudwatch/dataquery.cue +++ b/public/app/plugins/datasource/cloudwatch/dataquery.cue @@ -26,189 +26,187 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - #MetricStat: { - // AWS region to query for the metric - region: string - // A namespace is a container for CloudWatch metrics. Metrics in different namespaces are isolated from each other, so that metrics from different applications are not mistakenly aggregated into the same statistics. For example, Amazon EC2 uses the AWS/EC2 namespace. - namespace: string - // Name of the metric - metricName?: string - // The dimensions of the metric - dimensions?: #Dimensions - // Only show metrics that exactly match all defined dimension names. - matchExact?: bool - // The length of time associated with a specific Amazon CloudWatch statistic. Can be specified by a number of seconds, 'auto', or as a duration string e.g. '15m' being 15 minutes - period?: string - // The ID of the AWS account to query for the metric, specifying `all` will query all accounts that the monitoring account is permitted to query. - accountId?: string - // Metric data aggregations over specified periods of time. For detailed definitions of the statistics supported by CloudWatch, see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html. - statistic?: string - // @deprecated use statistic - statistics?: [...string] - } @cuetsy(kind="interface") + schemas: [{ + version: [0, 0] + schema: { + #MetricStat: { + // AWS region to query for the metric + region: string + // A namespace is a container for CloudWatch metrics. Metrics in different namespaces are isolated from each other, so that metrics from different applications are not mistakenly aggregated into the same statistics. For example, Amazon EC2 uses the AWS/EC2 namespace. + namespace: string + // Name of the metric + metricName?: string + // The dimensions of the metric + dimensions?: #Dimensions + // Only show metrics that exactly match all defined dimension names. + matchExact?: bool + // The length of time associated with a specific Amazon CloudWatch statistic. Can be specified by a number of seconds, 'auto', or as a duration string e.g. '15m' being 15 minutes + period?: string + // The ID of the AWS account to query for the metric, specifying `all` will query all accounts that the monitoring account is permitted to query. + accountId?: string + // Metric data aggregations over specified periods of time. For detailed definitions of the statistics supported by CloudWatch, see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Statistics-definitions.html. + statistic?: string + // @deprecated use statistic + statistics?: [...string] + } @cuetsy(kind="interface") - // A name/value pair that is part of the identity of a metric. For example, you can get statistics for a specific EC2 instance by specifying the InstanceId dimension when you search for metrics. - #Dimensions: {[string]: string | [...string]} @cuetsy(kind="type") + // A name/value pair that is part of the identity of a metric. For example, you can get statistics for a specific EC2 instance by specifying the InstanceId dimension when you search for metrics. + #Dimensions: {[string]: string | [...string]} @cuetsy(kind="type") - // Shape of a CloudWatch Metrics query - #CloudWatchMetricsQuery: { - common.DataQuery - #MetricStat + // Shape of a CloudWatch Metrics query + #CloudWatchMetricsQuery: { + common.DataQuery + #MetricStat - // Whether a query is a Metrics, Logs, or Annotations query - queryMode?: #CloudWatchQueryMode - // Whether to use a metric search or metric query. Metric query is referred to as "Metrics Insights" in the AWS console. - metricQueryType?: #MetricQueryType - // Whether to use the query builder or code editor to create the query - metricEditorMode?: #MetricEditorMode - // ID can be used to reference other queries in math expressions. The ID can include numbers, letters, and underscore, and must start with a lowercase letter. - id: string - // Deprecated: use label - // @deprecated use label - alias?: string - // Change the time series legend names using dynamic labels. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html for more details. - label?: string - // Math expression query - expression?: string - // When the metric query type is `metricQueryType` is set to `Query`, this field is used to specify the query string. - sqlExpression?: string - // When the metric query type is `metricQueryType` is set to `Query` and the `metricEditorMode` is set to `Builder`, this field is used to build up an object representation of a SQL query. - sql?: #SQLExpression - } @cuetsy(kind="interface") + // Whether a query is a Metrics, Logs, or Annotations query + queryMode?: #CloudWatchQueryMode + // Whether to use a metric search or metric query. Metric query is referred to as "Metrics Insights" in the AWS console. + metricQueryType?: #MetricQueryType + // Whether to use the query builder or code editor to create the query + metricEditorMode?: #MetricEditorMode + // ID can be used to reference other queries in math expressions. The ID can include numbers, letters, and underscore, and must start with a lowercase letter. + id: string + // Deprecated: use label + // @deprecated use label + alias?: string + // Change the time series legend names using dynamic labels. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html for more details. + label?: string + // Math expression query + expression?: string + // When the metric query type is `metricQueryType` is set to `Query`, this field is used to specify the query string. + sqlExpression?: string + // When the metric query type is `metricQueryType` is set to `Query` and the `metricEditorMode` is set to `Builder`, this field is used to build up an object representation of a SQL query. + sql?: #SQLExpression + } @cuetsy(kind="interface") - #CloudWatchQueryMode: "Metrics" | "Logs" | "Annotations" @cuetsy(kind="type") - #MetricQueryType: 0 | 1 @cuetsy(kind="enum", memberNames="Search|Query") - #MetricEditorMode: 0 | 1 @cuetsy(kind="enum", memberNames="Builder|Code") - #SQLExpression: { - // SELECT part of the SQL expression - select?: #QueryEditorFunctionExpression - // FROM part of the SQL expression - from?: #QueryEditorPropertyExpression | #QueryEditorFunctionExpression - // WHERE part of the SQL expression - where?: #QueryEditorArrayExpression - // GROUP BY part of the SQL expression - groupBy?: #QueryEditorArrayExpression - // ORDER BY part of the SQL expression - orderBy?: #QueryEditorFunctionExpression - // The sort order of the SQL expression, `ASC` or `DESC` - orderByDirection?: string - // LIMIT part of the SQL expression - limit?: int64 - } @cuetsy(kind="interface") - #QueryEditorFunctionExpression: { - type: #QueryEditorExpressionType & "function" - name?: string - parameters?: [...#QueryEditorFunctionParameterExpression] - } @cuetsy(kind="interface") + #CloudWatchQueryMode: "Metrics" | "Logs" | "Annotations" @cuetsy(kind="type") + #MetricQueryType: 0 | 1 @cuetsy(kind="enum", memberNames="Search|Query") + #MetricEditorMode: 0 | 1 @cuetsy(kind="enum", memberNames="Builder|Code") + #SQLExpression: { + // SELECT part of the SQL expression + select?: #QueryEditorFunctionExpression + // FROM part of the SQL expression + from?: #QueryEditorPropertyExpression | #QueryEditorFunctionExpression + // WHERE part of the SQL expression + where?: #QueryEditorArrayExpression + // GROUP BY part of the SQL expression + groupBy?: #QueryEditorArrayExpression + // ORDER BY part of the SQL expression + orderBy?: #QueryEditorFunctionExpression + // The sort order of the SQL expression, `ASC` or `DESC` + orderByDirection?: string + // LIMIT part of the SQL expression + limit?: int64 + } @cuetsy(kind="interface") + #QueryEditorFunctionExpression: { + type: #QueryEditorExpressionType & "function" + name?: string + parameters?: [...#QueryEditorFunctionParameterExpression] + } @cuetsy(kind="interface") - #QueryEditorExpressionType: "property" | "operator" | "or" | "and" | "groupBy" | "function" | "functionParameter" @cuetsy(kind="enum") + #QueryEditorExpressionType: "property" | "operator" | "or" | "and" | "groupBy" | "function" | "functionParameter" @cuetsy(kind="enum") - #QueryEditorFunctionParameterExpression: { - type: #QueryEditorExpressionType & "functionParameter" - name?: string - } @cuetsy(kind="interface") + #QueryEditorFunctionParameterExpression: { + type: #QueryEditorExpressionType & "functionParameter" + name?: string + } @cuetsy(kind="interface") - #QueryEditorPropertyExpression: { - type: #QueryEditorExpressionType & "property" - property: #QueryEditorProperty - } @cuetsy(kind="interface") + #QueryEditorPropertyExpression: { + type: #QueryEditorExpressionType & "property" + property: #QueryEditorProperty + } @cuetsy(kind="interface") - #QueryEditorGroupByExpression: { - type: #QueryEditorExpressionType & "groupBy" - property: #QueryEditorProperty - } @cuetsy(kind="interface") + #QueryEditorGroupByExpression: { + type: #QueryEditorExpressionType & "groupBy" + property: #QueryEditorProperty + } @cuetsy(kind="interface") - #QueryEditorOperatorExpression: { - type: #QueryEditorExpressionType & "operator" - property: #QueryEditorProperty - // TS type is operator: QueryEditorOperator, extended in veneer - operator: #QueryEditorOperator - } @cuetsy(kind="interface") + #QueryEditorOperatorExpression: { + type: #QueryEditorExpressionType & "operator" + property: #QueryEditorProperty + // TS type is operator: QueryEditorOperator, extended in veneer + operator: #QueryEditorOperator + } @cuetsy(kind="interface") - // TS type is QueryEditorOperator, extended in veneer - #QueryEditorOperator: { - name?: string - value?: #QueryEditorOperatorType | [...#QueryEditorOperatorType] - } @cuetsy(kind="interface") + // TS type is QueryEditorOperator, extended in veneer + #QueryEditorOperator: { + name?: string + value?: #QueryEditorOperatorType | [...#QueryEditorOperatorType] + } @cuetsy(kind="interface") - #QueryEditorOperatorValueType: #QueryEditorOperatorType | [...#QueryEditorOperatorType] @cuetsy(kind="type") - #QueryEditorOperatorType: string | bool | int64 @cuetsy(kind="type") + #QueryEditorOperatorValueType: #QueryEditorOperatorType | [...#QueryEditorOperatorType] @cuetsy(kind="type") + #QueryEditorOperatorType: string | bool | int64 @cuetsy(kind="type") - #QueryEditorProperty: { - type: #QueryEditorPropertyType - name?: string - } @cuetsy(kind="interface") + #QueryEditorProperty: { + type: #QueryEditorPropertyType + name?: string + } @cuetsy(kind="interface") - #QueryEditorPropertyType: "string" @cuetsy(kind="enum") + #QueryEditorPropertyType: "string" @cuetsy(kind="enum") - #QueryEditorArrayExpression: { - type: (#QueryEditorExpressionType & "and") | (#QueryEditorExpressionType & "or") - expressions: [...#QueryEditorExpression] | [...#QueryEditorArrayExpression] - } @cuetsy(kind="interface") + #QueryEditorArrayExpression: { + type: (#QueryEditorExpressionType & "and") | (#QueryEditorExpressionType & "or") + expressions: [...#QueryEditorExpression] | [...#QueryEditorArrayExpression] + } @cuetsy(kind="interface") - #QueryEditorExpression: #QueryEditorArrayExpression | #QueryEditorPropertyExpression | #QueryEditorGroupByExpression | #QueryEditorFunctionExpression | #QueryEditorFunctionParameterExpression | #QueryEditorOperatorExpression @cuetsy(kind="type") + #QueryEditorExpression: #QueryEditorArrayExpression | #QueryEditorPropertyExpression | #QueryEditorGroupByExpression | #QueryEditorFunctionExpression | #QueryEditorFunctionParameterExpression | #QueryEditorOperatorExpression @cuetsy(kind="type") - // Shape of a CloudWatch Logs query - #CloudWatchLogsQuery: { - common.DataQuery + // Shape of a CloudWatch Logs query + #CloudWatchLogsQuery: { + common.DataQuery - // Whether a query is a Metrics, Logs, or Annotations query - queryMode: #CloudWatchQueryMode - id: string - // AWS region to query for the logs - region: string - // The CloudWatch Logs Insights query to execute - expression?: string - // Fields to group the results by, this field is automatically populated whenever the query is updated - statsGroups?: [...string] - // Log groups to query - logGroups?: [...#LogGroup] - // @deprecated use logGroups - logGroupNames?: [...string] - } @cuetsy(kind="interface") - #LogGroup: { - // ARN of the log group - arn: string - // Name of the log group - name: string - // AccountId of the log group - accountId?: string - // Label of the log group - accountLabel?: string - } @cuetsy(kind="interface") + // Whether a query is a Metrics, Logs, or Annotations query + queryMode: #CloudWatchQueryMode + id: string + // AWS region to query for the logs + region: string + // The CloudWatch Logs Insights query to execute + expression?: string + // Fields to group the results by, this field is automatically populated whenever the query is updated + statsGroups?: [...string] + // Log groups to query + logGroups?: [...#LogGroup] + // @deprecated use logGroups + logGroupNames?: [...string] + } @cuetsy(kind="interface") + #LogGroup: { + // ARN of the log group + arn: string + // Name of the log group + name: string + // AccountId of the log group + accountId?: string + // Label of the log group + accountLabel?: string + } @cuetsy(kind="interface") - #CloudWatchQueryMode: "Metrics" | "Logs" | "Annotations" @cuetsy(kind="type") + #CloudWatchQueryMode: "Metrics" | "Logs" | "Annotations" @cuetsy(kind="type") - // Shape of a CloudWatch Annotation query - #CloudWatchAnnotationQuery: { - common.DataQuery - #MetricStat + // Shape of a CloudWatch Annotation query + #CloudWatchAnnotationQuery: { + common.DataQuery + #MetricStat - // Whether a query is a Metrics, Logs, or Annotations query - queryMode: #CloudWatchQueryMode - // Enable matching on the prefix of the action name or alarm name, specify the prefixes with actionPrefix and/or alarmNamePrefix - prefixMatching?: bool - // Use this parameter to filter the results of the operation to only those alarms - // that use a certain alarm action. For example, you could specify the ARN of - // an SNS topic to find all alarms that send notifications to that topic. - // e.g. `arn:aws:sns:us-east-1:123456789012:my-app-` would match `arn:aws:sns:us-east-1:123456789012:my-app-action` - // but not match `arn:aws:sns:us-east-1:123456789012:your-app-action` - actionPrefix?: string - // An alarm name prefix. If you specify this parameter, you receive information - // about all alarms that have names that start with this prefix. - // e.g. `my-team-service-` would match `my-team-service-high-cpu` but not match `your-team-service-high-cpu` - alarmNamePrefix?: string - } @cuetsy(kind="interface") + // Whether a query is a Metrics, Logs, or Annotations query + queryMode: #CloudWatchQueryMode + // Enable matching on the prefix of the action name or alarm name, specify the prefixes with actionPrefix and/or alarmNamePrefix + prefixMatching?: bool + // Use this parameter to filter the results of the operation to only those alarms + // that use a certain alarm action. For example, you could specify the ARN of + // an SNS topic to find all alarms that send notifications to that topic. + // e.g. `arn:aws:sns:us-east-1:123456789012:my-app-` would match `arn:aws:sns:us-east-1:123456789012:my-app-action` + // but not match `arn:aws:sns:us-east-1:123456789012:your-app-action` + actionPrefix?: string + // An alarm name prefix. If you specify this parameter, you receive information + // about all alarms that have names that start with this prefix. + // e.g. `my-team-service-` would match `my-team-service-high-cpu` but not match `your-team-service-high-cpu` + alarmNamePrefix?: string + } @cuetsy(kind="interface") - // TS type is CloudWatchDefaultQuery = Omit & CloudWatchMetricsQuery, declared in veneer - // #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind="type") - }, - ] - }, - ] + // TS type is CloudWatchDefaultQuery = Omit & CloudWatchMetricsQuery, declared in veneer + // #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts b/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts index c1a8751c66c..417958e0a06 100644 --- a/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts +++ b/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts @@ -277,6 +277,10 @@ export interface LogGroup { /** * Shape of a CloudWatch Annotation query */ +/** + * TS type is CloudWatchDefaultQuery = Omit & CloudWatchMetricsQuery, declared in veneer + * #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind="type") + */ export interface CloudWatchAnnotationQuery extends common.DataQuery, MetricStat { /** * Use this parameter to filter the results of the operation to only those alarms diff --git a/public/app/plugins/datasource/elasticsearch/dataquery.cue b/public/app/plugins/datasource/elasticsearch/dataquery.cue index 5baed2d2427..005a36dd16b 100644 --- a/public/app/plugins/datasource/elasticsearch/dataquery.cue +++ b/public/app/plugins/datasource/elasticsearch/dataquery.cue @@ -26,406 +26,384 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - common.DataQuery + schemas: [{ + version: [0, 0] + schema: { + common.DataQuery - // Alias pattern - alias?: string - // Lucene query - query?: string - // Name of time field - timeField?: string - // List of bucket aggregations - bucketAggs?: [...#BucketAggregation] - // List of metric aggregations - metrics?: [...#MetricAggregation] + // Alias pattern + alias?: string + // Lucene query + query?: string + // Name of time field + timeField?: string + // List of bucket aggregations + bucketAggs?: [...#BucketAggregation] + // List of metric aggregations + metrics?: [...#MetricAggregation] - #BucketAggregation: #DateHistogram | #Histogram | #Terms | #Filters | #GeoHashGrid | #Nested @cuetsy(kind="type") - #MetricAggregation: #Count | #PipelineMetricAggregation | #MetricAggregationWithSettings @cuetsy(kind="type") + #BucketAggregation: #DateHistogram | #Histogram | #Terms | #Filters | #GeoHashGrid | #Nested @cuetsy(kind="type") + #MetricAggregation: #Count | #PipelineMetricAggregation | #MetricAggregationWithSettings @cuetsy(kind="type") - #BucketAggregationType: "terms" | "filters" | "geohash_grid" | "date_histogram" | "histogram" | "nested" @cuetsy(kind="type") + #BucketAggregationType: "terms" | "filters" | "geohash_grid" | "date_histogram" | "histogram" | "nested" @cuetsy(kind="type") - #BaseBucketAggregation: { - id: string - type: #BucketAggregationType - settings?: _ - } @cuetsy(kind="interface") + #BaseBucketAggregation: { + id: string + type: #BucketAggregationType + settings?: _ + } @cuetsy(kind="interface") - #BucketAggregationWithField: { - #BaseBucketAggregation - field?: string - } @cuetsy(kind="interface") + #BucketAggregationWithField: { + #BaseBucketAggregation + field?: string + } @cuetsy(kind="interface") - #DateHistogram: { - #BucketAggregationWithField - type: #BucketAggregationType & "date_histogram" - settings?: #DateHistogramSettings - } @cuetsy(kind="interface") + #DateHistogram: { + #BucketAggregationWithField + type: #BucketAggregationType & "date_histogram" + settings?: #DateHistogramSettings + } @cuetsy(kind="interface") - #DateHistogramSettings: { - interval?: string - min_doc_count?: string - trimEdges?: string - offset?: string - timeZone?: string - } @cuetsy(kind="interface") + #DateHistogramSettings: { + interval?: string + min_doc_count?: string + trimEdges?: string + offset?: string + timeZone?: string + } @cuetsy(kind="interface") - #Histogram: { - #BucketAggregationWithField - type: #BucketAggregationType & "histogram" - settings?: #HistogramSettings - } @cuetsy(kind="interface") + #Histogram: { + #BucketAggregationWithField + type: #BucketAggregationType & "histogram" + settings?: #HistogramSettings + } @cuetsy(kind="interface") - #HistogramSettings: { - interval?: string - min_doc_count?: string - } @cuetsy(kind="interface") + #HistogramSettings: { + interval?: string + min_doc_count?: string + } @cuetsy(kind="interface") - #TermsOrder: "desc" | "asc" @cuetsy(kind="type") + #TermsOrder: "desc" | "asc" @cuetsy(kind="type") - #Nested: { - #BucketAggregationWithField - type: #BucketAggregationType & "nested" - settings?: {} - } @cuetsy(kind="interface") + #Nested: { + #BucketAggregationWithField + type: #BucketAggregationType & "nested" + settings?: {} + } @cuetsy(kind="interface") - #Terms: { - #BucketAggregationWithField - type: #BucketAggregationType & "terms" - settings?: #TermsSettings - } @cuetsy(kind="interface") + #Terms: { + #BucketAggregationWithField + type: #BucketAggregationType & "terms" + settings?: #TermsSettings + } @cuetsy(kind="interface") - #TermsSettings: { - order?: #TermsOrder - size?: string - min_doc_count?: string - orderBy?: string - missing?: string - } @cuetsy(kind="interface") + #TermsSettings: { + order?: #TermsOrder + size?: string + min_doc_count?: string + orderBy?: string + missing?: string + } @cuetsy(kind="interface") - #Filters: { - #BaseBucketAggregation - type: #BucketAggregationType & "filters" - settings?: #FiltersSettings - } @cuetsy(kind="interface") + #Filters: { + #BaseBucketAggregation + type: #BucketAggregationType & "filters" + settings?: #FiltersSettings + } @cuetsy(kind="interface") - #Filter: { - query: string - label: string - } @cuetsy(kind="type") + #Filter: { + query: string + label: string + } @cuetsy(kind="type") - #FiltersSettings: { - filters?: [...#Filter] - } @cuetsy(kind="interface") + #FiltersSettings: { + filters?: [...#Filter] + } @cuetsy(kind="interface") - #GeoHashGrid: { - #BucketAggregationWithField - type: #BucketAggregationType & "geohash_grid" - settings?: #GeoHashGridSettings - } @cuetsy(kind="interface") + #GeoHashGrid: { + #BucketAggregationWithField + type: #BucketAggregationType & "geohash_grid" + settings?: #GeoHashGridSettings + } @cuetsy(kind="interface") - #GeoHashGridSettings: { - precision?: string - } @cuetsy(kind="interface") + #GeoHashGridSettings: { + precision?: string + } @cuetsy(kind="interface") - #PipelineMetricAggregationType: "moving_avg" | "moving_fn" | "derivative" | "serial_diff" | "cumulative_sum" | "bucket_script" @cuetsy(kind="type") - #MetricAggregationType: "count" | "avg" | "sum" | "min" | "max" | "extended_stats" | "percentiles" | "cardinality" | "raw_document" | "raw_data" | "logs" | "rate" | "top_metrics" | #PipelineMetricAggregationType @cuetsy(kind="type") + #PipelineMetricAggregationType: "moving_avg" | "moving_fn" | "derivative" | "serial_diff" | "cumulative_sum" | "bucket_script" @cuetsy(kind="type") + #MetricAggregationType: "count" | "avg" | "sum" | "min" | "max" | "extended_stats" | "percentiles" | "cardinality" | "raw_document" | "raw_data" | "logs" | "rate" | "top_metrics" | #PipelineMetricAggregationType @cuetsy(kind="type") - #BaseMetricAggregation: { - type: #MetricAggregationType - id: string - hide?: bool - } @cuetsy(kind="interface") + #BaseMetricAggregation: { + type: #MetricAggregationType + id: string + hide?: bool + } @cuetsy(kind="interface") - #PipelineVariable: { - name: string - pipelineAgg: string - } @cuetsy(kind="interface") + #PipelineVariable: { + name: string + pipelineAgg: string + } @cuetsy(kind="interface") - #MetricAggregationWithField: { - #BaseMetricAggregation - field?: string - } @cuetsy(kind="interface") + #MetricAggregationWithField: { + #BaseMetricAggregation + field?: string + } @cuetsy(kind="interface") - #MetricAggregationWithMissingSupport: { - #BaseMetricAggregation - settings?: { - missing?: string - } - } @cuetsy(kind="interface") + #MetricAggregationWithMissingSupport: { + #BaseMetricAggregation + settings?: missing?: string + } @cuetsy(kind="interface") - #InlineScript: string | {inline?: string} @cuetsy(kind="type") + #InlineScript: string | {inline?: string} @cuetsy(kind="type") - #MetricAggregationWithInlineScript: { - #BaseMetricAggregation - settings?: { - script?: #InlineScript - } - } @cuetsy(kind="interface") + #MetricAggregationWithInlineScript: { + #BaseMetricAggregation + settings?: script?: #InlineScript + } @cuetsy(kind="interface") - #Count: { - #BaseMetricAggregation - type: #MetricAggregationType & "count" - } @cuetsy(kind="interface") + #Count: { + #BaseMetricAggregation + type: #MetricAggregationType & "count" + } @cuetsy(kind="interface") - #Average: { - #MetricAggregationWithField - #MetricAggregationWithMissingSupport - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "avg" - settings?: { - script?: #InlineScript - missing?: string - } - } @cuetsy(kind="interface") + #Average: { + #MetricAggregationWithField + #MetricAggregationWithMissingSupport + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "avg" + settings?: { + script?: #InlineScript + missing?: string + } + } @cuetsy(kind="interface") - #Sum: { - #MetricAggregationWithField - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "sum" - settings?: { - script?: #InlineScript - missing?: string - } - } @cuetsy(kind="interface") + #Sum: { + #MetricAggregationWithField + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "sum" + settings?: { + script?: #InlineScript + missing?: string + } + } @cuetsy(kind="interface") - #Max: { - #MetricAggregationWithField - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "max" - settings?: { - script?: #InlineScript - missing?: string - } - } @cuetsy(kind="interface") + #Max: { + #MetricAggregationWithField + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "max" + settings?: { + script?: #InlineScript + missing?: string + } + } @cuetsy(kind="interface") - #Min: { - #MetricAggregationWithField - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "min" - settings?: { - script?: #InlineScript - missing?: string - } - } @cuetsy(kind="interface") + #Min: { + #MetricAggregationWithField + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "min" + settings?: { + script?: #InlineScript + missing?: string + } + } @cuetsy(kind="interface") - #ExtendedStatMetaType: "avg" | "min" | "max" | "sum" | "count" | "std_deviation" | "std_deviation_bounds_upper" | "std_deviation_bounds_lower" @cuetsy(kind="type") + #ExtendedStatMetaType: "avg" | "min" | "max" | "sum" | "count" | "std_deviation" | "std_deviation_bounds_upper" | "std_deviation_bounds_lower" @cuetsy(kind="type") - #ExtendedStat: { - label: string - value: #ExtendedStatMetaType - } @cuetsy(kind="interface") + #ExtendedStat: { + label: string + value: #ExtendedStatMetaType + } @cuetsy(kind="interface") - #ExtendedStats: { - #MetricAggregationWithField - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "extended_stats" - settings?: { - script?: #InlineScript - missing?: string - sigma?: string - } - meta?: [#ExtendedStatMetaType]: bool - } @cuetsy(kind="interface") + #ExtendedStats: { + #MetricAggregationWithField + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "extended_stats" + settings?: { + script?: #InlineScript + missing?: string + sigma?: string + } + meta?: [#ExtendedStatMetaType]: bool + } @cuetsy(kind="interface") - #Percentiles: { - #MetricAggregationWithField - #MetricAggregationWithInlineScript - type: #MetricAggregationType & "percentiles" - settings?: { - script?: #InlineScript - missing?: string - percents?: [...string] - } - } @cuetsy(kind="interface") + #Percentiles: { + #MetricAggregationWithField + #MetricAggregationWithInlineScript + type: #MetricAggregationType & "percentiles" + settings?: { + script?: #InlineScript + missing?: string + percents?: [...string] + } + } @cuetsy(kind="interface") - #UniqueCount: { - #MetricAggregationWithField - type: #MetricAggregationType & "cardinality" - settings?: { - precision_threshold?: string - missing?: string - } - } @cuetsy(kind="interface") + #UniqueCount: { + #MetricAggregationWithField + type: #MetricAggregationType & "cardinality" + settings?: { + precision_threshold?: string + missing?: string + } + } @cuetsy(kind="interface") - #RawDocument: { - #BaseMetricAggregation - type: #MetricAggregationType & "raw_document" - settings?: { - size?: string - } - } @cuetsy(kind="interface") + #RawDocument: { + #BaseMetricAggregation + type: #MetricAggregationType & "raw_document" + settings?: size?: string + } @cuetsy(kind="interface") - #RawData: { - #BaseMetricAggregation - type: #MetricAggregationType & "raw_data" - settings?: { - size?: string - } - } @cuetsy(kind="interface") + #RawData: { + #BaseMetricAggregation + type: #MetricAggregationType & "raw_data" + settings?: size?: string + } @cuetsy(kind="interface") - #Logs: { - #BaseMetricAggregation - type: #MetricAggregationType & "logs" - settings?: { - limit?: string - } - } @cuetsy(kind="interface") + #Logs: { + #BaseMetricAggregation + type: #MetricAggregationType & "logs" + settings?: limit?: string + } @cuetsy(kind="interface") - #Rate: { - #MetricAggregationWithField - type: #MetricAggregationType & "rate" - settings?: { - unit?: string - mode?: string - } - } @cuetsy(kind="interface") + #Rate: { + #MetricAggregationWithField + type: #MetricAggregationType & "rate" + settings?: { + unit?: string + mode?: string + } + } @cuetsy(kind="interface") - #BasePipelineMetricAggregation: { - #MetricAggregationWithField - pipelineAgg?: string - type: #PipelineMetricAggregationType - } @cuetsy(kind="interface") + #BasePipelineMetricAggregation: { + #MetricAggregationWithField + pipelineAgg?: string + type: #PipelineMetricAggregationType + } @cuetsy(kind="interface") - #PipelineMetricAggregationWithMultipleBucketPaths: { - #BaseMetricAggregation - pipelineVariables?: [...#PipelineVariable] - } @cuetsy(kind="interface") + #PipelineMetricAggregationWithMultipleBucketPaths: { + #BaseMetricAggregation + pipelineVariables?: [...#PipelineVariable] + } @cuetsy(kind="interface") - #MovingAverageModel: "simple" | "linear" | "ewma" | "holt" | "holt_winters" @cuetsy(kind="type") + #MovingAverageModel: "simple" | "linear" | "ewma" | "holt" | "holt_winters" @cuetsy(kind="type") - #MovingAverageModelOption: { - label: string - value: #MovingAverageModel - } @cuetsy(kind="interface") + #MovingAverageModelOption: { + label: string + value: #MovingAverageModel + } @cuetsy(kind="interface") - #BaseMovingAverageModelSettings: { - model: #MovingAverageModel - window: string - predict: string - } @cuetsy(kind="interface") + #BaseMovingAverageModelSettings: { + model: #MovingAverageModel + window: string + predict: string + } @cuetsy(kind="interface") - #MovingAverageSimpleModelSettings: { - #BaseMovingAverageModelSettings - model: #MovingAverageModel & "simple" - } @cuetsy(kind="interface") + #MovingAverageSimpleModelSettings: { + #BaseMovingAverageModelSettings + model: #MovingAverageModel & "simple" + } @cuetsy(kind="interface") - #MovingAverageLinearModelSettings: { - #BaseMovingAverageModelSettings - model: #MovingAverageModel & "linear" - } @cuetsy(kind="interface") + #MovingAverageLinearModelSettings: { + #BaseMovingAverageModelSettings + model: #MovingAverageModel & "linear" + } @cuetsy(kind="interface") - #MovingAverageEWMAModelSettings: { - #BaseMovingAverageModelSettings - model: #MovingAverageModel & "ewma" - settings?: { - alpha?: string - } - minimize: bool - } @cuetsy(kind="interface") + #MovingAverageEWMAModelSettings: { + #BaseMovingAverageModelSettings + model: #MovingAverageModel & "ewma" + settings?: alpha?: string + minimize: bool + } @cuetsy(kind="interface") - #MovingAverageHoltModelSettings: { - #BaseMovingAverageModelSettings - model: #MovingAverageModel & "holt" - settings: { - alpha?: string - beta?: string - } - minimize: bool - } @cuetsy(kind="interface") + #MovingAverageHoltModelSettings: { + #BaseMovingAverageModelSettings + model: #MovingAverageModel & "holt" + settings: { + alpha?: string + beta?: string + } + minimize: bool + } @cuetsy(kind="interface") - #MovingAverageHoltWintersModelSettings: { - #BaseMovingAverageModelSettings - model: #MovingAverageModel & "holt_winters" - settings: { - alpha?: string - beta?: string - gamma?: string - period?: string - pad?: bool - } - minimize: bool - } @cuetsy(kind="interface") + #MovingAverageHoltWintersModelSettings: { + #BaseMovingAverageModelSettings + model: #MovingAverageModel & "holt_winters" + settings: { + alpha?: string + beta?: string + gamma?: string + period?: string + pad?: bool + } + minimize: bool + } @cuetsy(kind="interface") - // #MovingAverageModelSettings Not sure how to do this one: - // export type MovingAverageModelSettings = Partial< - // Extract< - // | MovingAverageSimpleModelSettings - // | MovingAverageLinearModelSettings - // | MovingAverageEWMAModelSettings - // | MovingAverageHoltModelSettings - // | MovingAverageHoltWintersModelSettings, - // { model: T } - // > - // >; + // #MovingAverageModelSettings Not sure how to do this one: + // export type MovingAverageModelSettings = Partial< + // Extract< + // | MovingAverageSimpleModelSettings + // | MovingAverageLinearModelSettings + // | MovingAverageEWMAModelSettings + // | MovingAverageHoltModelSettings + // | MovingAverageHoltWintersModelSettings, + // { model: T } + // > + // >; - // #MovingAverage's settings are overridden in types.ts - #MovingAverage: { - #BasePipelineMetricAggregation - type: #PipelineMetricAggregationType & "moving_avg" - settings?: {...} - } @cuetsy(kind="interface") + // #MovingAverage's settings are overridden in types.ts + #MovingAverage: { + #BasePipelineMetricAggregation + type: #PipelineMetricAggregationType & "moving_avg" + settings?: {...} + } @cuetsy(kind="interface") - #MovingFunction: { - #BasePipelineMetricAggregation - type: #PipelineMetricAggregationType & "moving_fn" - settings?: { - window?: string - script?: #InlineScript - shift?: string - } - } @cuetsy(kind="interface") + #MovingFunction: { + #BasePipelineMetricAggregation + type: #PipelineMetricAggregationType & "moving_fn" + settings?: { + window?: string + script?: #InlineScript + shift?: string + } + } @cuetsy(kind="interface") - #Derivative: { - #BasePipelineMetricAggregation - type: #PipelineMetricAggregationType & "derivative" - settings?: { - unit?: string - } - } @cuetsy(kind="interface") + #Derivative: { + #BasePipelineMetricAggregation + type: #PipelineMetricAggregationType & "derivative" + settings?: unit?: string + } @cuetsy(kind="interface") - #SerialDiff: { - #BasePipelineMetricAggregation - type: #PipelineMetricAggregationType & "serial_diff" - settings?: { - lag?: string - } - } @cuetsy(kind="interface") + #SerialDiff: { + #BasePipelineMetricAggregation + type: #PipelineMetricAggregationType & "serial_diff" + settings?: lag?: string + } @cuetsy(kind="interface") - #CumulativeSum: { - #BasePipelineMetricAggregation - type: #PipelineMetricAggregationType & "cumulative_sum" - settings?: { - format?: string - } - } @cuetsy(kind="interface") + #CumulativeSum: { + #BasePipelineMetricAggregation + type: #PipelineMetricAggregationType & "cumulative_sum" + settings?: format?: string + } @cuetsy(kind="interface") - #BucketScript: { - #PipelineMetricAggregationWithMultipleBucketPaths - type: #PipelineMetricAggregationType & "bucket_script" - settings?: { - script?: #InlineScript - } - } @cuetsy(kind="interface") + #BucketScript: { + #PipelineMetricAggregationWithMultipleBucketPaths + type: #PipelineMetricAggregationType & "bucket_script" + settings?: script?: #InlineScript + } @cuetsy(kind="interface") - #TopMetrics: { - #BaseMetricAggregation - type: #MetricAggregationType & "top_metrics" - settings?: { - order?: string - orderBy?: string - metrics?: [...string] - } - } @cuetsy(kind="interface") + #TopMetrics: { + #BaseMetricAggregation + type: #MetricAggregationType & "top_metrics" + settings?: { + order?: string + orderBy?: string + metrics?: [...string] + } + } @cuetsy(kind="interface") - #PipelineMetricAggregation: #MovingAverage | #Derivative | #CumulativeSum | #BucketScript @cuetsy(kind="type") - #MetricAggregationWithSettings: #BucketScript | #CumulativeSum | #Derivative | #SerialDiff | #RawData | #RawDocument | #UniqueCount | #Percentiles | #ExtendedStats | #Min | #Max | #Sum | #Average | #MovingAverage | #MovingFunction | #Logs | #Rate | #TopMetrics @cuetsy(kind="type") - }, - ] - }, - ] + #PipelineMetricAggregation: #MovingAverage | #Derivative | #CumulativeSum | #BucketScript @cuetsy(kind="type") + #MetricAggregationWithSettings: #BucketScript | #CumulativeSum | #Derivative | #SerialDiff | #RawData | #RawDocument | #UniqueCount | #Percentiles | #ExtendedStats | #Min | #Max | #Sum | #Average | #MovingAverage | #MovingFunction | #Logs | #Rate | #TopMetrics @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/loki/dataquery.cue b/public/app/plugins/datasource/loki/dataquery.cue index c327d4f44e4..90dfa3c3f4f 100644 --- a/public/app/plugins/datasource/loki/dataquery.cue +++ b/public/app/plugins/datasource/loki/dataquery.cue @@ -26,36 +26,34 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - common.DataQuery + schemas: [{ + version: [0, 0] + schema: { + common.DataQuery - // The LogQL query. - expr: string - // Used to override the name of the series. - legendFormat?: string - // Used to limit the number of log rows returned. - maxLines?: int64 - // Used to scale the interval value. - resolution?: int64 - editorMode?: #QueryEditorMode - // @deprecated, now use queryType. - range?: bool - // @deprecated, now use queryType. - instant?: bool + // The LogQL query. + expr: string + // Used to override the name of the series. + legendFormat?: string + // Used to limit the number of log rows returned. + maxLines?: int64 + // Used to scale the interval value. + resolution?: int64 + editorMode?: #QueryEditorMode + // @deprecated, now use queryType. + range?: bool + // @deprecated, now use queryType. + instant?: bool - #QueryEditorMode: "code" | "builder" @cuetsy(kind="enum") + #QueryEditorMode: "code" | "builder" @cuetsy(kind="enum") - #LokiQueryType: "range" | "instant" | "stream" @cuetsy(kind="enum") + #LokiQueryType: "range" | "instant" | "stream" @cuetsy(kind="enum") - #SupportingQueryType: "logsVolume" | "logsSample" | "dataSample" @cuetsy(kind="enum") + #SupportingQueryType: "logsVolume" | "logsSample" | "dataSample" @cuetsy(kind="enum") - #LokiQueryDirection: "forward" | "backward" @cuetsy(kind="enum") - }, - ] - }, - ] + #LokiQueryDirection: "forward" | "backward" @cuetsy(kind="enum") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/parca/dataquery.cue b/public/app/plugins/datasource/parca/dataquery.cue index f48ba2dcf24..b8779752484 100644 --- a/public/app/plugins/datasource/parca/dataquery.cue +++ b/public/app/plugins/datasource/parca/dataquery.cue @@ -26,21 +26,20 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ + schemas: [{ + version: [0, 0] + schema: + // v0.0 { - schemas: [ - // v0.0 - { - common.DataQuery + common.DataQuery - // Specifies the query label selectors. - labelSelector: string | *"{}" - // Specifies the type of profile to query. - profileTypeId: string - #ParcaQueryType: "metrics" | "profile" | *"both" @cuetsy(kind="type") - }, - ] - }, - ] + // Specifies the query label selectors. + labelSelector: string | *"{}" + // Specifies the type of profile to query. + profileTypeId: string + #ParcaQueryType: "metrics" | "profile" | *"both" @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/phlare/dataquery.cue b/public/app/plugins/datasource/phlare/dataquery.cue index 1a766f8d182..76b60978c3f 100644 --- a/public/app/plugins/datasource/phlare/dataquery.cue +++ b/public/app/plugins/datasource/phlare/dataquery.cue @@ -26,25 +26,24 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ + schemas: [{ + version: [0, 0] + schema: + // v0.0 { - schemas: [ - // v0.0 - { - common.DataQuery + common.DataQuery - // Specifies the query label selectors. - labelSelector: string | *"{}" - // Specifies the type of profile to query. - profileTypeId: string - // Allows to group the results. - groupBy: [...string] - // Sets the maximum number of nodes in the flamegraph. - maxNodes?: int64 - #PhlareQueryType: "metrics" | "profile" | *"both" @cuetsy(kind="type") - }, - ] - }, - ] + // Specifies the query label selectors. + labelSelector: string | *"{}" + // Specifies the type of profile to query. + profileTypeId: string + // Allows to group the results. + groupBy: [...string] + // Sets the maximum number of nodes in the flamegraph. + maxNodes?: int64 + #PhlareQueryType: "metrics" | "profile" | *"both" @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/prometheus/dataquery.cue b/public/app/plugins/datasource/prometheus/dataquery.cue index 61fd766db43..b6def66ec26 100644 --- a/public/app/plugins/datasource/prometheus/dataquery.cue +++ b/public/app/plugins/datasource/prometheus/dataquery.cue @@ -26,35 +26,33 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - common.DataQuery + schemas: [{ + version: [0, 0] + schema: { + common.DataQuery - // The actual expression/query that will be evaluated by Prometheus - expr: string - // Returns only the latest value that Prometheus has scraped for the requested time series - instant?: bool - // Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series - range?: bool - // Execute an additional query to identify interesting raw samples relevant for the given expr - exemplar?: bool - // Specifies which editor is being used to prepare the query. It can be "code" or "builder" - editorMode?: #QueryEditorMode - // Query format to determine how to display data points in panel. It can be "time_series", "table", "heatmap" - format?: #PromQueryFormat - // Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname - legendFormat?: string - // @deprecated Used to specify how many times to divide max data points by. We use max data points under query options - // See https://github.com/grafana/grafana/issues/48081 - intervalFactor?: number + // The actual expression/query that will be evaluated by Prometheus + expr: string + // Returns only the latest value that Prometheus has scraped for the requested time series + instant?: bool + // Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series + range?: bool + // Execute an additional query to identify interesting raw samples relevant for the given expr + exemplar?: bool + // Specifies which editor is being used to prepare the query. It can be "code" or "builder" + editorMode?: #QueryEditorMode + // Query format to determine how to display data points in panel. It can be "time_series", "table", "heatmap" + format?: #PromQueryFormat + // Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname + legendFormat?: string + // @deprecated Used to specify how many times to divide max data points by. We use max data points under query options + // See https://github.com/grafana/grafana/issues/48081 + intervalFactor?: number - #QueryEditorMode: "code" | "builder" @cuetsy(kind="enum") - #PromQueryFormat: "time_series" | "table" | "heatmap" @cuetsy(kind="type") - }, - ] - }, - ] + #QueryEditorMode: "code" | "builder" @cuetsy(kind="enum") + #PromQueryFormat: "time_series" | "table" | "heatmap" @cuetsy(kind="type") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/tempo/dataquery.cue b/public/app/plugins/datasource/tempo/dataquery.cue index 93f6161c0a9..54a9b150ea3 100644 --- a/public/app/plugins/datasource/tempo/dataquery.cue +++ b/public/app/plugins/datasource/tempo/dataquery.cue @@ -26,52 +26,50 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - #TempoQuery: common.DataQuery & { - // TraceQL query or trace ID - query: string - // Logfmt query to filter traces by their tags. Example: http.status_code=200 error=true - search?: string - // Query traces by service name - serviceName?: string - // Query traces by span name - spanName?: string - // Define the minimum duration to select traces. Use duration format, for example: 1.2s, 100ms - minDuration?: string - // Define the maximum duration to select traces. Use duration format, for example: 1.2s, 100ms - maxDuration?: string - // Filters to be included in a PromQL query to select data for the service graph. Example: {client="app",service="app"} - serviceMapQuery?: string - // Defines the maximum number of traces that are returned from Tempo - limit?: int64 - filters: [...#TraceqlFilter] - } @cuetsy(kind="interface") @grafana(TSVeneer="type") + schemas: [{ + version: [0, 0] + schema: { + #TempoQuery: common.DataQuery & { + // TraceQL query or trace ID + query: string + // Logfmt query to filter traces by their tags. Example: http.status_code=200 error=true + search?: string + // Query traces by service name + serviceName?: string + // Query traces by span name + spanName?: string + // Define the minimum duration to select traces. Use duration format, for example: 1.2s, 100ms + minDuration?: string + // Define the maximum duration to select traces. Use duration format, for example: 1.2s, 100ms + maxDuration?: string + // Filters to be included in a PromQL query to select data for the service graph. Example: {client="app",service="app"} + serviceMapQuery?: string + // Defines the maximum number of traces that are returned from Tempo + limit?: int64 + filters: [...#TraceqlFilter] + } @cuetsy(kind="interface") @grafana(TSVeneer="type") - // search = Loki search, nativeSearch = Tempo search for backwards compatibility - #TempoQueryType: "traceql" | "traceqlSearch" | "search" | "serviceMap" | "upload" | "nativeSearch" | "clear" @cuetsy(kind="type") + // search = Loki search, nativeSearch = Tempo search for backwards compatibility + #TempoQueryType: "traceql" | "traceqlSearch" | "search" | "serviceMap" | "upload" | "nativeSearch" | "clear" @cuetsy(kind="type") - // static fields are pre-set in the UI, dynamic fields are added by the user - #TraceqlSearchScope: "unscoped" | "resource" | "span" @cuetsy(kind="enum") - #TraceqlFilter: { - // Uniquely identify the filter, will not be used in the query generation - id: string - // The tag for the search filter, for example: .http.status_code, .service.name, status - tag?: string - // The operator that connects the tag to the value, for example: =, >, !=, =~ - operator?: string - // The value for the search filter - value?: string | [...string] - // The type of the value, used for example to check whether we need to wrap the value in quotes when generating the query - valueType?: string - // The scope of the filter, can either be unscoped/all scopes, resource or span - scope?: #TraceqlSearchScope - } @cuetsy(kind="interface") - }, - ] - }, - ] + // static fields are pre-set in the UI, dynamic fields are added by the user + #TraceqlSearchScope: "unscoped" | "resource" | "span" @cuetsy(kind="enum") + #TraceqlFilter: { + // Uniquely identify the filter, will not be used in the query generation + id: string + // The tag for the search filter, for example: .http.status_code, .service.name, status + tag?: string + // The operator that connects the tag to the value, for example: =, >, !=, =~ + operator?: string + // The value for the search filter + value?: string | [...string] + // The type of the value, used for example to check whether we need to wrap the value in quotes when generating the query + valueType?: string + // The scope of the filter, can either be unscoped/all scopes, resource or span + scope?: #TraceqlSearchScope + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/datasource/testdata/dataquery.cue b/public/app/plugins/datasource/testdata/dataquery.cue index 36cab2cf727..7010b9a57d7 100644 --- a/public/app/plugins/datasource/testdata/dataquery.cue +++ b/public/app/plugins/datasource/testdata/dataquery.cue @@ -26,92 +26,90 @@ composableKinds: DataQuery: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - common.DataQuery - alias?: string - scenarioId?: #TestDataQueryType & (*"random_walk" | _) - stringInput?: string - stream?: #StreamingQuery - pulseWave?: #PulseWaveQuery - sim?: #SimulationQuery - csvWave?: [...#CSVWave] //TODO can we prevent partial from being generated - labels?: string - lines?: int64 - levelColumn?: bool - channel?: string - nodes?: #NodesQuery - csvFileName?: string - csvContent?: string - rawFrameContent?: string - seriesCount?: int32 - usa?: #USAQuery - errorType?: "server_panic" | "frontend_exception" | "frontend_observable" - spanCount?: int32 - points?: [...[...string | int64]] + schemas: [{ + version: [0, 0] + schema: { + common.DataQuery + alias?: string + scenarioId?: #TestDataQueryType & (*"random_walk" | _) + stringInput?: string + stream?: #StreamingQuery + pulseWave?: #PulseWaveQuery + sim?: #SimulationQuery + csvWave?: [...#CSVWave] //TODO can we prevent partial from being generated + labels?: string + lines?: int64 + levelColumn?: bool + channel?: string + nodes?: #NodesQuery + csvFileName?: string + csvContent?: string + rawFrameContent?: string + seriesCount?: int32 + usa?: #USAQuery + errorType?: "server_panic" | "frontend_exception" | "frontend_observable" + spanCount?: int32 + points?: [...[...string | int64]] - #TestDataQueryType: "random_walk" | "slow_query" | "random_walk_with_error" | "random_walk_table" | "exponential_heatmap_bucket_data" | "linear_heatmap_bucket_data" | "no_data_points" | "datapoints_outside_range" | "csv_metric_values" | "predictable_pulse" | "predictable_csv_wave" | "streaming_client" | "simulation" | "usa" | "live" | "grafana_api" | "arrow" | "annotations" | "table_static" | "server_error_500" | "logs" | "node_graph" | "flame_graph" | "raw_frame" | "csv_file" | "csv_content" | "trace" | "manual_entry" | "variables-query" @cuetsy(kind="enum", memberNames="RandomWalk|SlowQuery|RandomWalkWithError|RandomWalkTable|ExponentialHeatmapBucketData|LinearHeatmapBucketData|NoDataPoints|DataPointsOutsideRange|CSVMetricValues|PredictablePulse|PredictableCSVWave|StreamingClient|Simulation|USA|Live|GrafanaAPI|Arrow|Annotations|TableStatic|ServerError500|Logs|NodeGraph|FlameGraph|RawFrame|CSVFile|CSVContent|Trace|ManualEntry|VariablesQuery") + #TestDataQueryType: "random_walk" | "slow_query" | "random_walk_with_error" | "random_walk_table" | "exponential_heatmap_bucket_data" | "linear_heatmap_bucket_data" | "no_data_points" | "datapoints_outside_range" | "csv_metric_values" | "predictable_pulse" | "predictable_csv_wave" | "streaming_client" | "simulation" | "usa" | "live" | "grafana_api" | "arrow" | "annotations" | "table_static" | "server_error_500" | "logs" | "node_graph" | "flame_graph" | "raw_frame" | "csv_file" | "csv_content" | "trace" | "manual_entry" | "variables-query" @cuetsy(kind="enum", memberNames="RandomWalk|SlowQuery|RandomWalkWithError|RandomWalkTable|ExponentialHeatmapBucketData|LinearHeatmapBucketData|NoDataPoints|DataPointsOutsideRange|CSVMetricValues|PredictablePulse|PredictableCSVWave|StreamingClient|Simulation|USA|Live|GrafanaAPI|Arrow|Annotations|TableStatic|ServerError500|Logs|NodeGraph|FlameGraph|RawFrame|CSVFile|CSVContent|Trace|ManualEntry|VariablesQuery") - #StreamingQuery: { - type: "signal" | "logs" | "fetch" - speed: int32 - spread: int32 - noise: int32 - bands?: int32 - url?: string - } @cuetsy(kind="interface") + #StreamingQuery: { + type: "signal" | "logs" | "fetch" + speed: int32 + spread: int32 + noise: int32 + bands?: int32 + url?: string + } @cuetsy(kind="interface") - #PulseWaveQuery: { - timeStep?: int64 - onCount?: int64 - offCount?: int64 - onValue?: float64 - offValue?: float64 - } @cuetsy(kind="interface") + #PulseWaveQuery: { + timeStep?: int64 + onCount?: int64 + offCount?: int64 + onValue?: float64 + offValue?: float64 + } @cuetsy(kind="interface") - #SimulationQuery: { - key: { - type: string - tick: float64 - uid?: string - } - config?: {...} - stream?: bool - last?: bool - } @cuetsy(kind="interface") + #SimulationQuery: { + key: { + type: string + tick: float64 + uid?: string + } + config?: {...} + stream?: bool + last?: bool + } @cuetsy(kind="interface") - #NodesQuery: { - type?: "random" | "response" | "random edges" - count?: int64 - } @cuetsy(kind="interface") + #NodesQuery: { + type?: "random" | "response" | "random edges" + count?: int64 + } @cuetsy(kind="interface") - #USAQuery: { - mode?: string - period?: string - fields?: [...string] - states?: [...string] - } @cuetsy(kind="interface") + #USAQuery: { + mode?: string + period?: string + fields?: [...string] + states?: [...string] + } @cuetsy(kind="interface") - #CSVWave: { - timeStep?: int64 - name?: string - valuesCSV?: string - labels?: string - } @cuetsy(kind="interface") + #CSVWave: { + timeStep?: int64 + name?: string + valuesCSV?: string + labels?: string + } @cuetsy(kind="interface") - // TODO: Should this live here given it's not used in the dataquery? - #Scenario: { - id: string - name: string - stringInput: string - description?: string - hideAliasField?: bool - } @cuetsy(kind="interface") - }, - ] - }, - ] + // TODO: Should this live here given it's not used in the dataquery? + #Scenario: { + id: string + name: string + stringInput: string + description?: string + hideAliasField?: bool + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/alertGroups/panelcfg.cue b/public/app/plugins/panel/alertGroups/panelcfg.cue index f5908d13799..d5f595f0927 100644 --- a/public/app/plugins/panel/alertGroups/panelcfg.cue +++ b/public/app/plugins/panel/alertGroups/panelcfg.cue @@ -14,23 +14,19 @@ package grafanaplugin -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - Options: { - // Comma-separated list of values used to filter alert results - labels: string - // Name of the alertmanager used as a source for alerts - alertmanager: string - // Expand all alert groups by default - expandAll: bool - } @cuetsy(kind="interface") - }, - ] - }, - ] - } +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + Options: { + // Comma-separated list of values used to filter alert results + labels: string + // Name of the alertmanager used as a source for alerts + alertmanager: string + // Expand all alert groups by default + expandAll: bool + } @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/annolist/panelcfg.cue b/public/app/plugins/panel/annolist/panelcfg.cue index d2f05466e32..70f0be3fad6 100644 --- a/public/app/plugins/panel/annolist/panelcfg.cue +++ b/public/app/plugins/panel/annolist/panelcfg.cue @@ -18,25 +18,23 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - onlyFromThisDashboard: bool | *false - onlyInTimeRange: bool | *false - tags: [...string] - limit: uint32 | *10 - showUser: bool | *true - showTime: bool | *true - showTags: bool | *true - navigateToPanel: bool | *true - navigateBefore: string | *"10m" - navigateAfter: string | *"10m" - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + onlyFromThisDashboard: bool | *false + onlyInTimeRange: bool | *false + tags: [...string] + limit: uint32 | *10 + showUser: bool | *true + showTime: bool | *true + showTags: bool | *true + navigateToPanel: bool | *true + navigateBefore: string | *"10m" + navigateAfter: string | *"10m" + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/barchart/panelcfg.cue b/public/app/plugins/panel/barchart/panelcfg.cue index 71e509165b8..5decbc03dff 100644 --- a/public/app/plugins/panel/barchart/panelcfg.cue +++ b/public/app/plugins/panel/barchart/panelcfg.cue @@ -22,60 +22,58 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - // v0.0 - { - Options: { - common.OptionsWithLegend - common.OptionsWithTooltip - common.OptionsWithTextFormatting - // Manually select which field from the dataset to represent the x field. - xField?: string - // Use the color value for a sibling field to color each bar value. - colorByField?: string - // Controls the orientation of the bar chart, either vertical or horizontal. - orientation: common.VizOrientation & (*"auto" | _) - // Controls the radius of each bar. - barRadius?: float64 & >=0 & <=0.5 | *0 - // Controls the rotation of the x axis labels. - xTickLabelRotation: int32 & >=-90 & <=90 | *0 - // Sets the max length that a label can have before it is truncated. - xTickLabelMaxLength: int32 & >=0 - // Controls the spacing between x axis labels. - // negative values indicate backwards skipping behavior - xTickLabelSpacing?: int32 | *0 - // Controls whether bars are stacked or not, either normally or in percent mode. - stacking: common.StackingMode & (*"none" | _) - // This controls whether values are shown on top or to the left of bars. - showValue: common.VisibilityMode & (*"auto" | _) - // Controls the width of bars. 1 = Max width, 0 = Min width. - barWidth: float64 & >=0 & <=1 | *0.97 - // Controls the width of groups. 1 = max with, 0 = min width. - groupWidth: float64 & >=0 & <=1 | *0.7 - // Enables mode which highlights the entire bar area and shows tooltip when cursor - // hovers over highlighted area - fullHighlight: bool | *false - } @cuetsy(kind="interface") - FieldConfig: { - common.AxisConfig - common.HideableFieldConfig + schemas: [{ + version: [0, 0] + schema: { + Options: { + common.OptionsWithLegend + common.OptionsWithTooltip + common.OptionsWithTextFormatting - // Controls line width of the bars. - lineWidth?: int32 & >=0 & <=10 | *1 - // Controls the fill opacity of the bars. - fillOpacity?: int32 & >=0 & <=100 | *80 - // Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option. - // Gradient appearance is influenced by the Fill opacity setting. - gradientMode?: common.GraphGradientMode & (*"none" | _) - // Threshold rendering - thresholdsStyle?: common.GraphThresholdsStyleConfig - } @cuetsy(kind="interface") - }, - ] - }, - ] + // Manually select which field from the dataset to represent the x field. + xField?: string + // Use the color value for a sibling field to color each bar value. + colorByField?: string + // Controls the orientation of the bar chart, either vertical or horizontal. + orientation: common.VizOrientation & (*"auto" | _) + // Controls the radius of each bar. + barRadius?: float64 & >=0 & <=0.5 | *0 + // Controls the rotation of the x axis labels. + xTickLabelRotation: int32 & >=-90 & <=90 | *0 + // Sets the max length that a label can have before it is truncated. + xTickLabelMaxLength: int32 & >=0 + // Controls the spacing between x axis labels. + // negative values indicate backwards skipping behavior + xTickLabelSpacing?: int32 | *0 + // Controls whether bars are stacked or not, either normally or in percent mode. + stacking: common.StackingMode & (*"none" | _) + // This controls whether values are shown on top or to the left of bars. + showValue: common.VisibilityMode & (*"auto" | _) + // Controls the width of bars. 1 = Max width, 0 = Min width. + barWidth: float64 & >=0 & <=1 | *0.97 + // Controls the width of groups. 1 = max with, 0 = min width. + groupWidth: float64 & >=0 & <=1 | *0.7 + // Enables mode which highlights the entire bar area and shows tooltip when cursor + // hovers over highlighted area + fullHighlight: bool | *false + } @cuetsy(kind="interface") + FieldConfig: { + common.AxisConfig + common.HideableFieldConfig + + // Controls line width of the bars. + lineWidth?: int32 & >=0 & <=10 | *1 + // Controls the fill opacity of the bars. + fillOpacity?: int32 & >=0 & <=100 | *80 + // Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option. + // Gradient appearance is influenced by the Fill opacity setting. + gradientMode?: common.GraphGradientMode & (*"none" | _) + // Threshold rendering + thresholdsStyle?: common.GraphThresholdsStyleConfig + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/bargauge/panelcfg.cue b/public/app/plugins/panel/bargauge/panelcfg.cue index fbfc98734c5..8d29a07c50e 100644 --- a/public/app/plugins/panel/bargauge/panelcfg.cue +++ b/public/app/plugins/panel/bargauge/panelcfg.cue @@ -22,21 +22,19 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - common.SingleStatBaseOptions - displayMode: common.BarGaugeDisplayMode & (*"gradient" | _) - valueMode: common.BarGaugeValueMode & (*"color" | _) - showUnfilled: bool | *true - minVizWidth: uint32 | *0 - minVizHeight: uint32 | *10 - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + common.SingleStatBaseOptions + displayMode: common.BarGaugeDisplayMode & (*"gradient" | _) + valueMode: common.BarGaugeValueMode & (*"color" | _) + showUnfilled: bool | *true + minVizWidth: uint32 | *0 + minVizHeight: uint32 | *10 + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/candlestick/panelcfg.cue b/public/app/plugins/panel/candlestick/panelcfg.cue index c60e3ad5ca9..f4f46efa1ec 100644 --- a/public/app/plugins/panel/candlestick/panelcfg.cue +++ b/public/app/plugins/panel/candlestick/panelcfg.cue @@ -14,23 +14,17 @@ package grafanaplugin -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - Options: { - // anything for now - ... - } @cuetsy(kind="interface") - FieldConfig: { - // anything for now - ... - } @cuetsy(kind="interface") - }, - ] - }, - ] - } +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + Options: { + ... + } @cuetsy(kind="interface") + FieldConfig: { + ... + } @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/canvas/panelcfg.cue b/public/app/plugins/panel/canvas/panelcfg.cue index a7af8698a2b..bdac6b0ba3c 100644 --- a/public/app/plugins/panel/canvas/panelcfg.cue +++ b/public/app/plugins/panel/canvas/panelcfg.cue @@ -14,19 +14,14 @@ package grafanaplugin -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - Options: { - // anything for now - ... - } @cuetsy(kind="interface") - }, - ] - }, - ] - } +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + Options: { + ... + } @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/dashlist/panelcfg.cue b/public/app/plugins/panel/dashlist/panelcfg.cue index e192aced895..a96580d431b 100644 --- a/public/app/plugins/panel/dashlist/panelcfg.cue +++ b/public/app/plugins/panel/dashlist/panelcfg.cue @@ -18,25 +18,23 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - keepTime: bool | *false - includeVars: bool | *false - showStarred: bool | *true - showRecentlyViewed: bool | *false - showSearch: bool | *false - showHeadings: bool | *true - maxItems: int | *10 - query: string | *"" - folderId?: int - tags: [...string] | *[] - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + keepTime: bool | *false + includeVars: bool | *false + showStarred: bool | *true + showRecentlyViewed: bool | *false + showSearch: bool | *false + showHeadings: bool | *true + maxItems: int | *10 + query: string | *"" + folderId?: int + tags: [...string] | *[] + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/datagrid/panelcfg.cue b/public/app/plugins/panel/datagrid/panelcfg.cue index 9183ef1a70b..d91c1f86e46 100644 --- a/public/app/plugins/panel/datagrid/panelcfg.cue +++ b/public/app/plugins/panel/datagrid/panelcfg.cue @@ -18,16 +18,14 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - selectedSeries: int32 & >=0 | *0 - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + selectedSeries: int32 & >=0 | *0 + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/debug/panelcfg.cue b/public/app/plugins/panel/debug/panelcfg.cue index e7530340e68..80ce8f89867 100644 --- a/public/app/plugins/panel/debug/panelcfg.cue +++ b/public/app/plugins/panel/debug/panelcfg.cue @@ -26,25 +26,23 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - UpdateConfig: { - render: bool - dataChanged: bool - schemaChanged: bool - } @cuetsy(kind="type") + schemas: [{ + version: [0, 0] + schema: { + UpdateConfig: { + render: bool + dataChanged: bool + schemaChanged: bool + } @cuetsy(kind="type") - DebugMode: "render" | "events" | "cursor" | "State" | "ThrowError" @cuetsy(kind="enum") + DebugMode: "render" | "events" | "cursor" | "State" | "ThrowError" @cuetsy(kind="enum") - Options: { - mode: DebugMode - counters?: UpdateConfig - } @cuetsy(kind="interface") - }, - ] - }, - ] + Options: { + mode: DebugMode + counters?: UpdateConfig + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/gauge/panelcfg.cue b/public/app/plugins/panel/gauge/panelcfg.cue index 0aae870ed77..055f22bbade 100644 --- a/public/app/plugins/panel/gauge/panelcfg.cue +++ b/public/app/plugins/panel/gauge/panelcfg.cue @@ -22,18 +22,16 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - common.SingleStatBaseOptions - showThresholdLabels: bool | *false - showThresholdMarkers: bool | *true - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + common.SingleStatBaseOptions + showThresholdLabels: bool | *false + showThresholdMarkers: bool | *true + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/geomap/panelcfg.cue b/public/app/plugins/panel/geomap/panelcfg.cue index 90d805b9026..67d12b9293a 100644 --- a/public/app/plugins/panel/geomap/panelcfg.cue +++ b/public/app/plugins/panel/geomap/panelcfg.cue @@ -22,57 +22,55 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - view: MapViewConfig - controls: ControlsOptions - basemap: ui.MapLayerOptions - layers: [...ui.MapLayerOptions] - tooltip: TooltipOptions - } @cuetsy(kind="interface") + schemas: [{ + version: [0, 0] + schema: { + Options: { + view: MapViewConfig + controls: ControlsOptions + basemap: ui.MapLayerOptions + layers: [...ui.MapLayerOptions] + tooltip: TooltipOptions + } @cuetsy(kind="interface") - MapViewConfig: { - id: string | *"zero" - lat?: int64 | *0 - lon?: int64 | *0 - zoom?: int64 | *1 - minZoom?: int64 - maxZoom?: int64 - padding?: int64 - allLayers?: bool | *true - lastOnly?: bool - layer?: string - shared?: bool - } @cuetsy(kind="interface") + MapViewConfig: { + id: string | *"zero" + lat?: int64 | *0 + lon?: int64 | *0 + zoom?: int64 | *1 + minZoom?: int64 + maxZoom?: int64 + padding?: int64 + allLayers?: bool | *true + lastOnly?: bool + layer?: string + shared?: bool + } @cuetsy(kind="interface") - ControlsOptions: { - // Zoom (upper left) - showZoom?: bool - // let the mouse wheel zoom - mouseWheelZoom?: bool - // Lower right - showAttribution?: bool - // Scale options - showScale?: bool - // Show debug - showDebug?: bool - // Show measure - showMeasure?: bool - } @cuetsy(kind="interface") + ControlsOptions: { + // Zoom (upper left) + showZoom?: bool + // let the mouse wheel zoom + mouseWheelZoom?: bool + // Lower right + showAttribution?: bool + // Scale options + showScale?: bool + // Show debug + showDebug?: bool + // Show measure + showMeasure?: bool + } @cuetsy(kind="interface") - TooltipOptions: { - mode: TooltipMode - } @cuetsy(kind="interface") + TooltipOptions: { + mode: TooltipMode + } @cuetsy(kind="interface") - TooltipMode: "none" | "details" @cuetsy(kind="enum",memberNames="None|Details") + TooltipMode: "none" | "details" @cuetsy(kind="enum",memberNames="None|Details") - MapCenterID: "zero" | "coords" | "fit" @cuetsy(kind="enum",members="Zero|Coordinates|Fit") - }, - ] - }, - ] + MapCenterID: "zero" | "coords" | "fit" @cuetsy(kind="enum",members="Zero|Coordinates|Fit") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/heatmap/panelcfg.cue b/public/app/plugins/panel/heatmap/panelcfg.cue index 10a90921ae3..f6221de7470 100644 --- a/public/app/plugins/panel/heatmap/panelcfg.cue +++ b/public/app/plugins/panel/heatmap/panelcfg.cue @@ -18,149 +18,145 @@ import ( ui "github.com/grafana/grafana/packages/grafana-schema/src/common" ) -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - // Controls the color mode of the heatmap - HeatmapColorMode: "opacity" | "scheme" @cuetsy(kind="enum") - // Controls the color scale of the heatmap - HeatmapColorScale: "linear" | "exponential" @cuetsy(kind="enum") - // Controls various color options - HeatmapColorOptions: { - // Sets the color mode - mode?: HeatmapColorMode - // Controls the color scheme used - scheme: string - // Controls the color fill when in opacity mode - fill: string - // Controls the color scale - scale?: HeatmapColorScale - // Controls the exponent when scale is set to exponential - exponent: float32 - // Controls the number of color steps - steps: uint8 & >=2 & <=128 - // Reverses the color scheme - reverse: bool - // Sets the minimum value for the color scale - min?: float32 - // Sets the maximum value for the color scale - max?: float32 - } @cuetsy(kind="interface") - // Configuration options for the yAxis - YAxisConfig: { - ui.AxisConfig +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + // Controls the color mode of the heatmap + HeatmapColorMode: "opacity" | "scheme" @cuetsy(kind="enum") + // Controls the color scale of the heatmap + HeatmapColorScale: "linear" | "exponential" @cuetsy(kind="enum") + // Controls various color options + HeatmapColorOptions: { + // Sets the color mode + mode?: HeatmapColorMode + // Controls the color scheme used + scheme: string + // Controls the color fill when in opacity mode + fill: string + // Controls the color scale + scale?: HeatmapColorScale + // Controls the exponent when scale is set to exponential + exponent: float32 + // Controls the number of color steps + steps: uint8 & >=2 & <=128 + // Reverses the color scheme + reverse: bool + // Sets the minimum value for the color scale + min?: float32 + // Sets the maximum value for the color scale + max?: float32 + } @cuetsy(kind="interface") + // Configuration options for the yAxis + YAxisConfig: { + ui.AxisConfig - // Sets the yAxis unit - unit?: string - // Reverses the yAxis - reverse?: bool - // Controls the number of decimals for yAxis values - decimals?: float32 - // Sets the minimum value for the yAxis - min?: float32 - // Sets the maximum value for the yAxis - max?: float32 - } @cuetsy(kind="interface") - // Controls cell value options - CellValues: { - // Controls the cell value unit - unit?: string - // Controls the number of decimals for cell values - decimals?: float32 - } @cuetsy(kind="interface") - // Controls the value filter range - FilterValueRange: { - // Sets the filter range to values less than or equal to the given value - le?: float32 - // Sets the filter range to values greater than or equal to the given value - ge?: float32 - } @cuetsy(kind="interface") - // Controls tooltip options - HeatmapTooltip: { - // Controls if the tooltip is shown - show: bool - // Controls if the tooltip shows a histogram of the y-axis values - yHistogram?: bool - } @cuetsy(kind="interface") - // Controls legend options - HeatmapLegend: { - // Controls if the legend is shown - show: bool - } @cuetsy(kind="interface") - // Controls exemplar options - ExemplarConfig: { - // Sets the color of the exemplar markers - color: string - } @cuetsy(kind="interface") - // Controls frame rows options - RowsHeatmapOptions: { - // Sets the name of the cell when not calculating from data - value?: string - // Controls tick alignment when not calculating from data - layout?: ui.HeatmapCellLayout - } @cuetsy(kind="interface") - Options: { - // Controls if the heatmap should be calculated from data - calculate?: bool | *false - // Calculation options for the heatmap - calculation?: ui.HeatmapCalculationOptions - // Controls the color options - color: HeatmapColorOptions | *{ - // mode: HeatmapColorMode // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed - scheme: "Oranges" - fill: "dark-orange" - // scale: HeatmapColorScale // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed - reverse: false - exponent: 0.5 - steps: 64 - } - // Filters values between a given range - filterValues?: FilterValueRange | *{ - le: 1e-9 - } - // Controls tick alignment and value name when not calculating from data - rowsFrame?: RowsHeatmapOptions - // | *{ - // layout: ui.HeatmapCellLayout & "auto" // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed - // } - // Controls the display of the value in the cell - showValue: ui.VisibilityMode & (*"auto" | _) - // Controls gap between cells - cellGap?: uint8 & >=0 & <=25 | *1 - // Controls cell radius - cellRadius?: float32 - // Controls cell value unit - cellValues?: CellValues | *{} - // Controls yAxis placement - yAxis: YAxisConfig - // | *{ - // axisPlacement: ui.AxisPlacement & "left" // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed - // } - // Controls legend options - legend: HeatmapLegend | *{ - show: true - } - // Controls tooltip options - tooltip: HeatmapTooltip | *{ - show: true - yHistogram: false - } - // Controls exemplar options - exemplars: ExemplarConfig | *{ - color: "rgba(255,0,255,0.7)" - } - } @cuetsy(kind="interface") - FieldConfig: { - ui.HideableFieldConfig + // Sets the yAxis unit + unit?: string + // Reverses the yAxis + reverse?: bool + // Controls the number of decimals for yAxis values + decimals?: float32 + // Sets the minimum value for the yAxis + min?: float32 + // Sets the maximum value for the yAxis + max?: float32 + } @cuetsy(kind="interface") + // Controls cell value options + CellValues: { + // Controls the cell value unit + unit?: string + // Controls the number of decimals for cell values + decimals?: float32 + } @cuetsy(kind="interface") + // Controls the value filter range + FilterValueRange: { + // Sets the filter range to values less than or equal to the given value + le?: float32 + // Sets the filter range to values greater than or equal to the given value + ge?: float32 + } @cuetsy(kind="interface") + // Controls tooltip options + HeatmapTooltip: { + // Controls if the tooltip is shown + show: bool + // Controls if the tooltip shows a histogram of the y-axis values + yHistogram?: bool + } @cuetsy(kind="interface") + // Controls legend options + HeatmapLegend: { + // Controls if the legend is shown + show: bool + } @cuetsy(kind="interface") + // Controls exemplar options + ExemplarConfig: { + // Sets the color of the exemplar markers + color: string + } @cuetsy(kind="interface") + // Controls frame rows options + RowsHeatmapOptions: { + // Sets the name of the cell when not calculating from data + value?: string + // Controls tick alignment when not calculating from data + layout?: ui.HeatmapCellLayout + } @cuetsy(kind="interface") + Options: { + // Controls if the heatmap should be calculated from data + calculate?: bool | *false + // Calculation options for the heatmap + calculation?: ui.HeatmapCalculationOptions + // Controls the color options + color: HeatmapColorOptions | *{ + // mode: HeatmapColorMode // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed + scheme: "Oranges" + fill: "dark-orange" + // scale: HeatmapColorScale // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed + reverse: false + exponent: 0.5 + steps: 64 + } + // Filters values between a given range + filterValues?: FilterValueRange | *{ + le: 1e-9 + } + // Controls tick alignment and value name when not calculating from data + rowsFrame?: RowsHeatmapOptions + // | *{ + // layout: ui.HeatmapCellLayout & "auto" // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed + // } + // Controls the display of the value in the cell + showValue: ui.VisibilityMode & (*"auto" | _) + // Controls gap between cells + cellGap?: uint8 & >=0 & <=25 | *1 + // Controls cell radius + cellRadius?: float32 + // Controls cell value unit + cellValues?: CellValues | *{} + // Controls yAxis placement + yAxis: YAxisConfig + // | *{ + // axisPlacement: ui.AxisPlacement & "left" // TODO: fix after remove when https://github.com/grafana/cuetsy/issues/74 is fixed + // } + // Controls legend options + legend: HeatmapLegend | *{ + show: true + } + // Controls tooltip options + tooltip: HeatmapTooltip | *{ + show: true + yHistogram: false + } + // Controls exemplar options + exemplars: ExemplarConfig | *{ + color: "rgba(255,0,255,0.7)" + } + } @cuetsy(kind="interface") + FieldConfig: { + ui.HideableFieldConfig - scaleDistribution?: ui.ScaleDistributionConfig - } @cuetsy(kind="interface") - }, - ] - }, - ] - } + scaleDistribution?: ui.ScaleDistributionConfig + } @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/histogram/panelcfg.cue b/public/app/plugins/panel/histogram/panelcfg.cue index 946d6f6ea77..3ccfb387b68 100644 --- a/public/app/plugins/panel/histogram/panelcfg.cue +++ b/public/app/plugins/panel/histogram/panelcfg.cue @@ -22,37 +22,35 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - common.OptionsWithLegend - common.OptionsWithTooltip + schemas: [{ + version: [0, 0] + schema: { + Options: { + common.OptionsWithLegend + common.OptionsWithTooltip - //Size of each bucket - bucketSize?: int32 - //Offset buckets by this amount - bucketOffset?: int32 | *0 - //Combines multiple series into a single histogram - combine?: bool - } @cuetsy(kind="interface") + //Size of each bucket + bucketSize?: int32 + //Offset buckets by this amount + bucketOffset?: int32 | *0 + //Combines multiple series into a single histogram + combine?: bool + } @cuetsy(kind="interface") - FieldConfig: { - common.AxisConfig - common.HideableFieldConfig + FieldConfig: { + common.AxisConfig + common.HideableFieldConfig - // Controls line width of the bars. - lineWidth?: uint32 & <=10 | *1 - // Controls the fill opacity of the bars. - fillOpacity?: uint32 & <=100 | *80 - // Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option. - // Gradient appearance is influenced by the Fill opacity setting. - gradientMode?: common.GraphGradientMode & (*"none" | _) - } @cuetsy(kind="interface") - }, - ] - }, - ] + // Controls line width of the bars. + lineWidth?: uint32 & <=10 | *1 + // Controls the fill opacity of the bars. + fillOpacity?: uint32 & <=100 | *80 + // Set the mode of the gradient fill. Fill gradient is based on the line color. To change the color, use the standard color scheme field option. + // Gradient appearance is influenced by the Fill opacity setting. + gradientMode?: common.GraphGradientMode & (*"none" | _) + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/logs/panelcfg.cue b/public/app/plugins/panel/logs/panelcfg.cue index fd6630d9c79..5cac83ca9e6 100644 --- a/public/app/plugins/panel/logs/panelcfg.cue +++ b/public/app/plugins/panel/logs/panelcfg.cue @@ -22,23 +22,21 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - showLabels: bool - showCommonLabels: bool - showTime: bool - wrapLogMessage: bool - prettifyLogMessage: bool - enableLogDetails: bool - sortOrder: common.LogsSortOrder - dedupStrategy: common.LogsDedupStrategy - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + showLabels: bool + showCommonLabels: bool + showTime: bool + wrapLogMessage: bool + prettifyLogMessage: bool + enableLogDetails: bool + sortOrder: common.LogsSortOrder + dedupStrategy: common.LogsDedupStrategy + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/news/panelcfg.cue b/public/app/plugins/panel/news/panelcfg.cue index 93134a16d03..30c02b74b5d 100644 --- a/public/app/plugins/panel/news/panelcfg.cue +++ b/public/app/plugins/panel/news/panelcfg.cue @@ -18,18 +18,16 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - // empty/missing will default to grafana blog - feedUrl?: string - showImage?: bool | *true - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + // empty/missing will default to grafana blog + feedUrl?: string + showImage?: bool | *true + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/nodeGraph/panelcfg.cue b/public/app/plugins/panel/nodeGraph/panelcfg.cue index 811c074796a..d3d5d5bc96d 100644 --- a/public/app/plugins/panel/nodeGraph/panelcfg.cue +++ b/public/app/plugins/panel/nodeGraph/panelcfg.cue @@ -18,38 +18,37 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ + schemas: [{ + version: [0, 0] + schema: + // v0.0 { - schemas: [ - // v0.0 - { - ArcOption: { - // Field from which to get the value. Values should be less than 1, representing fraction of a circle. - field?: string - // The color of the arc. - color?: string - } @cuetsy(kind="interface") - NodeOptions: { - // Unit for the main stat to override what ever is set in the data frame. - mainStatUnit?: string - // Unit for the secondary stat to override what ever is set in the data frame. - secondaryStatUnit?: string - // Define which fields are shown as part of the node arc (colored circle around the node). - arcs?: [...ArcOption] - } - EdgeOptions: { - // Unit for the main stat to override what ever is set in the data frame. - mainStatUnit?: string - // Unit for the secondary stat to override what ever is set in the data frame. - secondaryStatUnit?: string - } - Options: { - nodes?: NodeOptions - edges?: EdgeOptions - } @cuetsy(kind="interface") - }, - ] - }, - ] + ArcOption: { + // Field from which to get the value. Values should be less than 1, representing fraction of a circle. + field?: string + // The color of the arc. + color?: string + } @cuetsy(kind="interface") + NodeOptions: { + // Unit for the main stat to override what ever is set in the data frame. + mainStatUnit?: string + // Unit for the secondary stat to override what ever is set in the data frame. + secondaryStatUnit?: string + // Define which fields are shown as part of the node arc (colored circle around the node). + arcs?: [...ArcOption] + } + EdgeOptions: { + // Unit for the main stat to override what ever is set in the data frame. + mainStatUnit?: string + // Unit for the secondary stat to override what ever is set in the data frame. + secondaryStatUnit?: string + } + Options: { + nodes?: NodeOptions + edges?: EdgeOptions + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/piechart/panelcfg.cue b/public/app/plugins/panel/piechart/panelcfg.cue index 038fc21d0b8..5a75d388dd4 100644 --- a/public/app/plugins/panel/piechart/panelcfg.cue +++ b/public/app/plugins/panel/piechart/panelcfg.cue @@ -22,37 +22,36 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ + schemas: [{ + version: [0, 0] + schema: + // v0.0 { - schemas: [ - // v0.0 - { - // Select the pie chart display style. - PieChartType: "pie" | "donut" @cuetsy(kind="enum") - // Select labels to display on the pie chart. - // - Name - The series or field name. - // - Percent - The percentage of the whole. - // - Value - The raw numerical value. - PieChartLabels: "name" | "value" | "percent" @cuetsy(kind="enum") - // Select values to display in the legend. - // - Percent: The percentage of the whole. - // - Value: The raw numerical value. - PieChartLegendValues: "value" | "percent" @cuetsy(kind="enum") - PieChartLegendOptions: { - common.VizLegendOptions - values: [...PieChartLegendValues] - } @cuetsy(kind="interface") - Options: { - common.OptionsWithTooltip - common.SingleStatBaseOptions - pieType: PieChartType - displayLabels: [...PieChartLabels] - legend: PieChartLegendOptions - } @cuetsy(kind="interface") - FieldConfig: common.HideableFieldConfig @cuetsy(kind="interface") - }, - ] - }, - ] + // Select the pie chart display style. + PieChartType: "pie" | "donut" @cuetsy(kind="enum") + // Select labels to display on the pie chart. + // - Name - The series or field name. + // - Percent - The percentage of the whole. + // - Value - The raw numerical value. + PieChartLabels: "name" | "value" | "percent" @cuetsy(kind="enum") + // Select values to display in the legend. + // - Percent: The percentage of the whole. + // - Value: The raw numerical value. + PieChartLegendValues: "value" | "percent" @cuetsy(kind="enum") + PieChartLegendOptions: { + common.VizLegendOptions + values: [...PieChartLegendValues] + } @cuetsy(kind="interface") + Options: { + common.OptionsWithTooltip + common.SingleStatBaseOptions + pieType: PieChartType + displayLabels: [...PieChartLabels] + legend: PieChartLegendOptions + } @cuetsy(kind="interface") + FieldConfig: common.HideableFieldConfig @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/stat/panelcfg.cue b/public/app/plugins/panel/stat/panelcfg.cue index eaf0c9972bd..1cc5b2d768c 100644 --- a/public/app/plugins/panel/stat/panelcfg.cue +++ b/public/app/plugins/panel/stat/panelcfg.cue @@ -22,20 +22,18 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - common.SingleStatBaseOptions - graphMode: common.BigValueGraphMode & (*"area" | _) - colorMode: common.BigValueColorMode & (*"value" | _) - justifyMode: common.BigValueJustifyMode & (*"auto" | _) - textMode: common.BigValueTextMode & (*"auto" | _) - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + common.SingleStatBaseOptions + graphMode: common.BigValueGraphMode & (*"area" | _) + colorMode: common.BigValueColorMode & (*"value" | _) + justifyMode: common.BigValueJustifyMode & (*"auto" | _) + textMode: common.BigValueTextMode & (*"auto" | _) + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/state-timeline/panelcfg.cue b/public/app/plugins/panel/state-timeline/panelcfg.cue index 850efc9774e..0a48dc98306 100644 --- a/public/app/plugins/panel/state-timeline/panelcfg.cue +++ b/public/app/plugins/panel/state-timeline/panelcfg.cue @@ -21,32 +21,30 @@ import ( composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - ui.OptionsWithLegend - ui.OptionsWithTooltip - ui.OptionsWithTimezones + schemas: [{ + version: [0, 0] + schema: { + Options: { + ui.OptionsWithLegend + ui.OptionsWithTooltip + ui.OptionsWithTimezones - //Show timeline values on chart - showValue: ui.VisibilityMode & (*"auto" | _) - //Controls the row height - rowHeight: float & <=1 | *0.9 - //Merge equal consecutive values - mergeValues?: bool | *true - //Controls value alignment on the timelines - alignValue?: ui.TimelineValueAlignment & (*"left" | _) - } @cuetsy(kind="interface") - FieldConfig: { - ui.HideableFieldConfig - lineWidth?: uint32 & <=10 | *0 - fillOpacity?: uint32 & <=100 | *70 - } @cuetsy(kind="interface") - }, - ] - }, - ] + //Show timeline values on chart + showValue: ui.VisibilityMode & (*"auto" | _) + //Controls the row height + rowHeight: float & <=1 | *0.9 + //Merge equal consecutive values + mergeValues?: bool | *true + //Controls value alignment on the timelines + alignValue?: ui.TimelineValueAlignment & (*"left" | _) + } @cuetsy(kind="interface") + FieldConfig: { + ui.HideableFieldConfig + lineWidth?: uint32 & <=10 | *0 + fillOpacity?: uint32 & <=100 | *70 + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/status-history/panelcfg.cue b/public/app/plugins/panel/status-history/panelcfg.cue index 180e6b2fa6b..ec5ab6c4fc7 100644 --- a/public/app/plugins/panel/status-history/panelcfg.cue +++ b/public/app/plugins/panel/status-history/panelcfg.cue @@ -21,30 +21,28 @@ import ( composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - ui.OptionsWithLegend - ui.OptionsWithTooltip - ui.OptionsWithTimezones + schemas: [{ + version: [0, 0] + schema: { + Options: { + ui.OptionsWithLegend + ui.OptionsWithTooltip + ui.OptionsWithTimezones - //Set the height of the rows - rowHeight: float32 & >=0 & <=1 | *0.9 - //Show values on the columns - showValue: ui.VisibilityMode & (*"auto" | _) - //Controls the column width - colWidth?: float & <=1 | *0.9 - } @cuetsy(kind="interface") - FieldConfig: { - ui.HideableFieldConfig - lineWidth?: uint32 & <=10 | *1 - fillOpacity?: uint32 & <=100 | *70 - } @cuetsy(kind="interface") - }, - ] - }, - ] + //Set the height of the rows + rowHeight: float32 & >=0 & <=1 | *0.9 + //Show values on the columns + showValue: ui.VisibilityMode & (*"auto" | _) + //Controls the column width + colWidth?: float & <=1 | *0.9 + } @cuetsy(kind="interface") + FieldConfig: { + ui.HideableFieldConfig + lineWidth?: uint32 & <=10 | *1 + fillOpacity?: uint32 & <=100 | *70 + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/table/panelcfg.cue b/public/app/plugins/panel/table/panelcfg.cue index 49a773cc695..7e9f19c4491 100644 --- a/public/app/plugins/panel/table/panelcfg.cue +++ b/public/app/plugins/panel/table/panelcfg.cue @@ -21,34 +21,32 @@ import ( composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - Options: { - // Represents the index of the selected frame - frameIndex: number | *0 - // Controls whether the panel should show the header - showHeader: bool | *true - // Controls whether the header should show icons for the column types - showTypeIcons?: bool | *false - // Used to control row sorting - sortBy?: [...ui.TableSortByFieldState] - // Controls footer options - footer?: ui.TableFooterOptions | *{ - // Controls whether the footer should be shown - show: false - // Controls whether the footer should show the total number of rows on Count calculation - countRows: false - // Represents the selected calculations - reducer: [] - } - // Controls the height of the rows - cellHeight?: ui.TableCellHeight & (*"sm" | _) - } @cuetsy(kind="interface") - }, - ] - }, - ] + schemas: [{ + version: [0, 0] + schema: { + Options: { + // Represents the index of the selected frame + frameIndex: number | *0 + // Controls whether the panel should show the header + showHeader: bool | *true + // Controls whether the header should show icons for the column types + showTypeIcons?: bool | *false + // Used to control row sorting + sortBy?: [...ui.TableSortByFieldState] + // Controls footer options + footer?: ui.TableFooterOptions | *{ + // Controls whether the footer should be shown + show: false + // Controls whether the footer should show the total number of rows on Count calculation + countRows: false + // Represents the selected calculations + reducer: [] + } + // Controls the height of the rows + cellHeight?: ui.TableCellHeight & (*"sm" | _) + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/text/panelcfg.cue b/public/app/plugins/panel/text/panelcfg.cue index 6c83138392f..6202a3d6efb 100644 --- a/public/app/plugins/panel/text/panelcfg.cue +++ b/public/app/plugins/panel/text/panelcfg.cue @@ -18,33 +18,31 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { - TextMode: "html" | "markdown" | "code" @cuetsy(kind="enum",memberNames="HTML|Markdown|Code") + schemas: [{ + version: [0, 0] + schema: { + TextMode: "html" | "markdown" | "code" @cuetsy(kind="enum",memberNames="HTML|Markdown|Code") - CodeLanguage: "json" | "yaml" | "xml" | "typescript" | "sql" | "go" | "markdown" | "html" | *"plaintext" @cuetsy(kind="enum") + CodeLanguage: "json" | "yaml" | "xml" | "typescript" | "sql" | "go" | "markdown" | "html" | *"plaintext" @cuetsy(kind="enum") - CodeOptions: { - // The language passed to monaco code editor - language: CodeLanguage - showLineNumbers: bool | *false - showMiniMap: bool | *false - } @cuetsy(kind="interface") + CodeOptions: { + // The language passed to monaco code editor + language: CodeLanguage + showLineNumbers: bool | *false + showMiniMap: bool | *false + } @cuetsy(kind="interface") - Options: { - mode: TextMode & (*"markdown" | _) - code?: CodeOptions - content: string | *""" - # Title + Options: { + mode: TextMode & (*"markdown" | _) + code?: CodeOptions + content: string | *""" + # Title - For markdown syntax help: [commonmark.org/help](https://commonmark.org/help/) - """ - } @cuetsy(kind="interface") - }, - ] - }, - ] + For markdown syntax help: [commonmark.org/help](https://commonmark.org/help/) + """ + } @cuetsy(kind="interface") + } + }] + lenses: [] } } diff --git a/public/app/plugins/panel/timeseries/panelcfg.cue b/public/app/plugins/panel/timeseries/panelcfg.cue index e9c393dfac1..5d506e89963 100644 --- a/public/app/plugins/panel/timeseries/panelcfg.cue +++ b/public/app/plugins/panel/timeseries/panelcfg.cue @@ -18,21 +18,17 @@ import ( "github.com/grafana/grafana/packages/grafana-schema/src/common" ) -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - Options: common.OptionsWithTimezones & { - legend: common.VizLegendOptions - tooltip: common.VizTooltipOptions - } @cuetsy(kind="interface") +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + Options: common.OptionsWithTimezones & { + legend: common.VizLegendOptions + tooltip: common.VizTooltipOptions + } @cuetsy(kind="interface") - FieldConfig: common.GraphFieldConfig & {} @cuetsy(kind="interface") - }, - ] - }, - ] - } + FieldConfig: common.GraphFieldConfig & {} @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/trend/panelcfg.cue b/public/app/plugins/panel/trend/panelcfg.cue index 9fc9019a969..ea0c11bbaa1 100644 --- a/public/app/plugins/panel/trend/panelcfg.cue +++ b/public/app/plugins/panel/trend/panelcfg.cue @@ -18,25 +18,21 @@ import ( "github.com/grafana/grafana/packages/grafana-schema/src/common" ) -composableKinds: PanelCfg: { - lineage: { - seqs: [ - { - schemas: [ - { - // Identical to timeseries... except it does not have timezone settings - Options: { - legend: common.VizLegendOptions - tooltip: common.VizTooltipOptions +composableKinds: PanelCfg: lineage: { + schemas: [{ + version: [0, 0] + schema: { + // Identical to timeseries... except it does not have timezone settings + Options: { + legend: common.VizLegendOptions + tooltip: common.VizTooltipOptions - // Name of the x field to use (defaults to first number) - xField?: string - } @cuetsy(kind="interface") + // Name of the x field to use (defaults to first number) + xField?: string + } @cuetsy(kind="interface") - FieldConfig: common.GraphFieldConfig & {} @cuetsy(kind="interface") - }, - ] - }, - ] - } + FieldConfig: common.GraphFieldConfig & {} @cuetsy(kind="interface") + } + }] + lenses: [] } diff --git a/public/app/plugins/panel/xychart/panelcfg.cue b/public/app/plugins/panel/xychart/panelcfg.cue index 5e577aa1802..e4b37ad59c1 100644 --- a/public/app/plugins/panel/xychart/panelcfg.cue +++ b/public/app/plugins/panel/xychart/panelcfg.cue @@ -26,54 +26,52 @@ composableKinds: PanelCfg: { maturity: "experimental" lineage: { - seqs: [ - { - schemas: [ - { + schemas: [{ + version: [0, 0] + schema: { - SeriesMapping: "auto" | "manual" @cuetsy(kind="enum") - ScatterShow: "points" | "lines" | "points+lines" @cuetsy(kind="enum", memberNames="Points|Lines|PointsAndLines") + SeriesMapping: "auto" | "manual" @cuetsy(kind="enum") + ScatterShow: "points" | "lines" | "points+lines" @cuetsy(kind="enum", memberNames="Points|Lines|PointsAndLines") - XYDimensionConfig: { - frame: int32 & >=0 - x?: string - exclude?: [...string] - } @cuetsy(kind="interface") + XYDimensionConfig: { + frame: int32 & >=0 + x?: string + exclude?: [...string] + } @cuetsy(kind="interface") - ScatterFieldConfig: { - common.HideableFieldConfig - common.AxisConfig + ScatterFieldConfig: { + common.HideableFieldConfig + common.AxisConfig - show?: ScatterShow & (*"points" | _) + show?: ScatterShow & (*"points" | _) - pointSize?: common.ScaleDimensionConfig - lineColor?: common.ColorDimensionConfig - pointColor?: common.ColorDimensionConfig - labelValue?: common.TextDimensionConfig + pointSize?: common.ScaleDimensionConfig + lineColor?: common.ColorDimensionConfig + pointColor?: common.ColorDimensionConfig + labelValue?: common.TextDimensionConfig - lineWidth?: int32 & >=0 - lineStyle?: common.LineStyle - label?: common.VisibilityMode & (*"auto" | _) - } @cuetsy(kind="interface",TSVeneer="type") + lineWidth?: int32 & >=0 + lineStyle?: common.LineStyle + label?: common.VisibilityMode & (*"auto" | _) + } @cuetsy(kind="interface",TSVeneer="type") - ScatterSeriesConfig: { - ScatterFieldConfig - x?: string - y?: string - name?: string - } @cuetsy(kind="interface") + ScatterSeriesConfig: { + ScatterFieldConfig + x?: string + y?: string + name?: string + } @cuetsy(kind="interface") - Options: { - common.OptionsWithLegend - common.OptionsWithTooltip + Options: { + common.OptionsWithLegend + common.OptionsWithTooltip - seriesMapping?: SeriesMapping - dims: XYDimensionConfig - series: [...ScatterSeriesConfig] - } @cuetsy(kind="interface") - }, - ] - }, - ] + seriesMapping?: SeriesMapping + dims: XYDimensionConfig + series: [...ScatterSeriesConfig] + } @cuetsy(kind="interface") + } + }] + lenses: [] } }