package logger import ( "os" "path/filepath" ) // GetDataDir возвращает стандартную директорию для данных приложения func GetDataDir() (string, error) { // Проверяем, установлен ли пакет (существует ли /opt/gpio-monitoring) if _, err := os.Stat("/opt/gpio-monitoring"); err == nil { // Используем стандартную директорию для deb пакета dataDir := "/var/lib/gpio-monitoring" if err := os.MkdirAll(dataDir, 0755); err != nil { return "", err } return dataDir, nil } // Для разработки - используем XDG Base Directory Specification homeDir, err := os.UserHomeDir() if err != nil { return "", err } // ~/.local/share/gpio-monitoring dataDir := filepath.Join(homeDir, ".local", "share", "gpio-monitoring") if err := os.MkdirAll(dataDir, 0755); err != nil { return "", err } return dataDir, nil } // GetLogsDir возвращает директорию для логов func GetLogsDir() (string, error) { // Проверяем, установлен ли пакет if _, err := os.Stat("/opt/gpio-monitoring"); err == nil { logsDir := "/var/log/gpio-monitoring" if err := os.MkdirAll(logsDir, 0755); err != nil { return "", err } return logsDir, nil } // Для разработки dataDir, err := GetDataDir() if err != nil { return "", err } logsDir := filepath.Join(dataDir, "logs") if err := os.MkdirAll(logsDir, 0755); err != nil { return "", err } return logsDir, nil } // GetDataLogsDir возвращает директорию для бинарных данных func GetDataLogsDir() (string, error) { logsDir, err := GetLogsDir() if err != nil { return "", err } dataDir := filepath.Join(logsDir, "data") if err := os.MkdirAll(dataDir, 0755); err != nil { return "", err } return dataDir, nil } // GetEventLogPath возвращает путь к файлу событий func GetEventLogPath() (string, error) { logsDir, err := GetLogsDir() if err != nil { return "", err } return filepath.Join(logsDir, "events.log"), nil } // GetEventHumanLogPath возвращает путь к человеко-читаемому файлу событий func GetEventHumanLogPath() (string, error) { logsDir, err := GetLogsDir() if err != nil { return "", err } return filepath.Join(logsDir, "events_human.log"), nil } // GetGPIOLogPath возвращает путь к человеко-читаемому GPIO логу func GetGPIOLogPath() (string, error) { logsDir, err := GetLogsDir() if err != nil { return "", err } return filepath.Join(logsDir, "gpio_human.log"), nil } // GetWebDir возвращает директорию с веб-файлами func GetWebDir() string { // Проверяем стандартные пути possiblePaths := []string{ "/opt/gpio-monitoring/web", "/usr/share/gpio-monitoring/web", "./cmd/server/web", "../cmd/server/web", } for _, path := range possiblePaths { if _, err := os.Stat(path); err == nil { // Проверяем, что есть index.html if _, err := os.Stat(filepath.Join(path, "index.html")); err == nil { return path } } } // Fallback для разработки return "./cmd/server/web" }