From: Timo Sirainen Date: Sat, 14 Jan 2023 21:02:48 +0000 (+0200) Subject: doveadm log errors: Add microseconds to timestamp X-Git-Tag: 2.4.0~3176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=644dacbd7f05631376cea081dd78a8ed6de0d8a9;p=thirdparty%2Fdovecot%2Fcore.git doveadm log errors: Add microseconds to timestamp --- diff --git a/src/doveadm/doveadm-log.c b/src/doveadm/doveadm-log.c index 6807389588..8958e6f19c 100644 --- a/src/doveadm/doveadm-log.c +++ b/src/doveadm/doveadm-log.c @@ -304,7 +304,7 @@ static void cmd_log_error_write(const char *const *args, time_t min_timestamp, /* */ const char *type_prefix = "?"; unsigned int type; - time_t t; + struct timeval tv; /* find type's prefix */ for (type = 0; type < LOG_TYPE_COUNT; type++) { @@ -314,12 +314,15 @@ static void cmd_log_error_write(const char *const *args, time_t min_timestamp, } } - if (str_to_time(args[1], &t) < 0) { + if (str_to_timeval(args[1], &tv) < 0) { e_error(event, "Invalid timestamp: %s", args[1]); - t = 0; + i_zero(&tv); } - if (t >= min_timestamp) { - doveadm_print(t_strflocaltime(LOG_TIMESTAMP_FORMAT, t)); + if (tv.tv_sec >= min_timestamp) { + const char *ts_secs = + t_strflocaltime(LOG_TIMESTAMP_FORMAT, tv.tv_sec); + doveadm_print(t_strdup_printf("%s.%06u", ts_secs, + (unsigned int)tv.tv_usec)); doveadm_print(t_cmd_log_error_trim(args[2])); doveadm_print(t_cmd_log_error_trim(type_prefix)); doveadm_print(args[3]); diff --git a/src/lib-master/log-error-buffer.c b/src/lib-master/log-error-buffer.c index 608d1ad47d..ab2b1e6913 100644 --- a/src/lib-master/log-error-buffer.c +++ b/src/lib-master/log-error-buffer.c @@ -9,7 +9,7 @@ struct log_error_data { struct log_error_data *next; enum log_type type; - time_t timestamp; + struct timeval timestamp; unsigned char prefix_text[FLEXIBLE_ARRAY_MEMBER]; }; diff --git a/src/lib-master/log-error-buffer.h b/src/lib-master/log-error-buffer.h index e863c3565d..7bf8f3bcd1 100644 --- a/src/lib-master/log-error-buffer.h +++ b/src/lib-master/log-error-buffer.h @@ -5,7 +5,7 @@ struct log_error_buffer; struct log_error { enum log_type type; - time_t timestamp; + struct timeval timestamp; const char *prefix; const char *text; }; diff --git a/src/log/doveadm-connection.c b/src/log/doveadm-connection.c index a00ada03f7..f6bfdcb480 100644 --- a/src/log/doveadm-connection.c +++ b/src/log/doveadm-connection.c @@ -29,9 +29,10 @@ static int doveadm_connection_send_errors(struct doveadm_connection *conn) iter = log_error_buffer_iter_init(conn->errorbuf); while ((error = log_error_buffer_iter_next(iter)) != NULL) { str_truncate(str, 0); - str_printfa(str, "%s\t%ld\t", + str_printfa(str, "%s\t%"PRIdTIME_T".%06u\t", failure_log_type_names[error->type], - (long)error->timestamp); + error->timestamp.tv_sec, + (unsigned int)error->timestamp.tv_usec); str_append_tabescaped(str, error->prefix); str_append_c(str, '\t'); str_append_tabescaped(str, error->text); diff --git a/src/log/log-connection.c b/src/log/log-connection.c index 0340107586..41fe811431 100644 --- a/src/log/log-connection.c +++ b/src/log/log-connection.c @@ -146,7 +146,7 @@ client_log_ctx(struct log_connection *log, case LOG_TYPE_PANIC: i_zero(&err); err.type = ctx->type; - err.timestamp = log_time->tv_sec; + err.timestamp = *log_time; err.prefix = ctx->log_prefix != NULL ? ctx->log_prefix : prefix; err.text = text; log_error_buffer_add(log->errorbuf, &err);