Files

97 lines
3.3 KiB
Go

package cmd
import (
"errors"
"fmt"
"time"
"github.com/bombsimon/logrusr/v3"
"github.com/hanzo-fi/go-libs/v5/pkg/authn/jwt"
"github.com/hanzo-fi/go-libs/v5/pkg/authn/licence"
"github.com/hanzo-fi/go-libs/v5/pkg/cloud/aws/iam"
"github.com/hanzo-fi/go-libs/v5/pkg/fx/authnfx"
"github.com/hanzo-fi/go-libs/v5/pkg/fx/messagingfx"
"github.com/hanzo-fi/go-libs/v5/pkg/fx/observefx"
"github.com/hanzo-fi/go-libs/v5/pkg/fx/servicefx"
"github.com/hanzo-fi/go-libs/v5/pkg/fx/workflowfx"
"github.com/hanzo-fi/go-libs/v5/pkg/messaging/publish"
"github.com/hanzo-fi/go-libs/v5/pkg/observe/metrics"
"github.com/hanzo-fi/go-libs/v5/pkg/observe/profiling"
"github.com/hanzo-fi/go-libs/v5/pkg/observe/traces"
"github.com/hanzo-fi/go-libs/v5/pkg/service"
"github.com/hanzo-fi/go-libs/v5/pkg/storage/bun/connect"
sharedapi "github.com/hanzo-fi/go-libs/v5/pkg/transport/api"
"github.com/hanzo-fi/go-libs/v5/pkg/workflow/temporal"
"github.com/hanzo-fi/payments/internal/connectors/engine"
"github.com/hanzo-fi/payments/internal/storage"
"github.com/hanzo-fi/payments/internal/storage/bunconnect"
connectormetrics "github.com/hanzo-fi/payments/pkg/domain/metrics"
"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())
metrics.AddFlags(cmd.Flags())
traces.AddFlags(cmd.Flags())
jwt.AddFlags(cmd.Flags())
publish.AddFlags(ServiceName, cmd.Flags())
connect.AddFlags(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 := connect.ConnectionOptionsFromFlags(cmd.Flags(), cmd.Context())
if err != nil {
return nil, fmt.Errorf("failed to get connection options: %w", err)
}
return fx.Options(
fx.Provide(func() *connect.ConnectionOptions {
return connectionOptions
}),
observefx.ResourceModuleFromFlags(cmd),
observefx.TracesModuleFromFlags(cmd),
observefx.MetricsModuleFromFlags(cmd),
fx.Provide(connectormetrics.RegisterMetricsRegistry),
fx.Invoke(func(connectormetrics.MetricsRegistry) {}),
workflowfx.TemporalClientModuleFromFlags(
cmd,
engine.Tracer,
temporal.SearchAttributes{
SearchAttributes: engine.SearchAttributes,
},
),
fx.Provide(func() sharedapi.ServiceInfo {
return sharedapi.ServiceInfo{
Version: Version,
}
}),
servicefx.HealthModule(),
messagingfx.PublishModuleFromFlags(cmd, service.IsDebug(cmd)),
authnfx.LicenceModuleFromFlags(cmd, ServiceName),
storage.Module(cmd, *connectionOptions, configEncryptionKey),
observefx.ProfilingModuleFromFlags(cmd),
), nil
}