From e51e0f58e5dec167380eea789d15a137bb405608 Mon Sep 17 00:00:00 2001 From: Chris Marslender Date: Sat, 30 Apr 2022 15:20:05 -0500 Subject: [PATCH 1/5] Add logrus + ability to set log-level with flags/env/config --- cmd/root.go | 3 +++ cmd/serve.go | 13 +++++++++---- go.mod | 1 + go.sum | 2 ++ internal/metrics/crawler.go | 9 +++++---- internal/metrics/fullnode.go | 13 +++++++------ internal/metrics/metrics.go | 14 +++++++++----- internal/metrics/timelord.go | 7 ++++--- internal/metrics/wallet.go | 9 +++++---- internal/utils/error.go | 4 ++-- 10 files changed, 47 insertions(+), 28 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 499334e..94707f3 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -30,6 +30,7 @@ func init() { var ( metricsPort int maxmindDBPath string + logLevel string ) cobra.OnInitialize(initConfig) @@ -37,9 +38,11 @@ func init() { rootCmd.PersistentFlags().IntVar(&metricsPort, "metrics-port", 9914, "The port the metrics server binds to") rootCmd.PersistentFlags().StringVar(&maxmindDBPath, "maxmind-db-path", "", "Path to the maxmind database file") + rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "How verbose the logs should be. panic, fatal, error, warn, info, debug, trace") viper.BindPFlag("metrics-port", rootCmd.PersistentFlags().Lookup("metrics-port")) viper.BindPFlag("maxmind-db-path", rootCmd.PersistentFlags().Lookup("maxmind-db-path")) + viper.BindPFlag("log-level", rootCmd.PersistentFlags().Lookup("log-level")) } // initConfig reads in config file and ENV variables if set. diff --git a/cmd/serve.go b/cmd/serve.go index 52d295d..26d91bc 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -1,9 +1,10 @@ package cmd import ( - "log" "time" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" "github.com/spf13/viper" @@ -15,7 +16,11 @@ var serveCmd = &cobra.Command{ Use: "serve", Short: "Starts the metrics server", Run: func(cmd *cobra.Command, args []string) { - m, err := metrics.NewMetrics(uint16(viper.GetInt("metrics-port"))) + level, err := log.ParseLevel(viper.GetString("log-level")) + if err != nil { + log.Fatalf("Error parsing log level: %s\n", err.Error()) + } + m, err := metrics.NewMetrics(uint16(viper.GetInt("metrics-port")), level) if err != nil { log.Fatalln(err.Error()) } @@ -29,7 +34,7 @@ var serveCmd = &cobra.Command{ log.Println("App is stopping. Cleaning up...") err := m.CloseWebsocket() if err != nil { - log.Printf("Error closing websocket connection: %s\n", err.Error()) + log.Errorf("Error closing websocket connection: %s\n", err.Error()) } }(m) @@ -48,7 +53,7 @@ func startWebsocket(m *metrics.Metrics) { for { err := m.OpenWebsocket() if err != nil { - log.Println(err.Error()) + log.Errorln(err.Error()) time.Sleep(5 * time.Second) continue } diff --git a/go.mod b/go.mod index 604d61a..0dd37fd 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/chia-network/go-chia-libs v0.0.3 github.com/oschwald/maxminddb-golang v1.8.0 github.com/prometheus/client_golang v1.12.0 + github.com/sirupsen/logrus v1.8.1 github.com/spf13/cobra v1.3.0 github.com/spf13/viper v1.10.1 ) diff --git a/go.sum b/go.sum index 5d3f118..ab2aeed 100644 --- a/go.sum +++ b/go.sum @@ -348,6 +348,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= diff --git a/internal/metrics/crawler.go b/internal/metrics/crawler.go index 97a9573..51e13b3 100644 --- a/internal/metrics/crawler.go +++ b/internal/metrics/crawler.go @@ -3,10 +3,11 @@ package metrics import ( "encoding/json" "fmt" - "log" "net" "time" + log "github.com/sirupsen/logrus" + "github.com/chia-network/go-chia-libs/pkg/rpc" "github.com/chia-network/go-chia-libs/pkg/types" "github.com/prometheus/client_golang/prometheus" @@ -49,7 +50,7 @@ func (s *CrawlerServiceMetrics) InitMetrics() { err := s.initMaxmindDB() if err != nil { // Continue on maxmind error - optional/not critical functionality - log.Printf("Error initializing maxmind DB: %s\n", err.Error()) + log.Errorf("Error initializing maxmind DB: %s\n", err.Error()) } } @@ -99,7 +100,7 @@ func (s *CrawlerServiceMetrics) GetPeerCounts(resp *types.WebsocketResponse) { counts := &rpc.GetPeerCountsResponse{} err := json.Unmarshal(resp.Data, counts) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -137,7 +138,7 @@ func (s *CrawlerServiceMetrics) StartIPCountryMapping(limit uint) { Limit: limit, }) if err != nil { - log.Printf("Error getting IPs: %s\n", err.Error()) + log.Errorf("Error getting IPs: %s\n", err.Error()) return } diff --git a/internal/metrics/fullnode.go b/internal/metrics/fullnode.go index f728913..e129308 100644 --- a/internal/metrics/fullnode.go +++ b/internal/metrics/fullnode.go @@ -3,7 +3,8 @@ package metrics import ( "encoding/json" "fmt" - "log" + + log "github.com/sirupsen/logrus" "github.com/chia-network/go-chia-libs/pkg/rpc" "github.com/chia-network/go-chia-libs/pkg/types" @@ -144,7 +145,7 @@ func (s *FullNodeServiceMetrics) GetBlockchainState(resp *types.WebsocketRespons state := &types.WebsocketBlockchainState{} err := json.Unmarshal(resp.Data, state) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -185,7 +186,7 @@ func (s *FullNodeServiceMetrics) GetConnections(resp *types.WebsocketResponse) { connections := &rpc.GetConnectionsResponse{} err := json.Unmarshal(resp.Data, connections) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -228,7 +229,7 @@ func (s *FullNodeServiceMetrics) Block(resp *types.WebsocketResponse) { block := &types.BlockEvent{} err := json.Unmarshal(resp.Data, block) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -246,7 +247,7 @@ func (s *FullNodeServiceMetrics) GetBlockCountMetrics(resp *types.WebsocketRespo blockMetrics := &rpc.GetBlockCountMetricsResponse{} err := json.Unmarshal(resp.Data, blockMetrics) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -262,7 +263,7 @@ func (s *FullNodeServiceMetrics) SignagePoint(resp *types.WebsocketResponse) { signagePoint := &types.SignagePointEvent{} err := json.Unmarshal(resp.Data, signagePoint) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } diff --git a/internal/metrics/metrics.go b/internal/metrics/metrics.go index bf72379..983161c 100644 --- a/internal/metrics/metrics.go +++ b/internal/metrics/metrics.go @@ -2,9 +2,10 @@ package metrics import ( "fmt" - "log" "net/http" + log "github.com/sirupsen/logrus" + "github.com/chia-network/go-chia-libs/pkg/rpc" "github.com/chia-network/go-chia-libs/pkg/types" "github.com/prometheus/client_golang/prometheus" @@ -57,7 +58,7 @@ type Metrics struct { // NewMetrics returns a new instance of metrics // All metrics are registered here -func NewMetrics(port uint16) (*Metrics, error) { +func NewMetrics(port uint16, logLevel log.Level) (*Metrics, error) { var err error metrics := &Metrics{ @@ -66,6 +67,8 @@ func NewMetrics(port uint16) (*Metrics, error) { serviceMetrics: map[chiaService]serviceMetrics{}, } + log.SetLevel(logLevel) + metrics.client, err = rpc.NewClient(rpc.ConnectionModeWebsocket) if err != nil { return nil, err @@ -75,7 +78,7 @@ func NewMetrics(port uint16) (*Metrics, error) { if err != nil { // For now, http client is optional // Sometimes this fails with outdated config.yaml files that don't have the crawler/seeder section present - log.Printf("Error creating http client: %s\n", err.Error()) + log.Errorf("Error creating http client: %s\n", err.Error()) } // Register each service's metrics @@ -208,11 +211,12 @@ func (m *Metrics) StartServer() error { func (m *Metrics) websocketReceive(resp *types.WebsocketResponse, err error) { if err != nil { - log.Printf("Websocket received err: %s\n", err.Error()) + log.Errorf("Websocket received err: %s\n", err.Error()) return } log.Printf("recv: %s %s\n", resp.Origin, resp.Command) + log.Debugf("origin: %s command: %s destination: %s data: %s\n", resp.Origin, resp.Command, resp.Destination, string(resp.Data)) switch resp.Origin { case "chia_full_node": @@ -237,6 +241,6 @@ func healthcheckEndpoint(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) _, err := fmt.Fprintf(w, "Ok") if err != nil { - log.Printf("Error writing healthcheck response %s\n", err.Error()) + log.Errorf("Error writing healthcheck response %s\n", err.Error()) } } diff --git a/internal/metrics/timelord.go b/internal/metrics/timelord.go index 93b52e5..353ebb9 100644 --- a/internal/metrics/timelord.go +++ b/internal/metrics/timelord.go @@ -2,7 +2,8 @@ package metrics import ( "encoding/json" - "log" + + log "github.com/sirupsen/logrus" "github.com/chia-network/go-chia-libs/pkg/types" "github.com/prometheus/client_golang/prometheus" @@ -67,7 +68,7 @@ func (s *TimelordServiceMetrics) FinishedPoT(resp *types.WebsocketResponse) { potEvent := &types.FinishedPoTEvent{} err := json.Unmarshal(resp.Data, potEvent) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } s.estimatedIPS.Set(potEvent.EstimatedIPS) @@ -78,7 +79,7 @@ func (s *TimelordServiceMetrics) NewCompactProof(resp *types.WebsocketResponse) compactProof := &types.NewCompactProofEvent{} err := json.Unmarshal(resp.Data, compactProof) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } diff --git a/internal/metrics/wallet.go b/internal/metrics/wallet.go index 33c705d..febdd12 100644 --- a/internal/metrics/wallet.go +++ b/internal/metrics/wallet.go @@ -3,7 +3,8 @@ package metrics import ( "encoding/json" "fmt" - "log" + + log "github.com/sirupsen/logrus" "github.com/chia-network/go-chia-libs/pkg/rpc" "github.com/chia-network/go-chia-libs/pkg/types" @@ -81,7 +82,7 @@ func (s *WalletServiceMetrics) CoinAdded(resp *types.WebsocketResponse) { coinAdded := &types.CoinAddedEvent{} err := json.Unmarshal(resp.Data, coinAdded) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -100,7 +101,7 @@ func (s *WalletServiceMetrics) GetSyncStatus(resp *types.WebsocketResponse) { syncStatusResponse := &rpc.GetWalletSyncStatusResponse{} err := json.Unmarshal(resp.Data, syncStatusResponse) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } @@ -116,7 +117,7 @@ func (s *WalletServiceMetrics) GetWalletBalance(resp *types.WebsocketResponse) { walletBalance := &rpc.GetWalletBalanceResponse{} err := json.Unmarshal(resp.Data, walletBalance) if err != nil { - log.Printf("Error unmarshalling: %s\n", err.Error()) + log.Errorf("Error unmarshalling: %s\n", err.Error()) return } diff --git a/internal/utils/error.go b/internal/utils/error.go index b5a11c0..31aa54c 100644 --- a/internal/utils/error.go +++ b/internal/utils/error.go @@ -1,10 +1,10 @@ package utils -import "log" +import log "github.com/sirupsen/logrus" // LogErr logs an error if there's an error and the continues func LogErr(_, _ interface{}, err error) { if err != nil { - log.Printf("Error requesting connections: %s\n", err.Error()) + log.Errorf("%s\n", err.Error()) } } From f8814d44541eb1b13956bcaee0d682dced3602fb Mon Sep 17 00:00:00 2001 From: Chris Marslender Date: Sat, 30 Apr 2022 15:29:22 -0500 Subject: [PATCH 2/5] Add staticcheck to the makefile --- Makefile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a9210ff..f094211 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,9 @@ $(BIN)/%: | $(BIN) ; $(info $(M) building $(PACKAGE)…) GOLINT = $(BIN)/golint $(BIN)/golint: PACKAGE=golang.org/x/lint/golint +STATICCHECK = $(BIN)/staticcheck +$(BIN)/staticcheck: PACKAGE=honnef.co/go/tools/cmd/staticcheck + GOCOV = $(BIN)/gocov $(BIN)/gocov: PACKAGE=github.com/axw/gocov/... @@ -54,10 +57,10 @@ test-verbose: ARGS=-v ## Run tests in verbose mode with coverage repo test-race: ARGS=-race ## Run tests with race detector $(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%) $(TEST_TARGETS): test -check test tests: fmt lint vet; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests +check test tests: fmt lint vet staticcheck; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests $Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS) -test-xml: fmt lint vet | $(GO2XUNIT) ; $(info $(M) running xUnit tests…) @ ## Run tests with xUnit output +test-xml: fmt lint vet staticcheck | $(GO2XUNIT) ; $(info $(M) running xUnit tests…) @ ## Run tests with xUnit output $Q mkdir -p test $Q 2>&1 $(GO) test -timeout $(TIMEOUT)s -v $(TESTPKGS) | tee test/tests.output $(GO2XUNIT) -fail -input test/tests.output -output test/tests.xml @@ -69,7 +72,7 @@ COVERAGE_HTML = $(COVERAGE_DIR)/index.html .PHONY: test-coverage test-coverage-tools test-coverage-tools: | $(GOCOV) $(GOCOVXML) test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage -test-coverage: fmt lint vet test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests +test-coverage: fmt lint vet staticcheck test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests $Q mkdir -p $(COVERAGE_DIR) $Q $(GO) test \ -coverpkg=$$($(GO) list -f '{{ join .Deps "\n" }}' $(TESTPKGS) | \ @@ -92,6 +95,10 @@ fmt: ; $(info $(M) running gofmt…) @ ## Run gofmt on all source files vet: ; $(info $(M) running go vet…) @ ## Run go vet on all source files $Q $(GO) vet $(PKGS) +.PHONY: staticcheck +staticcheck: | $(STATICCHECK) ; $(info $(M) running staticcheck…) @ + $Q $(STATICCHECK) $(PKGS) + # Misc .PHONY: clean From 55e50aa87dcba83a5ab3f6de4afdb08650e352b4 Mon Sep 17 00:00:00 2001 From: Chris Marslender Date: Sat, 30 Apr 2022 15:30:58 -0500 Subject: [PATCH 3/5] Fix staticcheck complaints --- internal/metrics/crawler.go | 2 +- internal/metrics/fullnode.go | 4 ++-- internal/prometheus/lazycounter.go | 6 +++--- internal/prometheus/lazygauge.go | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/metrics/crawler.go b/internal/metrics/crawler.go index 51e13b3..e806260 100644 --- a/internal/metrics/crawler.go +++ b/internal/metrics/crawler.go @@ -170,7 +170,7 @@ func (s *CrawlerServiceMetrics) GetIPsAfterTimestamp(ips *rpc.GetIPsAfterTimesta } countryName := "" - countryName, _ = country.Country.Names["en"] + countryName = country.Country.Names["en"] if _, ok := countryCounts[country.Country.ISOCode]; !ok { countryCounts[country.Country.ISOCode] = &countStruct{ diff --git a/internal/metrics/fullnode.go b/internal/metrics/fullnode.go index e129308..86369ad 100644 --- a/internal/metrics/fullnode.go +++ b/internal/metrics/fullnode.go @@ -150,7 +150,7 @@ func (s *FullNodeServiceMetrics) GetBlockchainState(resp *types.WebsocketRespons } if state.BlockchainState.Sync != nil { - if state.BlockchainState.Sync.Synced == true { + if state.BlockchainState.Sync.Synced { s.nodeSynced.Set(1) } else { s.nodeSynced.Set(0) @@ -235,7 +235,7 @@ func (s *FullNodeServiceMetrics) Block(resp *types.WebsocketResponse) { s.kSize.WithLabelValues(fmt.Sprintf("%d", block.KSize)).Inc() - if block.TransactionBlock == true { + if block.TransactionBlock { s.blockCost.Set(float64(block.BlockCost)) s.blockFees.Set(float64(block.BlockFees)) } diff --git a/internal/prometheus/lazycounter.go b/internal/prometheus/lazycounter.go index f98fd97..3bb3076 100644 --- a/internal/prometheus/lazycounter.go +++ b/internal/prometheus/lazycounter.go @@ -16,7 +16,7 @@ type LazyCounter struct { // Inc wraps prometheus.Counter.Inc with a call to MustRegister func (l *LazyCounter) Inc() { - if l.registered != true { + if !l.registered { l.registered = true l.Registry.MustRegister(l.Counter) } @@ -26,7 +26,7 @@ func (l *LazyCounter) Inc() { // Add wraps prometheus.Counter.Add with a call to MustRegister func (l *LazyCounter) Add(val float64) { - if l.registered != true { + if !l.registered { l.registered = true l.Registry.MustRegister(l.Counter) } @@ -36,7 +36,7 @@ func (l *LazyCounter) Add(val float64) { // Unregister removes the metric from the Registry to stop reporting it until it is registered again func (l *LazyCounter) Unregister() { - if l.registered == true { + if l.registered { l.registered = false l.Registry.Unregister(l.Counter) } diff --git a/internal/prometheus/lazygauge.go b/internal/prometheus/lazygauge.go index eeb8675..daa9501 100644 --- a/internal/prometheus/lazygauge.go +++ b/internal/prometheus/lazygauge.go @@ -16,7 +16,7 @@ type LazyGauge struct { // Set wraps prometheus.Set with a call to MustRegister func (l *LazyGauge) Set(val float64) { - if l.registered != true { + if !l.registered { l.registered = true l.Registry.MustRegister(l.Gauge) } @@ -26,7 +26,7 @@ func (l *LazyGauge) Set(val float64) { // Unregister removes the metric from the Registry to stop reporting it until it is registered again func (l *LazyGauge) Unregister() { - if l.registered == true { + if l.registered { l.registered = false l.Registry.Unregister(l.Gauge) } From 815d102cb7eb3e6b2354bc78537bf42edd9bf5d5 Mon Sep 17 00:00:00 2001 From: Chris Marslender Date: Sat, 30 Apr 2022 15:33:46 -0500 Subject: [PATCH 4/5] Add errcheck to makefile --- Makefile | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index f094211..dee6141 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,9 @@ $(BIN)/golint: PACKAGE=golang.org/x/lint/golint STATICCHECK = $(BIN)/staticcheck $(BIN)/staticcheck: PACKAGE=honnef.co/go/tools/cmd/staticcheck +ERRCHECK = $(BIN)/errcheck +$(BIN)/errcheck: PACKAGE=github.com/kisielk/errcheck + GOCOV = $(BIN)/gocov $(BIN)/gocov: PACKAGE=github.com/axw/gocov/... @@ -57,10 +60,10 @@ test-verbose: ARGS=-v ## Run tests in verbose mode with coverage repo test-race: ARGS=-race ## Run tests with race detector $(TEST_TARGETS): NAME=$(MAKECMDGOALS:test-%=%) $(TEST_TARGETS): test -check test tests: fmt lint vet staticcheck; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests +check test tests: fmt lint vet staticcheck errcheck; $(info $(M) running $(NAME:%=% )tests…) @ ## Run tests $Q $(GO) test -timeout $(TIMEOUT)s $(ARGS) $(TESTPKGS) -test-xml: fmt lint vet staticcheck | $(GO2XUNIT) ; $(info $(M) running xUnit tests…) @ ## Run tests with xUnit output +test-xml: fmt lint vet staticcheck errcheck | $(GO2XUNIT) ; $(info $(M) running xUnit tests…) @ ## Run tests with xUnit output $Q mkdir -p test $Q 2>&1 $(GO) test -timeout $(TIMEOUT)s -v $(TESTPKGS) | tee test/tests.output $(GO2XUNIT) -fail -input test/tests.output -output test/tests.xml @@ -72,7 +75,7 @@ COVERAGE_HTML = $(COVERAGE_DIR)/index.html .PHONY: test-coverage test-coverage-tools test-coverage-tools: | $(GOCOV) $(GOCOVXML) test-coverage: COVERAGE_DIR := $(CURDIR)/test/coverage -test-coverage: fmt lint vet staticcheck test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests +test-coverage: fmt lint vet staticcheck errcheck test-coverage-tools ; $(info $(M) running coverage tests…) @ ## Run coverage tests $Q mkdir -p $(COVERAGE_DIR) $Q $(GO) test \ -coverpkg=$$($(GO) list -f '{{ join .Deps "\n" }}' $(TESTPKGS) | \ @@ -99,6 +102,10 @@ vet: ; $(info $(M) running go vet…) @ ## Run go vet on all source files staticcheck: | $(STATICCHECK) ; $(info $(M) running staticcheck…) @ $Q $(STATICCHECK) $(PKGS) +.PHONY: errcheck +errcheck: | $(ERRCHECK) ; $(info $(M) running errcheck…) @ + $Q $(ERRCHECK) $(PKGS) + # Misc .PHONY: clean From f494c271f8424a26c28db93ec0ffdab4afd92f88 Mon Sep 17 00:00:00 2001 From: Chris Marslender Date: Sat, 30 Apr 2022 15:34:43 -0500 Subject: [PATCH 5/5] Add missing error checks --- cmd/root.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 94707f3..5ef8ae8 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -5,6 +5,7 @@ import ( "os" "strings" + log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -40,9 +41,18 @@ func init() { rootCmd.PersistentFlags().StringVar(&maxmindDBPath, "maxmind-db-path", "", "Path to the maxmind database file") rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", "info", "How verbose the logs should be. panic, fatal, error, warn, info, debug, trace") - viper.BindPFlag("metrics-port", rootCmd.PersistentFlags().Lookup("metrics-port")) - viper.BindPFlag("maxmind-db-path", rootCmd.PersistentFlags().Lookup("maxmind-db-path")) - viper.BindPFlag("log-level", rootCmd.PersistentFlags().Lookup("log-level")) + err := viper.BindPFlag("metrics-port", rootCmd.PersistentFlags().Lookup("metrics-port")) + if err != nil { + log.Fatalln(err.Error()) + } + err = viper.BindPFlag("maxmind-db-path", rootCmd.PersistentFlags().Lookup("maxmind-db-path")) + if err != nil { + log.Fatalln(err.Error()) + } + err = viper.BindPFlag("log-level", rootCmd.PersistentFlags().Lookup("log-level")) + if err != nil { + log.Fatalln(err.Error()) + } } // initConfig reads in config file and ENV variables if set.