Upload files to "cmd/futriis"

This commit is contained in:
Григорий Сафронов 2026-03-01 00:54:20 +00:00
parent 54a662b6a7
commit 5f4869b4ba

81
cmd/futriis/main.go Normal file
View 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)
}
}