Files
go-service/internal/logger/paths.go

126 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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"
}