Provisioning: Wire up prometheus (#111444)

This commit is contained in:
Stephanie Hingtgen
2025-09-22 09:54:50 -05:00
committed by GitHub
parent 04bc71fa6d
commit bd550d2f06
23 changed files with 169 additions and 105 deletions
@@ -7,6 +7,7 @@ import (
provisioning "github.com/grafana/grafana/apps/provisioning/pkg/apis/provisioning/v0alpha1"
"github.com/grafana/grafana/apps/provisioning/pkg/repository"
"github.com/prometheus/client_golang/prometheus"
)
// StatusPatcher defines the interface for updating repository status
@@ -19,12 +20,14 @@ type StatusPatcher interface {
// HealthChecker provides unified health checking for repositories
type HealthChecker struct {
statusPatcher StatusPatcher
registry prometheus.Registerer
}
// NewHealthChecker creates a new health checker
func NewHealthChecker(statusPatcher StatusPatcher) *HealthChecker {
func NewHealthChecker(statusPatcher StatusPatcher, registry prometheus.Registerer) *HealthChecker {
return &HealthChecker{
statusPatcher: statusPatcher,
registry: registry,
}
}
@@ -6,6 +6,7 @@ import (
"testing"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -18,7 +19,7 @@ import (
func TestNewHealthChecker(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
assert.NotNil(t, hc)
assert.Equal(t, mockPatcher, hc.statusPatcher)
@@ -135,7 +136,7 @@ func TestShouldCheckHealth(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
result := hc.ShouldCheckHealth(tt.repo)
assert.Equal(t, tt.expected, result)
@@ -222,7 +223,7 @@ func TestHasRecentFailure(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
result := hc.HasRecentFailure(tt.healthStatus, tt.failureType)
assert.Equal(t, tt.expected, result)
@@ -264,7 +265,7 @@ func TestRecordFailure(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
repo := &provisioning.Repository{
Status: provisioning.RepositoryStatus{
@@ -309,7 +310,7 @@ func TestRecordFailure(t *testing.T) {
func TestRecordFailureFunction(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
testErr := errors.New("test error")
result := hc.recordFailure(provisioning.HealthFailureHook, testErr)
@@ -446,7 +447,7 @@ func TestRefreshHealth(t *testing.T) {
testError: tt.testError,
}
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
if tt.expectPatch {
if tt.patchError != nil {
@@ -556,7 +557,7 @@ func TestHasHealthStatusChanged(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
mockPatcher := mocks.NewStatusPatcher(t)
hc := NewHealthChecker(mockPatcher)
hc := NewHealthChecker(mockPatcher, prometheus.DefaultRegisterer)
result := hc.hasHealthStatusChanged(tt.old, tt.new)
assert.Equal(t, tt.expected, result)
@@ -25,6 +25,7 @@ import (
"github.com/grafana/grafana/pkg/registry/apis/provisioning/jobs"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/resources"
"github.com/grafana/grafana/pkg/storage/legacysql/dualwrite"
"github.com/prometheus/client_golang/prometheus"
)
const loggerName = "provisioning-repository-controller"
@@ -59,6 +60,8 @@ type RepositoryController struct {
keyFunc func(obj any) (string, error)
queue workqueue.TypedRateLimitingInterface[*queueItem]
registry prometheus.Registerer
}
// NewRepositoryController creates new RepositoryController.
@@ -72,6 +75,7 @@ func NewRepositoryController(
dualwrite dualwrite.Service,
healthChecker *HealthChecker,
statusPatcher StatusPatcher,
registry prometheus.Registerer,
) (*RepositoryController, error) {
rc := &RepositoryController{
client: provisioningClient,
@@ -93,6 +97,7 @@ func NewRepositoryController(
jobs: jobs,
logger: logging.DefaultLogger.With("logger", loggerName),
dualwrite: dualwrite,
registry: registry,
}
_, err := repoInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{