From 300cf75d84abf7599db5a96c701504189a779913 Mon Sep 17 00:00:00 2001 From: Matthieu Vachon Date: Thu, 25 Apr 2024 16:44:34 -0400 Subject: [PATCH] The `common-metering-plugin` now expands environment variables --- cmd/apps/metering.go | 37 ++++++++++++++++++++++++++++++++++++ cmd/apps/start.go | 2 +- cmd/apps/substreams_tier1.go | 4 +--- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 cmd/apps/metering.go diff --git a/cmd/apps/metering.go b/cmd/apps/metering.go new file mode 100644 index 0000000..a333d1b --- /dev/null +++ b/cmd/apps/metering.go @@ -0,0 +1,37 @@ +package apps + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + "github.com/streamingfast/dmetering" + "go.uber.org/zap" +) + +// GetCommonMeteringPlugin returns the common metering plugin value to use +// for the application. It reads the `common-metering-plugin` flag +// from the command and returns the plugin after expanding the +// environment variables in it meaning 'paymentGateway://test?token=${TOKEN}'. +func GetCommonMeteringPluginValue() string { + plugin := viper.GetString("common-metering-plugin") + return os.ExpandEnv(plugin) +} + +// GetCommonMeteringPlugin returns the common metering plugin to use +// for the application. It reads the `common-metering-plugin` flag +// from the command and returns the plugin after expanding the +// environment variables in it meaning 'paymentGateway://test?token=${TOKEN}'. +func GetCommonMeteringPlugin(cmd *cobra.Command, logger *zap.Logger) (dmetering.EventEmitter, error) { + // We keep cmd as argument for future proofing, at which point we are going to break + // GetCommonMeteringPluginValue above. + _ = cmd + + eventEmitter, err := dmetering.New(GetCommonMeteringPluginValue(), logger) + if err != nil { + return nil, fmt.Errorf("new metering plugin: %w", err) + } + + return eventEmitter, nil +} diff --git a/cmd/apps/start.go b/cmd/apps/start.go index 74e1efc..b191290 100644 --- a/cmd/apps/start.go +++ b/cmd/apps/start.go @@ -73,7 +73,7 @@ func start(cmd *cobra.Command, dataDir string, args []string, rootLog *zap.Logge return fmt.Errorf("protocol specific hooks not configured correctly: %w", err) } - eventEmitter, err := dmetering.New(sflags.MustGetString(cmd, "common-metering-plugin"), rootLog) + eventEmitter, err := GetCommonMeteringPlugin(cmd, rootLog) if err != nil { return fmt.Errorf("unable to initialize dmetering: %w", err) } diff --git a/cmd/apps/substreams_tier1.go b/cmd/apps/substreams_tier1.go index 9441846..393fd3e 100644 --- a/cmd/apps/substreams_tier1.go +++ b/cmd/apps/substreams_tier1.go @@ -119,11 +119,9 @@ func RegisterSubstreamsTier1App[B firecore.Block](chain *firecore.Chain[B], root wasmExtensions = exts } - meteringConfig := viper.GetString("common-metering-plugin") - return app.NewTier1(appLogger, &app.Tier1Config{ - MeteringConfig: meteringConfig, + MeteringConfig: GetCommonMeteringPluginValue(), MergedBlocksStoreURL: mergedBlocksStoreURL, OneBlocksStoreURL: oneBlocksStoreURL,