// /futriis/pkg/utils/colors.go // Пакет utils предоставляет утилиты для цветного вывода, логирования и форматирования строк в клиенте субд futriis // Для реализации цветного вывода, используются escpe-последовательности с поддержкой цветов ANSI // Днная цветовая схема совместима с цветовой схемой OpenIndiana package utils import ( "fmt" "time" ) // Цветовые коды ANSI (совместимые с OpenIndiana) 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" // Яркие цвета (работают во всех терминалах) ColorBrightBlack = "\033[90m" ColorBrightRed = "\033[91m" ColorBrightGreen = "\033[92m" ColorBrightYellow = "\033[93m" ColorBrightBlue = "\033[94m" // Ярко-синий - используется для prompt ColorBrightMagenta= "\033[95m" ColorBrightCyan = "\033[96m" ColorBrightWhite = "\033[97m" // Специальные цвета для prompt (совместимые) ColorPrompt = "\033[96m" // Яркий циан (голубой) //ColorPrompt = ColorBrightBlue // Ярко-синий ColorPromptCode = ColorBrightYellow // Ярко-жёлтый для кода // Скрытие/показ курсора 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 }