dovecot-2.1: doveadm log errors: Added -s <min_timestamp> parameter

dovecot at dovecot.org dovecot at dovecot.org
Fri Jun 15 23:45:07 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/8de41fa0fbf1
changeset: 14560:8de41fa0fbf1
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Jun 15 23:44:53 2012 +0300
description:
doveadm log errors: Added -s <min_timestamp> parameter

diffstat:

 src/doveadm/doveadm-log.c |  34 ++++++++++++++++++++++++++--------
 1 files changed, 26 insertions(+), 8 deletions(-)

diffs (77 lines):

diff -r a4cd22976ddb -r 8de41fa0fbf1 src/doveadm/doveadm-log.c
--- a/src/doveadm/doveadm-log.c	Fri Jun 15 17:12:24 2012 +0300
+++ b/src/doveadm/doveadm-log.c	Fri Jun 15 23:44:53 2012 +0300
@@ -23,6 +23,8 @@
 #define LOG_ERRORS_FNAME "log-errors"
 #define LOG_TIMESTAMP_FORMAT "%b %d %H:%M:%S"
 
+extern struct doveadm_cmd doveadm_cmd_log[];
+
 static void cmd_log_test(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED)
 {
 	struct failure_context ctx;
@@ -278,7 +280,7 @@
 	}
 }
 
-static void cmd_log_error_write(const char *const *args)
+static void cmd_log_error_write(const char *const *args, time_t min_timestamp)
 {
 	/* <type> <timestamp> <prefix> <text> */
 	const char *type_prefix = "?";
@@ -297,16 +299,32 @@
 		i_error("Invalid timestamp: %s", args[1]);
 		t = 0;
 	}
-
-	printf("%s %s%s%s\n", t_strflocaltime(LOG_TIMESTAMP_FORMAT, t),
-	       args[2], type_prefix, args[3]);
+	if (t >= min_timestamp) {
+		printf("%s %s%s%s\n", t_strflocaltime(LOG_TIMESTAMP_FORMAT, t),
+		       args[2], type_prefix, args[3]);
+	}
 }
 
-static void cmd_log_errors(int argc ATTR_UNUSED, char *argv[] ATTR_UNUSED)
+static void cmd_log_errors(int argc, char *argv[])
 {
 	struct istream *input;
 	const char *path, *line, *const *args;
-	int fd;
+	time_t min_timestamp = 0;
+	int c, fd;
+
+	while ((c = getopt(argc, argv, "s:")) > 0) {
+		switch (c) {
+		case 's':
+			if (str_to_time(optarg, &min_timestamp) < 0)
+				i_fatal("Invalid timestamp: %s", optarg);
+			break;
+		default:
+			help(&doveadm_cmd_log[3]);
+		}
+	}
+	argv += optind - 1;
+	if (argv[1] != NULL)
+		help(&doveadm_cmd_log[3]);
 
 	path = t_strconcat(doveadm_settings->base_dir,
 			   "/"LOG_ERRORS_FNAME, NULL);
@@ -319,7 +337,7 @@
 	while ((line = i_stream_read_next_line(input)) != NULL) T_BEGIN {
 		args = t_strsplit_tabescaped(line);
 		if (str_array_length(args) == 4)
-			cmd_log_error_write(args);
+			cmd_log_error_write(args, min_timestamp);
 		else {
 			i_error("Invalid input from log: %s", line);
 			doveadm_exit_code = EX_PROTOCOL;
@@ -332,7 +350,7 @@
 	{ cmd_log_test, "log test", "" },
 	{ cmd_log_reopen, "log reopen", "" },
 	{ cmd_log_find, "log find", "[<dir>]" },
-	{ cmd_log_errors, "log errors", "" }
+	{ cmd_log_errors, "log errors", "[-s <timestamp>]" }
 };
 
 void doveadm_register_log_commands(void)


More information about the dovecot-cvs mailing list