feat: add prometheus metrics and dashboard
Integration Tests / integration-test (pull_request) Successful in 2m33s
Integration Tests / integration-test (pull_request) Successful in 2m33s
This commit is contained in:
+25
-1
@@ -4,9 +4,11 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"git.warky.dev/wdevs/pgsql-broker/pkg/broker/adapter"
|
||||
"git.warky.dev/wdevs/pgsql-broker/pkg/broker/config"
|
||||
"git.warky.dev/wdevs/pgsql-broker/pkg/broker/metrics"
|
||||
)
|
||||
|
||||
// Broker manages multiple database instances
|
||||
@@ -17,6 +19,8 @@ type Broker struct {
|
||||
instances []*DatabaseInstance
|
||||
ctx context.Context
|
||||
cancel context.CancelFunc
|
||||
metrics *metrics.Metrics
|
||||
server *metrics.Server
|
||||
shutdown bool
|
||||
mu sync.RWMutex
|
||||
}
|
||||
@@ -33,6 +37,16 @@ func New(cfg *config.Config, logger adapter.Logger, version string) (*Broker, er
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
}
|
||||
if cfg.Broker.MetricsEnabled {
|
||||
broker.metrics = metrics.New()
|
||||
broker.metrics.SetDatabaseCount(len(cfg.Databases))
|
||||
addr := fmt.Sprintf("%s:%d", cfg.Broker.MetricsHost, cfg.Broker.MetricsPort)
|
||||
server, err := metrics.NewServer(broker.metrics, addr, broker.logger)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
broker.server = server
|
||||
}
|
||||
|
||||
return broker, nil
|
||||
}
|
||||
@@ -50,7 +64,7 @@ func (b *Broker) Start() error {
|
||||
dbAdapter := adapter.NewPostgresAdapter(dbCfg.ToPostgresConfig(), b.logger)
|
||||
|
||||
// Create database instance
|
||||
instance, err := NewDatabaseInstance(b.config, dbCfg, dbAdapter, b.logger, b.version, b.ctx)
|
||||
instance, err := NewDatabaseInstance(b.config, dbCfg, dbAdapter, b.logger, b.version, b.ctx, b.metrics)
|
||||
if err != nil {
|
||||
// Stop any already-started instances
|
||||
b.stopInstances()
|
||||
@@ -69,6 +83,9 @@ func (b *Broker) Start() error {
|
||||
}
|
||||
|
||||
b.logger.Info("broker started successfully", "database_instances", len(b.instances))
|
||||
if b.server != nil {
|
||||
b.server.Start()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -89,6 +106,13 @@ func (b *Broker) Stop() error {
|
||||
|
||||
// Stop all instances
|
||||
b.stopInstances()
|
||||
if b.server != nil {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
if err := b.server.Stop(ctx); err != nil {
|
||||
b.logger.Error("failed to stop metrics server", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
b.logger.Info("broker stopped")
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user