internal/cloudapi: additional prometheus listener

Listening on another port, while keeping the existing endpoint until
transition is complete
This commit is contained in:
Diaa Sami 2023-05-10 12:06:49 +02:00 committed by Diaa Sami
parent a8f7ff487d
commit 8398f27742
7 changed files with 80 additions and 5 deletions

View file

@ -44,7 +44,7 @@ type Composer struct {
weldr *weldr.API
api *cloudapi.Server
weldrListener, localWorkerListener, workerListener, apiListener net.Listener
weldrListener, localWorkerListener, workerListener, apiListener, promListener net.Listener
}
func NewComposer(config *ComposerConfigFile, stateDir, cacheDir string) (*Composer, error) {
@ -130,6 +130,10 @@ func (c *Composer) InitWeldr(repoPaths []string, weldrListener net.Listener,
return nil
}
func (c *Composer) InitMetricsAPI(prometheus net.Listener) {
c.promListener = prometheus
}
func (c *Composer) InitAPI(cert, key string, enableTLS bool, enableMTLS bool, enableJWT bool, l net.Listener) error {
config := v2.ServerConfig{
JWTEnabled: c.config.Koji.EnableJWT,
@ -218,7 +222,7 @@ func (c *Composer) Start() error {
logrus.Fatal("neither the weldr API socket nor the composer API socket is enabled, osbuild-composer is useless without one of these APIs enabled")
}
var localWorkerAPI, remoteWorkerAPI, composerAPI *http.Server
var localWorkerAPI, remoteWorkerAPI, composerAPI, prometheusAPI *http.Server
if c.localWorkerListener != nil {
localWorkerAPI = &http.Server{
@ -313,6 +317,25 @@ func (c *Composer) Start() error {
}()
}
if c.promListener != nil {
// metrics listener on another port
metricsMux := http.NewServeMux()
metricsMux.Handle("/metrics", promhttp.Handler().(http.HandlerFunc))
prometheusAPI = &http.Server{
ErrorLog: c.logger,
Handler: metricsMux,
ReadHeaderTimeout: 5 * time.Second,
}
go func() {
err := prometheusAPI.Serve(c.promListener)
if err != nil && err != http.ErrServerClosed {
panic(err)
}
}()
}
if c.weldrListener != nil {
go func() {
err := c.weldr.Serve(c.weldrListener)
@ -341,6 +364,13 @@ func (c *Composer) Start() error {
}
}
if c.promListener != nil {
err := prometheusAPI.Shutdown(context.Background())
if err != nil {
panic(err)
}
}
if c.localWorkerListener != nil {
err := localWorkerAPI.Shutdown(context.Background())
if err != nil {

View file

@ -108,6 +108,14 @@ func main() {
composer.InitLocalWorker(l[0])
}
if l, exists := listeners["osbuild-composer-prometheus.socket"]; exists {
if len(l) != 1 {
logrus.Warn("The osbuild-composer-prometheus.socket unit is misconfigured. It should contain only one socket.")
}
composer.InitMetricsAPI(l[0])
}
if l, exists := listeners["osbuild-composer-api.socket"]; exists {
if len(l) != 1 {
logrus.Fatal("The osbuild-composer-api.socket unit is misconfigured. It should contain only one socket.")