Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metrics module #1850

Merged
merged 14 commits into from
Jul 3, 2020
13 changes: 3 additions & 10 deletions cmd/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,34 +223,27 @@ func initializeMetrics(
config.Metrics.Port,
)

var observationTick time.Duration
if tick := config.Metrics.Tick; tick != 0 {
observationTick = time.Duration(tick) * time.Second
} else {
observationTick = 60 * time.Second
}

metrics.ObserveConnectedPeersCount(
ctx,
registry,
netProvider,
observationTick,
time.Duration(config.Metrics.NetworkMetricsTick)*time.Second,
)

metrics.ObserveConnectedBootstrapPercentage(
ctx,
registry,
netProvider,
config.LibP2P.Peers,
observationTick,
time.Duration(config.Metrics.NetworkMetricsTick)*time.Second,
)

metrics.ObserveEthConnectivity(
ctx,
registry,
stakeMonitor,
config.Ethereum.Account.Address,
observationTick,
time.Duration(config.Metrics.EthereumMetricsTick)*time.Second,
)

metrics.ExposeLibP2PInfo(
Expand Down
5 changes: 3 additions & 2 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ type Storage struct {

// Metrics stores meta-info about metrics.
type Metrics struct {
Port int
Tick int
Port int
NetworkMetricsTick int
EthereumMetricsTick int
}

var (
Expand Down
3 changes: 2 additions & 1 deletion configs/config.toml.SAMPLE
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@

# [Metrics]
# Port = 8080
# Tick = 60
# NetworkMetricsTick = 60
# EthereumMetricsTick = 600
25 changes: 22 additions & 3 deletions pkg/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package metrics

import (
"context"
"fmt"
"time"

"github.com/ipfs/go-log"
Expand All @@ -12,6 +13,15 @@ import (

var logger = log.Logger("keep-metrics")

const (
// DefaultNetworkMetricsTick is the default duration of the
// observation tick for network metrics.
DefaultNetworkMetricsTick = 1 * time.Minute
// DefaultEthereumMetricsTick is the default duration of the
// observation tick for Ethereum metrics.
DefaultEthereumMetricsTick = 10 * time.Minute
)

// Initialize set up the metrics registry and enables metrics server.
func Initialize(
port int,
Expand Down Expand Up @@ -45,7 +55,7 @@ func ObserveConnectedPeersCount(
"connected_peers_count",
input,
registry,
tick,
validateTick(tick, DefaultNetworkMetricsTick),
)
}

Expand Down Expand Up @@ -79,7 +89,7 @@ func ObserveConnectedBootstrapPercentage(
"connected_bootstrap_percentage",
input,
registry,
tick,
validateTick(tick, DefaultNetworkMetricsTick),
)
}

Expand Down Expand Up @@ -107,7 +117,7 @@ func ObserveEthConnectivity(
"eth_connectivity",
input,
registry,
tick,
validateTick(tick, DefaultEthereumMetricsTick),
)
}

Expand All @@ -118,6 +128,7 @@ func observe(
registry *metrics.Registry,
tick time.Duration,
) {
fmt.Printf("observe metric [%v] with tick: [%v]\n", name, tick)
pdyraga marked this conversation as resolved.
Show resolved Hide resolved
observer, err := registry.NewGaugeObserver(name, input)
if err != nil {
logger.Warningf("could not create gauge observer [%v]", name)
Expand All @@ -127,6 +138,14 @@ func observe(
observer.Observe(ctx, tick)
}

func validateTick(tick time.Duration, defaultTick time.Duration) time.Duration {
if tick > 0 {
return tick
}

return defaultTick
}

// ExposeLibP2PInfo provides some basic information about libp2p config.
func ExposeLibP2PInfo(
registry *metrics.Registry,
Expand Down