From ff79e0ad3dc1ebe34ed0bc2e7a48e4e9314c6b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Sun, 1 Mar 2026 19:57:48 +0000 Subject: [PATCH] Upload files to "pkg/utils" --- pkg/utils/colors.go | 149 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 pkg/utils/colors.go diff --git a/pkg/utils/colors.go b/pkg/utils/colors.go new file mode 100644 index 0000000..3b39f26 --- /dev/null +++ b/pkg/utils/colors.go @@ -0,0 +1,149 @@ +// /futriis/pkg/utils/colors.go +// Пакет utils предоставляет утилиты для цветного вывода, логирования и форматирования строк в клиенте субд futriis +// Для реализации цветного вывода, используются escpe-последовательности с поддержкой цветов ANSI +// Данная цветовая схема совместима с цветовой схемой OpenIndiana + +package utils + +import ( + "fmt" + +) + +// Цветовые коды 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" // Ярко-жёлтый для WARN + ColorBrightBlue = "\033[94m" + ColorBrightMagenta = "\033[95m" + ColorBrightCyan = "\033[96m" // Яркий циан (голубой) - используется для prompt + ColorBrightWhite = "\033[97m" + + ColorReverse = "\033[7m" // Инвертированные цвета (для подсветки поиска) + + // Специальные цвета для prompt + ColorPrompt = ColorBrightCyan // Яркий циан (голубой) для приглашения + ColorPromptCode = ColorBrightYellow // Ярко-жёлтый для кода + + // Скрытие/показ курсора + ColorHideCursor = "\033[?25l" + ColorShowCursor = "\033[?25h" +) + +// PrintBanner выводит приветственный баннер с учетом восстановления из AOF +func PrintBanner(clusterName string, aofRecovered bool) { + // Добавляем пустую строку перед рамкой + 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) + + // Добавляем сообщение о восстановлении из AOF, если оно было + if aofRecovered { + fmt.Println(ColorPrompt + "[OK] Data recovered from AOF" + ColorReset) + } + + fmt.Println(ColorPrompt + border + ColorReset) + fmt.Println() +} + +// PrintBannerWithConfig выводит баннер с информацией из конфига +func PrintBannerWithConfig(clusterName string, aofRecovered bool) { + PrintBanner(clusterName, aofRecovered) +} + +// 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(ColorBrightYellow+"[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 + } + // Убираем вывод в консоль, только логируем в файл через файловый логгер + // Консольный логгер больше не выводит сообщения в терминал +} + +// Close закрывает консольный логгер +func (l *ConsoleLogger) Close() { + // В простой реализации ничего не делаем +} + +// GetPrompt возвращает строку приглашения +func GetPrompt() string { + return ColorPrompt + "futriis:~> " + ColorReset +}