package main

import (
	"flag"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/log"
	"github.com/tidbcloud/metrics-server/central/config"
	"github.com/tidbcloud/metrics-server/central/dbinit"
	"github.com/tidbcloud/metrics-server/internal/rest"
	ginprometheus "github.com/zsais/go-gin-prometheus"
	"go.uber.org/zap"
)

var (
	defaultConfigPath = "/etc/metrics/config.yaml"
	configPath        = flag.String("config-path", defaultConfigPath, "metrics configuration file path")
)

func main() {
	flag.Parse()

	if err := config.InitConfig(*configPath); err != nil {
		log.Fatal("Initialize configuration failed", zap.Error(err))
	}

	mysqlConfig := config.Global().MysqlConfig
	log.Info("Initialize global database connection", zap.String("user", mysqlConfig.User))
	if _, err := dbinit.InitializeV2(mysqlConfig, true); err != nil {
		log.Fatal("Initialize db failed", zap.Error(err))
	}

	r := gin.Default()

	// prometheus
	p := ginprometheus.NewPrometheus("gin")
	p.Use(r)

	r.GET("/ping", rest.PingHandler)    // for health check in k8s
	r.GET("/healthz", rest.PingHandler) // for health check in k8s

	// Listen and serve on 0.0.0.0:8080 by default.
	log.Fatal("failed to start metrics server", zap.Error(r.Run("0.0.0.0:11000")))
}
