diff --git a/go.mod b/go.mod index 3743b63..55ae5a6 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,13 @@ require ( github.com/go-co-op/gocron/v2 v2.2.4 github.com/prometheus/client_golang v1.18.0 github.com/sirupsen/logrus v1.9.3 + github.com/urfave/cli/v2 v2.27.1 ) require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/google/uuid v1.6.0 // indirect github.com/jonboulle/clockwork v0.4.0 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect @@ -18,6 +20,8 @@ require ( github.com/prometheus/common v0.45.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 // indirect golang.org/x/sys v0.15.0 // indirect google.golang.org/protobuf v1.31.0 // indirect diff --git a/go.sum b/go.sum index e9ca786..b4de815 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -29,12 +31,18 @@ github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= +github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 h1:+iq7lrkxmFNBM7xx+Rae2W6uyPfhPeDWD+n+JgppptE= diff --git a/main.go b/main.go index dcc94c3..3d0eef6 100644 --- a/main.go +++ b/main.go @@ -2,13 +2,16 @@ package main import ( "encoding/json" + "fmt" "io" "net/http" + "os" "sync" "github.com/go-co-op/gocron/v2" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" + "github.com/urfave/cli/v2" log "github.com/sirupsen/logrus" ) @@ -142,8 +145,12 @@ func ingestHandler(registry *prometheus.Registry, state *State) http.HandlerFunc } } -func main() { - log.SetLevel(log.DebugLevel) +func run(ctx *cli.Context) error { + host := ctx.String("host") + port := ctx.String("port") + if ctx.Bool("debug") { + log.SetLevel(log.DebugLevel) + } // Setup metrics registry := prometheus.NewRegistry() @@ -154,8 +161,8 @@ func main() { // Setup the scheduler scheduler, err := gocron.NewScheduler() if err != nil { - log.Fatalf("Failed to create scheduler: %v", err) - return + log.Error("Failed to create scheduler") + return err } _, err = scheduler.NewJob( gocron.DailyJob(1, gocron.NewAtTimes(gocron.NewAtTime(0, 0, 0))), @@ -185,8 +192,8 @@ func main() { ), ) if err != nil { - log.Fatalf("Failed to create task: %v", err) - return + log.Fatalf("Failed to create task") + return err } scheduler.Start() @@ -202,7 +209,36 @@ func main() { http.Handle( "/track", ingestHandler(registry, &state), ) - addr := "127.0.0.1:9999" + addr := fmt.Sprintf("%s:%s", host, port) log.Infof("Starting server at %s", addr) - http.ListenAndServe(addr, nil) + return http.ListenAndServe(addr, nil) +} + +func main() { + app := &cli.App{ + Action: run, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "host", + Usage: "Host to expose metrics on", + Value: "127.0.0.1", + EnvVars: []string{"HTTP_HOST"}, + }, + &cli.StringFlag{ + Name: "port", + Usage: "Port to expose metrics on", + Value: "9999", + EnvVars: []string{"HTTP_PORT"}, + }, + &cli.BoolFlag{ + Name: "debug", + Usage: "Enable verbose logging", + Value: false, + EnvVars: []string{"DEBUG"}, + }, + }, + } + if err := app.Run(os.Args); err != nil { + log.Fatal(err) + } }