150 lines
5.7 KiB
Go
150 lines
5.7 KiB
Go
// /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"
|
||
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(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
|
||
}
|
||
// Убираем вывод в консоль, только логируем в файл через файловый логгер
|
||
// Консольный логгер больше не выводит сообщения в терминал
|
||
}
|
||
|
||
// Close закрывает консольный логгер
|
||
func (l *ConsoleLogger) Close() {
|
||
// В простой реализации ничего не делаем
|
||
}
|
||
|
||
// GetPrompt возвращает строку приглашения
|
||
func GetPrompt() string {
|
||
return ColorPrompt + "futriis:~> " + ColorReset
|
||
}
|