cloud/bmaas/bmdb: implement BMDB client metrics

This implements some basic BMDB metrics exported by any client code
using the BMDB.

It also enables their use in the Shepherd and BMSRV.

Change-Id: I1d5e82fd2c34a7bfd42f37fad540d69f7b23f347
Reviewed-on: https://review.monogon.dev/c/monogon/+/1600
Tested-by: Jenkins CI
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
diff --git a/cloud/bmaas/server/server.go b/cloud/bmaas/server/server.go
index 8867e4f..00972de 100644
--- a/cloud/bmaas/server/server.go
+++ b/cloud/bmaas/server/server.go
@@ -13,6 +13,7 @@
 	"k8s.io/klog/v2"
 
 	"source.monogon.dev/cloud/bmaas/bmdb"
+	"source.monogon.dev/cloud/bmaas/bmdb/metrics"
 	"source.monogon.dev/cloud/bmaas/bmdb/webug"
 	apb "source.monogon.dev/cloud/bmaas/server/api"
 	"source.monogon.dev/cloud/lib/component"
@@ -73,7 +74,7 @@
 			bo := backoff.NewExponentialBackOff()
 			err := backoff.Retry(func() error {
 				var err error
-				session, err = s.bmdb.StartSession(ctx)
+				session, err = s.bmdb.StartSession(ctx, bmdb.SessionOption{Processor: metrics.ProcessorBMSRV})
 				if err != nil {
 					klog.Errorf("Failed to start session: %v", err)
 					return err
@@ -145,6 +146,8 @@
 // Start the BMaaS Server in background goroutines. This should only be called
 // once. The process will exit with debug logs if starting the server failed.
 func (s *Server) Start(ctx context.Context) {
+	reg := s.Config.Component.PrometheusRegistry()
+	s.Config.BMDB.EnableMetrics(reg)
 	s.Config.Component.StartPrometheus(ctx)
 
 	conn, err := s.Config.BMDB.Open(true)