openreplay/backend/internal/config/common/config.go
Alexander 9b75e4502f
ClickHouse support (#2830)
* feat(db): added CH support to db service

* feat(db): removed license check for CH client

* feat(db): removed fts integration

* feat(clickhouse): added config instead of direct env parsing

* feat(clickhouse): removed prev extraHandlers

* feat(clickhouse): an unified approach for data insertion to dbs

* feat(clickhouse): removed unused imports
2024-12-10 12:41:52 +01:00

93 lines
2.6 KiB
Go

package common
import (
"strings"
"time"
)
// Common config for all services
type Config struct {
ConfigFilePath string `env:"CONFIG_FILE_PATH"`
MessageSizeLimit int `env:"QUEUE_MESSAGE_SIZE_LIMIT,default=1048576"`
MaxMemoryUsage uint64 `env:"MAX_MEMORY_USAGE,default=80"`
MemoryLimitMB uint64 `env:"MEMORY_LIMIT_MB,default=0"` // 0 means take limit from OS (cgroup)
}
type Configer interface {
GetConfigPath() string
}
func (c *Config) GetConfigPath() string {
return c.ConfigFilePath
}
// Postgres config
type Postgres struct {
Postgres string `env:"POSTGRES_STRING,required"`
ApplicationName string `env:"SERVICE_NAME,default='worker'"`
}
func (cfg *Postgres) String() string {
str := cfg.Postgres
if !strings.Contains(cfg.Postgres, "application_name") {
if strings.Contains(cfg.Postgres, "?") {
str += "&"
} else {
str += "?"
}
str += "application_name=" + cfg.ApplicationName
}
return str
}
// Redshift config
type Redshift struct {
ConnectionString string `env:"REDSHIFT_STRING"`
Host string `env:"REDSHIFT_HOST"`
Port int `env:"REDSHIFT_PORT"`
User string `env:"REDSHIFT_USER"`
Password string `env:"REDSHIFT_PASSWORD"`
Database string `env:"REDSHIFT_DATABASE"`
Bucket string `env:"REDSHIFT_BUCKET,default=rdshftbucket"`
}
// Clickhouse config
type Clickhouse struct {
URL string `env:"CLICKHOUSE_STRING"`
Database string `env:"CLICKHOUSE_DATABASE,default=default"`
UserName string `env:"CLICKHOUSE_USERNAME,default=default"`
Password string `env:"CLICKHOUSE_PASSWORD,default="`
LegacyUserName string `env:"CH_USERNAME,default=default"`
LegacyPassword string `env:"CH_PASSWORD,default="`
}
func (cfg *Clickhouse) GetTrimmedURL() string {
chUrl := strings.TrimPrefix(cfg.URL, "tcp://")
chUrl = strings.TrimSuffix(chUrl, "/default")
return chUrl
}
// ElasticSearch config
type ElasticSearch struct {
URLs string `env:"ELASTICSEARCH_URLS"`
UseAWS bool `env:"ELASTICSEARCH_IN_AWS,default=false"`
}
func (cfg *ElasticSearch) GetURLs() []string {
return strings.Split(cfg.URLs, ",")
}
type HTTP struct {
HTTPHost string `env:"HTTP_HOST,default="`
HTTPPort string `env:"HTTP_PORT,required"`
HTTPTimeout time.Duration `env:"HTTP_TIMEOUT,default=60s"`
JsonSizeLimit int64 `env:"JSON_SIZE_LIMIT,default=131072"` // 128KB, 1000 for HTTP service
UseAccessControlHeaders bool `env:"USE_CORS,default=false"`
JWTSecret string `env:"JWT_SECRET,required"`
JWTSpotSecret string `env:"JWT_SPOT_SECRET,required"`
}