learning_go/rbd_exporter/main.go
Alexander Pivkin 95f257a4d0 sdf
2026-01-23 14:36:31 +03:00

99 lines
2.2 KiB
Go

package main
import (
"errors"
"flag"
"fmt"
"net/http"
"rbd_exporter/connection"
"rbd_exporter/logger"
"rbd_exporter/metrics"
"rbd_exporter/mytypes"
"time"
"github.com/prometheus/client_golang/prometheus/promhttp"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// Here I initialize logger
func loggerInit() *zap.SugaredLogger {
config := zap.NewDevelopmentConfig()
config.EncoderConfig.TimeKey = "timestamp"
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
logger, err := config.Build()
if err != nil {
panic(fmt.Sprintf("Logger set up failed: %v", err))
}
return logger.Sugar()
}
func globalInit() (mainlogger *zap.SugaredLogger,params mytypes.Params){
configFile := flag.String("config", "/etc/ceph/ceph.conf", "placement of ceph config file")
_keyring := flag.String("keyring", "/etc/ceph/ceph.client.admin.keyring", "placement of ceph keyring file")
flag.Parse()
params.Config = *configFile
params.Keyring = *_keyring
mainlogger = loggerInit()
logger.SetLogger(mainlogger)
mainlogger.Info("Setting up logger is complete successfully")
mainlogger.Info("Registering prom metrics")
return mainlogger,params
}
func main() {
mainlogger,params := globalInit()
defer func() {
err := logger.Logger.Sync()
if err != nil {
logger.Logger.Error("couldn't sync logger")
}
}()
cephConn, err := connection.Connect(params)
if err != nil {
logger.Logger.Error(err)
if wrapped := errors.Unwrap(err); wrapped != nil {
logger.Logger.Error(wrapped)
}
panic(err)
}
defer cephConn.Conn.Shutdown()
mainlogger.Info("Successfully connected to a cluster")
http.Handle("/metrics", promhttp.Handler())
server := http.Server{
Addr: ":9040",
ReadTimeout: 10 * time.Second,
Handler: http.DefaultServeMux,
}
// HTTP runs in separate thread cuz it blocks further execution of main
go func() {
fmt.Fprint()
mainlogger.Info("Starting http server")
// Here I check for errors if HTTP fails
if err := server.ListenAndServe(); err != nil {
mainlogger.Fatalf("HTTP server failed to start %v", err)
}
mainlogger.Info("HTTP server started")
}()
// if err := server.Shutdown(); err != nil {
// logger.Logger.Errorf("https server shutdown failed",err)
// }
go metrics.GetMetrics(cephConn)
select {}
}