Provisioning: Wire up prometheus (#111444)
This commit is contained in:
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user