blob: 71502bff60e4b0d9d6fc224a844a45a4f7c23ccc [file] [log] [blame]
package cmd
import (
"context"
"database/sql"
"fmt"
"log"
"github.com/jbub/pgbouncer_exporter/internal/collector"
"github.com/jbub/pgbouncer_exporter/internal/config"
"github.com/jbub/pgbouncer_exporter/internal/server"
"github.com/jbub/pgbouncer_exporter/internal/sqlstore"
"github.com/prometheus/common/version"
"github.com/urfave/cli/v2"
)
// Server is a cli command used for running exporter http server.
var Server = &cli.Command{
Name: "server",
Usage: "Starts exporter server.",
Action: runServer,
}
func runServer(ctx *cli.Context) error {
cfg := config.LoadFromCLI(ctx)
db, err := sql.Open("postgres", cfg.DatabaseURL)
if err != nil {
return fmt.Errorf("could not open db: %v", err)
}
defer db.Close()
store := sqlstore.New(db)
checkCtx, cancel := context.WithTimeout(context.Background(), cfg.StoreTimeout)
defer cancel()
if err := store.Check(checkCtx); err != nil {
return fmt.Errorf("could not check store: %v", err)
}
exp := collector.New(cfg, store)
srv := server.New(cfg, exp)
log.Println("Starting ", collector.Name, version.Info())
log.Println("Server listening on", cfg.ListenAddress)
log.Println("Metrics available at", cfg.TelemetryPath)
log.Println("Build context", version.BuildContext())
if err := srv.Run(); err != nil {
return fmt.Errorf("could not run server: %v", err)
}
return nil
}