From 29c91ee0db9c1305bbc41b6aba9eaf1b77f64ae0 Mon Sep 17 00:00:00 2001 From: PTah Date: Wed, 27 May 2026 14:15:13 +1000 Subject: [PATCH] feat: send full daily report body and stats in SAC details --- ssh-monitor | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/ssh-monitor b/ssh-monitor index 16e84e4..9b20dd6 100644 --- a/ssh-monitor +++ b/ssh-monitor @@ -1754,7 +1754,45 @@ send_daily_report() { message="${message} Нет активных пользователей"$'\n' fi - notify_or_sac "report.daily.ssh" "info" "Ежедневный отчёт SSH" "Отчёт за сутки" "$message" + local sac_summary sac_details_json + sac_summary="SSH 24ч: успех ${successful_logins:-0}, неудач ${failed_logins:-0}, sudo ${sudo_commands:-0}" + sac_details_json="$( + SAC_REPORT_BODY="$message" \ + SAC_OK="${successful_logins:-0}" \ + SAC_FAIL="${failed_logins:-0}" \ + SAC_SUDO="${sudo_commands:-0}" \ + SAC_BANS="${active_bans:-0}" \ + SAC_ACTIVE="${active_count:-0}" \ + python3 <<'PY' +import html +import json +import os + +body = os.environ.get("SAC_REPORT_BODY", "") +stats = { + "successful_ssh": int(os.environ.get("SAC_OK", "0") or 0), + "failed_ssh": int(os.environ.get("SAC_FAIL", "0") or 0), + "sudo_commands": int(os.environ.get("SAC_SUDO", "0") or 0), + "active_bans": int(os.environ.get("SAC_BANS", "0") or 0), + "active_sessions": int(os.environ.get("SAC_ACTIVE", "0") or 0), +} +escaped = html.escape(body) +report_html = '
' + escaped.replace("\n", "
\n") + "
" +print( + json.dumps( + { + "stats": stats, + "report_body": body, + "report_format": "plain", + "report_html": report_html, + }, + ensure_ascii=False, + ) +) +PY +)" || sac_details_json="" + + notify_or_sac "report.daily.ssh" "info" "Ежедневный отчёт SSH" "$sac_summary" "$message" "$sac_details_json" write_log "Ежедневный отчет отправлен" echo "$(report_date '+%F')" >"$LAST_REPORT_FILE"