126 lines
3.3 KiB
Go
126 lines
3.3 KiB
Go
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"
|
||
} |