Skip to content

Commit 5254113

Browse files
committed
add tokens metrics
1 parent cae5096 commit 5254113

2 files changed

Lines changed: 125 additions & 0 deletions

File tree

rocketpool/metrics/metrics.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ func run(c *cli.Context) error {
5252
go (func() { startDaoMetricsProcess(c, networkUpdateInterval, logger) })()
5353
go (func() { startNetworkMetricsProcess(c, networkUpdateInterval, logger) })()
5454
go (func() { startSettingsMetricsProcess(c, networkUpdateInterval, logger) })()
55+
go (func() { startTokensMetricsProcess(c, networkUpdateInterval, logger) })()
5556
go (func() { startMinipoolMetricsProcess(c, minipoolUpdateInterval, logger) })()
5657
//go (func() { startNodeMetricsProcess(c, nodeUpdateInterval, logger) })()
5758

rocketpool/metrics/tokens.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package metrics
2+
3+
import (
4+
"time"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
"github.com/prometheus/client_golang/prometheus/promauto"
8+
"github.com/urfave/cli"
9+
10+
"github.com/rocket-pool/rocketpool-go/rocketpool"
11+
"github.com/rocket-pool/rocketpool-go/tokens"
12+
"github.com/rocket-pool/rocketpool-go/utils/eth"
13+
"github.com/rocket-pool/smartnode/shared/services"
14+
"github.com/rocket-pool/smartnode/shared/services/beacon"
15+
"github.com/rocket-pool/smartnode/shared/utils/log"
16+
)
17+
18+
19+
type tokensGauges struct {
20+
tokenSupply *prometheus.GaugeVec
21+
something prometheus.Gauge
22+
}
23+
24+
25+
// tokens metrics process
26+
type tokensMetricsProcess struct {
27+
rp *rocketpool.RocketPool
28+
bc beacon.Client
29+
metrics tokensGauges
30+
logger log.ColorLogger
31+
}
32+
33+
34+
35+
36+
// Start tokens metrics process
37+
func startTokensMetricsProcess(c *cli.Context, interval time.Duration, logger log.ColorLogger) {
38+
39+
logger.Printlnf("Enter startTokensMetricsProcess")
40+
timer := time.NewTicker(interval)
41+
var p *tokensMetricsProcess
42+
var err error
43+
// put create process in a loop because it may fail initially
44+
for ; true; <- timer.C {
45+
p, err = newTokensMetricsProcess(c, logger)
46+
if p != nil && err == nil {
47+
break;
48+
}
49+
}
50+
51+
// Update metrics on interval
52+
for ; true; <- timer.C {
53+
err = p.updateMetrics()
54+
if err != nil {
55+
// print error here instead of exit
56+
logger.Printlnf("Error in updateMetrics: %w", err)
57+
}
58+
}
59+
logger.Printlnf("Exit startTokensMetricsProcess")
60+
}
61+
62+
63+
// Create new tokensMetricsProcess object
64+
func newTokensMetricsProcess(c *cli.Context, logger log.ColorLogger) (*tokensMetricsProcess, error) {
65+
66+
logger.Printlnf("Enter newTokensMetricsProcess")
67+
if err := services.RequireRocketStorage(c); err != nil { return nil, err }
68+
if err := services.RequireBeaconClientSynced(c); err != nil { return nil, err }
69+
rp, err := services.GetRocketPool(c)
70+
if err != nil { return nil, err }
71+
bc, err := services.GetBeaconClient(c)
72+
if err != nil { return nil, err }
73+
74+
// Initialise metrics
75+
metrics := tokensGauges {
76+
tokenSupply: promauto.NewGaugeVec(
77+
prometheus.GaugeOpts{
78+
Namespace: "rocketpool",
79+
Subsystem: "tokens",
80+
Name: "supply_count",
81+
Help: "total supply of token",
82+
},
83+
[]string{"token"},
84+
),
85+
something: promauto.NewGauge(prometheus.GaugeOpts{
86+
Namespace: "rocketpool",
87+
Subsystem: "tokens",
88+
Name: "something",
89+
Help: "something",
90+
}),
91+
}
92+
93+
p := &tokensMetricsProcess {
94+
rp: rp,
95+
bc: bc,
96+
//account: account,
97+
metrics: metrics,
98+
logger: logger,
99+
}
100+
101+
logger.Printlnf("Exit newTokensMetricsProcess")
102+
return p, nil
103+
}
104+
105+
106+
// Update tokens metrics
107+
func (p *tokensMetricsProcess) updateMetrics() error {
108+
p.logger.Printlnf("Enter tokens updateMetrics")
109+
110+
rethSupply, err := tokens.GetRETHTotalSupply(p.rp, nil)
111+
rplFixedSupply, err := tokens.GetFixedSupplyRPLTotalSupply(p.rp, nil)
112+
rplSupply, err := tokens.GetRPLTotalSupply(p.rp, nil)
113+
if err != nil { return err }
114+
115+
p.metrics.tokenSupply.With(prometheus.Labels{"token":"rETH"}).Set(eth.WeiToEth(rethSupply))
116+
p.metrics.tokenSupply.With(prometheus.Labels{"token":"fixed-supply RPL"}).Set(eth.WeiToEth(rplFixedSupply))
117+
p.metrics.tokenSupply.With(prometheus.Labels{"token":"RPL"}).Set(eth.WeiToEth(rplSupply))
118+
119+
p.logger.Printlnf("Exit tokens updateMetrics")
120+
return err
121+
}
122+
123+
124+

0 commit comments

Comments
 (0)