Skip to content

Commit

Permalink
doveadm-stats: Use ver2 structures
Browse files Browse the repository at this point in the history
  • Loading branch information
cmouse authored and sirainen committed Feb 22, 2016
1 parent d68a021 commit 676d560
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 32 deletions.
5 changes: 3 additions & 2 deletions src/doveadm/doveadm-cmd.c
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions src/doveadm/doveadm-cmd.h
Expand Up @@ -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);
Expand Down Expand Up @@ -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
69 changes: 44 additions & 25 deletions src/doveadm/doveadm-stats.c
Expand Up @@ -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
Expand Down Expand Up @@ -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];

Expand All @@ -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;
Expand All @@ -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
};
5 changes: 3 additions & 2 deletions src/doveadm/doveadm.c
Expand Up @@ -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
};

Expand Down Expand Up @@ -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 ||
Expand Down

0 comments on commit 676d560

Please sign in to comment.