aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-28 12:27:52 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-01-28 12:27:52 +0000
commit31ff56946ced9e8f7c2475422c1a5185417cb32b (patch)
tree1668675365aca30d98df4615f2631867ca7c64ea
parent944588e26acadaaf7d68fd4798142e8a754fa9d3 (diff)
downloadrspamd-31ff56946ced9e8f7c2475422c1a5185417cb32b.tar.gz
rspamd-31ff56946ced9e8f7c2475422c1a5185417cb32b.zip
[Minor] Improve counters output
-rw-r--r--src/client/rspamc.c24
-rw-r--r--src/controller.c7
-rw-r--r--src/libserver/symbols_cache.c4
-rw-r--r--src/libserver/symbols_cache.h1
4 files changed, 24 insertions, 12 deletions
diff --git a/src/client/rspamc.c b/src/client/rspamc.c
index dac493d8c..d71a3e089 100644
--- a/src/client/rspamc.c
+++ b/src/client/rspamc.c
@@ -772,8 +772,8 @@ rspamc_counters_sort (const ucl_object_t **o1, const ucl_object_t **o2)
elt2 = ucl_object_lookup (*o2, "frequency");
if (elt1 && elt2) {
- order1 = ucl_object_toint (elt1);
- order2 = ucl_object_toint (elt2);
+ order1 = ucl_object_todouble (elt1) * 100000;
+ order2 = ucl_object_todouble (elt2) * 100000;
}
}
else if (g_ascii_strcasecmp (args[0], "time") == 0) {
@@ -796,10 +796,11 @@ rspamc_counters_sort (const ucl_object_t **o1, const ucl_object_t **o2)
static void
rspamc_counters_output (FILE *out, ucl_object_t *obj)
{
- const ucl_object_t *cur, *sym, *weight, *freq, *tim;
+ const ucl_object_t *cur, *sym, *weight, *freq, *freq_dev, *tim;
ucl_object_iter_t iter = NULL;
gchar fmt_buf[64], dash_buf[82];
gint l, max_len = INT_MIN, i;
+ static const gint dashes = 44;
if (obj->type != UCL_ARRAY) {
rspamd_printf ("Bad output\n");
@@ -817,27 +818,29 @@ rspamc_counters_output (FILE *out, ucl_object_t *obj)
if (sym != NULL) {
l = sym->len;
if (l > max_len) {
- max_len = MIN (40, l);
+ max_len = MIN (sizeof (dash_buf) - dashes - 1, l);
}
}
}
rspamd_snprintf (fmt_buf, sizeof (fmt_buf),
- "| %%3s | %%%ds | %%6s | %%9s | %%9s |\n", max_len);
- memset (dash_buf, '-', 40 + max_len);
- dash_buf[40 + max_len] = '\0';
+ "| %%3s | %%%ds | %%7s | %%13s | %%7s |\n", max_len);
+ memset (dash_buf, '-', dashes + max_len);
+ dash_buf[dashes + max_len] = '\0';
printf ("Symbols cache\n");
printf (" %s \n", dash_buf);
if (tty) {
printf ("\033[1m");
}
- printf (fmt_buf, "Pri", "Symbol", "Weight", "Frequency", "Avg. time");
+ printf (fmt_buf, "Pri", "Symbol", "Weight", "Frequency", "Time");
+ printf (" %s \n", dash_buf);
+ printf (fmt_buf, "", "", "", "hits/sec", "usec");
if (tty) {
printf ("\033[0m");
}
rspamd_snprintf (fmt_buf, sizeof (fmt_buf),
- "| %%3d | %%%ds | %%6.1f | %%9.3f | %%9.3f |\n", max_len);
+ "| %%3d | %%%ds | %%7.1f | %%6.3f(%%5.3f) | %%7.4f |\n", max_len);
iter = NULL;
i = 0;
@@ -846,12 +849,15 @@ rspamc_counters_output (FILE *out, ucl_object_t *obj)
sym = ucl_object_lookup (cur, "symbol");
weight = ucl_object_lookup (cur, "weight");
freq = ucl_object_lookup (cur, "frequency");
+ freq_dev = ucl_object_lookup (cur, "frequency_stddev");
tim = ucl_object_lookup (cur, "time");
+
if (sym && weight && freq && tim) {
printf (fmt_buf, i,
ucl_object_tostring (sym),
ucl_object_todouble (weight),
ucl_object_todouble (freq),
+ ucl_object_todouble (freq_dev),
ucl_object_todouble (tim));
}
i++;
diff --git a/src/controller.c b/src/controller.c
index b5af6adc9..abb6ebe81 100644
--- a/src/controller.c
+++ b/src/controller.c
@@ -776,7 +776,7 @@ rspamd_controller_handle_symbols (struct rspamd_http_connection_entry *conn_ent,
group_symbols = ucl_object_typed_new (UCL_ARRAY);
while (g_hash_table_iter_next (&sit, &k, &v)) {
- gdouble tm = 0.0, freq = 0;
+ gdouble tm = 0.0, freq = 0, freq_dev = 0;
sym = v;
sym_obj = ucl_object_typed_new (UCL_OBJECT);
@@ -793,11 +793,14 @@ rspamd_controller_handle_symbols (struct rspamd_http_connection_entry *conn_ent,
}
if (rspamd_symbols_cache_stat_symbol (session->ctx->cfg->cache,
- sym->name, &freq, &tm)) {
+ sym->name, &freq, &freq_dev, &tm)) {
ucl_object_insert_key (sym_obj,
ucl_object_fromdouble (freq),
"frequency", 0, false);
ucl_object_insert_key (sym_obj,
+ ucl_object_fromdouble (freq_dev),
+ "frequency_stddev", 0, false);
+ ucl_object_insert_key (sym_obj,
ucl_object_fromdouble (tm),
"time", 0, false);
}
diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c
index 5c53a0e08..557347899 100644
--- a/src/libserver/symbols_cache.c
+++ b/src/libserver/symbols_cache.c
@@ -2086,6 +2086,7 @@ gboolean
rspamd_symbols_cache_stat_symbol (struct symbols_cache *cache,
const gchar *name,
gdouble *frequency,
+ gdouble *freq_stddev,
gdouble *tm)
{
struct cache_item *item;
@@ -2099,7 +2100,8 @@ rspamd_symbols_cache_stat_symbol (struct symbols_cache *cache,
item = g_hash_table_lookup (cache->items_by_symbol, name);
if (item != NULL) {
- *frequency = item->st->frequency_counter.mean;
+ *frequency = item->st->avg_frequency;
+ *freq_stddev = item->st->stddev_frequency;
*tm = item->st->time_counter.mean;
return TRUE;
diff --git a/src/libserver/symbols_cache.h b/src/libserver/symbols_cache.h
index 7f8832f07..eadffded3 100644
--- a/src/libserver/symbols_cache.h
+++ b/src/libserver/symbols_cache.h
@@ -143,6 +143,7 @@ gint rspamd_symbols_cache_find_symbol (struct symbols_cache *cache,
gboolean rspamd_symbols_cache_stat_symbol (struct symbols_cache *cache,
const gchar *name,
gdouble *frequency,
+ gdouble *freq_stddev,
gdouble *tm);
/**
* Find symbol in cache by its id