mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package bunconnect
|
|
|
|
import (
|
|
"context"
|
|
"database/sql/driver"
|
|
"time"
|
|
|
|
"github.com/aws/aws-sdk-go-v2/config"
|
|
"github.com/formancehq/stack/libs/go-libs/aws/iam"
|
|
"github.com/formancehq/stack/libs/go-libs/logging"
|
|
"github.com/lib/pq"
|
|
"github.com/spf13/pflag"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
const (
|
|
PostgresURIFlag = "postgres-uri"
|
|
PostgresAWSEnableIAMFlag = "postgres-aws-enable-iam"
|
|
PostgresMaxIdleConnsFlag = "postgres-max-idle-conns"
|
|
PostgresMaxOpenConnsFlag = "postgres-max-open-conns"
|
|
PostgresConnMaxIdleTimeFlag = "postgres-conn-max-idle-time"
|
|
)
|
|
|
|
func InitFlags(flags *pflag.FlagSet) {
|
|
flags.String(PostgresURIFlag, "", "Postgres URI")
|
|
flags.Bool(PostgresAWSEnableIAMFlag, false, "Enable AWS IAM authentication")
|
|
flags.Int(PostgresMaxIdleConnsFlag, 0, "Max Idle connections")
|
|
flags.Duration(PostgresConnMaxIdleTimeFlag, time.Minute, "Max Idle time for connections")
|
|
flags.Int(PostgresMaxOpenConnsFlag, 20, "Max opened connections")
|
|
|
|
if err := viper.BindPFlags(flags); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func ConnectionOptionsFromFlags(ctx context.Context) (*ConnectionOptions, error) {
|
|
var connector func(string) (driver.Connector, error)
|
|
|
|
if viper.GetBool(PostgresAWSEnableIAMFlag) {
|
|
cfg, err := config.LoadDefaultConfig(context.Background(), iam.LoadOptionFromViper())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
connector = func(s string) (driver.Connector, error) {
|
|
return &iamConnector{
|
|
dsn: s,
|
|
driver: &iamDriver{
|
|
awsConfig: cfg,
|
|
},
|
|
logger: logging.FromContext(ctx),
|
|
}, nil
|
|
}
|
|
} else {
|
|
connector = func(dsn string) (driver.Connector, error) {
|
|
return pq.NewConnector(dsn)
|
|
}
|
|
}
|
|
return &ConnectionOptions{
|
|
DatabaseSourceName: viper.GetString(PostgresURIFlag),
|
|
MaxIdleConns: viper.GetInt(PostgresMaxIdleConnsFlag),
|
|
ConnMaxIdleTime: viper.GetDuration(PostgresConnMaxIdleTimeFlag),
|
|
MaxOpenConns: viper.GetInt(PostgresMaxOpenConnsFlag),
|
|
Connector: connector,
|
|
}, nil
|
|
}
|