diff --git a/docs/sources/developers/kinds/composable/cloudwatchdataquery/schema-reference.md b/docs/sources/developers/kinds/composable/cloudwatchdataquery/schema-reference.md new file mode 100644 index 00000000000..33ea2c59864 --- /dev/null +++ b/docs/sources/developers/kinds/composable/cloudwatchdataquery/schema-reference.md @@ -0,0 +1,19 @@ +--- +keywords: + - grafana + - schema +title: CloudWatchDataQuery kind +--- +> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. + +## CloudWatchDataQuery + +#### Maturity: merged +#### Version: 0.0 + + + +| Property | Type | Required | Description | +|----------|------|----------|-------------| + + diff --git a/pkg/kindsys/report.json b/pkg/kindsys/report.json index 5c6caae2ba3..2c25b456b94 100644 --- a/pkg/kindsys/report.json +++ b/pkg/kindsys/report.json @@ -234,7 +234,9 @@ }, "cloudwatchdataquery": { "category": "composable", - "codeowners": [], + "codeowners": [ + "grafana/aws-plugins" + ], "currentVersion": [ 0, 0 @@ -242,13 +244,13 @@ "grafanaMaturityCount": 0, "lineageIsGroup": false, "links": { - "docs": "n/a", - "go": "n/a", - "schema": "n/a", - "ts": "n/a" + "docs": "https://grafana.com/docs/grafana/next/developers/kinds/composable/cloudwatchdataquery/schema-reference", + "go": "https://github.com/grafana/grafana/tree/main/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go", + "schema": "https://github.com/grafana/grafana/tree/main/public/app/plugins/datasource/cloudwatch/dataquery.cue", + "ts": "https://github.com/grafana/grafana/tree/main/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts" }, "machineName": "cloudwatchdataquery", - "maturity": "planned", + "maturity": "merged", "name": "CloudWatchDataQuery", "pluralMachineName": "cloudwatchdataquerys", "pluralName": "CloudWatchDataQuerys", @@ -2012,13 +2014,14 @@ "items": [ "alertgroupspanelcfg", "azuremonitordataquery", + "cloudwatchdataquery", "playlist", "preferences", "publicdashboard", "serviceaccount", "team" ], - "count": 7 + "count": 8 }, "planned": { "name": "planned", @@ -2028,7 +2031,6 @@ "alertmanagerdatasourcecfg", "apikey", "azuremonitordatasourcecfg", - "cloudwatchdataquery", "cloudwatchdatasourcecfg", "dashboarddataquery", "dashboarddatasourcecfg", @@ -2074,7 +2076,7 @@ "zipkindataquery", "zipkindatasourcecfg" ], - "count": 50 + "count": 49 }, "stable": { "name": "stable", diff --git a/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go b/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go new file mode 100644 index 00000000000..1b0520d2467 --- /dev/null +++ b/pkg/tsdb/cloudwatch/kinds/dataquery/types_dataquery_gen.go @@ -0,0 +1,575 @@ +// Code generated - EDITING IS FUTILE. DO NOT EDIT. +// +// Generated by: +// public/app/plugins/gen.go +// Using jennies: +// PluginGoTypesJenny +// +// Run 'make gen-cue' from repository root to regenerate. + +package dataquery + +// Defines values for CloudWatchAnnotationQueryQueryMode. +const ( + CloudWatchAnnotationQueryQueryModeAnnotations CloudWatchAnnotationQueryQueryMode = "Annotations" + + CloudWatchAnnotationQueryQueryModeLogs CloudWatchAnnotationQueryQueryMode = "Logs" + + CloudWatchAnnotationQueryQueryModeMetrics CloudWatchAnnotationQueryQueryMode = "Metrics" +) + +// Defines values for CloudWatchLogsQueryQueryMode. +const ( + CloudWatchLogsQueryQueryModeAnnotations CloudWatchLogsQueryQueryMode = "Annotations" + + CloudWatchLogsQueryQueryModeLogs CloudWatchLogsQueryQueryMode = "Logs" + + CloudWatchLogsQueryQueryModeMetrics CloudWatchLogsQueryQueryMode = "Metrics" +) + +// Defines values for CloudWatchMetricsQueryMetricEditorMode. +const ( + CloudWatchMetricsQueryMetricEditorModeN0 CloudWatchMetricsQueryMetricEditorMode = 0 + + CloudWatchMetricsQueryMetricEditorModeN1 CloudWatchMetricsQueryMetricEditorMode = 1 +) + +// Defines values for CloudWatchMetricsQueryMetricQueryType. +const ( + CloudWatchMetricsQueryMetricQueryTypeN0 CloudWatchMetricsQueryMetricQueryType = 0 + + CloudWatchMetricsQueryMetricQueryTypeN1 CloudWatchMetricsQueryMetricQueryType = 1 +) + +// Defines values for CloudWatchMetricsQueryQueryMode. +const ( + CloudWatchMetricsQueryQueryModeAnnotations CloudWatchMetricsQueryQueryMode = "Annotations" + + CloudWatchMetricsQueryQueryModeLogs CloudWatchMetricsQueryQueryMode = "Logs" + + CloudWatchMetricsQueryQueryModeMetrics CloudWatchMetricsQueryQueryMode = "Metrics" +) + +// Defines values for CloudWatchMetricsQuerySqlGroupByType. +const ( + CloudWatchMetricsQuerySqlGroupByTypeAnd CloudWatchMetricsQuerySqlGroupByType = "and" + + CloudWatchMetricsQuerySqlGroupByTypeOr CloudWatchMetricsQuerySqlGroupByType = "or" +) + +// Defines values for CloudWatchMetricsQuerySqlOrderByParametersType. +const ( + CloudWatchMetricsQuerySqlOrderByParametersTypeFunctionParameter CloudWatchMetricsQuerySqlOrderByParametersType = "functionParameter" +) + +// Defines values for CloudWatchMetricsQuerySqlOrderByType. +const ( + CloudWatchMetricsQuerySqlOrderByTypeFunction CloudWatchMetricsQuerySqlOrderByType = "function" +) + +// Defines values for CloudWatchMetricsQuerySqlSelectParametersType. +const ( + CloudWatchMetricsQuerySqlSelectParametersTypeFunctionParameter CloudWatchMetricsQuerySqlSelectParametersType = "functionParameter" +) + +// Defines values for CloudWatchMetricsQuerySqlSelectType. +const ( + CloudWatchMetricsQuerySqlSelectTypeFunction CloudWatchMetricsQuerySqlSelectType = "function" +) + +// Defines values for CloudWatchMetricsQuerySqlWhereType. +const ( + CloudWatchMetricsQuerySqlWhereTypeAnd CloudWatchMetricsQuerySqlWhereType = "and" + + CloudWatchMetricsQuerySqlWhereTypeOr CloudWatchMetricsQuerySqlWhereType = "or" +) + +// Defines values for CloudWatchQueryMode. +const ( + CloudWatchQueryModeAnnotations CloudWatchQueryMode = "Annotations" + + CloudWatchQueryModeLogs CloudWatchQueryMode = "Logs" + + CloudWatchQueryModeMetrics CloudWatchQueryMode = "Metrics" +) + +// Defines values for MetricEditorMode. +const ( + MetricEditorModeN0 MetricEditorMode = 0 + + MetricEditorModeN1 MetricEditorMode = 1 +) + +// Defines values for MetricQueryType. +const ( + MetricQueryTypeN0 MetricQueryType = 0 + + MetricQueryTypeN1 MetricQueryType = 1 +) + +// Defines values for QueryEditorArrayExpressionType. +const ( + QueryEditorArrayExpressionTypeAnd QueryEditorArrayExpressionType = "and" + + QueryEditorArrayExpressionTypeOr QueryEditorArrayExpressionType = "or" +) + +// Defines values for QueryEditorExpressionType. +const ( + QueryEditorExpressionTypeAnd QueryEditorExpressionType = "and" + + QueryEditorExpressionTypeFunction QueryEditorExpressionType = "function" + + QueryEditorExpressionTypeFunctionParameter QueryEditorExpressionType = "functionParameter" + + QueryEditorExpressionTypeGroupBy QueryEditorExpressionType = "groupBy" + + QueryEditorExpressionTypeOperator QueryEditorExpressionType = "operator" + + QueryEditorExpressionTypeOr QueryEditorExpressionType = "or" + + QueryEditorExpressionTypeProperty QueryEditorExpressionType = "property" +) + +// Defines values for QueryEditorFunctionExpressionParametersType. +const ( + QueryEditorFunctionExpressionParametersTypeFunctionParameter QueryEditorFunctionExpressionParametersType = "functionParameter" +) + +// Defines values for QueryEditorFunctionExpressionType. +const ( + QueryEditorFunctionExpressionTypeFunction QueryEditorFunctionExpressionType = "function" +) + +// Defines values for QueryEditorFunctionParameterExpressionType. +const ( + QueryEditorFunctionParameterExpressionTypeFunctionParameter QueryEditorFunctionParameterExpressionType = "functionParameter" +) + +// Defines values for QueryEditorGroupByExpressionPropertyType. +const ( + QueryEditorGroupByExpressionPropertyTypeString QueryEditorGroupByExpressionPropertyType = "string" + + QueryEditorGroupByExpressionPropertyTypeTest QueryEditorGroupByExpressionPropertyType = "test" +) + +// Defines values for QueryEditorGroupByExpressionType. +const ( + QueryEditorGroupByExpressionTypeGroupBy QueryEditorGroupByExpressionType = "groupBy" +) + +// Defines values for QueryEditorOperatorExpressionPropertyType. +const ( + QueryEditorOperatorExpressionPropertyTypeString QueryEditorOperatorExpressionPropertyType = "string" + + QueryEditorOperatorExpressionPropertyTypeTest QueryEditorOperatorExpressionPropertyType = "test" +) + +// Defines values for QueryEditorOperatorExpressionType. +const ( + QueryEditorOperatorExpressionTypeOperator QueryEditorOperatorExpressionType = "operator" +) + +// Defines values for QueryEditorPropertyType. +const ( + QueryEditorPropertyTypeString QueryEditorPropertyType = "string" + + QueryEditorPropertyTypeTest QueryEditorPropertyType = "test" +) + +// Defines values for QueryEditorPropertyExpressionPropertyType. +const ( + QueryEditorPropertyExpressionPropertyTypeString QueryEditorPropertyExpressionPropertyType = "string" + + QueryEditorPropertyExpressionPropertyTypeTest QueryEditorPropertyExpressionPropertyType = "test" +) + +// Defines values for QueryEditorPropertyExpressionType. +const ( + QueryEditorPropertyExpressionTypeProperty QueryEditorPropertyExpressionType = "property" +) + +// Defines values for SQLExpressionGroupByType. +const ( + SQLExpressionGroupByTypeAnd SQLExpressionGroupByType = "and" + + SQLExpressionGroupByTypeOr SQLExpressionGroupByType = "or" +) + +// Defines values for SQLExpressionOrderByParametersType. +const ( + SQLExpressionOrderByParametersTypeFunctionParameter SQLExpressionOrderByParametersType = "functionParameter" +) + +// Defines values for SQLExpressionOrderByType. +const ( + SQLExpressionOrderByTypeFunction SQLExpressionOrderByType = "function" +) + +// Defines values for SQLExpressionSelectParametersType. +const ( + SQLExpressionSelectParametersTypeFunctionParameter SQLExpressionSelectParametersType = "functionParameter" +) + +// Defines values for SQLExpressionSelectType. +const ( + SQLExpressionSelectTypeFunction SQLExpressionSelectType = "function" +) + +// Defines values for SQLExpressionWhereType. +const ( + SQLExpressionWhereTypeAnd SQLExpressionWhereType = "and" + + SQLExpressionWhereTypeOr SQLExpressionWhereType = "or" +) + +// CloudWatchAnnotationQuery defines model for CloudWatchAnnotationQuery. +type CloudWatchAnnotationQuery struct { + AccountId *string `json:"accountId,omitempty"` + ActionPrefix *string `json:"actionPrefix,omitempty"` + AlarmNamePrefix *string `json:"alarmNamePrefix,omitempty"` + Dimensions map[string]interface{} `json:"dimensions,omitempty"` + MatchExact *bool `json:"matchExact,omitempty"` + MetricName *string `json:"metricName,omitempty"` + Namespace string `json:"namespace"` + Period *string `json:"period,omitempty"` + PrefixMatching *bool `json:"prefixMatching,omitempty"` + QueryMode CloudWatchAnnotationQueryQueryMode `json:"queryMode"` + Region string `json:"region"` + Statistic *string `json:"statistic,omitempty"` + + // @deprecated use statistic + Statistics *[]string `json:"statistics,omitempty"` +} + +// CloudWatchAnnotationQueryQueryMode defines model for CloudWatchAnnotationQuery.QueryMode. +type CloudWatchAnnotationQueryQueryMode string + +// CloudWatchDataQuery defines model for CloudWatchDataQuery. +type CloudWatchDataQuery map[string]interface{} + +// CloudWatchLogsQuery defines model for CloudWatchLogsQuery. +type CloudWatchLogsQuery struct { + // 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 *interface{} `json:"datasource,omitempty"` + Expression *string `json:"expression,omitempty"` + + // true if query is disabled (ie should not be returned to the dashboard) + Hide *bool `json:"hide,omitempty"` + Id string `json:"id"` + + // Unique, guid like, string used in explore mode + Key *string `json:"key,omitempty"` + + // deprecated, use logGroups instead + LogGroupNames *[]string `json:"logGroupNames,omitempty"` + LogGroups *[]struct { + AccountId *string `json:"accountId,omitempty"` + AccountLabel *string `json:"accountLabel,omitempty"` + Arn string `json:"arn"` + Name string `json:"name"` + } `json:"logGroups,omitempty"` + QueryMode CloudWatchLogsQueryQueryMode `json:"queryMode"` + + // Specify the query flavor + // TODO make this required and give it a default + QueryType *string `json:"queryType,omitempty"` + + // A - Z + RefId string `json:"refId"` + Region string `json:"region"` + StatsGroups *[]string `json:"statsGroups,omitempty"` +} + +// CloudWatchLogsQueryQueryMode defines model for CloudWatchLogsQuery.QueryMode. +type CloudWatchLogsQueryQueryMode string + +// CloudWatchMetricsQuery defines model for CloudWatchMetricsQuery. +type CloudWatchMetricsQuery struct { + AccountId *string `json:"accountId,omitempty"` + Alias *string `json:"alias,omitempty"` + Dimensions map[string]interface{} `json:"dimensions,omitempty"` + + // Math expression query + Expression *string `json:"expression,omitempty"` + + // common props + Id string `json:"id"` + Label *string `json:"label,omitempty"` + MatchExact *bool `json:"matchExact,omitempty"` + MetricEditorMode *CloudWatchMetricsQueryMetricEditorMode `json:"metricEditorMode,omitempty"` + MetricName *string `json:"metricName,omitempty"` + MetricQueryType *CloudWatchMetricsQueryMetricQueryType `json:"metricQueryType,omitempty"` + Namespace string `json:"namespace"` + Period *string `json:"period,omitempty"` + QueryMode *CloudWatchMetricsQueryQueryMode `json:"queryMode,omitempty"` + Region string `json:"region"` + Sql *struct { + From *interface{} `json:"from,omitempty"` + GroupBy *struct { + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + Expressions interface{} `json:"expressions"` + + // TODO this doesn't work + Type CloudWatchMetricsQuerySqlGroupByType `json:"type"` + } `json:"groupBy,omitempty"` + Limit *int64 `json:"limit,omitempty"` + OrderBy *struct { + Name *string `json:"name,omitempty"` + Parameters *[]struct { + Name *string `json:"name,omitempty"` + Type CloudWatchMetricsQuerySqlOrderByParametersType `json:"type"` + } `json:"parameters,omitempty"` + Type CloudWatchMetricsQuerySqlOrderByType `json:"type"` + } `json:"orderBy,omitempty"` + OrderByDirection *string `json:"orderByDirection,omitempty"` + Select *struct { + Name *string `json:"name,omitempty"` + Parameters *[]struct { + Name *string `json:"name,omitempty"` + Type CloudWatchMetricsQuerySqlSelectParametersType `json:"type"` + } `json:"parameters,omitempty"` + Type CloudWatchMetricsQuerySqlSelectType `json:"type"` + } `json:"select,omitempty"` + Where *struct { + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + Expressions interface{} `json:"expressions"` + + // TODO this doesn't work + Type CloudWatchMetricsQuerySqlWhereType `json:"type"` + } `json:"where,omitempty"` + } `json:"sql,omitempty"` + SqlExpression *string `json:"sqlExpression,omitempty"` + Statistic *string `json:"statistic,omitempty"` + + // @deprecated use statistic + Statistics *[]string `json:"statistics,omitempty"` +} + +// CloudWatchMetricsQueryMetricEditorMode defines model for CloudWatchMetricsQuery.MetricEditorMode. +type CloudWatchMetricsQueryMetricEditorMode int + +// CloudWatchMetricsQueryMetricQueryType defines model for CloudWatchMetricsQuery.MetricQueryType. +type CloudWatchMetricsQueryMetricQueryType int + +// CloudWatchMetricsQueryQueryMode defines model for CloudWatchMetricsQuery.QueryMode. +type CloudWatchMetricsQueryQueryMode string + +// TODO this doesn't work +type CloudWatchMetricsQuerySqlGroupByType string + +// CloudWatchMetricsQuerySqlOrderByParametersType defines model for CloudWatchMetricsQuery.Sql.OrderBy.Parameters.Type. +type CloudWatchMetricsQuerySqlOrderByParametersType string + +// CloudWatchMetricsQuerySqlOrderByType defines model for CloudWatchMetricsQuery.Sql.OrderBy.Type. +type CloudWatchMetricsQuerySqlOrderByType string + +// CloudWatchMetricsQuerySqlSelectParametersType defines model for CloudWatchMetricsQuery.Sql.Select.Parameters.Type. +type CloudWatchMetricsQuerySqlSelectParametersType string + +// CloudWatchMetricsQuerySqlSelectType defines model for CloudWatchMetricsQuery.Sql.Select.Type. +type CloudWatchMetricsQuerySqlSelectType string + +// TODO this doesn't work +type CloudWatchMetricsQuerySqlWhereType string + +// CloudWatchQueryMode defines model for CloudWatchQueryMode. +type CloudWatchQueryMode string + +// LogGroup defines model for LogGroup. +type LogGroup struct { + AccountId *string `json:"accountId,omitempty"` + AccountLabel *string `json:"accountLabel,omitempty"` + Arn string `json:"arn"` + Name string `json:"name"` +} + +// MetricEditorMode defines model for MetricEditorMode. +type MetricEditorMode int + +// MetricQueryType defines model for MetricQueryType. +type MetricQueryType int + +// MetricStat defines model for MetricStat. +type MetricStat struct { + AccountId *string `json:"accountId,omitempty"` + Dimensions map[string]interface{} `json:"dimensions,omitempty"` + MatchExact *bool `json:"matchExact,omitempty"` + MetricName *string `json:"metricName,omitempty"` + Namespace string `json:"namespace"` + Period *string `json:"period,omitempty"` + Region string `json:"region"` + Statistic *string `json:"statistic,omitempty"` + + // @deprecated use statistic + Statistics *[]string `json:"statistics,omitempty"` +} + +// QueryEditorArrayExpression defines model for QueryEditorArrayExpression. +type QueryEditorArrayExpression struct { + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + Expressions interface{} `json:"expressions"` + + // TODO this doesn't work + Type QueryEditorArrayExpressionType `json:"type"` +} + +// TODO this doesn't work +type QueryEditorArrayExpressionType string + +// QueryEditorExpressionType defines model for QueryEditorExpressionType. +type QueryEditorExpressionType string + +// QueryEditorFunctionExpression defines model for QueryEditorFunctionExpression. +type QueryEditorFunctionExpression struct { + Name *string `json:"name,omitempty"` + Parameters *[]struct { + Name *string `json:"name,omitempty"` + Type QueryEditorFunctionExpressionParametersType `json:"type"` + } `json:"parameters,omitempty"` + Type QueryEditorFunctionExpressionType `json:"type"` +} + +// QueryEditorFunctionExpressionParametersType defines model for QueryEditorFunctionExpression.Parameters.Type. +type QueryEditorFunctionExpressionParametersType string + +// QueryEditorFunctionExpressionType defines model for QueryEditorFunctionExpression.Type. +type QueryEditorFunctionExpressionType string + +// QueryEditorFunctionParameterExpression defines model for QueryEditorFunctionParameterExpression. +type QueryEditorFunctionParameterExpression struct { + Name *string `json:"name,omitempty"` + Type QueryEditorFunctionParameterExpressionType `json:"type"` +} + +// QueryEditorFunctionParameterExpressionType defines model for QueryEditorFunctionParameterExpression.Type. +type QueryEditorFunctionParameterExpressionType string + +// QueryEditorGroupByExpression defines model for QueryEditorGroupByExpression. +type QueryEditorGroupByExpression struct { + Property struct { + Name *string `json:"name,omitempty"` + Type QueryEditorGroupByExpressionPropertyType `json:"type"` + } `json:"property"` + Type QueryEditorGroupByExpressionType `json:"type"` +} + +// QueryEditorGroupByExpressionPropertyType defines model for QueryEditorGroupByExpression.Property.Type. +type QueryEditorGroupByExpressionPropertyType string + +// QueryEditorGroupByExpressionType defines model for QueryEditorGroupByExpression.Type. +type QueryEditorGroupByExpressionType string + +// TODO <T extends QueryEditorOperatorValueType>, extend in veneer +type QueryEditorOperator struct { + Name *string `json:"name,omitempty"` + Value *interface{} `json:"value,omitempty"` +} + +// QueryEditorOperatorExpression defines model for QueryEditorOperatorExpression. +type QueryEditorOperatorExpression struct { + // TODO QueryEditorOperator<QueryEditorOperatorValueType>, extend in veneer + Operator struct { + Name *string `json:"name,omitempty"` + Value *interface{} `json:"value,omitempty"` + } `json:"operator"` + Property struct { + Name *string `json:"name,omitempty"` + Type QueryEditorOperatorExpressionPropertyType `json:"type"` + } `json:"property"` + Type QueryEditorOperatorExpressionType `json:"type"` +} + +// QueryEditorOperatorExpressionPropertyType defines model for QueryEditorOperatorExpression.Property.Type. +type QueryEditorOperatorExpressionPropertyType string + +// QueryEditorOperatorExpressionType defines model for QueryEditorOperatorExpression.Type. +type QueryEditorOperatorExpressionType string + +// QueryEditorOperatorType defines model for QueryEditorOperatorType. +type QueryEditorOperatorType interface{} + +// QueryEditorOperatorValueType defines model for QueryEditorOperatorValueType. +type QueryEditorOperatorValueType interface{} + +// QueryEditorProperty defines model for QueryEditorProperty. +type QueryEditorProperty struct { + Name *string `json:"name,omitempty"` + Type QueryEditorPropertyType `json:"type"` +} + +// QueryEditorPropertyType defines model for QueryEditorProperty.Type. +type QueryEditorPropertyType string + +// QueryEditorPropertyExpression defines model for QueryEditorPropertyExpression. +type QueryEditorPropertyExpression struct { + Property struct { + Name *string `json:"name,omitempty"` + Type QueryEditorPropertyExpressionPropertyType `json:"type"` + } `json:"property"` + Type QueryEditorPropertyExpressionType `json:"type"` +} + +// QueryEditorPropertyExpressionPropertyType defines model for QueryEditorPropertyExpression.Property.Type. +type QueryEditorPropertyExpressionPropertyType string + +// QueryEditorPropertyExpressionType defines model for QueryEditorPropertyExpression.Type. +type QueryEditorPropertyExpressionType string + +// SQLExpression defines model for SQLExpression. +type SQLExpression struct { + From *interface{} `json:"from,omitempty"` + GroupBy *struct { + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + Expressions interface{} `json:"expressions"` + + // TODO this doesn't work + Type SQLExpressionGroupByType `json:"type"` + } `json:"groupBy,omitempty"` + Limit *int64 `json:"limit,omitempty"` + OrderBy *struct { + Name *string `json:"name,omitempty"` + Parameters *[]struct { + Name *string `json:"name,omitempty"` + Type SQLExpressionOrderByParametersType `json:"type"` + } `json:"parameters,omitempty"` + Type SQLExpressionOrderByType `json:"type"` + } `json:"orderBy,omitempty"` + OrderByDirection *string `json:"orderByDirection,omitempty"` + Select *struct { + Name *string `json:"name,omitempty"` + Parameters *[]struct { + Name *string `json:"name,omitempty"` + Type SQLExpressionSelectParametersType `json:"type"` + } `json:"parameters,omitempty"` + Type SQLExpressionSelectType `json:"type"` + } `json:"select,omitempty"` + Where *struct { + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + Expressions interface{} `json:"expressions"` + + // TODO this doesn't work + Type SQLExpressionWhereType `json:"type"` + } `json:"where,omitempty"` +} + +// TODO this doesn't work +type SQLExpressionGroupByType string + +// SQLExpressionOrderByParametersType defines model for SQLExpression.OrderBy.Parameters.Type. +type SQLExpressionOrderByParametersType string + +// SQLExpressionOrderByType defines model for SQLExpression.OrderBy.Type. +type SQLExpressionOrderByType string + +// SQLExpressionSelectParametersType defines model for SQLExpression.Select.Parameters.Type. +type SQLExpressionSelectParametersType string + +// SQLExpressionSelectType defines model for SQLExpression.Select.Type. +type SQLExpressionSelectType string + +// TODO this doesn't work +type SQLExpressionWhereType string diff --git a/public/app/plugins/datasource/cloudwatch/dataquery.cue b/public/app/plugins/datasource/cloudwatch/dataquery.cue new file mode 100644 index 00000000000..3c7626da43a --- /dev/null +++ b/public/app/plugins/datasource/cloudwatch/dataquery.cue @@ -0,0 +1,172 @@ +// Copyright 2023 Grafana Labs +// +// Licensed under the Apache License, Version 2.0 (the "License") +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grafanaplugin + +import ( + common "github.com/grafana/grafana/packages/grafana-schema/src/common" + "github.com/grafana/grafana/pkg/plugins/pfs" +) + +// This file (with its sibling .cue files) implements pfs.GrafanaPlugin +pfs.GrafanaPlugin + +composableKinds: DataQuery: { + maturity: "merged" + + lineage: { + seqs: [ + { + schemas: [ + { + #MetricStat: { + region: string + namespace: string + metricName?: string + dimensions?: #Dimensions + matchExact?: bool + period?: string + accountId?: string + statistic?: string + // @deprecated use statistic + statistics?: [...string] + } @cuetsy(kind="interface") + + #Dimensions: {[string]: string | [...string]} @cuetsy(kind="type") + + #CloudWatchMetricsQuery: { + // TODO extend common.DataQuery when the issues with redundant fields is fixed + // common.DataQuery + #MetricStat + queryMode?: #CloudWatchQueryMode + metricQueryType?: #MetricQueryType + metricEditorMode?: #MetricEditorMode + // common props + id: string + + alias?: string + label?: string + + // Math expression query + expression?: string + + sqlExpression?: string + 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?: #QueryEditorFunctionExpression + from?: #QueryEditorPropertyExpression | #QueryEditorFunctionExpression + where?: #QueryEditorArrayExpression + groupBy?: #QueryEditorArrayExpression + orderBy?: #QueryEditorFunctionExpression + orderByDirection?: string + 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") + + #QueryEditorFunctionParameterExpression: { + type: #QueryEditorExpressionType & "functionParameter" + name?: string + } @cuetsy(kind="interface") + + #QueryEditorPropertyExpression: { + type: #QueryEditorExpressionType & "property" + property: #QueryEditorProperty + } @cuetsy(kind="interface") + + #QueryEditorGroupByExpression: { + type: #QueryEditorExpressionType & "groupBy" + property: #QueryEditorProperty + } @cuetsy(kind="interface") + + #QueryEditorOperatorExpression: { + type: #QueryEditorExpressionType & "operator" + property: #QueryEditorProperty + // TODO QueryEditorOperator<QueryEditorOperatorValueType>, extend in veneer + operator: #QueryEditorOperator + } @cuetsy(kind="interface") + + // TODO <T extends QueryEditorOperatorValueType>, extend in veneer + #QueryEditorOperator: { + name?: string + value?: #QueryEditorOperatorType | [...#QueryEditorOperatorType] + } + + #QueryEditorOperatorValueType: #QueryEditorOperatorType | [...#QueryEditorOperatorType] @cuetsy(kind="type") + #QueryEditorOperatorType: string | bool | int64 @cuetsy(kind="type") + + #QueryEditorProperty: { + type: #QueryEditorPropertyType + name?: string + } @cuetsy(kind="interface") + + #QueryEditorPropertyType: "string" | "test" @cuetsy(kind="enum") + + #QueryEditorArrayExpression: { + // TODO this doesn't work + type: (#QueryEditorExpressionType & "and") | (#QueryEditorExpressionType & "or") + // TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + expressions: _ // TODO modify this in veneer + } @cuetsy(kind="interface") + + #CloudWatchLogsQuery: { + common.DataQuery + queryMode: #CloudWatchQueryMode + id: string + region: string + expression?: string + statsGroups?: [...string] + logGroups?: [...#LogGroup] + // deprecated, use logGroups instead + logGroupNames?: [...string] + } @cuetsy(kind="interface") + + #LogGroup: { + arn: string + name: string + accountId?: string + accountLabel?: string + } @cuetsy(kind="interface") + + #CloudWatchQueryMode: "Metrics" | "Logs" | "Annotations" @cuetsy(kind="type") + + #CloudWatchAnnotationQuery: { + // TODO extend common.DataQuery when the issues with redundant fields is fixed + //common.DataQuery + #MetricStat + queryMode: #CloudWatchQueryMode + prefixMatching?: bool + actionPrefix?: string + alarmNamePrefix?: string + } @cuetsy(kind="interface") + + // TODO this doesn't work. Also the type is CloudWatchDefaultQuery = Omit<CloudWatchLogsQuery, 'queryMode'> & CloudWatchMetricsQuery; + // #CloudWatchDefaultQuery: #CloudWatchLogsQuery & #CloudWatchMetricsQuery @cuetsy(kind="type") + }, + ] + }, + ] + } +} diff --git a/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts b/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts new file mode 100644 index 00000000000..f50fed07594 --- /dev/null +++ b/public/app/plugins/datasource/cloudwatch/dataquery.gen.ts @@ -0,0 +1,181 @@ +// Code generated - EDITING IS FUTILE. DO NOT EDIT. +// +// Generated by: +// public/app/plugins/gen.go +// Using jennies: +// TSTypesJenny +// PluginTSTypesJenny +// +// Run 'make gen-cue' from repository root to regenerate. + +import * as common from '@grafana/schema'; + +export const DataQueryModelVersion = Object.freeze([0, 0]); + +export interface MetricStat { + accountId?: string; + dimensions?: Dimensions; + matchExact?: boolean; + metricName?: string; + namespace: string; + period?: string; + region: string; + statistic?: string; + /** + * @deprecated use statistic + */ + statistics?: Array<string>; +} + +export const defaultMetricStat: Partial<MetricStat> = { + statistics: [], +}; + +export type Dimensions = Record<string, (string | Array<string>)>; + +export interface CloudWatchMetricsQuery extends MetricStat { + alias?: string; + /** + * Math expression query + */ + expression?: string; + /** + * common props + */ + id: string; + label?: string; + metricEditorMode?: MetricEditorMode; + metricQueryType?: MetricQueryType; + queryMode?: CloudWatchQueryMode; + sql?: SQLExpression; + sqlExpression?: string; +} + +export type CloudWatchQueryMode = ('Metrics' | 'Logs' | 'Annotations'); + +export enum MetricQueryType { + Query = 1, + Search = 0, +} + +export enum MetricEditorMode { + Builder = 0, + Code = 1, +} + +export interface SQLExpression { + from?: (QueryEditorPropertyExpression | QueryEditorFunctionExpression); + groupBy?: QueryEditorArrayExpression; + limit?: number; + orderBy?: QueryEditorFunctionExpression; + orderByDirection?: string; + select?: QueryEditorFunctionExpression; + where?: QueryEditorArrayExpression; +} + +export interface QueryEditorFunctionExpression { + name?: string; + parameters?: Array<QueryEditorFunctionParameterExpression>; + type: QueryEditorExpressionType.Function; +} + +export const defaultQueryEditorFunctionExpression: Partial<QueryEditorFunctionExpression> = { + parameters: [], +}; + +export enum QueryEditorExpressionType { + And = 'and', + Function = 'function', + FunctionParameter = 'functionParameter', + GroupBy = 'groupBy', + Operator = 'operator', + Or = 'or', + Property = 'property', +} + +export interface QueryEditorFunctionParameterExpression { + name?: string; + type: QueryEditorExpressionType.FunctionParameter; +} + +export interface QueryEditorPropertyExpression { + property: QueryEditorProperty; + type: QueryEditorExpressionType.Property; +} + +export interface QueryEditorGroupByExpression { + property: QueryEditorProperty; + type: QueryEditorExpressionType.GroupBy; +} + +export interface QueryEditorOperatorExpression { + /** + * TODO QueryEditorOperator<QueryEditorOperatorValueType>, extend in veneer + */ + operator: { + name?: string; + value?: (QueryEditorOperatorType | Array<QueryEditorOperatorType>); + }; + property: QueryEditorProperty; + type: QueryEditorExpressionType.Operator; +} + +export type QueryEditorOperatorValueType = (QueryEditorOperatorType | Array<QueryEditorOperatorType>); + +export type QueryEditorOperatorType = (string | boolean | number); + +export interface QueryEditorProperty { + name?: string; + type: QueryEditorPropertyType; +} + +export enum QueryEditorPropertyType { + String = 'string', + Test = 'test', +} + +export interface QueryEditorArrayExpression { + /** + * TODO should be QueryEditorExpression[] | QueryEditorArrayExpression[], extend in veneer + */ + expressions: unknown; + /** + * TODO this doesn't work + */ + type: QueryEditorExpressionType; +} + +export interface CloudWatchLogsQuery extends common.DataQuery { + expression?: string; + id: string; + /** + * deprecated, use logGroups instead + */ + logGroupNames?: Array<string>; + logGroups?: Array<LogGroup>; + queryMode: CloudWatchQueryMode; + region: string; + statsGroups?: Array<string>; +} + +export const defaultCloudWatchLogsQuery: Partial<CloudWatchLogsQuery> = { + logGroupNames: [], + logGroups: [], + statsGroups: [], +}; + +export interface LogGroup { + accountId?: string; + accountLabel?: string; + arn: string; + name: string; +} + +export interface CloudWatchAnnotationQuery extends MetricStat { + actionPrefix?: string; + alarmNamePrefix?: string; + prefixMatching?: boolean; + queryMode: CloudWatchQueryMode; +} + +export interface CloudWatch {}