futriis/pkg/utils/colors.go
2026-02-27 22:04:04 +03:00

132 lines
4.5 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
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
}