]> source.dussan.org Git - rspamd.git/commitdiff
* Add log line for each message in SA style
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 11 Mar 2009 16:45:57 +0000 (19:45 +0300)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 11 Mar 2009 16:45:57 +0000 (19:45 +0300)
src/main.h
src/message.c
src/plugins/surbl.c
src/protocol.c

index 0a727bcce3a523d2baf346b4f4bd9ecfa00bbb8b..7b7c221ca7743e9e75c3872c248180f1b511cd44 100644 (file)
@@ -175,6 +175,7 @@ struct worker_task {
        char *helo;                                                                                                     /**< helo header value                                                          */
        char *from;                                                                                                     /**< from header value                                                          */
        char *queue_id;                                                                                         /**< queue id if specified                                                      */
+       const char *message_id;                                                                         /**< message id                                                                         */
        GList *rcpt;                                                                                            /**< recipients list                                                            */
        unsigned int nrcpt;                                                                                     /**< number of recipients                                                       */
        struct in_addr from_addr;                                                                       /**< client addr in numeric form                                        */
index 61f89317e4df6cdfd9802fefba1f67e276d953e9..4780a11ffb9f0753446de5b5bde2da965b0968c2 100644 (file)
@@ -366,6 +366,10 @@ process_message (struct worker_task *task)
        if (task->queue_id == NULL) {
                task->queue_id = (char *)g_mime_message_get_message_id (task->message);
        }
+       task->message_id = g_mime_message_get_message_id (task->message);
+       if (task->message_id == NULL) {
+               task->message_id = "undef";
+       }
 
        task->worker->srv->stat->messages_scanned ++;
 
index a5ea46865a6121b4d3faf86023bf41260044eacd..11abc49d964878120e6d059a219ba8a202278bbc 100644 (file)
@@ -387,12 +387,12 @@ dns_callback (int result, char type, int count, int ttl, void *addresses, void *
        /* If we have result from DNS server, this url exists in SURBL, so increase score */
        if (result == DNS_ERR_NONE && type == DNS_IPv4_A) {
                msg_info ("surbl_check: <%s> url %s is in surbl %s", 
-                                       param->task->queue_id, param->url->host, param->suffix->suffix);
+                                       param->task->message_id, param->url->host, param->suffix->suffix);
                process_dns_results (param->task, param->suffix, param->url->host, (uint32_t)(((in_addr_t *)addresses)[0]));
        }
        else {
                msg_debug ("surbl_check: <%s> url %s is not in surbl %s", 
-                                       param->task->queue_id, param->url->host, param->suffix->suffix);
+                                       param->task->message_id, param->url->host, param->suffix->suffix);
        }
        *(param->url->host + param->url->hostlen) = c;
        
@@ -556,7 +556,7 @@ redirector_callback (int fd, short what, void *arg)
                        else {
                                event_del (&param->ev);
                                msg_info ("redirector_callback: <%s> connection to redirector timed out while waiting for write",
-                                                       param->task->queue_id);
+                                                       param->task->message_id);
                                param->task->save.saved --;
                                make_surbl_requests (param->url, param->task, param->tree);
 
@@ -581,7 +581,7 @@ redirector_callback (int fd, short what, void *arg)
                                        }
                                        if (*p == '\0') {
                                                msg_info ("redirector_callback: <%s> got reply from redirector: '%s' -> '%s'", 
-                                                                       param->task->queue_id, struri (param->url), c);
+                                                                       param->task->message_id, struri (param->url), c);
                                                parse_uri (param->url, c, param->task->task_pool);
                                        }
                                }
@@ -597,7 +597,7 @@ redirector_callback (int fd, short what, void *arg)
                        else {
                                event_del (&param->ev);
                                msg_info ("redirector_callback: <%s> reading redirector timed out, while waiting for read",
-                                                       param->task->queue_id);
+                                                       param->task->message_id);
                                param->task->save.saved --;
                                make_surbl_requests (param->url, param->task, param->tree);
                                if (param->task->save.saved == 0) {
@@ -622,7 +622,7 @@ register_redirector_call (struct uri *url, struct worker_task *task, GTree *url_
 
        if (s == -1) {
                msg_info ("register_redirector_call: <%s> cannot create tcp socket failed: %s", 
-                                       task->queue_id, strerror (errno));
+                                       task->message_id, strerror (errno));
                task->save.saved --;
                make_surbl_requests (url, task, url_tree);
                return; 
index 257426813deba378f3c77c7072a9e4b11a554e8d..f65d0b1a5a270ec39506a9b0b8dbded3d5bdd0aa 100644 (file)
@@ -321,6 +321,13 @@ read_rspamd_input_line (struct worker_task *task, f_str_t *line)
        }
 }
 
+struct metric_callback_data {
+       struct worker_task *task;
+       char *log_buf;
+       int log_offset;
+       int log_size;
+};
+
 static void
 show_url_header (struct worker_task *task)
 {
@@ -365,7 +372,8 @@ show_url_header (struct worker_task *task)
 static void
 metric_symbols_callback (gpointer key, gpointer value, void *user_data)
 {
-       struct worker_task *task = (struct worker_task *)user_data;
+       struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
+       struct worker_task *task = cd->task;
        int r = 0;
        char outbuf[OUTBUFSIZ];
        struct symbol *s = (struct symbol *)value;      
@@ -392,18 +400,20 @@ metric_symbols_callback (gpointer key, gpointer value, void *user_data)
        else {
                r = snprintf (outbuf, OUTBUFSIZ, "Symbol: %s" CRLF, (char *)key);
        }
+       cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
+                                               "%s,", (char *)key); 
 
        rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE);
 }
 
 static void
-show_metric_symbols (struct metric_result *metric_res, struct worker_task *task)
+show_metric_symbols (struct metric_result *metric_res, struct metric_callback_data *cd)
 {
        int r = 0;
        GList *symbols, *cur;
        char outbuf[OUTBUFSIZ];
 
-       if (task->proto == SPAMC_PROTO) {
+       if (cd->task->proto == SPAMC_PROTO) {
                symbols = g_hash_table_get_keys (metric_res->symbols);
                cur = symbols;
                while (cur) {
@@ -416,17 +426,18 @@ show_metric_symbols (struct metric_result *metric_res, struct worker_task *task)
                        cur = g_list_next (cur);
                }
                g_list_free (symbols);
-               rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE);
+               rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE);
        }
        else {
-               g_hash_table_foreach (metric_res->symbols, metric_symbols_callback, task);
+               g_hash_table_foreach (metric_res->symbols, metric_symbols_callback, cd);
        }
 }
 
 static void
 show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data)
 {
-       struct worker_task *task = (struct worker_task *)user_data;
+       struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
+       struct worker_task *task = cd->task;
        int r;
        char outbuf[OUTBUFSIZ];
        struct metric_result *metric_res = (struct metric_result *)metric_value;
@@ -443,6 +454,8 @@ show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data
                        r = snprintf (outbuf, sizeof (outbuf), "Metric: default; False; 0 / %.2f" CRLF,
                                                m != NULL ? m->required_score : 0);
                }
+               cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
+                                               "(%s: F: [0/%.2f] [", "default", m != NULL ? m->required_score : 0); 
        }
        else {
                if (metric_res->score >= metric_res->metric->required_score) {
@@ -456,32 +469,43 @@ show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data
                        r = snprintf (outbuf, sizeof (outbuf), "Metric: %s; %s; %.2f / %.2f" CRLF, (char *)metric_name,
                                                (is_spam) ? "True" : "False", metric_res->score, metric_res->metric->required_score);
                }
+               cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
+                                               "(%s: %s: [%.2f/%.2f] [", (char *)metric_name, is_spam ? "T" : "F", 
+                                               metric_res->score, metric_res->metric->required_score); 
        }
        rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE);
 
        if (task->cmd == CMD_SYMBOLS && metric_value != NULL) {
-               show_metric_symbols (metric_res, task);
+               show_metric_symbols (metric_res, cd);
        }
+       cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset, "] )");
 }
 
 static int
 write_check_reply (struct worker_task *task)
 {
        int r;
-       char outbuf[OUTBUFSIZ];
+       char outbuf[OUTBUFSIZ], logbuf[OUTBUFSIZ];
        struct metric_result *metric_res;
+       struct metric_callback_data cd;
 
        r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER, "OK");
        rspamd_dispatcher_write (task->dispatcher, outbuf, r, TRUE);
+
+       cd.task = task;
+       cd.log_buf = logbuf;
+       cd.log_offset = snprintf (logbuf, sizeof (logbuf), "process_message: msg ok, id: <%s>, ", task->message_id);
+       cd.log_size = sizeof (logbuf);
+
        if (task->proto == SPAMC_PROTO) {
                /* Ignore metrics, just write report for 'default' metric */
                metric_res = g_hash_table_lookup (task->results, "default");
                if (metric_res == NULL) {
                        /* Implicit metric result */
-                       show_metric_result (NULL, NULL, (void *)task);
+                       show_metric_result (NULL, NULL, (void *)&cd);
                }
                else {
-                       show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)task);
+                       show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
                }
        }
        else {
@@ -489,18 +513,19 @@ write_check_reply (struct worker_task *task)
                metric_res = g_hash_table_lookup (task->results, "default");
                if (metric_res == NULL) {
                        /* Implicit metric result */
-                       show_metric_result (NULL, NULL, (void *)task);
+                       show_metric_result (NULL, NULL, (void *)&cd);
                }
                else {
-                       show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)task);
+                       show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
                }
                g_hash_table_remove (task->results, "default");
 
                /* Write result for each metric separately */
-               g_hash_table_foreach (task->results, show_metric_result, task);
+               g_hash_table_foreach (task->results, show_metric_result, &cd);
                /* URL stat */
                show_url_header (task);
        }
+       msg_info ("%s", logbuf);
        rspamd_dispatcher_write (task->dispatcher, CRLF, sizeof (CRLF) - 1, FALSE);
 
        return 0;