JSON output, code formatting changes
[fio.git] / stat.c
diff --git a/stat.c b/stat.c
index f51735e7dc4b4d84462541c7b97dcf451a98edac..68a4a27609c5fcbec66b0fe55dda7c28f95120a0 100644 (file)
--- a/stat.c
+++ b/stat.c
@@ -1257,12 +1257,15 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
 
        /* steady state detection; move this behind json+? */
        if (ts->ss) {
-               struct json_array *cache;
+               struct json_object *data;
+               struct json_array *iops, *bw;
                struct steadystate_data *ss = ts->ss;
+               unsigned long long sum_iops, sum_bw;
+               double mean_iops, mean_bw;
                int i, x;
-               char ss_option[64];
+               char ss_buf[64];
 
-               snprintf(ss_option, sizeof(ss_option), "%s%s:%f%s", 
+               snprintf(ss_buf, sizeof(ss_buf), "%s%s:%f%s",
                        ss->check_iops ? "iops" : "bw",
                        ss->check_slope ? "_slope" : "",
                        (float) ss->limit,
@@ -1270,18 +1273,33 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts,
 
                tmp = json_create_object();
                json_object_add_value_object(root, "steadystate", tmp);
-               json_object_add_value_string(tmp, "ss", ss_option);
+               json_object_add_value_string(tmp, "ss", ss_buf);
                json_object_add_value_int(tmp, "duration", (int)ss->dur);
                json_object_add_value_int(tmp, "steadystate_ramptime", ss->ramp_time / 1000000L);
                json_object_add_value_int(tmp, "attained", ss->attained);
-               json_object_add_value_float(tmp, "criterion", ss->pct ? ss->criterion / 100 : ss->criterion);
 
-               cache = json_create_array();
-               json_object_add_value_array(tmp, "data", cache);
-               for (i = 0; i < ss->dur; i++) {
+               snprintf(ss_buf, sizeof(ss_buf), "%f%s", (float) ss->criterion, ss->pct ? "%" : "");
+               json_object_add_value_string(tmp, "criterion", ss_buf);
+               json_object_add_value_float(tmp, "max_deviation", ss->deviation);
+               json_object_add_value_float(tmp, "slope", ss->slope);
+
+               data = json_create_object();
+               json_object_add_value_object(tmp, "data", data);
+               bw = json_create_array();
+               iops = json_create_array();
+               for (i = 0, sum_iops = 0, sum_bw = 0; i < ss->dur; i++) {
                        x = (ss->head + i) % ss->dur;
-                       json_array_add_value_int(cache, ss->cache[x]);
+                       sum_bw += ss->bw_data[x];
+                       sum_iops += ss->iops_data[x];
+                       json_array_add_value_int(bw, ss->bw_data[x]);
+                       json_array_add_value_int(iops, ss->iops_data[x]);
                }
+               mean_bw = (double) sum_bw / ss->dur;
+               mean_iops = (double) sum_iops / ss->dur;
+               json_object_add_value_float(data, "bw_mean", mean_bw);
+               json_object_add_value_float(data, "iops_mean", mean_iops);
+               json_object_add_value_array(data, "iops", iops);
+               json_object_add_value_array(data, "bw", bw);
        }
 
        return root;