futriis/pkg/utils/colors.go

150 lines
5.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// /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
}