You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package config
|
|
|
|
import (
|
|
"time"
|
|
|
|
sharedpostgres "knowfoolery/backend/shared/infra/database/postgres"
|
|
sharedredis "knowfoolery/backend/shared/infra/database/redis"
|
|
"knowfoolery/backend/shared/infra/observability/logging"
|
|
"knowfoolery/backend/shared/infra/observability/metrics"
|
|
"knowfoolery/backend/shared/infra/observability/tracing"
|
|
"knowfoolery/backend/shared/infra/utils/envutil"
|
|
)
|
|
|
|
// Config holds runtime service configuration.
|
|
type Config struct {
|
|
AppName string
|
|
|
|
Port int
|
|
Env string
|
|
LogLevel string
|
|
CacheTTL time.Duration
|
|
MaxExclude int
|
|
BulkMax int
|
|
|
|
Postgres sharedpostgres.Config
|
|
Redis sharedredis.Config
|
|
Tracing tracing.Config
|
|
Metrics metrics.Config
|
|
Logging logging.Config
|
|
|
|
ZitadelBaseURL string
|
|
ZitadelIssuer string
|
|
ZitadelAudience string
|
|
ZitadelClientID string
|
|
ZitadelSecret string
|
|
}
|
|
|
|
// FromEnv builds service config from environment variables.
|
|
func FromEnv() Config {
|
|
env := envutil.String("ENVIRONMENT", "development")
|
|
appName := "Know Foolery - Question Bank Service"
|
|
serviceName := "question-bank-service"
|
|
|
|
logCfg := logging.DefaultConfig()
|
|
logCfg.ServiceName = serviceName
|
|
logCfg.Environment = env
|
|
logCfg.Level = envutil.String("LOG_LEVEL", logCfg.Level)
|
|
|
|
traceCfg := tracing.ConfigFromEnv()
|
|
if traceCfg.ServiceName == "knowfoolery" {
|
|
traceCfg.ServiceName = serviceName
|
|
}
|
|
traceCfg.Environment = env
|
|
|
|
metricsCfg := metrics.ConfigFromEnv()
|
|
if metricsCfg.ServiceName == "knowfoolery" {
|
|
metricsCfg.ServiceName = serviceName
|
|
}
|
|
|
|
return Config{
|
|
AppName: appName,
|
|
|
|
Port: envutil.Int("QUESTION_BANK_PORT", 8081),
|
|
Env: env,
|
|
LogLevel: logCfg.Level,
|
|
CacheTTL: envutil.Duration("QUESTION_CACHE_TTL", 5*time.Minute),
|
|
MaxExclude: envutil.Int("QUESTION_RANDOM_MAX_EXCLUSIONS", 200),
|
|
BulkMax: envutil.Int("QUESTION_BULK_MAX_ITEMS", 5000),
|
|
|
|
Postgres: sharedpostgres.ConfigFromEnv(),
|
|
Redis: sharedredis.ConfigFromEnv(),
|
|
Tracing: traceCfg,
|
|
Metrics: metricsCfg,
|
|
Logging: logCfg,
|
|
|
|
ZitadelBaseURL: envutil.String("ZITADEL_URL", ""),
|
|
ZitadelIssuer: envutil.String("ZITADEL_ISSUER", ""),
|
|
ZitadelAudience: envutil.String("ZITADEL_AUDIENCE", ""),
|
|
ZitadelClientID: envutil.String("ZITADEL_CLIENT_ID", ""),
|
|
ZitadelSecret: envutil.String("ZITADEL_CLIENT_SECRET", ""),
|
|
}
|
|
}
|