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