aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/controller.c20
-rw-r--r--src/rspamd.c6
-rw-r--r--src/rspamd.h8
3 files changed, 21 insertions, 13 deletions
diff --git a/src/controller.c b/src/controller.c
index 3b524c590..ca9558046 100644
--- a/src/controller.c
+++ b/src/controller.c
@@ -720,7 +720,7 @@ rspamd_controller_handle_auth (struct rspamd_http_connection_entry *conn_ent,
struct rspamd_http_message *msg)
{
struct rspamd_controller_session *session = conn_ent->ud;
- struct rspamd_stat *st;
+ struct rspamd_stat st;
int64_t uptime;
gulong data[5];
ucl_object_t *obj;
@@ -730,13 +730,13 @@ rspamd_controller_handle_auth (struct rspamd_http_connection_entry *conn_ent,
}
obj = ucl_object_typed_new (UCL_OBJECT);
- st = session->ctx->srv->stat;
- data[0] = st->actions_stat[METRIC_ACTION_NOACTION];
- data[1] = st->actions_stat[METRIC_ACTION_ADD_HEADER] +
- st->actions_stat[METRIC_ACTION_REWRITE_SUBJECT];
- data[2] = st->actions_stat[METRIC_ACTION_GREYLIST];
- data[3] = st->actions_stat[METRIC_ACTION_REJECT];
- data[4] = st->actions_stat[METRIC_ACTION_SOFT_REJECT];
+ memcpy (&st, session->ctx->srv->stat, sizeof (st));
+ data[0] = st.actions_stat[METRIC_ACTION_NOACTION];
+ data[1] = st.actions_stat[METRIC_ACTION_ADD_HEADER] +
+ st.actions_stat[METRIC_ACTION_REWRITE_SUBJECT];
+ data[2] = st.actions_stat[METRIC_ACTION_GREYLIST];
+ data[3] = st.actions_stat[METRIC_ACTION_REJECT];
+ data[4] = st.actions_stat[METRIC_ACTION_SOFT_REJECT];
/* Get uptime */
uptime = ev_time () - session->ctx->start_time;
@@ -758,9 +758,9 @@ rspamd_controller_handle_auth (struct rspamd_http_connection_entry *conn_ent,
ucl_object_insert_key (obj, ucl_object_fromint (
data[4]), "soft_reject", 0, false);
ucl_object_insert_key (obj, ucl_object_fromint (
- st->messages_scanned), "scanned", 0, false);
+ st.messages_scanned), "scanned", 0, false);
ucl_object_insert_key (obj, ucl_object_fromint (
- st->messages_learned), "learned", 0, false);
+ st.messages_learned), "learned", 0, false);
ucl_object_insert_key (obj, ucl_object_frombool (!session->is_enable),
"read_only", 0, false);
ucl_object_insert_key (obj, ucl_object_fromstring (session->ctx->cfg->checksum),
diff --git a/src/rspamd.c b/src/rspamd.c
index 5be64d6f5..04c574b82 100644
--- a/src/rspamd.c
+++ b/src/rspamd.c
@@ -1348,8 +1348,10 @@ main (gint argc, gchar **argv, gchar **env)
rspamd_main->server_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (),
"main", 0);
- rspamd_main->stat = rspamd_mempool_alloc0_shared (rspamd_main->server_pool,
- sizeof (struct rspamd_stat));
+ rspamd_main->stat = rspamd_mempool_alloc0_shared_ (rspamd_main->server_pool,
+ sizeof (struct rspamd_stat),
+ RSPAMD_ALIGNOF(struct rspamd_stat),
+ G_STRLOC);
rspamd_main->cfg = rspamd_config_new (RSPAMD_CONFIG_INIT_DEFAULT);
rspamd_main->spairs = g_hash_table_new_full (rspamd_spair_hash,
rspamd_spair_equal, g_free, rspamd_spair_close);
diff --git a/src/rspamd.h b/src/rspamd.h
index 2a8f9a442..bc2fe0ad7 100644
--- a/src/rspamd.h
+++ b/src/rspamd.h
@@ -279,15 +279,21 @@ struct rspamd_dns_resolver;
struct rspamd_task;
struct rspamd_cryptobox_library_ctx;
+#define MAX_AVG_TIME_SLOTS 31
+struct RSPAMD_ALIGNED(64) rspamd_avg_time {
+ guint32 cur_slot;
+ float avg_time[MAX_AVG_TIME_SLOTS];
+};
/**
* Server statistics
*/
-struct rspamd_stat {
+struct RSPAMD_ALIGNED(64) rspamd_stat {
guint messages_scanned; /**< total number of messages scanned */
guint actions_stat[METRIC_ACTION_MAX]; /**< statistic for each action */
guint connections_count; /**< total connections count */
guint control_connections_count; /**< connections count to control interface */
guint messages_learned; /**< messages learned */
+ struct rspamd_avg_time avg_time; /**< average time stats */
};
/**