Skip to content

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"),
                ),
            )),
        ),
    )
}