changeset 19803:4247beae5c8d

doveadm-stats: Use ver2 structures
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Mon, 15 Feb 2016 15:14:25 +0200
parents 78fd3c31f786
children cffa74926d5b
files src/doveadm/doveadm-cmd.c src/doveadm/doveadm-cmd.h src/doveadm/doveadm-stats.c src/doveadm/doveadm.c
diffstat 4 files changed, 53 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-cmd.c	Mon Feb 22 16:12:16 2016 +0200
+++ b/src/doveadm/doveadm-cmd.c	Mon Feb 15 15:14:25 2016 +0200
@@ -18,12 +18,13 @@
 	&doveadm_cmd_mailbox_mutf7,
 	&doveadm_cmd_sis_deduplicate,
 	&doveadm_cmd_sis_find,
-	&doveadm_cmd_stats_dump
 };
 
 static struct doveadm_cmd_ver2 *doveadm_commands_ver2[] = {
 	&doveadm_cmd_stop_ver2,
-	&doveadm_cmd_reload_ver2
+	&doveadm_cmd_reload_ver2,
+	&doveadm_cmd_stats_dump_ver2,
+	&doveadm_cmd_stats_reset_ver2
 };
 
 ARRAY_TYPE(doveadm_cmd) doveadm_cmds;
--- a/src/doveadm/doveadm-cmd.h	Mon Feb 22 16:12:16 2016 +0200
+++ b/src/doveadm/doveadm-cmd.h	Mon Feb 15 15:14:25 2016 +0200
@@ -72,9 +72,6 @@
 extern struct doveadm_cmd doveadm_cmd_mailbox_mutf7;
 extern struct doveadm_cmd doveadm_cmd_sis_deduplicate;
 extern struct doveadm_cmd doveadm_cmd_sis_find;
-extern struct doveadm_cmd doveadm_cmd_stats_dump;
-extern struct doveadm_cmd doveadm_cmd_stats_top;
-extern struct doveadm_cmd doveadm_cmd_stats_reset;
 extern struct doveadm_cmd doveadm_cmd_zlibconnect;
 
 void doveadm_register_cmd(const struct doveadm_cmd *cmd);
@@ -118,5 +115,8 @@
 
 extern struct doveadm_cmd_ver2 doveadm_cmd_stop_ver2;
 extern struct doveadm_cmd_ver2 doveadm_cmd_reload_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_stats_reset_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_stats_dump_ver2;
+extern struct doveadm_cmd_ver2 doveadm_cmd_stats_top_ver2;
 
 #endif
--- a/src/doveadm/doveadm-stats.c	Mon Feb 22 16:12:16 2016 +0200
+++ b/src/doveadm/doveadm-stats.c	Mon Feb 15 15:14:25 2016 +0200
@@ -115,30 +115,29 @@
 	i_stream_destroy(&input);
 }
 
-static void cmd_stats_dump(int argc, char *argv[])
+static int
+cmd2_stats_dump(const struct doveadm_cmd_ver2* dcmd ATTR_UNUSED, int argc, const struct doveadm_cmd_param *argv)
 {
 	const char *path, *cmd;
-	int c;
+	const char *args[3] = {0};
 
-	path = t_strconcat(doveadm_settings->base_dir, "/stats", NULL);
+	if (!doveadm_cmd_param_str(argc, argv, "socket-path", &path))
+		path = t_strconcat(doveadm_settings->base_dir, "/stats", NULL);
 
-	while ((c = getopt(argc, argv, "s:")) > 0) {
-		switch (c) {
-		case 's':
-			path = optarg;
-			break;
-		default:
-			help(&doveadm_cmd_stats_dump);
-		}
+	if (!doveadm_cmd_param_str(argc, argv, "type", &args[0])) {
+		i_error("Missing type parameter");
+		return -1;
 	}
-	argv += optind - 1;
-	if (argv[1] == NULL)
-		help(&doveadm_cmd_stats_dump);
-	cmd = t_strdup_printf("EXPORT\t%s\n",
-			      t_strarray_join((const void *)(argv+1), "\t"));
+
+	/* purely optional */
+	doveadm_cmd_param_str(argc, argv, "filter", &args[1]);
+	args[2] = NULL;
+
+	cmd = t_strdup_printf("EXPORT\t%s\n", t_strarray_join(args, "\t"));
 
 	doveadm_print_init(DOVEADM_PRINT_TYPE_TAB);
 	stats_dump(path, cmd);
+	return 0;
 }
 
 static void
@@ -558,14 +557,14 @@
 			path = optarg;
 			break;
 		default:
-			help(&doveadm_cmd_stats_top);
+			help_ver2(&doveadm_cmd_stats_top_ver2);
 		}
 	}
 	argv += optind - 1;
 	if (argv[1] == NULL)
 		sort_type = "disk";
 	else if (argv[2] != NULL)
-		help(&doveadm_cmd_stats_top);
+		help_ver2(&doveadm_cmd_stats_top_ver2);
 	else
 		sort_type = argv[1];
 
@@ -585,7 +584,7 @@
 			path = optarg;
 			break;
 		default:
-			help(&doveadm_cmd_stats_reset);
+			help_ver2(&doveadm_cmd_stats_reset_ver2);
 		}
 	}
 	argv += optind - 1;
@@ -597,14 +596,34 @@
 	stats_reset(path, (const char**)argv);
 }
 
-struct doveadm_cmd doveadm_cmd_stats_dump = {
-	cmd_stats_dump, "stats dump", "[-s <stats socket path>] <type> [<filter>]"
+struct doveadm_cmd_ver2 doveadm_cmd_stats_dump_ver2 = {
+	.cmd = cmd2_stats_dump,
+	.name = "stats dump",
+	.usage = "[-s <stats socket path>] <type> [<filter>]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('s', "socket-path", CMD_PARAM_STR, 0)
+DOVEADM_CMD_PARAM('\0', "type", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAM('\0', "filter", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
 };
 
-struct doveadm_cmd doveadm_cmd_stats_top = {
-	cmd_stats_top, "stats top", "[-s <stats socket path>] [-b] [<sort field>]"
+struct doveadm_cmd_ver2 doveadm_cmd_stats_top_ver2 = {
+	.old_cmd = cmd_stats_top,
+	.name = "stats top",
+	.usage = "[-s <stats socket path>] [-b] [<sort field>]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('s', "socket-path", CMD_PARAM_STR, 0)
+DOVEADM_CMD_PARAM('b', "bytes", CMD_PARAM_BOOL, 0)
+DOVEADM_CMD_PARAM('\0', "field", CMD_PARAM_STR, CMD_PARAM_FLAG_POSITIONAL)
+DOVEADM_CMD_PARAMS_END
 };
 
-struct doveadm_cmd doveadm_cmd_stats_reset = {
-	cmd_stats_reset, "stats reset", "[-s <stats socket path>]"
+
+struct doveadm_cmd_ver2 doveadm_cmd_stats_reset_ver2 = {
+	.old_cmd = cmd_stats_reset,
+	.name = "stats reset",
+	.usage = "[-s <stats socket path>]",
+DOVEADM_CMD_PARAMS_START
+DOVEADM_CMD_PARAM('s', "socket-path", CMD_PARAM_STR, 0)
+DOVEADM_CMD_PARAMS_END
 };
--- a/src/doveadm/doveadm.c	Mon Feb 22 16:12:16 2016 +0200
+++ b/src/doveadm/doveadm.c	Mon Feb 15 15:14:25 2016 +0200
@@ -265,8 +265,6 @@
 	&doveadm_cmd_exec,
 	&doveadm_cmd_dump,
 	&doveadm_cmd_pw,
-	&doveadm_cmd_stats_top,
-	&doveadm_cmd_stats_reset,
 	&doveadm_cmd_zlibconnect
 };
 
@@ -320,6 +318,9 @@
 	doveadm_cmds_init();
 	for (i = 0; i < N_ELEMENTS(doveadm_cmdline_commands); i++)
 		doveadm_register_cmd(doveadm_cmdline_commands[i]);
+
+	doveadm_cmd_register_ver2(&doveadm_cmd_stats_top_ver2);
+
 	if (cmd_name != NULL && (quick_init ||
 				 strcmp(cmd_name, "config") == 0 ||
 				 strcmp(cmd_name, "stop") == 0 ||