Skip to content

Commit 56b0c5b

Browse files
Merge branch 'main' into feat/keyper-dkg-metrics
2 parents b8b49a6 + 27d116c commit 56b0c5b

File tree

6 files changed

+115
-2
lines changed

6 files changed

+115
-2
lines changed

rolling-shutter/keyper/keyper.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,11 @@ func (kpr *KeyperCore) Start(ctx context.Context, runner service.Runner) error {
147147
messageSender := fx.NewRPCMessageSender(shuttermintClient, config.Ethereum.PrivateKey.Key)
148148

149149
if kpr.config.Metrics.Enabled {
150+
<<<<<<< feat/keyper-dkg-metrics
150151
keypermetrics.InitMetrics(kpr.dbpool, kpr.config)
152+
=======
153+
keypermetrics.InitMetrics(*kpr.config)
154+
>>>>>>> main
151155
epochkghandler.InitMetrics()
152156
deployment.InitMetrics()
153157
kpr.metricsServer = metricsserver.New(kpr.config.Metrics)

rolling-shutter/keyper/keypermetrics/metrics.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ var MetricsKeyperDKGstatus = prometheus.NewGaugeVec(
9797
[]string{"eon"},
9898
)
9999

100-
func InitMetrics(dbpool *pgxpool.Pool, config *kprconfig.Config) {
100+
func InitMetrics(dbpool *pgxpool.Pool, config kprconfig.Config) {
101101
prometheus.MustRegister(MetricsKeyperCurrentBlockL1)
102102
prometheus.MustRegister(MetricsKeyperCurrentBlockShuttermint)
103103
prometheus.MustRegister(MetricsKeyperCurrentEon)
@@ -136,4 +136,37 @@ func InitMetrics(dbpool *pgxpool.Pool, config *kprconfig.Config) {
136136
} else {
137137
MetricsKeyperDKGstatus.WithLabelValues(strconv.FormatInt(eons[len(eons)-1].Eon, 10)).Set(0)
138138
}
139+
140+
version, err := chainsync.GetClientVersion(context.Background(), config.Ethereum.EthereumURL)
141+
if err != nil {
142+
log.Error().Err(err).Msg("execution_client_version metrics | Failed to get execution client version")
143+
return
144+
}
145+
146+
executionClientVersion := prometheus.NewGauge(
147+
prometheus.GaugeOpts{
148+
Namespace: "shutter",
149+
Subsystem: "keyper",
150+
Name: "execution_client_version",
151+
Help: "Version of the execution client",
152+
ConstLabels: prometheus.Labels{
153+
"version": version,
154+
},
155+
},
156+
)
157+
prometheus.MustRegister(executionClientVersion)
158+
metricsKeyperEthAddress := prometheus.NewGauge(
159+
prometheus.GaugeOpts{
160+
Namespace: "shutter",
161+
Subsystem: "keyper",
162+
Name: "address",
163+
Help: "Ethereum address of the Keyper",
164+
ConstLabels: prometheus.Labels{
165+
"address": config.GetAddress().Hex(),
166+
},
167+
},
168+
)
169+
metricsKeyperEthAddress.Set(1)
170+
171+
prometheus.MustRegister(metricsKeyperEthAddress)
139172
}

rolling-shutter/keyperimpl/gnosis/keyper.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ func New(c *Config) *Keyper {
7171
func (kpr *Keyper) Start(ctx context.Context, runner service.Runner) error {
7272
var err error
7373

74+
if kpr.config.Metrics.Enabled {
75+
InitMetrics(kpr.beaconAPIClient)
76+
}
77+
7478
kpr.newBlocks = make(chan *syncevent.LatestBlock)
7579
kpr.newKeyperSets = make(chan *syncevent.KeyperSet)
7680
kpr.newEonPublicKeys = make(chan keyper.EonPublicKey)

rolling-shutter/keyperimpl/gnosis/metrics.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
package gnosis
22

3-
import "github.com/prometheus/client_golang/prometheus"
3+
import (
4+
"context"
5+
6+
"github.com/prometheus/client_golang/prometheus"
7+
"github.com/rs/zerolog/log"
8+
9+
"github.com/shutter-network/rolling-shutter/rolling-shutter/medley/beaconapiclient"
10+
)
411

512
var metricsTxPointer = prometheus.NewGaugeVec(
613
prometheus.GaugeOpts{
@@ -93,3 +100,23 @@ func init() {
93100
prometheus.MustRegister(metricsKeysSentTimeDelta)
94101
prometheus.MustRegister(metricsKeySharesSentTimeDelta)
95102
}
103+
104+
func InitMetrics(beaconClient *beaconapiclient.Client) {
105+
version, err := beaconClient.GetBeaconNodeVersion(context.Background())
106+
if err != nil {
107+
log.Error().Err(err).Msg("beacon_client_version metrics | Failed to get beacon node version")
108+
return
109+
}
110+
beaconClientVersion := prometheus.NewGauge(
111+
prometheus.GaugeOpts{
112+
Namespace: "shutter",
113+
Subsystem: "gnosis",
114+
Name: "beacon_client_version",
115+
Help: "Version of the beacon client",
116+
ConstLabels: prometheus.Labels{
117+
"version": version,
118+
},
119+
},
120+
)
121+
prometheus.MustRegister(beaconClientVersion)
122+
}

rolling-shutter/medley/beaconapiclient/beaconapiclient.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package beaconapiclient
22

33
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"io"
48
"net/http"
59
"net/url"
610
)
@@ -20,3 +24,33 @@ func New(rawURL string) (*Client, error) {
2024
url: parsedURL,
2125
}, nil
2226
}
27+
28+
func (c *Client) GetBeaconNodeVersion(ctx context.Context) (string, error) {
29+
path := c.url.JoinPath("/eth/v1/node/version")
30+
req, err := http.NewRequestWithContext(ctx, "GET", path.String(), http.NoBody)
31+
if err != nil {
32+
return "", err
33+
}
34+
resp, err := http.DefaultClient.Do(req)
35+
if err != nil {
36+
return "", fmt.Errorf("failed to get beacon node version from consensus node: %w", err)
37+
}
38+
defer resp.Body.Close()
39+
if resp.StatusCode != http.StatusOK {
40+
return "", fmt.Errorf("unexpected status code: %d", resp.StatusCode)
41+
}
42+
body, err := io.ReadAll(resp.Body)
43+
if err != nil {
44+
return "", err
45+
}
46+
var result struct {
47+
Data struct {
48+
Version string `json:"version"`
49+
} `json:"data"`
50+
}
51+
err = json.Unmarshal(body, &result)
52+
if err != nil {
53+
return "", err
54+
}
55+
return result.Data.Version, nil
56+
}

rolling-shutter/medley/chainsync/client.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/ethereum/go-ethereum/accounts/abi/bind"
99
"github.com/ethereum/go-ethereum/core/types"
1010
"github.com/ethereum/go-ethereum/log"
11+
"github.com/ethereum/go-ethereum/rpc"
1112
"github.com/pkg/errors"
1213
"github.com/shutter-network/shop-contracts/bindings"
1314

@@ -148,3 +149,13 @@ func (s *Client) ChainID(ctx context.Context) (*big.Int, error) {
148149
func (s *Client) Start(_ context.Context, runner service.Runner) error {
149150
return runner.StartService(s.getServices()...)
150151
}
152+
153+
func GetClientVersion(ctx context.Context, ethereumURL string) (string, error) {
154+
client, err := rpc.DialContext(ctx, ethereumURL)
155+
if err != nil {
156+
return "", err
157+
}
158+
var version string
159+
err = client.CallContext(ctx, &version, "web3_clientVersion")
160+
return version, err
161+
}

0 commit comments

Comments
 (0)