Upload files to "cmd/futriis"
This commit is contained in:
parent
54a662b6a7
commit
5f4869b4ba
81
cmd/futriis/main.go
Normal file
81
cmd/futriis/main.go
Normal file
@ -0,0 +1,81 @@
|
||||
// /futriis/cmd/futriis/main.go
|
||||
// Клиентское приложение СУБД Futriis
|
||||
// Обеспечивает интерактивный интерфейс для выполнения команд
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
|
||||
"futriis/internal/client"
|
||||
"futriis/internal/engine"
|
||||
"futriis/pkg/config"
|
||||
"futriis/pkg/utils"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Определяем путь к файлу конфигурации
|
||||
configPath := "config.toml"
|
||||
|
||||
// Проверяем, существует ли файл в текущей директории
|
||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
||||
// Если нет, пробуем найти в родительской директории (для случая запуска из cmd/futriis)
|
||||
configPath = filepath.Join("..", "..", "config.toml")
|
||||
|
||||
// Проверяем, существует ли файл по новому пути
|
||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
||||
// Если файл не найден, используем абсолютный путь относительно домашней директории
|
||||
homeDir, _ := os.UserHomeDir()
|
||||
configPath = filepath.Join(homeDir, "futriis", "config.toml")
|
||||
}
|
||||
}
|
||||
|
||||
// Загружаем конфигурацию
|
||||
cfg, err := config.Load(configPath)
|
||||
if err != nil {
|
||||
fmt.Printf("Ошибка загрузки конфигурации: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Инициализируем логгеры
|
||||
utils.InitLogger("")
|
||||
|
||||
// Инициализируем файловый логгер
|
||||
if err := utils.InitFileLogger(cfg.Node.AOFFile); err != nil {
|
||||
utils.PrintWarning("Не удалось инициализировать файловый логгер: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
if logger := utils.GetFileLogger(); logger != nil {
|
||||
logger.Close()
|
||||
}
|
||||
}()
|
||||
|
||||
// Создаём движок
|
||||
eng := engine.NewEngine()
|
||||
|
||||
// Выводим баннер с именем кластера из конфига и проверкой восстановления из AOF
|
||||
utils.PrintBanner(cfg.Cluster.Name, eng.WasAOFRecovered())
|
||||
|
||||
// Создаём обработчик команд
|
||||
handler := client.NewCommandHandler(eng)
|
||||
|
||||
// Обработка сигналов для graceful shutdown
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
go func() {
|
||||
<-sigChan
|
||||
fmt.Println()
|
||||
os.Exit(0)
|
||||
}()
|
||||
|
||||
// Запускаем REPL
|
||||
if err := handler.RunREPL(); err != nil {
|
||||
utils.PrintError("%v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user