client/server: pass back packed thread_options in add_job()
[fio.git] / gfio.c
diff --git a/gfio.c b/gfio.c
index 21f5fd9cb6d6fe8035d939cc0ead3b30d618489b..4521f75dfec68c07c54eb33bb80e441b5a55b853 100644 (file)
--- a/gfio.c
+++ b/gfio.c
@@ -23,6 +23,7 @@
  */
 #include <locale.h>
 #include <malloc.h>
+#include <string.h>
 
 #include <glib.h>
 #include <cairo.h>
@@ -35,6 +36,7 @@ static int gfio_server_running;
 static const char *gfio_graph_font;
 
 static void gfio_update_thread_status(char *status_message, double perc);
+static void view_log(GtkWidget *w, gpointer data);
 
 #define ARRAYSIZE(x) (sizeof((x)) / (sizeof((x)[0])))
 
@@ -121,6 +123,9 @@ struct gfio_client {
        struct gui *ui;
        GtkWidget *results_widget;
        GtkWidget *disk_util_frame;
+       GtkWidget *err_entry;
+       unsigned int job_added;
+       struct thread_options o;
 };
 
 static void setup_iops_graph(struct gui *ui)
@@ -131,6 +136,7 @@ static void setup_iops_graph(struct gui *ui)
                                        DRAWING_AREA_YDIM, gfio_graph_font);
        graph_title(ui->iops_graph, "IOPS");
        graph_x_title(ui->iops_graph, "Time (secs)");
+       graph_y_title(ui->iops_graph, "IOs / sec");
        graph_add_label(ui->iops_graph, "Read IOPS");
        graph_add_label(ui->iops_graph, "Write IOPS");
        graph_set_color(ui->iops_graph, "Read IOPS", 0.13, 0.54, 0.13);
@@ -146,6 +152,7 @@ static void setup_bandwidth_graph(struct gui *ui)
                                        DRAWING_AREA_YDIM, gfio_graph_font);
        graph_title(ui->bandwidth_graph, "Bandwidth");
        graph_x_title(ui->bandwidth_graph, "Time (secs)");
+       graph_y_title(ui->bandwidth_graph, "Kbytes / sec");
        graph_add_label(ui->bandwidth_graph, "Read Bandwidth");
        graph_add_label(ui->bandwidth_graph, "Write Bandwidth");
        graph_set_color(ui->bandwidth_graph, "Read Bandwidth", 0.13, 0.54, 0.13);
@@ -859,7 +866,7 @@ static void gfio_display_ts(struct fio_client *client, struct thread_stat *ts,
        entry_set_int_value(entry, ts->groupid);
        entry = new_info_entry_in_frame(box, "Jobs");
        entry_set_int_value(entry, ts->members);
-       entry = new_info_entry_in_frame(box, "Error");
+       gc->err_entry = entry = new_info_entry_in_frame(box, "Error");
        entry_set_int_value(entry, ts->error);
        entry = new_info_entry_in_frame(box, "PID");
        entry_set_int_value(entry, ts->pid);
@@ -899,6 +906,9 @@ static void gfio_text_op(struct fio_client *client, struct fio_net_cmd *cmd)
        gtk_list_store_set(gc->ui->log_model, &iter, 2, p->level, -1);
        gtk_list_store_set(gc->ui->log_model, &iter, 3, p->buf, -1);
 
+       if (p->level == FIO_LOG_ERR)
+               view_log(NULL, (gpointer) gc->ui);
+
        gdk_threads_leave();
 }
 
@@ -1198,30 +1208,23 @@ static void gfio_add_job_op(struct fio_client *client, struct fio_net_cmd *cmd)
 {
        struct cmd_add_job_pdu *p = (struct cmd_add_job_pdu *) cmd->payload;
        struct gfio_client *gc = client->client_data;
+       struct thread_options *o = &gc->o;
        struct gui *ui = gc->ui;
        char tmp[8];
-       int i;
-
-       p->iodepth              = le32_to_cpu(p->iodepth);
-       p->rw                   = le32_to_cpu(p->rw);
-
-       for (i = 0; i < 2; i++) {
-               p->min_bs[i]    = le32_to_cpu(p->min_bs[i]);
-               p->max_bs[i]    = le32_to_cpu(p->max_bs[i]);
-       }
 
-       p->numjobs              = le32_to_cpu(p->numjobs);
-       p->group_reporting      = le32_to_cpu(p->group_reporting);
+       convert_thread_options_to_cpu(o, &p->top);
 
        gdk_threads_enter();
 
-       gtk_entry_set_text(GTK_ENTRY(ui->eta.name), (gchar *) p->jobname);
-       gtk_entry_set_text(GTK_ENTRY(ui->eta.iotype), ddir_str(p->rw));
-       gtk_entry_set_text(GTK_ENTRY(ui->eta.ioengine), (gchar *) p->ioengine);
+       gtk_entry_set_text(GTK_ENTRY(ui->eta.name), (gchar *) o->name);
+       gtk_entry_set_text(GTK_ENTRY(ui->eta.iotype), ddir_str(o->td_ddir));
+       gtk_entry_set_text(GTK_ENTRY(ui->eta.ioengine), (gchar *) o->ioengine);
 
-       sprintf(tmp, "%u", p->iodepth);
+       sprintf(tmp, "%u", o->iodepth);
        gtk_entry_set_text(GTK_ENTRY(ui->eta.iodepth), tmp);
 
+       gc->job_added++;
+
        gdk_threads_leave();
 }
 
@@ -1257,6 +1260,20 @@ static void gfio_client_timed_out(struct fio_client *client)
        gdk_threads_leave();
 }
 
+static void gfio_client_stop(struct fio_client *client, struct fio_net_cmd *cmd)
+{
+       struct gfio_client *gc = client->client_data;
+
+       gdk_threads_enter();
+
+       gfio_set_connected(gc->ui, 0);
+
+       if (gc->err_entry)
+               entry_set_int_value(gc->err_entry, client->error);
+
+       gdk_threads_leave();
+}
+
 struct client_ops gfio_client_ops = {
        .text_op                = gfio_text_op,
        .disk_util              = gfio_disk_util_op,
@@ -1267,6 +1284,7 @@ struct client_ops gfio_client_ops = {
        .quit                   = gfio_quit_op,
        .add_job                = gfio_add_job_op,
        .timed_out              = gfio_client_timed_out,
+       .stop                   = gfio_client_stop,
        .stay_connected         = 1,
 };