grafana / cog

Code Generation with a human touch
Apache License 2.0
43 stars 2 forks source link

External template veneers #538

Closed K-Phoen closed 2 weeks ago

K-Phoen commented 2 weeks ago

Instead of hardcoding schema-specific "template veneers" within cog itself, this PR allows them to be injected via the configuration instead.

This allows cog to get one step closer to be fully independent from Grafana-related schemas, and it makes it easier to get a full view of the codegen config pipeline.

github-actions[bot] commented 2 weeks ago

Note: in addition to the changes introduced by this PR, the diff includes unreleased changes living in main.

### 🔎 Changes to `grafana-foundation-sdk@next+cog-v0.0.x` ```patch diff --git a/java/gradle.properties b/java/gradle.properties index 68bbabc..be41e8c 100644 --- a/java/gradle.properties +++ b/java/gradle.properties @@ -1 +1 @@ -grafanaFoundationSDKVersion=next-1725620594 +grafanaFoundationSDKVersion=next-1726066159 diff --git a/php/src/Azuremonitor/AzureMonitorQuery.php b/php/src/Azuremonitor/AzureMonitorQuery.php index 819dbef..ff7faa1 100644 --- a/php/src/Azuremonitor/AzureMonitorQuery.php +++ b/php/src/Azuremonitor/AzureMonitorQuery.php @@ -159,26 +159,26 @@ class AzureMonitorQuery implements \JsonSerializable, \Grafana\Foundation\Cog\Da \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["kind"]) { - case "MetricNamespaceQuery": - return MetricNamespaceQuery::fromArray($input); - case "MetricNamesQuery": - return MetricNamesQuery::fromArray($input); - case "UnknownQuery": - return UnknownQuery::fromArray($input); - case "ResourceGroupsQuery": - return ResourceGroupsQuery::fromArray($input); - case "AppInsightsGroupByQuery": - return AppInsightsGroupByQuery::fromArray($input); + case "WorkspacesQuery": + return WorkspacesQuery::fromArray($input); case "SubscriptionsQuery": return SubscriptionsQuery::fromArray($input); - case "ResourceNamesQuery": - return ResourceNamesQuery::fromArray($input); case "MetricDefinitionsQuery": return MetricDefinitionsQuery::fromArray($input); - case "WorkspacesQuery": - return WorkspacesQuery::fromArray($input); + case "UnknownQuery": + return UnknownQuery::fromArray($input); + case "AppInsightsGroupByQuery": + return AppInsightsGroupByQuery::fromArray($input); + case "ResourceGroupsQuery": + return ResourceGroupsQuery::fromArray($input); + case "MetricNamespaceQuery": + return MetricNamespaceQuery::fromArray($input); + case "MetricNamesQuery": + return MetricNamesQuery::fromArray($input); case "AppInsightsMetricNameQuery": return AppInsightsMetricNameQuery::fromArray($input); + case "ResourceNamesQuery": + return ResourceNamesQuery::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/php/src/Cloudwatch/QueryEditorArrayExpression.php b/php/src/Cloudwatch/QueryEditorArrayExpression.php index 3a87b04..ae601b3 100644 --- a/php/src/Cloudwatch/QueryEditorArrayExpression.php +++ b/php/src/Cloudwatch/QueryEditorArrayExpression.php @@ -34,8 +34,6 @@ class QueryEditorArrayExpression implements \JsonSerializable \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { - case "operator": - return QueryEditorOperatorExpression::fromArray($input); case "and": return QueryEditorArrayExpression::fromArray($input); case "or": @@ -48,6 +46,8 @@ class QueryEditorArrayExpression implements \JsonSerializable return QueryEditorFunctionExpression::fromArray($input); case "functionParameter": return QueryEditorFunctionParameterExpression::fromArray($input); + case "operator": + return QueryEditorOperatorExpression::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/php/src/Common/TableFieldOptions.php b/php/src/Common/TableFieldOptions.php index a4cae59..ba49fbe 100644 --- a/php/src/Common/TableFieldOptions.php +++ b/php/src/Common/TableFieldOptions.php @@ -78,6 +78,10 @@ class TableFieldOptions implements \JsonSerializable \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { + case "json-view": + return TableJsonViewCellOptions::fromArray($input); + case "auto": + return TableAutoCellOptions::fromArray($input); case "sparkline": return TableSparklineCellOptions::fromArray($input); case "gauge": @@ -90,10 +94,6 @@ class TableFieldOptions implements \JsonSerializable return TableImageCellOptions::fromArray($input); case "data-links": return TableDataLinksCellOptions::fromArray($input); - case "json-view": - return TableJsonViewCellOptions::fromArray($input); - case "auto": - return TableAutoCellOptions::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/php/src/Dashboard/FieldConfig.php b/php/src/Dashboard/FieldConfig.php index a02d949..287f0f5 100644 --- a/php/src/Dashboard/FieldConfig.php +++ b/php/src/Dashboard/FieldConfig.php @@ -170,14 +170,14 @@ class FieldConfig implements \JsonSerializable \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { - case "regex": - return RegexMap::fromArray($input); - case "special": - return SpecialValueMap::fromArray($input); case "value": return ValueMap::fromArray($input); case "range": return RangeMap::fromArray($input); + case "regex": + return RegexMap::fromArray($input); + case "special": + return SpecialValueMap::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/php/src/Elasticsearch/Dataquery.php b/php/src/Elasticsearch/Dataquery.php index e3dd120..ee0193f 100644 --- a/php/src/Elasticsearch/Dataquery.php +++ b/php/src/Elasticsearch/Dataquery.php @@ -97,6 +97,10 @@ class Dataquery implements \JsonSerializable, \Grafana\Foundation\Cog\Dataquery \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { + case "nested": + return Nested::fromArray($input); + case "date_histogram": + return DateHistogram::fromArray($input); case "histogram": return Histogram::fromArray($input); case "terms": @@ -105,10 +109,6 @@ class Dataquery implements \JsonSerializable, \Grafana\Foundation\Cog\Dataquery return Filters::fromArray($input); case "geohash_grid": return GeoHashGrid::fromArray($input); - case "nested": - return Nested::fromArray($input); - case "date_histogram": - return DateHistogram::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } @@ -117,44 +117,44 @@ class Dataquery implements \JsonSerializable, \Grafana\Foundation\Cog\Dataquery \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { - case "percentiles": - return Percentiles::fromArray($input); case "cumulative_sum": return CumulativeSum::fromArray($input); - case "extended_stats": - return ExtendedStats::fromArray($input); - case "sum": - return Sum::fromArray($input); - case "count": - return Count::fromArray($input); - case "rate": - return Rate::fromArray($input); - case "bucket_script": - return BucketScript::fromArray($input); - case "moving_fn": - return MovingFunction::fromArray($input); - case "logs": - return Logs::fromArray($input); - case "top_metrics": - return TopMetrics::fromArray($input); - case "serial_diff": - return SerialDiff::fromArray($input); case "min": return Min::fromArray($input); + case "moving_fn": + return MovingFunction::fromArray($input); case "derivative": return Derivative::fromArray($input); - case "max": - return Max::fromArray($input); + case "rate": + return Rate::fromArray($input); + case "cardinality": + return UniqueCount::fromArray($input); + case "bucket_script": + return BucketScript::fromArray($input); + case "sum": + return Sum::fromArray($input); case "avg": return Average::fromArray($input); case "raw_data": return RawData::fromArray($input); - case "raw_document": - return RawDocument::fromArray($input); - case "cardinality": - return UniqueCount::fromArray($input); + case "logs": + return Logs::fromArray($input); + case "extended_stats": + return ExtendedStats::fromArray($input); case "moving_avg": return MovingAverage::fromArray($input); + case "max": + return Max::fromArray($input); + case "percentiles": + return Percentiles::fromArray($input); + case "count": + return Count::fromArray($input); + case "serial_diff": + return SerialDiff::fromArray($input); + case "raw_document": + return RawDocument::fromArray($input); + case "top_metrics": + return TopMetrics::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/php/src/Expr/VariantConfig.php b/php/src/Expr/VariantConfig.php index 9ca27eb..4c3fcf3 100644 --- a/php/src/Expr/VariantConfig.php +++ b/php/src/Expr/VariantConfig.php @@ -12,10 +12,6 @@ final class VariantConfig \assert(is_array($input), 'expected disjunction value to be an array'); switch ($input["type"]) { - case "reduce": - return TypeReduce::fromArray($input); - case "resample": - return TypeResample::fromArray($input); case "classic_conditions": return TypeClassicConditions::fromArray($input); case "threshold": @@ -24,6 +20,10 @@ final class VariantConfig return TypeSql::fromArray($input); case "math": return TypeMath::fromArray($input); + case "reduce": + return TypeReduce::fromArray($input); + case "resample": + return TypeResample::fromArray($input); default: throw new \ValueError('can not parse disjunction from array'); } diff --git a/python/grafana_foundation_sdk/cog/plugins.py b/python/grafana_foundation_sdk/cog/plugins.py index 039c61c..aeb0f36 100644 --- a/python/grafana_foundation_sdk/cog/plugins.py +++ b/python/grafana_foundation_sdk/cog/plugins.py @@ -1,39 +1,39 @@ # Code generated - EDITING IS FUTILE. DO NOT EDIT. -from ..models import grafanapyroscope -from ..models import piechart -from ..models import table -from ..models import statetimeline -from ..models import stat -from ..models import tempo -from ..models import expr +from ..models import barchart from ..models import candlestick -from ..models import logs -from ..models import debug -from ..models import gauge -from ..models import news -from ..models import nodegraph +from ..models import parca from ..models import statushistory -from ..models import prometheus -from ..models import dashboardlist from ..models import timeseries +from ..models import azuremonitor +from ..models import geomap +from ..models import stat +from ..models import table from ..models import xychart -from ..models import annotationslist -from ..models import histogram +from ..models import bargauge +from ..models import googlecloudmonitoring +from ..models import piechart from ..models import canvas -from ..models import geomap -from ..models import text +from ..models import grafanapyroscope +from ..models import logs +from ..models import nodegraph +from ..models import tempo from ..models import trend -from ..models import azuremonitor -from ..models import barchart +from ..models import expr +from ..models import annotationslist +from ..models import debug from ..models import loki -from ..models import parca -from ..models import datagrid -from ..models import bargauge from ..models import cloudwatch +from ..models import dashboardlist +from ..models import gauge +from ..models import histogram +from ..models import news +from ..models import datagrid from ..models import elasticsearch -from ..models import googlecloudmonitoring from ..models import heatmap +from ..models import statetimeline +from ..models import text +from ..models import prometheus from . import runtime as cogruntime diff --git a/python/grafana_foundation_sdk/models/cloudwatch.py b/python/grafana_foundation_sdk/models/cloudwatch.py index 799f88e..3da0d6a 100644 --- a/python/grafana_foundation_sdk/models/cloudwatch.py +++ b/python/grafana_foundation_sdk/models/cloudwatch.py @@ -332,7 +332,7 @@ class SQLExpression: if "select" in data: args["select"] = QueryEditorFunctionExpression.from_json(data["select"]) if "from" in data: - decoding_map: dict[str, typing.Union[typing.Type[QueryEditorPropertyExpression], typing.Type[QueryEditorFunctionExpression]]] = {"property": QueryEditorPropertyExpression, "function": QueryEditorFunctionExpression} + decoding_map: dict[str, typing.Union[typing.Type[QueryEditorFunctionExpression], typing.Type[QueryEditorPropertyExpression]]] = {"function": QueryEditorFunctionExpression, "property": QueryEditorPropertyExpression} args["from_val"] = decoding_map[data["from"]["type"]].from_json(data["from"]) if "where" in data: args["where"] = QueryEditorArrayExpression.from_json(data["where"]) @@ -894,7 +894,7 @@ CloudWatchQuery: typing.TypeAlias = typing.Union['CloudWatchMetricsQuery', 'Clou def variant_config() -> cogruntime.DataqueryConfig: - decoding_map: dict[str, typing.Union[typing.Type[CloudWatchMetricsQuery], typing.Type[CloudWatchLogsQuery], typing.Type[CloudWatchAnnotationQuery]]] = {"Metrics": CloudWatchMetricsQuery, "Logs": CloudWatchLogsQuery, "Annotations": CloudWatchAnnotationQuery} + decoding_map: dict[str, typing.Union[typing.Type[CloudWatchLogsQuery], typing.Type[CloudWatchAnnotationQuery], typing.Type[CloudWatchMetricsQuery]]] = {"Logs": CloudWatchLogsQuery, "Annotations": CloudWatchAnnotationQuery, "Metrics": CloudWatchMetricsQuery} return cogruntime.DataqueryConfig( identifier="cloudwatch", from_json_hook=lambda data: decoding_map[data["queryMode"]].from_json(data), diff --git a/python/grafana_foundation_sdk/models/expr.py b/python/grafana_foundation_sdk/models/expr.py index de1ce61..2fd9d7c 100644 --- a/python/grafana_foundation_sdk/models/expr.py +++ b/python/grafana_foundation_sdk/models/expr.py @@ -9,7 +9,7 @@ Expr: typing.TypeAlias = typing.Union['TypeMath', 'TypeReduce', 'TypeResample', def variant_config() -> cogruntime.DataqueryConfig: - decoding_map: dict[str, typing.Union[typing.Type[TypeThreshold], typing.Type[TypeSql], typing.Type[TypeMath], typing.Type[TypeReduce], typing.Type[TypeResample], typing.Type[TypeClassicConditions]]] = {"threshold": TypeThreshold, "sql": TypeSql, "math": TypeMath, "reduce": TypeReduce, "resample": TypeResample, "classic_conditions": TypeClassicConditions} + decoding_map: dict[str, typing.Union[typing.Type[TypeClassicConditions], typing.Type[TypeThreshold], typing.Type[TypeSql], typing.Type[TypeMath], typing.Type[TypeReduce], typing.Type[TypeResample]]] = {"classic_conditions": TypeClassicConditions, "threshold": TypeThreshold, "sql": TypeSql, "math": TypeMath, "reduce": TypeReduce, "resample": TypeResample} return cogruntime.DataqueryConfig( identifier="__expr__", from_json_hook=lambda data: decoding_map[data["type"]].from_json(data), diff --git a/python/pyproject.toml b/python/pyproject.toml index d650f3b..0903448 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -13,7 +13,7 @@ keywords = [ "traces", "metrics" ] -version = "1725620594!next" +version = "1726066159!next" dependencies = [] requires-python = ">=3.11" classifiers = [ diff --git a/typescript/package.json b/typescript/package.json index e8a7368..1b1db1c 100644 --- a/typescript/package.json +++ b/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@grafana/grafana-foundation-sdk", - "version": "next-cogv0.0.x.1725620594", + "version": "next-cogv0.0.x.1726066159", "description": "A set of tools, types and libraries for building and manipulating Grafana objects.", "keywords": [ "observability", ```