in frontend/pkg/frontend/frontend.go [62:106]
func NewFrontend(
logger *slog.Logger,
listener net.Listener,
metricsListener net.Listener,
reg prometheus.Registerer,
dbClient database.DBClient,
location string,
csClient ocm.ClusterServiceClientSpec,
) *Frontend {
f := &Frontend{
clusterServiceClient: csClient,
listener: listener,
metricsListener: metricsListener,
server: http.Server{
ErrorLog: slog.NewLogLogger(logger.Handler(), slog.LevelError),
BaseContext: func(net.Listener) context.Context {
ctx := context.Background()
ctx = ContextWithLogger(ctx, logger)
ctx = ContextWithDBClient(ctx, dbClient)
return ctx
},
},
metricsServer: http.Server{
ErrorLog: slog.NewLogLogger(logger.Handler(), slog.LevelError),
BaseContext: func(net.Listener) context.Context {
return ContextWithLogger(context.Background(), logger)
},
},
dbClient: dbClient,
done: make(chan struct{}),
location: strings.ToLower(location),
collector: metrics.NewSubscriptionCollector(reg, dbClient, location),
healthGauge: promauto.With(reg).NewGauge(
prometheus.GaugeOpts{
Name: healthGaugeName,
Help: "Reports the health status of the service (0: not healthy, 1: healthy).",
},
),
}
f.server.Handler = f.routes(reg)
f.metricsServer.Handler = f.metricsRoutes()
return f
}