commit 4a5f9c2: [Feature] Show average scan time in `rspamc stat` output
Vsevolod Stakhov
vsevolod at highsecure.ru
Sat Feb 26 13:35:09 UTC 2022
Author: Vsevolod Stakhov
Date: 2022-02-26 13:31:58 +0000
URL: https://github.com/rspamd/rspamd/commit/4a5f9c2d9182dff86ff3267d15c418f2db4e40c5 (HEAD -> master)
[Feature] Show average scan time in `rspamc stat` output
---
src/client/rspamc.c | 72 +++++++++++++++++++++++++++++++++++++----------------
1 file changed, 51 insertions(+), 21 deletions(-)
diff --git a/src/client/rspamc.c b/src/client/rspamc.c
index 0a49c1c04..20886f933 100644
--- a/src/client/rspamc.c
+++ b/src/client/rspamc.c
@@ -1124,21 +1124,23 @@ rspamc_stat_actions (ucl_object_t *obj, GString *out, gint64 scanned)
ucl_object_iter_t iter = NULL;
gint64 spam, ham;
- if (actions && ucl_object_type (actions) == UCL_OBJECT) {
- while ((cur = ucl_object_iterate (actions, &iter, true)) != NULL) {
- gint64 cnt = ucl_object_toint (cur);
- rspamd_printf_gstring (out, "Messages with action %s: %L"
- ", %.2f%%\n", ucl_object_key (cur), cnt,
- ((gdouble)cnt / (gdouble)scanned) * 100.);
+ if (scanned > 0) {
+ if (actions && ucl_object_type(actions) == UCL_OBJECT) {
+ while ((cur = ucl_object_iterate (actions, &iter, true)) != NULL) {
+ gint64 cnt = ucl_object_toint(cur);
+ rspamd_printf_gstring(out, "Messages with action %s: %L"
+ ", %.2f%%\n", ucl_object_key(cur), cnt,
+ ((gdouble) cnt / (gdouble) scanned) * 100.);
+ }
}
- }
- spam = ucl_object_toint (ucl_object_lookup (obj, "spam_count"));
- ham = ucl_object_toint (ucl_object_lookup (obj, "ham_count"));
- rspamd_printf_gstring (out, "Messages treated as spam: %L, %.2f%%\n", spam,
- ((gdouble)spam / (gdouble)scanned) * 100.);
- rspamd_printf_gstring (out, "Messages treated as ham: %L, %.2f%%\n", ham,
- ((gdouble)ham / (gdouble)scanned) * 100.);
+ spam = ucl_object_toint(ucl_object_lookup(obj, "spam_count"));
+ ham = ucl_object_toint(ucl_object_lookup(obj, "ham_count"));
+ rspamd_printf_gstring(out, "Messages treated as spam: %L, %.2f%%\n", spam,
+ ((gdouble) spam / (gdouble) scanned) * 100.);
+ rspamd_printf_gstring(out, "Messages treated as ham: %L, %.2f%%\n", ham,
+ ((gdouble) ham / (gdouble) scanned) * 100.);
+ }
}
static void
@@ -1177,8 +1179,7 @@ static void
rspamc_stat_output (FILE *out, ucl_object_t *obj)
{
GString *out_str;
- ucl_object_iter_t iter = NULL;
- const ucl_object_t *st, *cur;
+ const ucl_object_t *st;
gint64 scanned;
out_str = g_string_sized_new (BUFSIZ);
@@ -1187,9 +1188,7 @@ rspamc_stat_output (FILE *out, ucl_object_t *obj)
rspamd_printf_gstring (out_str, "Messages scanned: %L\n",
scanned);
- if (scanned > 0) {
- rspamc_stat_actions (obj, out_str, scanned);
- }
+ rspamc_stat_actions (obj, out_str, scanned);
rspamd_printf_gstring (out_str, "Messages learned: %L\n",
ucl_object_toint (ucl_object_lookup (obj, "learned")));
@@ -1197,6 +1196,32 @@ rspamc_stat_output (FILE *out, ucl_object_t *obj)
ucl_object_toint (ucl_object_lookup (obj, "connections")));
rspamd_printf_gstring (out_str, "Control connections count: %L\n",
ucl_object_toint (ucl_object_lookup (obj, "control_connections")));
+
+ const ucl_object_t *avg_time_obj = ucl_object_lookup (obj, "scan_times");
+
+ if (avg_time_obj && ucl_object_type (avg_time_obj) == UCL_ARRAY) {
+ ucl_object_iter_t iter = NULL;
+ const ucl_object_t *cur;
+ float sum = 0.0f;
+ volatile float c = 0.0f;
+ unsigned cnt = 0;
+
+ while ((cur = ucl_object_iterate (avg_time_obj, &iter, true)) != NULL) {
+ if (ucl_object_type(cur) == UCL_FLOAT || ucl_object_type(cur) == UCL_INT) {
+ float x = ucl_object_todouble(cur);
+ float y = x - c;
+ float t = sum + y;
+ c = (t - sum) - y;
+ sum = t;
+ cnt ++;
+ }
+ }
+
+ if (cnt > 0) {
+ rspamd_printf_gstring(out_str, "Average scan time: %.3f sec\n", sum / cnt);
+ }
+ }
+
/* Pools */
rspamd_printf_gstring (out_str, "Pools allocated: %L\n",
ucl_object_toint (ucl_object_lookup (obj, "pools_allocated")));
@@ -1233,8 +1258,10 @@ rspamc_stat_output (FILE *out, ucl_object_t *obj)
st = ucl_object_lookup (obj, "fuzzy_checked");
if (st != NULL && ucl_object_type (st) == UCL_ARRAY) {
+ ucl_object_iter_t iter = NULL;
+ const ucl_object_t *cur;
+
rspamd_printf_gstring (out_str, "Fuzzy hashes checked: ");
- iter = NULL;
while ((cur = ucl_object_iterate (st, &iter, true)) != NULL) {
rspamd_printf_gstring (out_str, "%hL ", ucl_object_toint (cur));
@@ -1245,8 +1272,10 @@ rspamc_stat_output (FILE *out, ucl_object_t *obj)
st = ucl_object_lookup (obj, "fuzzy_found");
if (st != NULL && ucl_object_type (st) == UCL_ARRAY) {
+ ucl_object_iter_t iter = NULL;
+ const ucl_object_t *cur;
+
rspamd_printf_gstring (out_str, "Fuzzy hashes found: ");
- iter = NULL;
while ((cur = ucl_object_iterate (st, &iter, true)) != NULL) {
rspamd_printf_gstring (out_str, "%hL ", ucl_object_toint (cur));
@@ -1257,7 +1286,8 @@ rspamc_stat_output (FILE *out, ucl_object_t *obj)
st = ucl_object_lookup (obj, "statfiles");
if (st != NULL && ucl_object_type (st) == UCL_ARRAY) {
- iter = NULL;
+ ucl_object_iter_t iter = NULL;
+ const ucl_object_t *cur;
while ((cur = ucl_object_iterate (st, &iter, true)) != NULL) {
rspamc_stat_statfile (cur, out_str);
More information about the Commits
mailing list