144 lines
5.1 KiB
Go
144 lines
5.1 KiB
Go
|
|
// /futriis/pkg/utils/colors.go
|
|||
|
|
// Пакет utils предоставляет утилиты для цветного вывода, логирования и форматирования строк в клиенте субд futriis
|
|||
|
|
// Для реализации цветного вывода, используются escpe-последовательности с поддержкой цветов ANSI
|
|||
|
|
// Днная цветовая схема совместима с цветовой схемой OpenIndiana
|
|||
|
|
|
|||
|
|
package utils
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Цветовые коды 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" // Ярко-синий - используется для prompt
|
|||
|
|
ColorBrightMagenta= "\033[95m"
|
|||
|
|
ColorBrightCyan = "\033[96m"
|
|||
|
|
ColorBrightWhite = "\033[97m"
|
|||
|
|
|
|||
|
|
// Специальные цвета для prompt (совместимые)
|
|||
|
|
ColorPrompt = "\033[96m" // Яркий циан (голубой)
|
|||
|
|
//ColorPrompt = ColorBrightBlue // Ярко-синий
|
|||
|
|
ColorPromptCode = ColorBrightYellow // Ярко-жёлтый для кода
|
|||
|
|
|
|||
|
|
// Скрытие/показ курсора
|
|||
|
|
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
|
|||
|
|
}
|