Newer
Older
status / config.go
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
}