Skip to content

Commit 967a8ab

Browse files
committed
refactor: extract server starting logic into separate function in metrics package
1 parent c6df508 commit 967a8ab

File tree

3 files changed

+48
-49
lines changed

3 files changed

+48
-49
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# DA Monitor
1+
# EV Metrics
22

3-
Data Availability monitoring tool for evstack using Celestia DA. This tool monitors EVM block headers in real-time, queries ev-node for DA submission information, and verifies blob data on Celestia.
3+
Data Availability metrics and monitoring tool for evstack using Celestia DA. This tool monitors EVM block headers in real-time, queries ev-node for DA submission information, and verifies blob data on Celestia.
44

55
## Features
66

@@ -83,12 +83,12 @@ Metrics will be available at `http://localhost:2112/metrics`
8383

8484
When metrics are enabled, the following metrics are exposed:
8585

86-
### `da_monitor_unsubmitted_block_range_start`
86+
### `ev_metrics_unsubmitted_block_range_start`
8787
- **Type**: Gauge
8888
- **Labels**: `chain_id`, `blob_type`, `range_id`
8989
- **Description**: Start block height of unverified block ranges
9090

91-
### `da_monitor_unsubmitted_block_range_end`
91+
### `ev_metrics_unsubmitted_block_range_end`
9292
- **Type**: Gauge
9393
- **Labels**: `chain_id`, `blob_type`, `range_id`
9494
- **Description**: End block height of unverified block ranges

cmd/monitor.go

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ import (
66
"github.com/01builders/ev-metrics/internal/drift"
77
coreda "github.com/evstack/ev-node/core/da"
88
"golang.org/x/sync/errgroup"
9-
"net/http"
109
"os"
1110
"time"
1211

1312
"github.com/01builders/ev-metrics/internal/celestia"
1413
"github.com/01builders/ev-metrics/internal/evm"
1514
"github.com/01builders/ev-metrics/internal/evnode"
1615
"github.com/01builders/ev-metrics/internal/metrics"
17-
"github.com/prometheus/client_golang/prometheus/promhttp"
1816
"github.com/rs/zerolog"
1917
"github.com/spf13/cobra"
2018
"strings"
@@ -167,38 +165,15 @@ func monitorAndVerifyDataAndHeaders(cmd *cobra.Command, args []string) error {
167165
cfg.CelestiaClient.Close()
168166
}()
169167

170-
// start HTTP server for metrics if enabled
171-
if flags.enableMetrics {
172-
http.Handle(metricsPath, promhttp.Handler())
173-
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
174-
w.WriteHeader(http.StatusOK)
175-
_, _ = w.Write([]byte("OK"))
176-
})
177-
178-
serverAddr := fmt.Sprintf(":%d", flags.port)
179-
go func() {
180-
logger.Info().
181-
Str("addr", serverAddr).
182-
Str("metrics_path", metricsPath).
183-
Msg("starting HTTP server for Prometheus metrics")
184-
if err := http.ListenAndServe(serverAddr, nil); err != nil {
185-
logger.Error().Err(err).Msg("HTTP server failed")
186-
}
187-
}()
188-
} else {
189-
logger.Info().Msg("Prometheus metrics server disabled (use --enable-metrics to enable)")
190-
}
191-
192168
// Setup timeout if specified
193-
streamCtx := ctx
194169
if flags.duration > 0 {
195170
var cancel context.CancelFunc
196-
streamCtx, cancel = context.WithTimeout(ctx, time.Duration(flags.duration)*time.Second)
171+
ctx, cancel = context.WithTimeout(ctx, time.Duration(flags.duration)*time.Second)
197172
defer cancel()
198173
}
199174

200175
// initialize metrics
201-
m := metrics.New("da_monitor")
176+
m := metrics.New("ev_metrics")
202177
// create block verifier
203178
verifier := NewBlockVerifier(
204179
cfg.EVNodeClient,
@@ -211,31 +186,27 @@ func monitorAndVerifyDataAndHeaders(cmd *cobra.Command, args []string) error {
211186
logger,
212187
)
213188

214-
// start background retry processor
215-
retryCtx, retryCancel := context.WithCancel(ctx)
216-
defer retryCancel()
217-
218189
var g errgroup.Group
219190

191+
if flags.enableMetrics {
192+
g.Go(func() error {
193+
return metrics.StartServer(metricsPath, flags.port, logger)
194+
})
195+
}
196+
220197
g.Go(func() error {
221-
return verifier.VerifyHeadersAndData(retryCtx)
198+
return verifier.VerifyHeadersAndData(ctx)
222199
})
223200
g.Go(func() error {
224-
return verifier.ProcessHeaders(streamCtx)
201+
return verifier.ProcessHeaders(ctx)
225202
})
226203

227-
g.Go(func() error {
228-
if flags.referenceNode == "" || len(flags.fullNodes) == 0 {
229-
logger.Info().
230-
Str("reference_node", flags.referenceNode).
231-
Strs("full_nodes", strings.Split(flags.fullNodes, ",")).
232-
Msg("skipping node drift monitoring")
233-
return nil
234-
}
235-
236-
fullNodeList := strings.Split(flags.fullNodes, ",")
237-
return drift.Monitor(retryCtx, m, flags.chainID, flags.referenceNode, fullNodeList, flags.pollingInterval, logger)
238-
})
204+
if flags.referenceNode == "" || len(flags.fullNodes) == 0 {
205+
g.Go(func() error {
206+
fullNodeList := strings.Split(flags.fullNodes, ",")
207+
return drift.Monitor(ctx, m, flags.chainID, flags.referenceNode, fullNodeList, flags.pollingInterval, logger)
208+
})
209+
}
239210

240211
return g.Wait()
241212
}

internal/metrics/server.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package metrics
2+
3+
import (
4+
"fmt"
5+
"github.com/prometheus/client_golang/prometheus/promhttp"
6+
"github.com/rs/zerolog"
7+
"net/http"
8+
)
9+
10+
// StartServer starts an HTTP server to expose Prometheus metrics and a health check endpoint.
11+
func StartServer(metricsPath string, port int, logger zerolog.Logger) error {
12+
http.Handle(metricsPath, promhttp.Handler())
13+
http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
14+
w.WriteHeader(http.StatusOK)
15+
_, _ = w.Write([]byte("OK"))
16+
})
17+
18+
serverAddr := fmt.Sprintf(":%d", port)
19+
logger.Info().
20+
Str("addr", serverAddr).
21+
Str("metrics_path", metricsPath).
22+
Msg("starting HTTP server for Prometheus metrics")
23+
if err := http.ListenAndServe(serverAddr, nil); err != nil {
24+
logger.Error().Err(err).Msg("HTTP server failed")
25+
return err
26+
}
27+
return nil
28+
}

0 commit comments

Comments
 (0)