mirror of
https://github.com/project-zot/zot.git
synced 2026-06-17 12:58:02 +08:00
Implement an API for performance monitoring
Signed-off-by: Alexei Dodon <adodon@cisco.com>
This commit is contained in:
committed by
Ramkumar Chinchani
parent
061dfb333b
commit
8e4d828867
@@ -0,0 +1,76 @@
|
||||
// +build minimal
|
||||
|
||||
package cli
|
||||
|
||||
import (
|
||||
"github.com/anuvu/zot/errors"
|
||||
"github.com/anuvu/zot/pkg/exporter/api"
|
||||
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/rs/zerolog/log"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
// metadataConfig reports metadata after parsing, which we use to track
|
||||
// errors.
|
||||
func metadataConfig(md *mapstructure.Metadata) viper.DecoderConfigOption {
|
||||
return func(c *mapstructure.DecoderConfig) {
|
||||
c.Metadata = md
|
||||
}
|
||||
}
|
||||
|
||||
func NewExporterCmd() *cobra.Command {
|
||||
config := api.DefaultConfig()
|
||||
|
||||
// "config"
|
||||
configCmd := &cobra.Command{
|
||||
Use: "config <config_file>",
|
||||
Aliases: []string{"config"},
|
||||
Short: "`config` node exporter properties",
|
||||
Long: "`config` node exporter properties",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) > 0 {
|
||||
loadConfiguration(config, args[0])
|
||||
}
|
||||
|
||||
c := api.NewController(config)
|
||||
c.Run()
|
||||
},
|
||||
}
|
||||
|
||||
// "node_exporter"
|
||||
exporterCmd := &cobra.Command{
|
||||
Use: "zot_exporter",
|
||||
Short: "`zot_exporter`",
|
||||
Long: "`zot_exporter`",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
_ = cmd.Usage()
|
||||
cmd.SilenceErrors = false
|
||||
},
|
||||
}
|
||||
|
||||
exporterCmd.AddCommand(configCmd)
|
||||
|
||||
return exporterCmd
|
||||
}
|
||||
|
||||
func loadConfiguration(config *api.Config, configPath string) {
|
||||
viper.SetConfigFile(configPath)
|
||||
|
||||
if err := viper.ReadInConfig(); err != nil {
|
||||
log.Error().Err(err).Msg("Error while reading configuration")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
md := &mapstructure.Metadata{}
|
||||
if err := viper.Unmarshal(&config, metadataConfig(md)); err != nil {
|
||||
log.Error().Err(err).Msg("Error while unmarshalling new config")
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if len(md.Keys) == 0 || len(md.Unused) > 0 {
|
||||
log.Error().Err(errors.ErrBadConfig).Msg("Bad configuration, retry writing it")
|
||||
panic(errors.ErrBadConfig)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user