Variable Group Builder

Variable group is a helper for adding variables to a dashboard. It will automatically filter the variables added to the group. The filter logic is applied by the variable plugin builder. Variables are filtered by their order in the group: first variable will filter the next ones. Ignored variables are filtered, but they don’t filter the next variables added to the group.

Constructor

import "github.com/perses/perses/go-sdk/variable-group"

var options []variablegroup.Option
variablegroup.New(options...)

Need a list of options.

Default options

  • None

Available options

AddVariable

import "github.com/perses/perses/go-sdk/variable-group"
import "github.com/perses/perses/go-sdk/variable"

var variableOptions []variable.Option
variablegroup.AddVariable("MySuperVariableName", variableOptions...)

Add a variable to the group, this variable will be filtered by variable already present in the group and will filter next variables added. More info at Variable.

AddIgnoredVariable

import "github.com/perses/perses/go-sdk/variable-group"
import "github.com/perses/perses/go-sdk/variable"

var variableOptions []variable.Option
variablegroup.AddIgnoredVariable("MySuperVariableName", variableOptions...)

Add a variable to the group, this variable will be filtered by variable already present in the group. However, this variable will not filter next variables added. More info at Variable.

Example

package main

import (
	"github.com/perses/perses/go-sdk/dashboard"
	labelnames "github.com/perses/perses/go-sdk/prometheus/variable/label-names"
	labelvalues "github.com/perses/perses/go-sdk/prometheus/variable/label-values"
	"github.com/perses/perses/go-sdk/prometheus/variable/promql"
	variablegroup "github.com/perses/perses/go-sdk/variable-group"
	listvariable "github.com/perses/perses/go-sdk/variable/list-variable"
	textvariable "github.com/perses/perses/go-sdk/variable/text-variable"
)

func main() {
	dashboard.New("ExampleDashboard",
		dashboard.AddVariableGroup(
			variablegroup.AddVariable("stack",
				listvariable.List(
					labelvalues.PrometheusLabelValues("stack",
						labelvalues.Matchers("thanos_build_info"),
						labelvalues.Datasource("promDemo"),
					),
					listvariable.DisplayName("PaaS"),
				),
			),
			variablegroup.AddVariable("prometheus",
				textvariable.Text("platform", textvariable.Constant(true)),
			),
			variablegroup.AddVariable("prometheus_namespace",
				textvariable.Text("observability",
					textvariable.Constant(true),
					textvariable.Description("constant to reduce the query scope thus improve performances"),
				),
			),
			variablegroup.AddVariable("namespace", listvariable.List(
				promql.PrometheusPromQL("group by (namespace) (kube_namespace_labels{stack=\"$stack\",prometheus=\"$prometheus\",prometheus_namespace=\"$prometheus_namespace\"})",
					promql.LabelName("namespace"), promql.Datasource("promDemo"),
				),
				listvariable.AllowMultiple(true),
			)),
			variablegroup.AddIgnoredVariable("namespaceLabels", listvariable.List(
				labelnames.PrometheusLabelNames(
					labelnames.Matchers("kube_namespace_labels"),
					labelnames.Datasource("promDemo"),
				),
			)),
			variablegroup.AddVariable("pod", listvariable.List(
				promql.PrometheusPromQL("group by (pod) (kube_pod_info{stack=\"$stack\",prometheus=\"$prometheus\",prometheus_namespace=\"$prometheus_namespace\",namespace=\"$namespace\"})",
					promql.LabelName("pod"), promql.Datasource("promDemo"),
				),
				listvariable.AllowMultiple(true),
				listvariable.AllowAllValue(true),
			)),
			variablegroup.AddVariable("container", listvariable.List(
				promql.PrometheusPromQL("group by (container) (kube_pod_container_info{stack=\"$stack\",prometheus=\"$prometheus\",prometheus_namespace=\"$prometheus_namespace\",namespace=\"$namespace\",pod=\"$pod\"})",
					promql.LabelName("container"), promql.Datasource("promDemo"),
				),
				listvariable.AllowMultiple(true),
				listvariable.AllowAllValue(true),
			)),
			variablegroup.AddIgnoredVariable("containerLabels", listvariable.List(
				listvariable.Description("simply the list of labels for the considered metric"),
				listvariable.Hidden(true),
				labelnames.PrometheusLabelNames(
					labelnames.Matchers("kube_pod_container_info"),
					labelnames.Datasource("promDemo"),
				),
			)),
		),
	)
}