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