190 lines
7.1 KiB
Go
190 lines
7.1 KiB
Go
package main
|
||
|
||
import (
|
||
"bufio"
|
||
"fmt"
|
||
"os"
|
||
"strings"
|
||
)
|
||
|
||
const appVersion = "1.1.0"
|
||
|
||
// Цвета терминала (общие для всех модулей)
|
||
const (
|
||
cReset = "\033[0m"
|
||
cRed = "\033[0;31m"
|
||
cGreen = "\033[0;32m"
|
||
cYellow = "\033[1;33m"
|
||
cBlue = "\033[0;34m"
|
||
cCyan = "\033[0;36m"
|
||
)
|
||
|
||
func main() {
|
||
// Загружаем конфигурацию из /etc/auspex/auspex.env
|
||
if err := loadConfig(); err != nil {
|
||
// Файл не найден - выводим предупреждение
|
||
fmt.Printf("⚠️ %v\n", err)
|
||
fmt.Println("⚠️ Используются значения по умолчанию")
|
||
fmt.Printf("💡 Создайте файл конфигурации: sudo mkdir -p /etc/auspex && sudo nano /etc/auspex/auspex.env\n\n")
|
||
}
|
||
|
||
// Если переданы аргументы — быстрый вызов
|
||
if len(os.Args) > 1 {
|
||
runByFlag(os.Args[1], os.Args[2:])
|
||
return
|
||
}
|
||
|
||
// Интерактивное меню
|
||
showMenu()
|
||
}
|
||
|
||
func runByFlag(flag string, extraArgs []string) {
|
||
switch flag {
|
||
case "-ss":
|
||
fmt.Printf("%s⚡ Auspex — Просмотр занятых портов (TUI)%s\n\n", cCyan, cReset)
|
||
if err := runPortsView(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-c":
|
||
fmt.Printf("%s🔐 Auspex — Проверка SSL сертификатов%s\n\n", cCyan, cReset)
|
||
if err := runCertCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-p":
|
||
fmt.Printf("%s🌐 Auspex — Проверка доступности портов%s\n\n", cCyan, cReset)
|
||
if err := runPortCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-m":
|
||
fmt.Printf("%s🔄 Auspex — Проверка совпадений Angie ↔ Docker%s\n\n", cCyan, cReset)
|
||
clientFilter := ""
|
||
if len(extraArgs) > 0 {
|
||
clientFilter = extraArgs[0]
|
||
}
|
||
if err := runMatchCheck(clientFilter); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-l":
|
||
fmt.Printf("%s📝 Auspex — Проверка активности логов%s\n\n", cCyan, cReset)
|
||
if err := runLogCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-sv":
|
||
fmt.Printf("%s🔧 Auspex — Проверка состояния служб%s\n\n", cCyan, cReset)
|
||
if err := runServiceCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
|
||
case "-v", "--version":
|
||
fmt.Printf("auspex v%s\n", appVersion)
|
||
|
||
case "-h", "--help":
|
||
printUsage()
|
||
|
||
default:
|
||
fmt.Fprintf(os.Stderr, "%sНеизвестный флаг: %s%s\n\n", cRed, flag, cReset)
|
||
printUsage()
|
||
os.Exit(1)
|
||
}
|
||
}
|
||
|
||
func showMenu() {
|
||
printBanner()
|
||
|
||
fmt.Printf("%sВыберите утилиту:%s\n\n", cBlue, cReset)
|
||
fmt.Printf(" %s1%s) %s-ss%s Просмотр занятых портов (TUI интерфейс)\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s2%s) %s-c %s Проверка SSL сертификатов\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s3%s) %s-p %s Проверка доступности портов (nginx upstream)\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s4%s) %s-m %s Проверка совпадений портов Angie ↔ Docker\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s5%s) %s-l %s Проверка активности логов (PostgreSQL)\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s6%s) %s-sv%s Проверка состояния служб (systemd)\n", cGreen, cReset, cCyan, cReset)
|
||
fmt.Printf(" %s0%s) Выход\n\n", cGreen, cReset)
|
||
fmt.Printf("%sДля быстрого вызова: auspex <ключ>%s\n", cYellow, cReset)
|
||
fmt.Printf("%sПример: auspex -ss | auspex -c | auspex -p | auspex -m [клиент] | auspex -l | auspex -sv%s\n\n", cYellow, cReset)
|
||
|
||
reader := bufio.NewReader(os.Stdin)
|
||
|
||
for {
|
||
fmt.Printf("%s>>> %s", cGreen, cReset)
|
||
input, _ := reader.ReadString('\n')
|
||
input = strings.TrimSpace(input)
|
||
|
||
switch input {
|
||
case "1", "-ss", "ss":
|
||
if err := runPortsView(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "2", "-c", "c":
|
||
if err := runCertCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "3", "-p", "p":
|
||
if err := runPortCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "4", "-m", "m":
|
||
fmt.Printf(" Имя клиента (Enter = все): ")
|
||
clientInput, _ := reader.ReadString('\n')
|
||
clientInput = strings.TrimSpace(clientInput)
|
||
if err := runMatchCheck(clientInput); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "5", "-l", "l":
|
||
if err := runLogCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "6", "-sv", "sv":
|
||
if err := runServiceCheck(); err != nil {
|
||
fmt.Fprintf(os.Stderr, "Ошибка: %v\n", err)
|
||
}
|
||
return
|
||
case "0", "q", "quit", "exit":
|
||
fmt.Println("Выход.")
|
||
return
|
||
default:
|
||
fmt.Printf("%sНеизвестная команда. Введите 1-6 или 0 для выхода.%s\n", cRed, cReset)
|
||
}
|
||
}
|
||
}
|
||
|
||
func printBanner() {
|
||
fmt.Printf(`%s
|
||
█████╗ ██╗ ██╗███████╗██████╗ ███████╗██╗ ██╗
|
||
██╔══██╗██║ ██║██╔════╝██╔══██╗██╔════╝╚██╗██╔╝
|
||
███████║██║ ██║███████╗██████╔╝█████╗ ╚███╔╝
|
||
██╔══██║██║ ██║╚════██║██╔═══╝ ██╔══╝ ██╔██╗
|
||
██║ ██║╚██████╔╝███████║██║ ███████╗██╔╝ ██╗
|
||
╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝
|
||
%s`, cCyan, cReset)
|
||
fmt.Printf(" %sv%s%s — набор утилит мониторинга инфраструктуры\n\n", cBlue, appVersion, cReset)
|
||
}
|
||
|
||
func printUsage() {
|
||
fmt.Printf("Использование: auspex [флаг] [аргументы]\n\n")
|
||
fmt.Printf("Флаги:\n")
|
||
fmt.Printf(" %-12s Просмотр занятых портов (интерактивный TUI)\n", "-ss")
|
||
fmt.Printf(" %-12s Проверка SSL сертификатов в %s\n", "-c", cfgSSLDir)
|
||
fmt.Printf(" %-12s Проверка доступности портов (nginx upstream)\n", "-p")
|
||
fmt.Printf(" %-12s Проверка совпадений портов Angie ↔ Docker [имя_клиента]\n", "-m")
|
||
fmt.Printf(" %-12s Проверка активности логов (PostgreSQL)\n", "-l")
|
||
fmt.Printf(" %-12s Проверка состояния служб systemd\n", "-sv")
|
||
fmt.Printf(" %-12s Показать версию\n", "-v")
|
||
fmt.Printf(" %-12s Показать эту справку\n\n", "-h")
|
||
fmt.Printf("Без аргументов запускается интерактивное меню.\n")
|
||
}
|