futriis/pkg/utils/colors.go

132 lines
4.5 KiB
Go
Raw Normal View History

2026-02-27 22:04:04 +03:00
// /futriis/pkg/utils/colors.go
// Пакет utils предоставляет утилиты для цветного вывода, логирования и форматирования строк в клиенте субд futriis
// Для реализации цветного вывода, используются escpe-последовательности с поддержкой цветов ANSI
package utils
import (
"fmt"
"time"
)
// Цветовые коды ANSI
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"
// Специальные цвета для prompt
ColorPrompt = "\033[38;2;0;191;255m" // Ярко-голубой (#00bfff)
ColorPromptCode = "\033[38;5;214m" // Оранжевый для кода
// Скрытие/показ курсора
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
}