Browse Source

Show scan time in rspamc client.

tags/1.0.0
Vsevolod Stakhov 8 years ago
parent
commit
012c6f9849
1 changed files with 19 additions and 7 deletions
  1. 19
    7
      src/client/rspamc.c

+ 19
- 7
src/client/rspamc.c View File

@@ -277,6 +277,7 @@ struct rspamc_command {
struct rspamc_callback_data {
struct rspamc_command *cmd;
gchar *filename;
gdouble start;
};

/*
@@ -852,7 +853,8 @@ rspamd_action_from_str (const gchar *data, gint *result)
}

static void
rspamc_mime_output (FILE *out, ucl_object_t *result, GString *input, GError *err)
rspamc_mime_output (FILE *out, ucl_object_t *result, GString *input,
gdouble time, GError *err)
{
GMimeStream *stream;
GByteArray ar;
@@ -914,6 +916,10 @@ rspamc_mime_output (FILE *out, ucl_object_t *result, GString *input, GError *err
hdr_scanned = "rspamc " RVERSION;
g_mime_object_append_header (GMIME_OBJECT (message), "X-Spam-Scanner",
hdr_scanned);
rspamd_snprintf (scorebuf, sizeof (scorebuf), "%.3f", time);
g_mime_object_append_header (GMIME_OBJECT (message), "X-Spam-Scan-Time",
scorebuf);

if (is_spam) {
hdr_spam = "yes";
g_mime_object_append_header (GMIME_OBJECT (message), "X-Spam", hdr_spam);
@@ -1004,7 +1010,7 @@ rspamc_mime_output (FILE *out, ucl_object_t *result, GString *input, GError *err

static void
rspamc_client_execute_cmd (struct rspamc_command *cmd, ucl_object_t *result,
GString *input, GError *err)
GString *input, gdouble time, GError *err)
{
gchar **eargv;
gint eargc, infd, outfd, errfd;
@@ -1032,7 +1038,7 @@ rspamc_client_execute_cmd (struct rspamc_command *cmd, ucl_object_t *result,
out = fdopen (infd, "w");

if (cmd->cmd == RSPAMC_COMMAND_SYMBOLS && mime_output && input) {
rspamc_mime_output (out, result, input, err);
rspamc_mime_output (out, result, input, time, err);
}
else if (result) {
if (raw || cmd->command_output_func == NULL) {
@@ -1073,24 +1079,28 @@ rspamc_client_cb (struct rspamd_client_connection *conn,
struct rspamc_callback_data *cbdata = (struct rspamc_callback_data *)ud;
struct rspamc_command *cmd;
FILE *out = stdout;
gdouble finish = rspamd_get_ticks (), diff;

cmd = cbdata->cmd;
diff = finish - cbdata->start;

if (execute) {
/* Pass all to the external command */
rspamc_client_execute_cmd (cmd, result, input, err);
rspamc_client_execute_cmd (cmd, result, input, diff, err);
}
else {

if (cmd->cmd == RSPAMC_COMMAND_SYMBOLS && mime_output && input) {
rspamc_mime_output (out, result, input, err);
rspamc_mime_output (out, result, input, diff, err);
}
else {
if (cmd->need_input) {
rspamd_fprintf (out, "Results for file: %s\n", cbdata->filename);
rspamd_fprintf (out, "Results for file: %s (%.3f seconds)\n",
cbdata->filename, diff);
}
else {
rspamd_fprintf (out, "Results for command: %s\n", cmd->name);
rspamd_fprintf (out, "Results for command: %s (%.3f seconds)\n",
cmd->name, diff);
}

if (result != NULL) {
@@ -1167,6 +1177,8 @@ rspamc_process_input (struct event_base *ev_base, struct rspamc_command *cmd,
cbdata = g_slice_alloc (sizeof (struct rspamc_callback_data));
cbdata->cmd = cmd;
cbdata->filename = g_strdup (name);
cbdata->start = rspamd_get_ticks ();

if (cmd->need_input) {
rspamd_client_command (conn, cmd->path, attrs, in, rspamc_client_cb,
cbdata, &err);

Loading…
Cancel
Save