package main
import (
"os"
"strconv"
"strings"
)
type ServerConfig struct {
DBDsn string
HTTPAddr string
WebUser string
WebPass string
TelegramToken string
TelegramChatIDs []int64
}
type AgentConfig struct {
ServerURL string
Token string
CheckInterval int
}
func loadServerConfig() ServerConfig {
addr := os.Getenv("HTTP_ADDR")
if addr == "" {
addr = ":8080"
}
// Парсим chat IDs - разрешаем отрицательные значения (для групп)
var chatIDs []int64
if chatIDsStr := os.Getenv("TELEGRAM_CHAT_IDS"); chatIDsStr != "" {
for _, s := range strings.Split(chatIDsStr, ",") {
s = strings.TrimSpace(s)
// Убираем условие id > 0, разрешаем любые ненулевые значения
if id, err := strconv.ParseInt(s, 10, 64); err == nil && id != 0 {
chatIDs = append(chatIDs, id)
}
}
}
return ServerConfig{
DBDsn: mustEnv("DB_DSN"),
HTTPAddr: addr,
WebUser: os.Getenv("WEB_USER"),
WebPass: os.Getenv("WEB_PASSWORD"),
TelegramToken: os.Getenv("TELEGRAM_TOKEN"),
TelegramChatIDs: chatIDs,
}
}
type ExporterConfig struct {
DBDsn string
VMURL string
Interval int
Batch int
}
func loadExporterConfig() ExporterConfig {
interval := 60
if s := os.Getenv("EXPORT_INTERVAL_SEC"); s != "" {
if v, err := strconv.Atoi(s); err == nil && v > 0 {
interval = v
}
}
batch := 5000
if s := os.Getenv("EXPORT_BATCH"); s != "" {
if v, err := strconv.Atoi(s); err == nil && v > 0 {
batch = v
}
}
return ExporterConfig{
DBDsn: mustEnv("DSN"),
VMURL: strings.TrimRight(mustEnv("VMURL"), "/"),
Interval: interval,
Batch: batch,
}
}
func loadAgentConfig() AgentConfig {
interval := 60
if s := os.Getenv("CHECK_INTERVAL_SEC"); s != "" {
if v, err := strconv.Atoi(s); err == nil && v > 0 {
interval = v
}
}
return AgentConfig{
ServerURL: strings.TrimRight(mustEnv("SERVER_URL"), "/"),
Token: mustEnv("AGENT_TOKEN"),
CheckInterval: interval,
}
}
func mustEnv(key string) string {
v := os.Getenv(key)
if v == "" {
panic("required env not set: " + key)
}
return v
}