package harness import ( "github.com/urfave/cli" "os" ) var ( defaultOpts = []cli.Flag{ cli.IntFlag{ Name: "port", Usage: "The port number used to expose metrics via http", Value: 7979, }, cli.StringFlag{ Name: "log-level", Usage: "Set Logging level", Value: "info", }, } defaultTickOpt = cli.IntFlag{ Name: "interval", Usage: "Interval to fetch metrics from the endpoint in second", Value: 60, } ) func MakeApp(opts *ExporterOpts) *cli.App { exp := &exporter{opts} app := cli.NewApp() app.Name = opts.Name app.Version = opts.Version app.Usage = "A prometheus " + opts.Name app.UsageText = opts.Usage app.Action = exp.main app.Flags = buildOptsWithDefault(opts.Flags, defaultOpts) if opts.Tick && !contains(app.Flags, defaultTickOpt) { app.Flags = append(app.Flags, defaultTickOpt) } return app } func buildOptsWithDefault(opts []cli.Flag, defaultOpts []cli.Flag) []cli.Flag { for _, opt := range defaultOpts { if !contains(opts, opt) { opts = append(opts, opt) } } return opts } func contains(opts []cli.Flag, opt cli.Flag) bool { for _, o := range opts { if o.GetName() == opt.GetName() { return true } } return false } func Main(opts *ExporterOpts) { err := MakeApp(opts).Run(os.Args) if err != nil { os.Exit(1) } }