X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=client.c;h=c8850440152889dadb397f4195c934e305a122c7;hp=f7726f7469c75fc54b2c9f06ff27c5d26278836e;hb=a5951dd7710352c373aa1018ec42181b07031165;hpb=fb1a0dcdc0869f0c92c49f13e640c15f4ab3b7e2 diff --git a/client.c b/client.c index f7726f74..c8850440 100644 --- a/client.c +++ b/client.c @@ -198,14 +198,23 @@ static void fio_client_json_init(void) static void fio_client_json_fini(void) { - if (!(output_format & FIO_OUTPUT_JSON)) + struct buf_output out; + + if (!root) return; - log_info("\n"); - json_print_object(root, NULL); - log_info("\n"); + buf_output_init(&out); + + __log_buf(&out, "\n"); + json_print_object(root, &out); + __log_buf(&out, "\n"); + log_info_buf(out.buf, out.buflen); + + buf_output_free(&out); + json_free_object(root); root = NULL; + job_opt_object = NULL; clients_array = NULL; du_array = NULL; } @@ -233,6 +242,9 @@ void fio_put_client(struct fio_client *client) if (--client->refs) return; + log_info_buf(client->buf.buf, client->buf.buflen); + buf_output_free(&client->buf); + free(client->hostname); if (client->argv) free(client->argv); @@ -351,9 +363,7 @@ void fio_client_add_cmd_option(void *cookie, const char *opt) } } -struct fio_client *fio_client_add_explicit(struct client_ops *ops, - const char *hostname, int type, - int port) +static struct fio_client *get_new_client(void) { struct fio_client *client; @@ -366,6 +376,19 @@ struct fio_client *fio_client_add_explicit(struct client_ops *ops, INIT_FLIST_HEAD(&client->eta_list); INIT_FLIST_HEAD(&client->cmd_list); + buf_output_init(&client->buf); + + return client; +} + +struct fio_client *fio_client_add_explicit(struct client_ops *ops, + const char *hostname, int type, + int port) +{ + struct fio_client *client; + + client = get_new_client(); + client->hostname = strdup(hostname); if (type == Fio_client_socket) @@ -441,14 +464,7 @@ int fio_client_add(struct client_ops *ops, const char *hostname, void **cookie) } } - client = malloc(sizeof(*client)); - memset(client, 0, sizeof(*client)); - - INIT_FLIST_HEAD(&client->list); - INIT_FLIST_HEAD(&client->hash_list); - INIT_FLIST_HEAD(&client->arg_list); - INIT_FLIST_HEAD(&client->eta_list); - INIT_FLIST_HEAD(&client->cmd_list); + client = get_new_client(); if (fio_server_parse_string(hostname, &client->hostname, &client->is_sock, &client->port, @@ -984,6 +1000,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src) dst->total_submit = le64_to_cpu(src->total_submit); dst->total_complete = le64_to_cpu(src->total_complete); + dst->nr_zone_resets = le64_to_cpu(src->nr_zone_resets); for (i = 0; i < DDIR_RWDIR_CNT; i++) { dst->io_bytes[i] = le64_to_cpu(src->io_bytes[i]); @@ -1062,7 +1079,7 @@ static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd) if (client->opt_lists && p->ts.thread_number <= client->jobs) opt_list = &client->opt_lists[p->ts.thread_number - 1]; - tsobj = show_thread_status(&p->ts, &p->rs, opt_list, NULL); + tsobj = show_thread_status(&p->ts, &p->rs, opt_list, &client->buf); client->did_stat = true; if (tsobj) { json_object_add_client_info(tsobj, client); @@ -1083,7 +1100,7 @@ static void handle_ts(struct fio_client *client, struct fio_net_cmd *cmd) if (++sum_stat_nr == sum_stat_clients) { strcpy(client_ts.name, "All clients"); - tsobj = show_thread_status(&client_ts, &client_gs, NULL, NULL); + tsobj = show_thread_status(&client_ts, &client_gs, NULL, &client->buf); if (tsobj) { json_object_add_client_info(tsobj, client); json_array_add_value_object(clients_array, tsobj); @@ -1096,7 +1113,7 @@ static void handle_gs(struct fio_client *client, struct fio_net_cmd *cmd) struct group_run_stats *gs = (struct group_run_stats *) cmd->payload; if (output_format & FIO_OUTPUT_NORMAL) - show_group_stats(gs, NULL); + show_group_stats(gs, &client->buf); } static void handle_job_opt(struct fio_client *client, struct fio_net_cmd *cmd) @@ -1189,22 +1206,21 @@ static void handle_du(struct fio_client *client, struct fio_net_cmd *cmd) { struct cmd_du_pdu *du = (struct cmd_du_pdu *) cmd->payload; - if (!client->disk_stats_shown) { + if (!client->disk_stats_shown) client->disk_stats_shown = true; - if (!(output_format & FIO_OUTPUT_JSON)) - log_info("\nDisk stats (read/write):\n"); - } if (output_format & FIO_OUTPUT_JSON) { struct json_object *duobj; + json_array_add_disk_util(&du->dus, &du->agg, du_array); duobj = json_array_last_value_object(du_array); json_object_add_client_info(duobj, client); + } else if (output_format & FIO_OUTPUT_TERSE) + print_disk_util(&du->dus, &du->agg, 1, &client->buf); + else if (output_format & FIO_OUTPUT_NORMAL) { + __log_buf(&client->buf, "\nDisk stats (read/write):\n"); + print_disk_util(&du->dus, &du->agg, 0, &client->buf); } - if (output_format & FIO_OUTPUT_TERSE) - print_disk_util(&du->dus, &du->agg, 1, NULL); - if (output_format & FIO_OUTPUT_NORMAL) - print_disk_util(&du->dus, &du->agg, 0, NULL); } static void convert_jobs_eta(struct jobs_eta *je) @@ -1473,10 +1489,11 @@ static void handle_probe(struct fio_client *client, struct fio_net_cmd *cmd) sprintf(bit, "%d-bit", probe->bpp * 8); probe->flags = le64_to_cpu(probe->flags); - if (!(output_format & FIO_OUTPUT_JSON)) + if (output_format & FIO_OUTPUT_NORMAL) { log_info("hostname=%s, be=%u, %s, os=%s, arch=%s, fio=%s, flags=%lx\n", probe->hostname, probe->bigendian, bit, os, arch, probe->fio_version, (unsigned long) probe->flags); + } if (!client->name) client->name = strdup((char *) probe->hostname);