]> source.dussan.org Git - rspamd.git/commitdiff
Implement new saving.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 24 Oct 2015 13:43:15 +0000 (14:43 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 24 Oct 2015 13:43:15 +0000 (14:43 +0100)
src/libserver/roll_history.c

index 798e1f85592f6907200c674f393af631b05caebd..7887788bd2c4b14e107089f6ff40fe3d4a207307 100644 (file)
@@ -81,7 +81,7 @@ void
 rspamd_roll_history_update (struct roll_history *history,
        struct rspamd_task *task)
 {
-       gint row_num;
+       guint row_num;
        struct roll_history_row *row;
        struct metric_result *metric_res;
        struct history_metric_callback_data cbdata;
@@ -332,6 +332,10 @@ gboolean
 rspamd_roll_history_save (struct roll_history *history, const gchar *filename)
 {
        gint fd;
+       ucl_object_t *obj, *elt;
+       guint i;
+       struct roll_history_row *row;
+       struct ucl_emitter_functions *emitter_func;
 
        g_assert (history != NULL);
 
@@ -340,6 +344,46 @@ rspamd_roll_history_save (struct roll_history *history, const gchar *filename)
                return FALSE;
        }
 
+       obj = ucl_object_typed_new (UCL_ARRAY);
+
+       for (i = 0; i < history->nrows; i ++) {
+               row = &history->rows[i];
+
+               if (!row->completed) {
+                       continue;
+               }
+
+               elt = ucl_object_typed_new (UCL_OBJECT);
+
+               ucl_object_insert_key (elt, ucl_object_fromdouble (
+                               tv_to_double (&row->tv)), "time", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromstring (row->message_id),
+                               "id", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromstring (row->symbols),
+                               "symbols", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromstring (row->user),
+                               "user", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromstring (row->from_addr),
+                               "from", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromint (row->len),
+                               "len", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromdouble (row->scan_time),
+                               "scan_time", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromdouble (row->score),
+                               "score", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromdouble (row->required_score),
+                               "required_score", 0, false);
+               ucl_object_insert_key (elt, ucl_object_fromint (row->action),
+                               "action", 0, false);
+
+               ucl_array_append (obj, elt);
+       }
+
+       emitter_func = ucl_object_emit_fd_funcs (fd);
+       ucl_object_emit_full (obj, UCL_EMIT_JSON_COMPACT, emitter_func);
+       ucl_object_emit_funcs_free (emitter_func);
+       ucl_object_unref (obj);
+
        close (fd);
 
        return TRUE;