]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm-stats: Use ver2 structures
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 15 Feb 2016 13:14:25 +0000 (15:14 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 22 Feb 2016 16:14:08 +0000 (18:14 +0200)
src/doveadm/doveadm-cmd.c
src/doveadm/doveadm-cmd.h
src/doveadm/doveadm-stats.c
src/doveadm/doveadm.c

index 4f565a296ad66b38d6cdc30011d449641b8e9391..04f9e901e8dea9e0112b7a327df3b89303f65dcf 100644 (file)
@@ -18,12 +18,13 @@ static struct doveadm_cmd *doveadm_commands[] = {
        &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;
index 70b2345ddef567303b9d289143a9a9504e770ec5..9b368d7fa01192eeba60869261cf1e5b86dd9552 100644 (file)
@@ -72,9 +72,6 @@ extern struct doveadm_cmd doveadm_cmd_kick;
 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 @@ bool doveadm_cmd_param_istream(int argc, struct doveadm_cmd_param* params, const
 
 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
index 0b4fbd0ca218784ead0ac257b78f2b5f8fade77b..3d9d708b916732c6fcec98c248223659c5b3cfbb 100644 (file)
@@ -115,30 +115,29 @@ static void stats_dump(const char *path, const char *cmd)
        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 @@ static void cmd_stats_top(int argc, char *argv[])
                        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 @@ static void cmd_stats_reset(int argc, char *argv[])
                        path = optarg;
                        break;
                default:
-                       help(&doveadm_cmd_stats_reset);
+                       help_ver2(&doveadm_cmd_stats_reset_ver2);
                }
        }
        argv += optind - 1;
@@ -597,14 +596,34 @@ static void cmd_stats_reset(int argc, char *argv[])
        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
 };
index 0b7d991a59775deb97ceb56ecf7a7e698e8452c6..4eef1456cef68d2e9f50bca9caf0cf4fd6cd9ab2 100644 (file)
@@ -265,8 +265,6 @@ static struct doveadm_cmd *doveadm_cmdline_commands[] = {
        &doveadm_cmd_exec,
        &doveadm_cmd_dump,
        &doveadm_cmd_pw,
-       &doveadm_cmd_stats_top,
-       &doveadm_cmd_stats_reset,
        &doveadm_cmd_zlibconnect
 };
 
@@ -320,6 +318,9 @@ int main(int argc, char *argv[])
        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 ||