Suppress "hostname=...", "Disk stats (read/write)" and thread status
if json/json+ is specified, as these are regular messages.
JSON parsers can't parse the output with these messages, and JSON
spec doesn't support comment either.
--
# ./fio ./fio.cfg --output-format=json > out
# python3 -c "import json; json.load(open('out'))"
# ./fio ./fio.cfg --client=localhost --output-format=json > out
# python3 -c "import json; json.load(open('out'))"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python3.7/json/__init__.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.7/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.7/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
static void handle_start(struct fio_client *client, struct fio_net_cmd *cmd);
static void convert_text(struct fio_net_cmd *cmd);
static void handle_start(struct fio_client *client, struct fio_net_cmd *cmd);
static void convert_text(struct fio_net_cmd *cmd);
+static void client_display_thread_status(struct jobs_eta *je);
struct client_ops fio_client_ops = {
.text = handle_text,
struct client_ops fio_client_ops = {
.text = handle_text,
.group_stats = handle_gs,
.stop = handle_stop,
.start = handle_start,
.group_stats = handle_gs,
.stop = handle_stop,
.start = handle_start,
- .eta = display_thread_status,
+ .eta = client_display_thread_status,
.probe = handle_probe,
.eta_msec = FIO_CLIENT_DEF_ETA_MSEC,
.client_type = FIO_CLIENT_TYPE_CLI,
.probe = handle_probe,
.eta_msec = FIO_CLIENT_DEF_ETA_MSEC,
.client_type = FIO_CLIENT_TYPE_CLI,
if (!client->disk_stats_shown) {
client->disk_stats_shown = true;
if (!client->disk_stats_shown) {
client->disk_stats_shown = true;
- log_info("\nDisk stats (read/write):\n");
+ if (!(output_format & FIO_OUTPUT_JSON))
+ log_info("\nDisk stats (read/write):\n");
}
if (output_format & FIO_OUTPUT_JSON) {
}
if (output_format & FIO_OUTPUT_JSON) {
sprintf(bit, "%d-bit", probe->bpp * 8);
probe->flags = le64_to_cpu(probe->flags);
sprintf(bit, "%d-bit", probe->bpp * 8);
probe->flags = le64_to_cpu(probe->flags);
- 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 (!(output_format & FIO_OUTPUT_JSON))
+ 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);
if (!client->name)
client->name = strdup((char *) probe->hostname);
free(pfds);
return retval || error_clients;
}
free(pfds);
return retval || error_clients;
}
+
+static void client_display_thread_status(struct jobs_eta *je)
+{
+ if (!(output_format & FIO_OUTPUT_JSON))
+ display_thread_status(je);
+}