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