fix: отмена скана при исчерпании соединений Postgres

- Распознавание 53300/too many clients и др. в isStoreCapacityOrConnExhausted

- SaveHostResult/порты/SNMP: при фатальной ошибке БД — CancelScan; ctx отменяет дальнейший SNMP

- Воркеры при ctx.Done быстро скипают оставшиеся IP без SNMP (дренаж канала)

Made-with: Cursor
This commit is contained in:
PTah
2026-04-13 15:41:16 +10:00
parent 0086302605
commit 3292f77e5c
3 changed files with 97 additions and 18 deletions
+20
View File
@@ -0,0 +1,20 @@
package scans
import (
"strings"
)
// isStoreCapacityOrConnExhausted — ошибки, при которых дальнейший проход скана в БД бессмысленен (слоты Postgres, пул и т.п.).
func isStoreCapacityOrConnExhausted(err error) bool {
if err == nil {
return false
}
msg := strings.ToLower(err.Error())
return strings.Contains(msg, "53300") ||
strings.Contains(msg, "too many clients") ||
strings.Contains(msg, "remaining connection slots") ||
strings.Contains(msg, "connection slots are reserved") ||
strings.Contains(msg, "sql: connection is closed") ||
strings.Contains(msg, "broken pipe") ||
strings.Contains(msg, "connection reset by peer")
}