// /futriis/pkg/utils/colors.go // Пакет utils предоставляет утилиты для цветного вывода, логирования и форматирования строк в клиенте субд futriis // Для реализации цветного вывода, используются escpe-последовательности с поддержкой цветов ANSI package utils import ( "fmt" "time" ) // Цветовые коды ANSI const ( ColorReset = "\033[0m" ColorRed = "\033[31m" ColorGreen = "\033[32m" ColorYellow = "\033[33m" ColorBlue = "\033[34m" ColorMagenta = "\033[35m" ColorCyan = "\033[36m" ColorWhite = "\033[37m" ColorBold = "\033[1m" ColorUnderline = "\033[4m" // Специальные цвета для prompt ColorPrompt = "\033[38;2;0;191;255m" // Ярко-голубой (#00bfff) ColorPromptCode = "\033[38;5;214m" // Оранжевый для кода // Скрытие/показ курсора ColorHideCursor = "\033[?25l" ColorShowCursor = "\033[?25h" ) // PrintBanner выводит приветственный баннер func PrintBanner(clusterName string) { // Добавляем пустую строку перед рамкой fmt.Println() // Пунктирная рамка border := "--------------------------------------------------------------------------------" fmt.Println(ColorPrompt + border + ColorReset) // Выравниваем текст по левому краю fmt.Println(ColorPrompt + "futriix 3i²(by 03.01.2026)" + ColorReset) fmt.Println(ColorPrompt + "Distributed Wide-Column database with Lua Integration and lua plugins" + ColorReset) fmt.Println(ColorPrompt + "Cluster status: enable" + ColorReset) fmt.Println(ColorPrompt + "Cluster name: " + clusterName + ColorReset) fmt.Println(ColorPrompt + "[OK] Configuration load from config.toml" + ColorReset) fmt.Println(ColorPrompt + border + ColorReset) fmt.Println() } // PrintBannerWithConfig выводит баннер с информацией из конфига func PrintBannerWithConfig(clusterName string) { PrintBanner(clusterName) } // PrintInfo выводит информационное сообщение цветом приглашения func PrintInfo(format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) fmt.Printf(ColorPrompt+"[INFO]"+ColorReset+" %s\n", msg) } // PrintSuccess выводит сообщение об успехе func PrintSuccess(format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) fmt.Printf(ColorGreen+"[OK]"+ColorReset+" %s\n", msg) } // PrintWarning выводит предупреждение func PrintWarning(format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) fmt.Printf(ColorYellow+"[WARN]"+ColorReset+" %s\n", msg) } // PrintError выводит сообщение об ошибке func PrintError(format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) fmt.Printf(ColorRed+"[ERROR]"+ColorReset+" %s\n", msg) } // PrintPromptMessage выводит сообщение цветом приглашения func PrintPromptMessage(format string, args ...interface{}) { msg := fmt.Sprintf(format, args...) fmt.Printf(ColorPrompt + msg + ColorReset + "\n") } // ConsoleLogger представляет простой консольный логгер type ConsoleLogger struct { enabled bool } var consoleLogger *ConsoleLogger // InitLogger инициализирует консольный логгер func InitLogger(logPath string) { consoleLogger = &ConsoleLogger{ enabled: true, } // Игнорируем logPath для консольного логгера // Файловый логгер инициализируется отдельно через InitFileLogger } // GetLogger возвращает консольный логгер func GetLogger() *ConsoleLogger { return consoleLogger } // Log записывает сообщение в консольный лог func (l *ConsoleLogger) Log(level, message string) { if l == nil { return } if !l.enabled { return } timestamp := time.Now().Format("2006-01-02 15:04:05") fmt.Printf("[%s] [%s] %s\n", timestamp, level, message) } // Close закрывает консольный логгер func (l *ConsoleLogger) Close() { // В простой реализации ничего не делаем } // GetPrompt возвращает строку приглашения func GetPrompt() string { return ColorPrompt + "futriis:~> " + ColorReset }