diff --git a/assets/js/woocow-admin.js b/assets/js/woocow-admin.js
index f46f2ef..53a294c 100644
--- a/assets/js/woocow-admin.js
+++ b/assets/js/woocow-admin.js
@@ -913,6 +913,45 @@
}
});
+ // ── Ratelimited log renderer ──────────────────────────────────────────
+
+ const renderRatelimitLog = (entries) => {
+ let html = `
+ Rate-Limited Messages
+ ${entries.length} entries
+
+
+
+ | Time |
+ Sender |
+ Recipient |
+ Subject |
+ IP |
+ Rate Limit Rule |
+ Queue ID |
+
`;
+
+ entries.forEach(e => {
+ const dt = e.time ? new Date(e.time * 1000).toLocaleString() : '—';
+ const sender = e.header_from || e.from || '—';
+ const subject = e.header_subject || '—';
+ html += `
+ | ${esc(dt)} |
+ ${esc(sender)} |
+ ${esc(e.rcpt || '—')} |
+ ${esc(subject)} |
+ ${esc(e.ip || '—')} |
+
+ ${esc(e.rl_name || '—')}
+ |
+ ${esc(e.qid || '—')} |
+
`;
+ });
+
+ html += '
';
+ $('#wc-log-wrap').html(html);
+ };
+
// ── Log load ──────────────────────────────────────────────────────────
$('#wc-log-load').on('click', () => {
@@ -931,10 +970,8 @@
return;
}
- if (type === 'rspamd-history') {
- renderRspamdLog(entries);
- return;
- }
+ if (type === 'rspamd-history') { renderRspamdLog(entries); return; }
+ if (type === 'ratelimited') { renderRatelimitLog(entries); return; }
// Plain text log
const typeLabel = $('#wc-log-type option:selected').text();