Skip to content

Commit

Permalink
Add support for BarGauge panels
Browse files Browse the repository at this point in the history
* add support for bargauge
  • Loading branch information
makewhatis committed Jan 28, 2025
1 parent a8fa42c commit c573df9
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
3 changes: 3 additions & 0 deletions observability-lib/grafana/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ func (b *Builder) AddPanel(panel ...*Panel) {
} else if item.timeSeriesPanelBuilder != nil {
item.timeSeriesPanelBuilder.Id(panelID)
b.dashboardBuilder.WithPanel(item.timeSeriesPanelBuilder)
} else if item.barGaugePanelBuilder != nil {
item.barGaugePanelBuilder.Id(panelID)
b.dashboardBuilder.WithPanel(item.barGaugePanelBuilder)
} else if item.gaugePanelBuilder != nil {
item.gaugePanelBuilder.Id(panelID)
b.dashboardBuilder.WithPanel(item.gaugePanelBuilder)
Expand Down
65 changes: 65 additions & 0 deletions observability-lib/grafana/panels.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package grafana

import (
"github.com/grafana/grafana-foundation-sdk/go/alerting"
"github.com/grafana/grafana-foundation-sdk/go/bargauge"
"github.com/grafana/grafana-foundation-sdk/go/common"
"github.com/grafana/grafana-foundation-sdk/go/dashboard"
"github.com/grafana/grafana-foundation-sdk/go/gauge"
Expand Down Expand Up @@ -143,6 +144,7 @@ type Panel struct {
statPanelBuilder *stat.PanelBuilder
timeSeriesPanelBuilder *timeseries.PanelBuilder
gaugePanelBuilder *gauge.PanelBuilder
barGaugePanelBuilder *bargauge.PanelBuilder
tablePanelBuilder *table.PanelBuilder
logPanelBuilder *logs.PanelBuilder
heatmapBuilder *heatmap.PanelBuilder
Expand Down Expand Up @@ -374,6 +376,69 @@ func NewTimeSeriesPanel(options *TimeSeriesPanelOptions) *Panel {
}
}

type BarGaugePanelOptions struct {
*PanelOptions
ShowUnfilled bool
Orientation common.VizOrientation
}

func NewBarGaugePanel(options *BarGaugePanelOptions) *Panel {
setDefaults(options.PanelOptions)

newPanel := bargauge.NewPanelBuilder().
Datasource(datasourceRef(options.Datasource)).
Title(*options.Title).
Description(options.Description).
Transparent(options.Transparent).
Span(options.Span).
Height(options.Height).
Unit(options.Unit).
ReduceOptions(
common.NewReduceDataOptionsBuilder().
Calcs([]string{"lastNotNull"}).Values(false),
)

if options.ShowUnfilled {
newPanel.ShowUnfilled(options.ShowUnfilled)
}

if options.Decimals != nil {
newPanel.Decimals(*options.Decimals)
}

if options.MaxDataPoints != nil {
newPanel.MaxDataPoints(*options.MaxDataPoints)
}

if options.Min != nil {
newPanel.Min(*options.Min)
}

if options.Max != nil {
newPanel.Max(*options.Max)
}

for _, q := range options.Query {
newPanel.WithTarget(newQuery(q))
}

if options.Threshold != nil {
newPanel.Thresholds(newThresholds(options.Threshold))
}

if options.Transform != nil {
newPanel.WithTransformation(newTransform(options.Transform))
}

if options.Orientation != "" {
newPanel.Orientation(options.Orientation)
}

return &Panel{
barGaugePanelBuilder: newPanel,
}
}

type GaugePanelOptions struct {
*PanelOptions
}
Expand Down

0 comments on commit c573df9

Please sign in to comment.