86 lines
2.6 KiB
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:"true"`
|
|
AwsSecretAccessKey string `split_words:"true" required:"true"`
|
|
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
|
|
}
|