wormhole-explorer/tx-tracker/config/structs.go

86 lines
2.6 KiB
Go

package config
import (
"fmt"
"github.com/joho/godotenv"
"github.com/kelseyhightower/envconfig"
)
type BackfillingStrategy string
const (
// StrategyReprocessAll will reprocess documents in the `globalTransactions`
// collection that don't have the `sourceTx` field set, or that have the
// `sourceTx.status` field set to "internalError".
BackfillerStrategyReprocessFailed BackfillingStrategy = "reprocess_failed"
// BackfillerStrategyTimeRange will reprocess all VAAs that have a timestamp between the specified range.
BackfillerStrategyTimeRange BackfillingStrategy = "time_range"
)
type BackfillerSettings struct {
LogLevel string `split_words:"true" default:"INFO"`
NumWorkers uint `split_words:"true" required:"true"`
BulkSize uint `split_words:"true" required:"true"`
// Strategy determines which VAAs will be affected by the backfiller.
Strategy struct {
Name BackfillingStrategy `split_words:"true" required:"true"`
TimestampAfter string `split_words:"true" required:"false"`
TimestampBefore string `split_words:"true" required:"false"`
}
VaaPayloadParserSettings
MongodbSettings
RpcProviderSettings
}
type ServiceSettings struct {
// MonitoringPort defines the TCP port for the /health and /ready endpoints.
MonitoringPort string `split_words:"true" default:"8000"`
LogLevel string `split_words:"true" default:"INFO"`
PprofEnabled bool `split_words:"true" default:"false"`
AwsSettings
VaaPayloadParserSettings
MongodbSettings
RpcProviderSettings
}
type VaaPayloadParserSettings struct {
VaaPayloadParserUrl string `split_words:"true" required:"true"`
VaaPayloadParserTimeout int64 `split_words:"true" required:"true"`
}
type AwsSettings struct {
AwsEndpoint string `split_words:"true" required:"false"`
AwsAccessKeyID string `split_words:"true" required:"false"`
AwsSecretAccessKey string `split_words:"true" required:"false"`
AwsRegion string `split_words:"true" required:"true"`
SqsUrl string `split_words:"true" required:"true"`
}
type MongodbSettings struct {
MongodbUri string `split_words:"true" required:"true"`
MongodbDatabase string `split_words:"true" required:"true"`
}
type RpcProviderSettings struct {
SolanaBaseUrl string `split_words:"true" required:"true"`
SolanaRequestsPerMinute uint16 `split_words:"true" required:"true"`
}
func LoadFromEnv[T any]() (*T, error) {
_ = godotenv.Load()
var settings T
err := envconfig.Process("", &settings)
if err != nil {
return nil, fmt.Errorf("failed to read config from environment: %w", err)
}
return &settings, nil
}