From ebb24ef7f0e5d40d6d33fff2b932261804f1f1e7 Mon Sep 17 00:00:00 2001 From: Cal Bera Date: Wed, 19 Jun 2024 22:22:06 -0400 Subject: [PATCH] chore(metrics): Allow telemetry to be registered to the baseapp and on sdk.Context (#102) * bet * default to no-op metrics --- baseapp/baseapp.go | 3 +++ baseapp/builder.go | 11 +++++++++++ baseapp/context.go | 3 +++ .../factory/batcher/batcher_test.go | 2 +- telemetry/metrics.go | 5 +++++ types/context.go | 19 +++++++++++++++---- 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 8a93b0b..27642f5 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -7,6 +7,7 @@ import ( "github.com/berachain/offchain-sdk/job" "github.com/berachain/offchain-sdk/log" "github.com/berachain/offchain-sdk/server" + "github.com/berachain/offchain-sdk/telemetry" ethdb "github.com/ethereum/go-ethereum/ethdb" ) @@ -34,6 +35,7 @@ func New( jobs []job.Basic, db ethdb.KeyValueStore, svr *server.Server, + metrics telemetry.Metrics, ) *BaseApp { return &BaseApp{ name: name, @@ -44,6 +46,7 @@ func New( connPool: ethClient, logger: logger, db: db, + metrics: metrics, }, ), svr: svr, diff --git a/baseapp/builder.go b/baseapp/builder.go index f2d1f7c..6976210 100644 --- a/baseapp/builder.go +++ b/baseapp/builder.go @@ -7,6 +7,7 @@ import ( "github.com/berachain/offchain-sdk/job" "github.com/berachain/offchain-sdk/log" "github.com/berachain/offchain-sdk/server" + "github.com/berachain/offchain-sdk/telemetry" "github.com/prometheus/client_golang/prometheus/promhttp" ethdb "github.com/ethereum/go-ethereum/ethdb" @@ -19,6 +20,7 @@ type AppBuilder struct { db ethdb.KeyValueStore ethClient eth.Client svr *server.Server + metrics telemetry.Metrics } // NewAppBuilder creates a new app builder. @@ -26,6 +28,7 @@ func NewAppBuilder(appName string) *AppBuilder { return &AppBuilder{ appName: appName, jobs: []job.Basic{}, + metrics: telemetry.NewNoopMetrics(), } } @@ -44,6 +47,13 @@ func (ab *AppBuilder) RegisterDB(db ethdb.KeyValueStore) { ab.db = db } +// RegisterMetrics registers the metrics. +func (ab *AppBuilder) RegisterMetrics(cfg *telemetry.Config) error { + var err error + ab.metrics, err = telemetry.NewMetrics(cfg) + return err +} + // RegisterHTTPServer registers the http server. func (ab *AppBuilder) RegisterHTTPServer(svr *server.Server) { ab.svr = svr @@ -95,5 +105,6 @@ func (ab *AppBuilder) BuildApp( ab.jobs, ab.db, ab.svr, + ab.metrics, ) } diff --git a/baseapp/context.go b/baseapp/context.go index b59faa5..70c4458 100644 --- a/baseapp/context.go +++ b/baseapp/context.go @@ -5,6 +5,7 @@ import ( "github.com/berachain/offchain-sdk/client/eth" "github.com/berachain/offchain-sdk/log" + "github.com/berachain/offchain-sdk/telemetry" sdk "github.com/berachain/offchain-sdk/types" ethdb "github.com/ethereum/go-ethereum/ethdb" @@ -15,6 +16,7 @@ type contextFactory struct { connPool eth.Client logger log.Logger db ethdb.KeyValueStore + metrics telemetry.Metrics } // NewContextFactory creates a new context from a given context.Context. @@ -24,5 +26,6 @@ func (cf *contextFactory) NewSDKContext(ctx context.Context) *sdk.Context { cf.connPool, cf.logger, cf.db, + cf.metrics, ) } diff --git a/core/transactor/factory/batcher/batcher_test.go b/core/transactor/factory/batcher/batcher_test.go index 3cd4350..3e88378 100644 --- a/core/transactor/factory/batcher/batcher_test.go +++ b/core/transactor/factory/batcher/batcher_test.go @@ -36,6 +36,6 @@ func setUp(t *testing.T) *sdk.Context { } return sdk.NewContext( ctx, eth.NewExtendedEthClient(chain, 5*time.Second), - log.NewLogger(os.Stdout, "test-runner"), nil, + log.NewLogger(os.Stdout, "test-runner"), nil, nil, ) } diff --git a/telemetry/metrics.go b/telemetry/metrics.go index b26ad6f..4a0ffb1 100644 --- a/telemetry/metrics.go +++ b/telemetry/metrics.go @@ -37,6 +37,11 @@ func NewMetrics(cfg *Config) (Metrics, error) { return m, nil } +// NewNoopMetrics returns a new Metrics instance with no-op implementations. +func NewNoopMetrics() Metrics { + return &metrics{} +} + type metrics struct { datadog Metrics prometheus Metrics diff --git a/types/context.go b/types/context.go index 128ac7c..3f9cfa2 100644 --- a/types/context.go +++ b/types/context.go @@ -5,6 +5,7 @@ import ( "github.com/berachain/offchain-sdk/client/eth" "github.com/berachain/offchain-sdk/log" + "github.com/berachain/offchain-sdk/telemetry" "github.com/ethereum/go-ethereum/ethdb" ) @@ -15,9 +16,10 @@ type CancellableContext interface { type Context struct { context.Context - chain eth.Client - logger log.Logger - db ethdb.KeyValueStore + chain eth.Client + logger log.Logger + db ethdb.KeyValueStore + metrics telemetry.Metrics } // UnwrapContext unwraps the sdk context. @@ -30,13 +32,18 @@ func UnwrapContext(ctx context.Context) *Context { } func NewContext( - ctx context.Context, ethClient eth.Client, logger log.Logger, db ethdb.KeyValueStore, + ctx context.Context, + ethClient eth.Client, + logger log.Logger, + db ethdb.KeyValueStore, + metrics telemetry.Metrics, ) *Context { return &Context{ Context: ctx, chain: ethClient, logger: logger, db: db, + metrics: metrics, } } @@ -51,3 +58,7 @@ func (c *Context) Logger() log.Logger { func (c *Context) DB() ethdb.KeyValueStore { return c.db } + +func (c *Context) Metrics() telemetry.Metrics { + return c.metrics +}