Files
payments/cmd/common.go
CrimsonandGitHub ad704e958b feat(polling): allow system-wide polling default to be configured via env variable (#615)
* Manage configuration of polling period in connectors manager and enable override via env variables

* Treat connector validation errors as http 4xx

* Perform strict config validation only if connector being loaded for install or update

* Add flags to configure notification outbox schedules

* Only configure outbox schedule creation in worker

* Improve manager config validation test coverage
2025-12-08 09:32:29 +00:00

92 lines
2.9 KiB
Go

package cmd
import (
"errors"
"fmt"
"time"
"github.com/bombsimon/logrusr/v3"
sharedapi "github.com/formancehq/go-libs/v3/api"
"github.com/formancehq/go-libs/v3/auth"
"github.com/formancehq/go-libs/v3/aws/iam"
"github.com/formancehq/go-libs/v3/bun/bunconnect"
"github.com/formancehq/go-libs/v3/health"
"github.com/formancehq/go-libs/v3/licence"
"github.com/formancehq/go-libs/v3/otlp"
"github.com/formancehq/go-libs/v3/otlp/otlpmetrics"
"github.com/formancehq/go-libs/v3/otlp/otlptraces"
"github.com/formancehq/go-libs/v3/profiling"
"github.com/formancehq/go-libs/v3/publish"
"github.com/formancehq/go-libs/v3/service"
"github.com/formancehq/go-libs/v3/temporal"
"github.com/formancehq/payments/internal/connectors/engine"
"github.com/formancehq/payments/internal/connectors/metrics"
"github.com/formancehq/payments/internal/storage"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"go.opentelemetry.io/otel"
"go.uber.org/fx"
)
func setLogger() {
// Add a dedicated logger for opentelemetry in case of error
otel.SetLogger(logrusr.New(logrus.New().WithField("component", "otlp")))
}
func commonFlags(cmd *cobra.Command) {
cmd.Flags().String(StackFlag, "", "Stack name")
cmd.Flags().String(ListenFlag, ":8080", "Listen address")
cmd.Flags().Duration(ConnectorPollingPeriodDefault, 30*time.Minute, "Default polling period for connectors")
cmd.Flags().Duration(ConnectorPollingPeriodMinimum, 20*time.Minute, "Minimum polling period for connectors")
service.AddFlags(cmd.Flags())
otlpmetrics.AddFlags(cmd.Flags())
otlptraces.AddFlags(cmd.Flags())
auth.AddFlags(cmd.Flags())
publish.AddFlags(ServiceName, cmd.Flags())
bunconnect.AddFlags(cmd.Flags())
iam.AddFlags(cmd.Flags())
profiling.AddFlags(cmd.Flags())
temporal.AddFlags(cmd.Flags())
licence.AddFlags(cmd.Flags())
}
func commonOptions(cmd *cobra.Command) (fx.Option, error) {
configEncryptionKey, _ := cmd.Flags().GetString(ConfigEncryptionKeyFlag)
if configEncryptionKey == "" {
return nil, errors.New("missing config encryption key")
}
connectionOptions, err := bunconnect.ConnectionOptionsFromFlags(cmd)
if err != nil {
return nil, fmt.Errorf("failed to get connection options: %w", err)
}
return fx.Options(
fx.Provide(func() *bunconnect.ConnectionOptions {
return connectionOptions
}),
otlp.FXModuleFromFlags(cmd),
otlptraces.FXModuleFromFlags(cmd),
otlpmetrics.FXModuleFromFlags(cmd),
fx.Provide(metrics.RegisterMetricsRegistry),
fx.Invoke(func(metrics.MetricsRegistry) {}),
temporal.FXModuleFromFlags(
cmd,
engine.Tracer,
temporal.SearchAttributes{
SearchAttributes: engine.SearchAttributes,
},
),
fx.Provide(func() sharedapi.ServiceInfo {
return sharedapi.ServiceInfo{
Version: Version,
}
}),
health.Module(),
publish.FXModuleFromFlags(cmd, service.IsDebug(cmd)),
licence.FXModuleFromFlags(cmd, ServiceName),
storage.Module(cmd, *connectionOptions, configEncryptionKey),
profiling.FXModuleFromFlags(cmd),
), nil
}