Добавлены метрики Prometheus и дашборды Grafana (этап 2.5)
Все три Go-сервиса (ingest, device-control, rule-engine) отдают /metrics в формате Prometheus: счётчики MQTT/RabbitMQ/ClickHouse операций, гистограммы длительности батч-флашей и диспатча правил, переходы устройств online/offline. Добавлены сервисы prometheus и grafana в docker-compose с провижининг конфигом (datasource + два готовых дашборда: "Ingest & Telemetry" и "Automation & Devices").
This commit is contained in:
@@ -8,7 +8,10 @@ import (
|
||||
"log/slog"
|
||||
"testing"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus/testutil"
|
||||
|
||||
devicecontrol "git.cactoz.su/cacto/home_automatization/proto/device_control"
|
||||
"git.cactoz.su/cacto/home_automatization/services/device-control-service/internal/metrics"
|
||||
)
|
||||
|
||||
type fakeShadow struct {
|
||||
@@ -122,3 +125,27 @@ func TestDispatch_PublishFailure(t *testing.T) {
|
||||
t.Fatal("expected failure when mqtt publish errors")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDispatch_RecordsMetrics(t *testing.T) {
|
||||
successCounter := metrics.CommandsTotal.WithLabelValues("turn_on", "success")
|
||||
errorCounter := metrics.CommandsTotal.WithLabelValues("turn_on", "error")
|
||||
before := testutil.ToFloat64(successCounter)
|
||||
|
||||
s := New(&fakeShadow{}, &fakeMQTT{}, discardLogger())
|
||||
if _, err := s.TurnOn(context.Background(), &devicecontrol.TurnOnRequest{DeviceId: "d1"}); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if got := testutil.ToFloat64(successCounter); got != before+1 {
|
||||
t.Fatalf("got turn_on/success counter %v, want %v", got, before+1)
|
||||
}
|
||||
|
||||
beforeErr := testutil.ToFloat64(errorCounter)
|
||||
s2 := New(&fakeShadow{err: errors.New("redis down")}, &fakeMQTT{}, discardLogger())
|
||||
if _, err := s2.TurnOn(context.Background(), &devicecontrol.TurnOnRequest{DeviceId: "d1"}); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if got := testutil.ToFloat64(errorCounter); got != beforeErr+1 {
|
||||
t.Fatalf("got turn_on/error counter %v, want %v", got, beforeErr+1)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user