apollo-backend/internal/cmdutil/cmdutil.go

88 lines
1.9 KiB
Go
Raw Permalink Normal View History

package cmdutil
import (
"context"
"fmt"
"os"
"github.com/DataDog/datadog-go/statsd"
"github.com/adjust/rmq/v4"
"github.com/go-redis/redis/v8"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/sirupsen/logrus"
)
func NewLogrusLogger(debug bool) *logrus.Logger {
logger := logrus.New()
if debug || os.Getenv("ENV") == "" {
logger.SetLevel(logrus.DebugLevel)
} else {
logger.SetFormatter(&logrus.TextFormatter{
DisableColors: true,
FullTimestamp: true,
})
}
return logger
}
func NewStatsdClient(tags ...string) (*statsd.Client, error) {
if env := os.Getenv("ENV"); env != "" {
tags = append(tags, fmt.Sprintf("env:%s", env))
}
2021-07-23 00:22:46 +00:00
return statsd.New(os.Getenv("STATSD_URL"), statsd.WithTags(tags))
}
func NewRedisClient(ctx context.Context) (*redis.Client, error) {
2021-07-23 00:22:46 +00:00
opt, err := redis.ParseURL(os.Getenv("REDIS_URL"))
if err != nil {
return nil, err
}
opt.MinIdleConns = 16
client := redis.NewClient(opt)
if err := client.Ping(ctx).Err(); err != nil {
return nil, err
}
return client, nil
}
2021-07-23 00:50:24 +00:00
func NewDatabasePool(ctx context.Context, maxConns int) (*pgxpool.Pool, error) {
2021-10-09 14:59:20 +00:00
if maxConns == 0 {
maxConns = 1
}
2021-07-15 17:47:22 +00:00
url := fmt.Sprintf(
2021-07-23 00:38:13 +00:00
"%s?pool_max_conns=%d&pool_min_conns=%d",
2021-07-15 17:47:22 +00:00
os.Getenv("DATABASE_CONNECTION_POOL_URL"),
2021-07-23 00:50:24 +00:00
maxConns,
2,
2021-07-15 17:47:22 +00:00
)
config, err := pgxpool.ParseConfig(url)
if err != nil {
return nil, err
}
// Setting the build statement cache to nil helps this work with pgbouncer
config.ConnConfig.BuildStatementCache = nil
config.ConnConfig.PreferSimpleProtocol = true
return pgxpool.ConnectConfig(ctx, config)
}
func NewQueueClient(logger *logrus.Logger, conn *redis.Client, identifier string) (rmq.Connection, error) {
errChan := make(chan error, 10)
go func() {
for err := range errChan {
logger.WithFields(logrus.Fields{
"err": err,
}).Error("error occured with queue")
}
}()
return rmq.OpenConnectionWithRedisClient(identifier, conn, errChan)
}