grafana / cog

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

Java: Avoid to show fields in json output when they aren't set and nullable #531

Closed spinillos closed 3 weeks ago

spinillos commented 3 weeks ago

Closes https://github.com/grafana/cog/issues/525

Java was printing all fields even if they are nullable. The problem is that the frontend can have a weird behaviour if we show these nulls in the json.

github-actions[bot] commented 3 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/go/alerting/notificationpolicy_builder_gen.go b/go/alerting/notificationpolicy_builder_gen.go index 6e5da26..6feca2c 100644 --- a/go/alerting/notificationpolicy_builder_gen.go +++ b/go/alerting/notificationpolicy_builder_gen.go @@ -41,6 +41,14 @@ func (builder *NotificationPolicyBuilder) Build() (NotificationPolicy, error) { return *builder.internal, nil } +// A Route is a node that contains definitions of how to handle alerts. This is modified +// from the upstream alertmanager in that it adds the ObjectMatchers property. +func (builder *NotificationPolicyBuilder) ActiveTimeIntervals(activeTimeIntervals []string) *NotificationPolicyBuilder { + builder.internal.ActiveTimeIntervals = activeTimeIntervals + + return builder +} + // A Route is a node that contains definitions of how to handle alerts. This is modified // from the upstream alertmanager in that it adds the ObjectMatchers property. func (builder *NotificationPolicyBuilder) Continue(continueArg bool) *NotificationPolicyBuilder { diff --git a/go/alerting/notificationtemplate_builder_gen.go b/go/alerting/notificationtemplate_builder_gen.go index 7087deb..2af7cac 100644 --- a/go/alerting/notificationtemplate_builder_gen.go +++ b/go/alerting/notificationtemplate_builder_gen.go @@ -57,5 +57,11 @@ func (builder *NotificationTemplateBuilder) Template(template string) *Notificat return builder } +func (builder *NotificationTemplateBuilder) Version(version string) *NotificationTemplateBuilder { + builder.internal.Version = &version + + return builder +} + func (builder *NotificationTemplateBuilder) applyDefaults() { } diff --git a/go/alerting/types_gen.go b/go/alerting/types_gen.go index e4205d0..89f5def 100644 --- a/go/alerting/types_gen.go +++ b/go/alerting/types_gen.go @@ -141,6 +141,7 @@ type NotificationTemplate struct { Name *string `json:"name,omitempty"` Provenance *Provenance `json:"provenance,omitempty"` Template *string `json:"template,omitempty"` + Version *string `json:"version,omitempty"` } type ObjectMatcher []string @@ -191,6 +192,9 @@ type RelativeTimeRange struct { // A Route is a node that contains definitions of how to handle alerts. This is modified // from the upstream alertmanager in that it adds the ObjectMatchers property. type NotificationPolicy struct { + // A Route is a node that contains definitions of how to handle alerts. This is modified + // from the upstream alertmanager in that it adds the ObjectMatchers property. + ActiveTimeIntervals []string `json:"active_time_intervals,omitempty"` // A Route is a node that contains definitions of how to handle alerts. This is modified // from the upstream alertmanager in that it adds the ObjectMatchers property. Continue *bool `json:"continue,omitempty"` diff --git a/go/bargauge/panel_builder_gen.go b/go/bargauge/panel_builder_gen.go index 10ee5aa..6600f82 100644 --- a/go/bargauge/panel_builder_gen.go +++ b/go/bargauge/panel_builder_gen.go @@ -478,6 +478,20 @@ func (builder *PanelBuilder) MinVizHeight(minVizHeight uint32) *PanelBuilder { return builder } +func (builder *PanelBuilder) Legend(legend cog.Builder[common.VizLegendOptions]) *PanelBuilder { + if builder.internal.Options == nil { + builder.internal.Options = &Options{} + } + legendResource, err := legend.Build() + if err != nil { + builder.errors["options.legend"] = err.(cog.BuildErrors) + return builder + } + builder.internal.Options.(*Options).Legend = legendResource + + return builder +} + func (builder *PanelBuilder) ReduceOptions(reduceOptions cog.Builder[common.ReduceDataOptions]) *PanelBuilder { if builder.internal.Options == nil { builder.internal.Options = &Options{} diff --git a/go/bargauge/types_gen.go b/go/bargauge/types_gen.go index cb37a70..4dfcd63 100644 --- a/go/bargauge/types_gen.go +++ b/go/bargauge/types_gen.go @@ -17,6 +17,7 @@ type Options struct { Sizing common.BarGaugeSizing `json:"sizing"` MinVizWidth uint32 `json:"minVizWidth"` MinVizHeight uint32 `json:"minVizHeight"` + Legend common.VizLegendOptions `json:"legend"` ReduceOptions common.ReduceDataOptions `json:"reduceOptions"` Text *common.VizTextDisplayOptions `json:"text,omitempty"` MaxVizHeight uint32 `json:"maxVizHeight"` diff --git a/go/common/types_gen.go b/go/common/types_gen.go index c089dee..f5d6c0c 100644 --- a/go/common/types_gen.go +++ b/go/common/types_gen.go @@ -622,9 +622,10 @@ const ( type BarGaugeNamePlacement string const ( - BarGaugeNamePlacementAuto BarGaugeNamePlacement = "auto" - BarGaugeNamePlacementTop BarGaugeNamePlacement = "top" - BarGaugeNamePlacementLeft BarGaugeNamePlacement = "left" + BarGaugeNamePlacementAuto BarGaugeNamePlacement = "auto" + BarGaugeNamePlacementTop BarGaugeNamePlacement = "top" + BarGaugeNamePlacementLeft BarGaugeNamePlacement = "left" + BarGaugeNamePlacementHidden BarGaugeNamePlacement = "hidden" ) // Allows for the bar gauge size to be set explicitly diff --git a/go/dashboard/dashboard_builder_gen.go b/go/dashboard/dashboard_builder_gen.go index b8a326e..d6e8a59 100644 --- a/go/dashboard/dashboard_builder_gen.go +++ b/go/dashboard/dashboard_builder_gen.go @@ -27,6 +27,9 @@ func NewDashboardBuilder(title string) *DashboardBuilder { builder.applyDefaults() builder.internal.Title = &title + builder.internal.SchemaVersion = 39 + valEditable := true + builder.internal.Editable = &valEditable return builder } diff --git a/go/dashboard/types_gen.go b/go/dashboard/types_gen.go index a95bc16..6bb90ae 100644 --- a/go/dashboard/types_gen.go +++ b/go/dashboard/types_gen.go @@ -291,6 +291,7 @@ const ( VariableTypeTextbox VariableType = "textbox" VariableTypeCustom VariableType = "custom" VariableTypeSystem VariableType = "system" + VariableTypeSnapshot VariableType = "snapshot" ) // Color mode for a field. You can specify a single color, or select a continuous (gradient) color schemes, based on a value. diff --git a/go/expr/types_gen.go b/go/expr/types_gen.go index f154a57..3d0826d 100644 --- a/go/expr/types_gen.go +++ b/go/expr/types_gen.go @@ -676,8 +676,9 @@ const ( type TypeClassicConditionsType string const ( - TypeClassicConditionsTypeAnd TypeClassicConditionsType = "and" - TypeClassicConditionsTypeOr TypeClassicConditionsType = "or" + TypeClassicConditionsTypeAnd TypeClassicConditionsType = "and" + TypeClassicConditionsTypeOr TypeClassicConditionsType = "or" + TypeClassicConditionsTypeLogicOr TypeClassicConditionsType = "logic-or" ) type TypeThresholdType string diff --git a/go/logs/panel_builder_gen.go b/go/logs/panel_builder_gen.go index b3880c7..2fcdccc 100644 --- a/go/logs/panel_builder_gen.go +++ b/go/logs/panel_builder_gen.go @@ -542,6 +542,33 @@ func (builder *PanelBuilder) OnClickFilterOutString(onClickFilterOutString any) return builder } +func (builder *PanelBuilder) OnClickShowField(onClickShowField any) *PanelBuilder { + if builder.internal.Options == nil { + builder.internal.Options = &Options{} + } + builder.internal.Options.(*Options).OnClickShowField = &onClickShowField + + return builder +} + +func (builder *PanelBuilder) OnClickHideField(onClickHideField any) *PanelBuilder { + if builder.internal.Options == nil { + builder.internal.Options = &Options{} + } + builder.internal.Options.(*Options).OnClickHideField = &onClickHideField + + return builder +} + +func (builder *PanelBuilder) DisplayedFields(displayedFields []string) *PanelBuilder { + if builder.internal.Options == nil { + builder.internal.Options = &Options{} + } + builder.internal.Options.(*Options).DisplayedFields = displayedFields + + return builder +} + func (builder *PanelBuilder) applyDefaults() { builder.Transparent(false) builder.Height(9) diff --git a/go/logs/types_gen.go b/go/logs/types_gen.go index b79fc6a..baa6855 100644 --- a/go/logs/types_gen.go +++ b/go/logs/types_gen.go @@ -20,11 +20,14 @@ type Options struct { SortOrder common.LogsSortOrder `json:"sortOrder"` DedupStrategy common.LogsDedupStrategy `json:"dedupStrategy"` // TODO: figure out how to define callbacks - OnClickFilterLabel any `json:"onClickFilterLabel,omitempty"` - OnClickFilterOutLabel any `json:"onClickFilterOutLabel,omitempty"` - IsFilterLabelActive any `json:"isFilterLabelActive,omitempty"` - OnClickFilterString any `json:"onClickFilterString,omitempty"` - OnClickFilterOutString any `json:"onClickFilterOutString,omitempty"` + OnClickFilterLabel any `json:"onClickFilterLabel,omitempty"` + OnClickFilterOutLabel any `json:"onClickFilterOutLabel,omitempty"` + IsFilterLabelActive any `json:"isFilterLabelActive,omitempty"` + OnClickFilterString any `json:"onClickFilterString,omitempty"` + OnClickFilterOutString any `json:"onClickFilterOutString,omitempty"` + OnClickShowField any `json:"onClickShowField,omitempty"` + OnClickHideField any `json:"onClickHideField,omitempty"` + DisplayedFields []string `json:"displayedFields,omitempty"` } func VariantConfig() variants.PanelcfgConfig { diff --git a/go/statetimeline/panel_builder_gen.go b/go/statetimeline/panel_builder_gen.go index fb9edc2..ef438e2 100644 --- a/go/statetimeline/panel_builder_gen.go +++ b/go/statetimeline/panel_builder_gen.go @@ -449,6 +449,16 @@ func (builder *PanelBuilder) MergeValues(mergeValues bool) *PanelBuilder { return builder } +// Controls value alignment on the timelines +func (builder *PanelBuilder) AlignValue(alignValue common.TimelineValueAlignment) *PanelBuilder { + if builder.internal.Options == nil { + builder.internal.Options = &Options{} + } + builder.internal.Options.(*Options).AlignValue = &alignValue + + return builder +} + func (builder *PanelBuilder) Legend(legend cog.Builder[common.VizLegendOptions]) *PanelBuilder { if builder.internal.Options == nil { builder.internal.Options = &Options{} @@ -486,12 +496,16 @@ func (builder *PanelBuilder) Timezone(timezone []common.TimeZone) *PanelBuilder return builder } -// Controls value alignment on the timelines -func (builder *PanelBuilder) AlignValue(alignValue common.TimelineValueAlignment) *PanelBuilder { +// Enables pagination when > 0 +func (builder *PanelBuilder) PerPage(perPage float64) *PanelBuilder { + if !(perPage >= 1) { + builder.errors["perPage"] = cog.MakeBuildErrors("perPage", errors.New("perPage must be >= 1")) + return builder + } if builder.internal.Options == nil { builder.internal.Options = &Options{} } - builder.internal.Options.(*Options).AlignValue = &alignValue + builder.internal.Options.(*Options).PerPage = &perPage return builder } @@ -553,6 +567,7 @@ func (builder *PanelBuilder) applyDefaults() { builder.RowHeight(0.9) builder.MergeValues(true) builder.AlignValue("left") + builder.PerPage(20) builder.LineWidth(0) builder.FillOpacity(70) } diff --git a/go/statetimeline/types_gen.go b/go/statetimeline/types_gen.go index 305599d..14095c4 100644 --- a/go/statetimeline/types_gen.go +++ b/go/statetimeline/types_gen.go @@ -15,12 +15,14 @@ type Options struct { // Controls the row height RowHeight float64 `json:"rowHeight"` // Merge equal consecutive values - MergeValues *bool `json:"mergeValues,omitempty"` - Legend common.VizLegendOptions `json:"legend"` - Tooltip common.VizTooltipOptions `json:"tooltip"` - Timezone []common.TimeZone `json:"timezone,omitempty"` + MergeValues *bool `json:"mergeValues,omitempty"` // Controls value alignment on the timelines AlignValue *common.TimelineValueAlignment `json:"alignValue,omitempty"` + Legend common.VizLegendOptions `json:"legend"` + Tooltip common.VizTooltipOptions `json:"tooltip"` + Timezone []common.TimeZone `json:"timezone,omitempty"` + // Enables pagination when > 0 + PerPage *float64 `json:"perPage,omitempty"` } type FieldConfig struct { diff --git a/java/gradle.properties b/java/gradle.properties index 26ea477..9b00e2a 100644 --- a/java/gradle.properties +++ b/java/gradle.properties @@ -1 +1 @@ -grafanaFoundationSDKVersion=next-1722522306 +grafanaFoundationSDKVersion=next-1725546604 diff --git a/java/src/main/java/com/grafana/foundation/accesspolicy/AccessPolicy.java b/java/src/main/java/com/grafana/foundation/accesspolicy/AccessPolicy.java index c387171..408e4d6 100644 --- a/java/src/main/java/com/grafana/foundation/accesspolicy/AccessPolicy.java +++ b/java/src/main/java/com/grafana/foundation/accesspolicy/AccessPolicy.java @@ -2,22 +2,22 @@ package com.grafana.foundation.accesspolicy; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import java.util.List; import java.util.LinkedList; public class AccessPolicy { - // The scope where these policies should apply + // The scope where these policies should apply @JsonProperty("scope") public ResourceRef scope; - // The role that must apply this policy + // The role that must apply this policy @JsonProperty("role") public RoleRef role; // The set of rules to apply. Note that * is required to modify - // access policy rules, and that "none" will reject all actions + // access policy rules, and that "none" will reject all actions @JsonProperty("rules") public List rules; diff --git a/java/src/main/java/com/grafana/foundation/accesspolicy/AccessRule.java b/java/src/main/java/com/grafana/foundation/accesspolicy/AccessRule.java index 2c0189b..ddbca8c 100644 --- a/java/src/main/java/com/grafana/foundation/accesspolicy/AccessRule.java +++ b/java/src/main/java/com/grafana/foundation/accesspolicy/AccessRule.java @@ -6,16 +6,18 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; public class AccessRule { - // The kind this rule applies to (dashboards, alert, etc) + // The kind this rule applies to (dashboards, alert, etc) @JsonProperty("kind") public String kind; // READ, WRITE, CREATE, DELETE, ... - // should move to k8s style verbs like: "get", "list", "watch", "create", "update", "patch", "delete" + // should move to k8s style verbs like: "get", "list", "watch", "create", "update", "patch", "delete" @JsonProperty("verb") public String verb; - // Specific sub-elements like "alert.rules" or "dashboard.permissions"???? + // Specific sub-elements like "alert.rules" or "dashboard.permissions"???? + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("target") public String target; diff --git a/java/src/main/java/com/grafana/foundation/accesspolicy/ResourceRef.java b/java/src/main/java/com/grafana/foundation/accesspolicy/ResourceRef.java index 1cbe771..858f3ac 100644 --- a/java/src/main/java/com/grafana/foundation/accesspolicy/ResourceRef.java +++ b/java/src/main/java/com/grafana/foundation/accesspolicy/ResourceRef.java @@ -7,9 +7,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; -public class ResourceRef { +public class ResourceRef { @JsonProperty("kind") - public String kind; + public String kind; @JsonProperty("name") public String name; diff --git a/java/src/main/java/com/grafana/foundation/accesspolicy/RoleRef.java b/java/src/main/java/com/grafana/foundation/accesspolicy/RoleRef.java index 70bc2cf..d501bce 100644 --- a/java/src/main/java/com/grafana/foundation/accesspolicy/RoleRef.java +++ b/java/src/main/java/com/grafana/foundation/accesspolicy/RoleRef.java @@ -9,11 +9,11 @@ import com.fasterxml.jackson.databind.ObjectWriter; public class RoleRef { // Policies can apply to roles, teams, or users - // Applying policies to individual users is supported, but discouraged + // Applying policies to individual users is supported, but discouraged @JsonProperty("kind") - public RoleRefKind kind; + public RoleRefKind kind; @JsonProperty("name") - public String name; + public String name; @JsonProperty("xname") public String xname; diff --git a/java/src/main/java/com/grafana/foundation/alerting/ContactPoint.java b/java/src/main/java/com/grafana/foundation/alerting/ContactPoint.java index 2a98635..d1f2851 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/ContactPoint.java +++ b/java/src/main/java/com/grafana/foundation/alerting/ContactPoint.java @@ -6,32 +6,37 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; // EmbeddedContactPoint is the contact point type that is used // by grafanas embedded alertmanager implementation. public class ContactPoint { // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("disableResolveMessage") public Boolean disableResolveMessage; // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("name") public String name; // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("provenance") public String provenance; // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. @JsonProperty("settings") public Object settings; // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. @JsonProperty("type") public ContactPointType type; // EmbeddedContactPoint is the contact point type that is used - // by grafanas embedded alertmanager implementation. + // by grafanas embedded alertmanager implementation. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("uid") public String uid; diff --git a/java/src/main/java/com/grafana/foundation/alerting/Matcher.java b/java/src/main/java/com/grafana/foundation/alerting/Matcher.java index 3f25a2d..f66bdd4 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/Matcher.java +++ b/java/src/main/java/com/grafana/foundation/alerting/Matcher.java @@ -6,12 +6,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class Matcher { +public class Matcher { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("Name") - public String name; + public String name; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("Type") - public MatchType type; + public MatchType type; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("Value") public String value; diff --git a/java/src/main/java/com/grafana/foundation/alerting/MuteTiming.java b/java/src/main/java/com/grafana/foundation/alerting/MuteTiming.java index 7467f3a..765311d 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/MuteTiming.java +++ b/java/src/main/java/com/grafana/foundation/alerting/MuteTiming.java @@ -2,15 +2,18 @@ package com.grafana.foundation.alerting; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; -public class MuteTiming { +public class MuteTiming { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("name") - public String name; + public String name; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("time_intervals") public List timeIntervals; diff --git a/java/src/main/java/com/grafana/foundation/alerting/NotificationPolicy.java b/java/src/main/java/com/grafana/foundation/alerting/NotificationPolicy.java index 2680962..a2fd571 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/NotificationPolicy.java +++ b/java/src/main/java/com/grafana/foundation/alerting/NotificationPolicy.java @@ -2,66 +2,85 @@ package com.grafana.foundation.alerting; -import java.util.List; -import java.util.Map; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; +import java.util.Map; // A Route is a node that contains definitions of how to handle alerts. This is modified // from the upstream alertmanager in that it adds the ObjectMatchers property. public class NotificationPolicy { // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonProperty("active_time_intervals") + public List activeTimeIntervals; + // A Route is a node that contains definitions of how to handle alerts. This is modified + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("continue") public Boolean continueArg; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_by") public List groupBy; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_interval") public String groupInterval; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_wait") public String groupWait; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("match") public Map match; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("match_re") public Map matchRe; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("matchers") public List matchers; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("mute_time_intervals") public List muteTimeIntervals; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("object_matchers") public List> objectMatchers; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("provenance") public String provenance; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("receiver") public String receiver; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("repeat_interval") public String repeatInterval; // A Route is a node that contains definitions of how to handle alerts. This is modified - // from the upstream alertmanager in that it adds the ObjectMatchers property. + // from the upstream alertmanager in that it adds the ObjectMatchers property. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("routes") public List routes; @@ -77,6 +96,11 @@ public class NotificationPolicy { public Builder() { this.internal = new NotificationPolicy(); } + public Builder activeTimeIntervals(List activeTimeIntervals) { + this.internal.activeTimeIntervals = activeTimeIntervals; + return this; + } + public Builder continueArg(Boolean continueArg) { this.internal.continueArg = continueArg; return this; diff --git a/java/src/main/java/com/grafana/foundation/alerting/NotificationSettings.java b/java/src/main/java/com/grafana/foundation/alerting/NotificationSettings.java index 3df4c5a..2f34de0 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/NotificationSettings.java +++ b/java/src/main/java/com/grafana/foundation/alerting/NotificationSettings.java @@ -2,23 +2,29 @@ package com.grafana.foundation.alerting; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; -public class NotificationSettings { +public class NotificationSettings { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_by") - public List groupBy; + public List groupBy; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_interval") - public String groupInterval; + public String groupInterval; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("group_wait") - public String groupWait; + public String groupWait; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("mute_time_intervals") - public List muteTimeIntervals; + public List muteTimeIntervals; @JsonProperty("receiver") - public String receiver; + public String receiver; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("repeat_interval") public String repeatInterval; diff --git a/java/src/main/java/com/grafana/foundation/alerting/NotificationTemplate.java b/java/src/main/java/com/grafana/foundation/alerting/NotificationTemplate.java index 508f3a1..d4f3fb2 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/NotificationTemplate.java +++ b/java/src/main/java/com/grafana/foundation/alerting/NotificationTemplate.java @@ -6,14 +6,21 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class NotificationTemplate { +public class NotificationTemplate { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("name") - public String name; + public String name; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("provenance") - public String provenance; + public String provenance; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("template") public String template; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) + @JsonProperty("version") + public String version; public String toJSON() throws JsonProcessingException { ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); @@ -41,6 +48,11 @@ public class NotificationTemplate { this.internal.template = template; return this; } + + public Builder version(String version) { + this.internal.version = version; + return this; + } public NotificationTemplate build() { return this.internal; } diff --git a/java/src/main/java/com/grafana/foundation/alerting/Query.java b/java/src/main/java/com/grafana/foundation/alerting/Query.java index 2a642a3..a52388f 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/Query.java +++ b/java/src/main/java/com/grafana/foundation/alerting/Query.java @@ -2,23 +2,29 @@ package com.grafana.foundation.alerting; -import com.grafana.foundation.cog.variants.Dataquery; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.grafana.foundation.cog.variants.Dataquery; @JsonDeserialize(using = QueryDeserializer.class) -public class Query { +public class Query { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("datasourceUid") - public String datasourceUid; + public String datasourceUid; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("model") - public Dataquery model; + public Dataquery model; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("queryType") - public String queryType; + public String queryType; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("refId") - public String refId; + public String refId; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("relativeTimeRange") public RelativeTimeRange relativeTimeRange; diff --git a/java/src/main/java/com/grafana/foundation/alerting/RecordRule.java b/java/src/main/java/com/grafana/foundation/alerting/RecordRule.java index d688b1d..dac3da3 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/RecordRule.java +++ b/java/src/main/java/com/grafana/foundation/alerting/RecordRule.java @@ -7,9 +7,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; -public class RecordRule { +public class RecordRule { @JsonProperty("from") - public String from; + public String from; @JsonProperty("metric") public String metric; diff --git a/java/src/main/java/com/grafana/foundation/alerting/RelativeTimeRange.java b/java/src/main/java/com/grafana/foundation/alerting/RelativeTimeRange.java index e76e358..c47c11f 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/RelativeTimeRange.java +++ b/java/src/main/java/com/grafana/foundation/alerting/RelativeTimeRange.java @@ -6,16 +6,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; // RelativeTimeRange is the per query start and end time // for requests. public class RelativeTimeRange { // RelativeTimeRange is the per query start and end time - // for requests. + // for requests. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("from") public Long from; // RelativeTimeRange is the per query start and end time - // for requests. + // for requests. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("to") public Long to; diff --git a/java/src/main/java/com/grafana/foundation/alerting/Rule.java b/java/src/main/java/com/grafana/foundation/alerting/Rule.java index 5465fbb..983f35c 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/Rule.java +++ b/java/src/main/java/com/grafana/foundation/alerting/Rule.java @@ -2,51 +2,61 @@ package com.grafana.foundation.alerting; -import java.util.Map; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.Map; +import java.util.List; import java.util.LinkedList; -public class Rule { +public class Rule { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("annotations") - public Map annotations; + public Map annotations; @JsonProperty("condition") - public String condition; + public String condition; @JsonProperty("data") - public List data; + public List data; @JsonProperty("execErrState") - public RuleExecErrState execErrState; + public RuleExecErrState execErrState; @JsonProperty("folderUID") public String folderUID; // The amount of time, in seconds, for which the rule must be breached for the rule to be considered to be Firing. - // Before this time has elapsed, the rule is only considered to be Pending. + // Before this time has elapsed, the rule is only considered to be Pending. @JsonProperty("for") - public String forArg; + public String forArg; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("id") - public Long id; + public Long id; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("isPaused") - public Boolean isPaused; + public Boolean isPaused; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("labels") - public Map labels; + public Map labels; @JsonProperty("noDataState") - public RuleNoDataState noDataState; + public RuleNoDataState noDataState; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("notification_settings") - public NotificationSettings notificationSettings; + public NotificationSettings notificationSettings; @JsonProperty("orgID") - public Long orgID; + public Long orgID; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("provenance") - public String provenance; + public String provenance; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("record") - public RecordRule record; + public RecordRule record; @JsonProperty("ruleGroup") - public String ruleGroup; + public String ruleGroup; @JsonProperty("title") - public String title; + public String title; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("uid") - public String uid; + public String uid; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("updated") public String updated; diff --git a/java/src/main/java/com/grafana/foundation/alerting/RuleGroup.java b/java/src/main/java/com/grafana/foundation/alerting/RuleGroup.java index 6c389b2..acc4753 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/RuleGroup.java +++ b/java/src/main/java/com/grafana/foundation/alerting/RuleGroup.java @@ -2,22 +2,27 @@ package com.grafana.foundation.alerting; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; import java.util.LinkedList; -public class RuleGroup { +public class RuleGroup { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("folderUid") public String folderUid; // The interval, in seconds, at which all rules in the group are evaluated. - // If a group contains many rules, the rules are evaluated sequentially. + // If a group contains many rules, the rules are evaluated sequentially. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("interval") - public Long interval; + public Long interval; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("rules") - public List rules; + public List rules; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("title") public String title; diff --git a/java/src/main/java/com/grafana/foundation/alerting/TimeInterval.java b/java/src/main/java/com/grafana/foundation/alerting/TimeInterval.java index c281bfe..a61ae35 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/TimeInterval.java +++ b/java/src/main/java/com/grafana/foundation/alerting/TimeInterval.java @@ -2,15 +2,18 @@ package com.grafana.foundation.alerting; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; -public class TimeInterval { +public class TimeInterval { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("name") - public String name; + public String name; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("time_intervals") public List timeIntervals; diff --git a/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalItem.java b/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalItem.java index b28811f..3481bc5 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalItem.java +++ b/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalItem.java @@ -2,23 +2,30 @@ package com.grafana.foundation.alerting; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; -public class TimeIntervalItem { +public class TimeIntervalItem { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("days_of_month") - public List daysOfMonth; + public List daysOfMonth; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("location") - public String location; + public String location; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("months") - public List months; + public List months; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("times") - public List times; + public List times; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("weekdays") - public List weekdays; + public List weekdays; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("years") public List years; diff --git a/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalTimeRange.java b/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalTimeRange.java index f0f43ea..50d0f77 100644 --- a/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalTimeRange.java +++ b/java/src/main/java/com/grafana/foundation/alerting/TimeIntervalTimeRange.java @@ -6,10 +6,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class TimeIntervalTimeRange { +public class TimeIntervalTimeRange { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("end_time") - public String endTime; + public String endTime; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("start_time") public String startTime; diff --git a/java/src/main/java/com/grafana/foundation/annotationslist/Options.java b/java/src/main/java/com/grafana/foundation/annotationslist/Options.java index 37b7ac6..bd8ce48 100644 --- a/java/src/main/java/com/grafana/foundation/annotationslist/Options.java +++ b/java/src/main/java/com/grafana/foundation/annotationslist/Options.java @@ -2,31 +2,31 @@ package com.grafana.foundation.annotationslist; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import java.util.List; -public class Options { +public class Options { @JsonProperty("onlyFromThisDashboard") - public Boolean onlyFromThisDashboard; + public Boolean onlyFromThisDashboard; @JsonProperty("onlyInTimeRange") - public Boolean onlyInTimeRange; + public Boolean onlyInTimeRange; @JsonProperty("tags") - public List tags; + public List tags; @JsonProperty("limit") - public Integer limit; + public Integer limit; @JsonProperty("showUser") - public Boolean showUser; + public Boolean showUser; @JsonProperty("showTime") - public Boolean showTime; + public Boolean showTime; @JsonProperty("showTags") - public Boolean showTags; + public Boolean showTags; @JsonProperty("navigateToPanel") - public Boolean navigateToPanel; + public Boolean navigateToPanel; @JsonProperty("navigateBefore") - public String navigateBefore; + public String navigateBefore; @JsonProperty("navigateAfter") public String navigateAfter; diff --git a/java/src/main/java/com/grafana/foundation/annotationslist/PanelBuilder.java b/java/src/main/java/com/grafana/foundation/annotationslist/PanelBuilder.java index 1e70724..5372e0a 100644 --- a/java/src/main/java/com/grafana/foundation/annotationslist/PanelBuilder.java +++ b/java/src/main/java/com/grafana/foundation/annotationslist/PanelBuilder.java @@ -2,11 +2,11 @@ package com.grafana.foundation.annotationslist; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import java.util.List; import com.grafana.foundation.dashboard.Panel; import com.grafana.foundation.cog.variants.Dataquery; import java.util.LinkedList; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsGroupByQuery.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsGroupByQuery.java index b621b23..46c45ca 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsGroupByQuery.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsGroupByQuery.java @@ -6,12 +6,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class AppInsightsGroupByQuery { +public class AppInsightsGroupByQuery { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("rawQuery") - public String rawQuery; + public String rawQuery; @JsonProperty("kind") - public String kind; + public String kind; @JsonProperty("metricName") public String metricName; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsMetricNameQuery.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsMetricNameQuery.java index 4aaa4bb..03e3aa8 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsMetricNameQuery.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AppInsightsMetricNameQuery.java @@ -6,10 +6,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; -public class AppInsightsMetricNameQuery { +public class AppInsightsMetricNameQuery { + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("rawQuery") - public String rawQuery; + public String rawQuery; @JsonProperty("kind") public String kind; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureLogsQuery.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureLogsQuery.java index 82ec33a..813eae0 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureLogsQuery.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureLogsQuery.java @@ -2,39 +2,49 @@ package com.grafana.foundation.azuremonitor; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; // Azure Monitor Logs sub-query properties public class AzureLogsQuery { - // KQL query to be executed. + // KQL query to be executed. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("query") public String query; - // Specifies the format results should be returned as. + // Specifies the format results should be returned as. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resultFormat") public ResultFormat resultFormat; - // Array of resource URIs to be queried. + // Array of resource URIs to be queried. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resources") public List resources; - // If set to true the dashboard time range will be used as a filter for the query. Otherwise the query time ranges will be used. Defaults to false. + // If set to true the dashboard time range will be used as a filter for the query. Otherwise the query time ranges will be used. Defaults to false. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("dashboardTime") public Boolean dashboardTime; - // If dashboardTime is set to true this value dictates which column the time filter will be applied to. Defaults to the first tables timeSpan column, the first datetime column found, or TimeGenerated + // If dashboardTime is set to true this value dictates which column the time filter will be applied to. Defaults to the first tables timeSpan column, the first datetime column found, or TimeGenerated + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("timeColumn") public String timeColumn; - // If set to true the query will be run as a basic logs query + // If set to true the query will be run as a basic logs query + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("basicLogsQuery") public Boolean basicLogsQuery; - // Workspace ID. This was removed in Grafana 8, but remains for backwards compat. + // Workspace ID. This was removed in Grafana 8, but remains for backwards compat. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("workspace") public String workspace; - // @deprecated Use resources instead + // @deprecated Use resources instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resource") public String resource; - // @deprecated Use dashboardTime instead + // @deprecated Use dashboardTime instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("intersectTime") public Boolean intersectTime; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricDimension.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricDimension.java index 7edac11..f187f36 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricDimension.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricDimension.java @@ -2,23 +2,28 @@ package com.grafana.foundation.azuremonitor; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; public class AzureMetricDimension { - // Name of Dimension to be filtered on. + // Name of Dimension to be filtered on. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("dimension") public String dimension; - // String denoting the filter operation. Supports 'eq' - equals,'ne' - not equals, 'sw' - starts with. Note that some dimensions may not support all operators. + // String denoting the filter operation. Supports 'eq' - equals,'ne' - not equals, 'sw' - starts with. Note that some dimensions may not support all operators. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("operator") public String operator; - // Values to match with the filter. + // Values to match with the filter. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("filters") public List filters; - // @deprecated filter is deprecated in favour of filters to support multiselect. + // @deprecated filter is deprecated in favour of filters to support multiselect. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("filter") public String filter; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricQuery.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricQuery.java index 68fcbb7..317ad8d 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricQuery.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMetricQuery.java @@ -2,67 +2,86 @@ package com.grafana.foundation.azuremonitor; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; public class AzureMetricQuery { - // Array of resource URIs to be queried. + // Array of resource URIs to be queried. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resources") public List resources; // 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. + // Kept the name of the variable as metricNamespace to avoid backward incompatibility issues. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("metricNamespace") public String metricNamespace; - // Used as the value for the metricNamespace property when it's different from the resource namespace. + // Used as the value for the metricNamespace property when it's different from the resource namespace. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("customNamespace") public String customNamespace; - // The metric to query data for within the specified metricNamespace. e.g. UsedCapacity + // The metric to query data for within the specified metricNamespace. e.g. UsedCapacity + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("metricName") public String metricName; - // The Azure region containing the resource(s). + // The Azure region containing the resource(s). + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("region") public String region; - // The granularity of data points to be queried. Defaults to auto. + // The granularity of data points to be queried. Defaults to auto. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("timeGrain") public String timeGrain; - // The aggregation to be used within the query. Defaults to the primaryAggregationType defined by the metric. + // The aggregation to be used within the query. Defaults to the primaryAggregationType defined by the metric. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("aggregation") public String aggregation; - // Filters to reduce the set of data returned. Dimensions that can be filtered on are defined by the metric. + // Filters to reduce the set of data returned. Dimensions that can be filtered on are defined by the metric. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("dimensionFilters") public List dimensionFilters; - // Maximum number of records to return. Defaults to 10. + // Maximum number of records to return. Defaults to 10. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("top") public String top; - // Time grains that are supported by the metric. + // Time grains that are supported by the metric. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("allowedTimeGrainsMs") public List allowedTimeGrainsMs; - // Aliases can be set to modify the legend labels. e.g. {{ resourceGroup }}. See docs for more detail. + // Aliases can be set to modify the legend labels. e.g. {{ resourceGroup }}. See docs for more detail. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("alias") public String alias; - // @deprecated + // @deprecated + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("timeGrainUnit") public String timeGrainUnit; - // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("dimension") public String dimension; - // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + // @deprecated This property was migrated to dimensionFilters and should only be accessed in the migration + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("dimensionFilter") public String dimensionFilter; - // @deprecated Use metricNamespace instead + // @deprecated Use metricNamespace instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("metricDefinition") public String metricDefinition; - // @deprecated Use resourceGroup, resourceName and metricNamespace instead + // @deprecated Use resourceGroup, resourceName and metricNamespace instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resourceUri") public String resourceUri; - // @deprecated Use resources instead + // @deprecated Use resources instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resourceGroup") public String resourceGroup; - // @deprecated Use resources instead + // @deprecated Use resources instead + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resourceName") public String resourceName; diff --git a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMonitorQuery.java b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMonitorQuery.java index 0699b49..f161d5a 100644 --- a/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMonitorQuery.java +++ b/java/src/main/java/com/grafana/foundation/azuremonitor/AzureMonitorQuery.java @@ -2,62 +2,78 @@ package com.grafana.foundation.azuremonitor; -import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; public class AzureMonitorQuery implements com.grafana.foundation.cog.variants.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. + // By default, the UI will assign A->Z; however setting meaningful names may be useful. @JsonProperty("refId") public String refId; - // If hide is set to true, Grafana will filter out the response(s) associated with this query before returning it to the panel. + // If hide is set to true, Grafana will filter out the response(s) associated with this query before returning it to the panel. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("hide") public Boolean hide; // Specify the query flavor - // TODO make this required and give it a default + // TODO make this required and give it a default + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("queryType") public String queryType; - // Azure subscription containing the resource(s) to be queried. + // Azure subscription containing the resource(s) to be queried. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("subscription") public String subscription; - // Subscriptions to be queried via Azure Resource Graph. + // Subscriptions to be queried via Azure Resource Graph. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("subscriptions") public List subscriptions; - // Azure Monitor Metrics sub-query properties. + // Azure Monitor Metrics sub-query properties. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("azureMonitor") public AzureMetricQuery azureMonitor; - // Azure Monitor Logs sub-query properties. + // Azure Monitor Logs sub-query properties. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("azureLogAnalytics") public AzureLogsQuery azureLogAnalytics; - // Azure Resource Graph sub-query properties. + // Azure Resource Graph sub-query properties. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("azureResourceGraph") public AzureResourceGraphQuery azureResourceGraph; - // Application Insights Traces sub-query properties. + // Application Insights Traces sub-query properties. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("azureTraces") public AzureTracesQuery azureTraces; - // @deprecated Legacy template variable support. + // @deprecated Legacy template variable support. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("grafanaTemplateVariableFn") public GrafanaTemplateVariableQuery grafanaTemplateVariableFn; - // Template variables params. These exist for backwards compatiblity with legacy template variables. + // Template variables params. These exist for backwards compatiblity with legacy template variables. + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resourceGroup") - public String resourceGroup; + public String resourceGroup; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("namespace") - public String namespace; + public String namespace; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("resource") - public String resource; + public String resource; + @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @JsonProperty("region") public String region; // For mix...*[Comment body truncated]*