summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2014-01-21 17:43:37 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2014-01-21 17:43:37 +0000
commit93724ea85907b20546f7c2cd5fc0c2d39944ee5b (patch)
tree2da7b0c1a5147f33164ca5969e7722c8598e1f0e
parent2ca3a4d06f6f8ebcf6e31a6e3c73ae72120395a4 (diff)
downloadrspamd-93724ea85907b20546f7c2cd5fc0c2d39944ee5b.tar.gz
rspamd-93724ea85907b20546f7c2cd5fc0c2d39944ee5b.zip
Improve client output.
-rw-r--r--src/client/rspamc.c41
1 files changed, 32 insertions, 9 deletions
diff --git a/src/client/rspamc.c b/src/client/rspamc.c
index 75411887a..77520a346 100644
--- a/src/client/rspamc.c
+++ b/src/client/rspamc.c
@@ -193,6 +193,11 @@ struct rspamc_command {
}
};
+struct rspamc_callback_data {
+ struct rspamc_command *cmd;
+ const gchar *filename;
+};
+
/*
* Parse command line
*/
@@ -400,8 +405,10 @@ rspamc_metric_output (ucl_object_t *obj)
{
ucl_object_iter_t it = NULL;
ucl_object_t *cur;
+ gdouble score, required_score;
+ gint got_scores = 0;
- rspamd_fprintf (stdout, "%s:\n", ucl_object_key (obj));
+ rspamd_fprintf (stdout, "[Metric: %s]\n", ucl_object_key (obj));
while ((cur = ucl_iterate_object (obj, &it, true)) != NULL) {
if (g_ascii_strcasecmp (ucl_object_key (cur), "is_spam") == 0) {
@@ -409,10 +416,12 @@ rspamc_metric_output (ucl_object_t *obj)
"true" : "false");
}
else if (g_ascii_strcasecmp (ucl_object_key (cur), "score") == 0) {
- rspamd_fprintf (stdout, "Score: %.2f\n", ucl_object_todouble (cur));
+ score = ucl_object_todouble (cur);
+ got_scores ++;
}
else if (g_ascii_strcasecmp (ucl_object_key (cur), "required_score") == 0) {
- rspamd_fprintf (stdout, "Required score: %.2f\n", ucl_object_todouble (cur));
+ required_score = ucl_object_todouble (cur);
+ got_scores ++;
}
else if (g_ascii_strcasecmp (ucl_object_key (cur), "action") == 0) {
rspamd_fprintf (stdout, "Action: %s\n", ucl_object_tostring(cur));
@@ -420,6 +429,10 @@ rspamc_metric_output (ucl_object_t *obj)
else if (cur->type == UCL_OBJECT) {
rspamc_symbol_ouptut (cur);
}
+ if (got_scores == 2) {
+ rspamd_fprintf (stdout, "Score: %.2f / %.2f\n", score, required_score);
+ got_scores = 0;
+ }
}
}
@@ -461,8 +474,11 @@ rspamc_client_cb (struct rspamd_client_connection *conn,
gpointer ud, GError *err)
{
gchar *out;
- struct rspamc_command *cmd = (struct rspamc_command *)ud;
+ struct rspamc_callback_data *cbdata = (struct rspamc_callback_data *)ud;
+ struct rspamc_command *cmd;
+ cmd = cbdata->cmd;
+ rspamd_fprintf (stdout, "Results for file: %s\n", cbdata->filename);
if (result != NULL) {
if (headers && msg != NULL) {
rspamc_output_headers (msg);
@@ -483,7 +499,11 @@ rspamc_client_cb (struct rspamd_client_connection *conn,
ucl_object_unref (result);
}
+ rspamd_fprintf (stdout, "\n");
+ fflush (stdout);
+
rspamd_client_destroy (conn);
+ g_slice_free1 (sizeof (struct rspamc_callback_data), cbdata);
}
static void
@@ -494,6 +514,7 @@ rspamc_process_input (struct event_base *ev_base, struct rspamc_command *cmd,
gchar **connectv;
guint16 port;
GError *err = NULL;
+ struct rspamc_callback_data *cbdata;
connectv = g_strsplit_set (connect_str, ":", -1);
@@ -517,7 +538,10 @@ rspamc_process_input (struct event_base *ev_base, struct rspamc_command *cmd,
g_strfreev (connectv);
if (conn != NULL) {
- rspamd_client_command (conn, cmd->name, attrs, in, rspamc_client_cb, cmd, &err);
+ cbdata = g_slice_alloc (sizeof (struct rspamc_callback_data));
+ cbdata->cmd = cmd;
+ cbdata->filename = name;
+ rspamd_client_command (conn, cmd->name, attrs, in, rspamc_client_cb, cbdata, &err);
}
}
@@ -601,13 +625,12 @@ main (gint argc, gchar **argv, gchar **env)
}
else {
for (i = start_argc; i < argc; i ++) {
- rspamd_fprintf (stdout, "Results for file: %s\n", argv[i]);
- in = fopen (argv[1], "r");
+ in = fopen (argv[i], "r");
if (in == NULL) {
- fprintf (stderr, "cannot open file %s\n", argv[1]);
+ fprintf (stderr, "cannot open file %s\n", argv[i]);
exit (EXIT_FAILURE);
}
- rspamc_process_input (ev_base, cmd, in, argv[1], kwattrs);
+ rspamc_process_input (ev_base, cmd, in, argv[i], kwattrs);
fclose (in);
}
}