struct rspamc_callback_data {
struct rspamc_command *cmd;
gchar *filename;
+ gdouble start;
};
/*
}
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;
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);
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;
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) {
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) {
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);