From 8e2544b431bd58d77e902ab0a8bb73bfcbdf6bb5 Mon Sep 17 00:00:00 2001 From: Magnus Root Date: Tue, 9 Jun 2026 17:12:18 +0300 Subject: [PATCH] Fix match check --- .gitignore | 0 ARCHITECTURE.md | 0 DATABASE_SCHEMA.md | 0 LICENSE | 0 README.md | 0 certcheck.go | 0 config.go | 0 dockercheck.go | 0 email.go | 0 go.mod | 0 go.sum | 0 logcheck.go | 0 main.go | 0 matchcheck.go | 54 +++++++++++++++++++++------------------------- mattermost.go | 0 portcheck.go | 0 portsview.go | 0 servicecheck.go | 0 telegram.go | 0 webcheck.go | 0 20 files changed, 25 insertions(+), 29 deletions(-) mode change 100644 => 100755 .gitignore mode change 100644 => 100755 ARCHITECTURE.md mode change 100644 => 100755 DATABASE_SCHEMA.md mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 certcheck.go mode change 100644 => 100755 config.go mode change 100644 => 100755 dockercheck.go mode change 100644 => 100755 email.go mode change 100644 => 100755 go.mod mode change 100644 => 100755 go.sum mode change 100644 => 100755 logcheck.go mode change 100644 => 100755 main.go mode change 100644 => 100755 matchcheck.go mode change 100644 => 100755 mattermost.go mode change 100644 => 100755 portcheck.go mode change 100644 => 100755 portsview.go mode change 100644 => 100755 servicecheck.go mode change 100644 => 100755 telegram.go mode change 100644 => 100755 webcheck.go diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md old mode 100644 new mode 100755 diff --git a/DATABASE_SCHEMA.md b/DATABASE_SCHEMA.md old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/certcheck.go b/certcheck.go old mode 100644 new mode 100755 diff --git a/config.go b/config.go old mode 100644 new mode 100755 diff --git a/dockercheck.go b/dockercheck.go old mode 100644 new mode 100755 diff --git a/email.go b/email.go old mode 100644 new mode 100755 diff --git a/go.mod b/go.mod old mode 100644 new mode 100755 diff --git a/go.sum b/go.sum old mode 100644 new mode 100755 diff --git a/logcheck.go b/logcheck.go old mode 100644 new mode 100755 diff --git a/main.go b/main.go old mode 100644 new mode 100755 diff --git a/matchcheck.go b/matchcheck.go old mode 100644 new mode 100755 index a63d98f..17226b5 --- a/matchcheck.go +++ b/matchcheck.go @@ -366,18 +366,23 @@ func mcIsValidJSON(filePath string) bool { return json.Unmarshal(data, &js) == nil } -// mcBuildContainerName строит имя Docker-контейнера по новому формату: -// {ClientTitle}_{AZN}_{prefix}{nodeN}_a{agentN} +// mcBuildContainerName строит имя Docker-контейнера в зависимости от формата hostname. // -// Пример: +// Продакшн (hostname содержит "node"): // -// hostname: PTAF-TB-docker-AZ3-HW-node01, client: PSB_CFA, agent: 1 -// → PSB_CFA_AZ3_hn01_a001 +// PTAF-TB-docker-AZ3-HW-node01 → {client}_AZ3_hn01_a{NNN} +// PTAF-TB-docker-AZ1-node04 → {client}_AZ1_n04_a{NNN} // -// hostname: PTAF-TB-docker-AZ1-node04, client: ITAR-TASS, agent: 1 -// → ITAR-TASS_AZ1_n04_a001 +// Тест (hostname не содержит "node"): +// +// PTAF-TB-docker-AZ1-test01 → ptaf_{client}_{NNN} func mcBuildContainerName(client, hostname string, agentNum int) string { - // Извлекаем AZN: ищем AZ + цифры в hostname + // Тестовый хост — старый формат + if !strings.Contains(strings.ToLower(hostname), "node") { + return fmt.Sprintf("ptaf_%s_%03d", client, agentNum) + } + + // Продакшн — новый формат с AZ и номером ноды azRe := regexp.MustCompile(`AZ(\d+)`) azMatch := azRe.FindStringSubmatch(hostname) azPart := "AZ0" @@ -385,18 +390,15 @@ func mcBuildContainerName(client, hostname string, agentNum int) string { azPart = "AZ" + azMatch[1] } - // Определяем префикс ноды: HW → hn, иначе n nodePrefix := "n" if strings.Contains(hostname, "-HW-") { nodePrefix = "hn" } - // Извлекаем номер ноды: цифры после "node" nodeRe := regexp.MustCompile(`node(\d+)`) nodeMatch := nodeRe.FindStringSubmatch(hostname) nodePart := "00" if len(nodeMatch) > 1 { - // Берём последние 2 цифры с ведущим нулём num := nodeMatch[1] if len(num) >= 2 { nodePart = num[len(num)-2:] @@ -515,18 +517,18 @@ func mcPrintError(msg string) { fmt.Printf("%s✗ %s%s\n", cRed, msg, cReset) } func mcSendAlerts(hostname string, stats *mcStatistics, alertList []mcAlert) { var sb strings.Builder - sb.WriteString("🚨 PTAF Docker Ports Check Alert\n\n") - sb.WriteString(fmt.Sprintf("🖥 Хост: %s\n", hostname)) - sb.WriteString(fmt.Sprintf("📊 Проверено клиентов: %d\n", stats.TotalClients)) - sb.WriteString(fmt.Sprintf("✅ Без проблем: %d\n", stats.ClientsOK)) + sb.WriteString("🔴 PTAF Docker Ports Check Alert\n\n") + sb.WriteString(fmt.Sprintf("Хост: %s\n", hostname)) + sb.WriteString(fmt.Sprintf("Проверено клиентов: %d\n", stats.TotalClients)) + sb.WriteString(fmt.Sprintf("Без проблем: %d\n", stats.ClientsOK)) if stats.ClientsWarning > 0 { - sb.WriteString(fmt.Sprintf("⚠️ С предупреждениями: %d\n", stats.ClientsWarning)) + sb.WriteString(fmt.Sprintf("С предупреждениями: %d\n", stats.ClientsWarning)) } if stats.ClientsError > 0 { - sb.WriteString(fmt.Sprintf("❌ С ошибками: %d\n", stats.ClientsError)) + sb.WriteString(fmt.Sprintf("С ошибками: %d\n", stats.ClientsError)) } - sb.WriteString("\n📋 Детали проблем:\n\n") + sb.WriteString("\nДетали проблем:\n\n") clientAlerts := make(map[string][]mcAlert) for _, a := range alertList { @@ -550,27 +552,21 @@ func mcSendAlerts(hostname string, stats *mcStatistics, alertList []mcAlert) { } } if crit > 0 { - sb.WriteString(fmt.Sprintf("❌ %s (%d ошибок", client, crit)) + sb.WriteString(fmt.Sprintf("%s (%d ошибок", client, crit)) if warn > 0 { sb.WriteString(fmt.Sprintf(", %d предупреждений", warn)) } sb.WriteString(")\n") } else { - sb.WriteString(fmt.Sprintf("⚠️ %s (%d предупреждений)\n", client, warn)) + sb.WriteString(fmt.Sprintf("%s (%d предупреждений)\n", client, warn)) } for _, a := range cas { - icon := "⚠️" - if a.IsCritical { - icon = "❌" - } - sb.WriteString(fmt.Sprintf("%s %s: %s - %s\n", icon, a.Container, a.ErrorType, a.Description)) + sb.WriteString(fmt.Sprintf("%s: %s - %s\n", a.Container, a.ErrorType, a.Description)) } - sb.WriteString("\n") } - sb.WriteString("━━━━━━━━━━━━━━━━━━━━━\n") - sb.WriteString("🔍 Проверьте должны ли быть данные ресурсы на этом хосте.\n") - sb.WriteString(" Если нет, то удалите все старые контейнеры и конфиги для Angie.\n") + sb.WriteString("Проверьте должны ли быть данные ресурсы на этом хосте.\n") + sb.WriteString("Если нет, то удалите все старые контейнеры и конфиги для Angie.\n") if err := telegramSendHTML(sb.String()); err != nil { fmt.Printf("%s[Telegram] ✗ Ошибка отправки: %v%s\n", cRed, err, cReset) diff --git a/mattermost.go b/mattermost.go old mode 100644 new mode 100755 diff --git a/portcheck.go b/portcheck.go old mode 100644 new mode 100755 diff --git a/portsview.go b/portsview.go old mode 100644 new mode 100755 diff --git a/servicecheck.go b/servicecheck.go old mode 100644 new mode 100755 diff --git a/telegram.go b/telegram.go old mode 100644 new mode 100755 diff --git a/webcheck.go b/webcheck.go old mode 100644 new mode 100755