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