futriis/pkg/utils/colors.go

150 lines
5.7 KiB
Go
Raw Normal View History

2026-03-01 19:57:48 +00:00
// /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
}