Skip to content

Commit

Permalink
Merge pull request #32 from Chia-Network/logs
Browse files Browse the repository at this point in the history
Add logrus + ability to set log-level with flags/env/config
  • Loading branch information
cmmarslender authored May 2, 2022
2 parents 7eb7058 + f494c27 commit f4f2b79
Show file tree
Hide file tree
Showing 13 changed files with 84 additions and 41 deletions.
20 changes: 17 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ $(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

ERRCHECK = $(BIN)/errcheck
$(BIN)/errcheck: PACKAGE=github.com/kisielk/errcheck

GOCOV = $(BIN)/gocov
$(BIN)/gocov: PACKAGE=github.com/axw/gocov/...

Expand All @@ -54,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; $(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 | $(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
Expand All @@ -69,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 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) | \
Expand All @@ -92,6 +98,14 @@ 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)

.PHONY: errcheck
errcheck: | $(ERRCHECK) ; $(info $(M) running errcheck…) @
$Q $(ERRCHECK) $(PKGS)

# Misc

.PHONY: clean
Expand Down
17 changes: 15 additions & 2 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"os"
"strings"

log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
Expand All @@ -30,16 +31,28 @@ func init() {
var (
metricsPort int
maxmindDBPath string
logLevel string
)

cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.chia-exporter.yaml)")

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"))
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.
Expand Down
13 changes: 9 additions & 4 deletions cmd/serve.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cmd

import (
"log"
"time"

log "github.com/sirupsen/logrus"

"github.com/spf13/cobra"
"github.com/spf13/viper"

Expand All @@ -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())
}
Expand All @@ -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)

Expand All @@ -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
}
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down
11 changes: 6 additions & 5 deletions internal/metrics/crawler.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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())
}
}

Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -169,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{
Expand Down
17 changes: 9 additions & 8 deletions internal/metrics/fullnode.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -144,12 +145,12 @@ 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
}

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)
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -228,13 +229,13 @@ 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
}

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))
}
Expand All @@ -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
}

Expand All @@ -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
}

Expand Down
14 changes: 9 additions & 5 deletions internal/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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{
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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":
Expand All @@ -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())
}
}
7 changes: 4 additions & 3 deletions internal/metrics/timelord.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand All @@ -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
}

Expand Down
9 changes: 5 additions & 4 deletions internal/metrics/wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
}

Expand All @@ -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
}

Expand All @@ -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
}

Expand Down
Loading

0 comments on commit f4f2b79

Please sign in to comment.