static void connect_clicked(GtkWidget *widget, gpointer data);
static void start_job_clicked(GtkWidget *widget, gpointer data);
+static void send_clicked(GtkWidget *widget, gpointer data);
static struct button_spec {
const char *buttontext;
const int start_insensitive;
} buttonspeclist[] = {
#define CONNECT_BUTTON 0
-#define START_JOB_BUTTON 1
+#define SEND_BUTTON 1
+#define START_JOB_BUTTON 2
{ "Connect", connect_clicked, "Connect to host", 0 },
- { "Start Job",
- start_job_clicked,
+ { "Send", send_clicked, "Send job description to host", 1 },
+ { "Start Job", start_job_clicked,
"Send current fio job to fio server to be executed", 1 },
};
struct graph *iops_graph;
struct graph *bandwidth_graph;
- struct fio_client *client;
+ struct gfio_client *client;
int nr_job_files;
char **job_files;
} ui;
struct gfio_client {
struct gui *ui;
+ struct fio_client *client;
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)
static void gfio_set_connected(struct gui *ui, int connected)
{
if (connected) {
- gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 1);
+ gtk_widget_set_sensitive(ui->button[SEND_BUTTON], 1);
ui->connected = 1;
gtk_button_set_label(GTK_BUTTON(ui->button[CONNECT_BUTTON]), "Disconnect");
gtk_widget_set_sensitive(ui->button[CONNECT_BUTTON], 1);
} else {
ui->connected = 0;
gtk_button_set_label(GTK_BUTTON(ui->button[CONNECT_BUTTON]), "Connect");
+ gtk_widget_set_sensitive(ui->button[SEND_BUTTON], 0);
gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 0);
gtk_widget_set_sensitive(ui->button[CONNECT_BUTTON], 1);
}
static void gfio_group_stats_op(struct fio_client *client,
struct fio_net_cmd *cmd)
{
- gdk_threads_enter();
- printf("gfio_group_stats_op called\n");
- fio_client_ops.group_stats(client, cmd);
- gdk_threads_leave();
+ /* We're ignoring group stats for now */
}
static gint on_config_drawing_area(GtkWidget *w, GdkEventConfigure *event)
{
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();
}
return ret;
}
-static void start_job_thread(struct gui *ui)
-{
- if (send_job_files(ui)) {
- printf("Yeah, I didn't really like those options too much.\n");
- gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 1);
- return;
- }
-}
-
static void *server_thread(void *arg)
{
is_backend = 1;
gpointer data)
{
struct gui *ui = data;
+ struct gfio_client *gc = ui->client;
gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 0);
- start_job_thread(ui);
+ fio_net_send_simple_cmd(gc->client->fd, FIO_NET_CMD_RUN, 0, NULL);
}
static void file_open(GtkWidget *w, gpointer data);
if (!fio_clients_connect()) {
pthread_create(&ui->t, NULL, job_thread, NULL);
gtk_widget_set_sensitive(ui->button[CONNECT_BUTTON], 0);
+ gtk_widget_set_sensitive(ui->button[SEND_BUTTON], 1);
}
} else {
fio_clients_terminate();
}
}
+static void send_clicked(GtkWidget *widget, gpointer data)
+{
+ struct gui *ui = data;
+
+ if (send_job_files(ui)) {
+ printf("Yeah, I didn't really like those options too much.\n");
+ gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 1);
+ }
+
+ gtk_widget_set_sensitive(ui->button[SEND_BUTTON], 0);
+ gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 1);
+}
+
static void add_button(struct gui *ui, int i, GtkWidget *buttonbox,
struct button_spec *buttonspec)
{
gc = malloc(sizeof(*gc));
memset(gc, 0, sizeof(*gc));
gc->ui = ui;
+ gc->client = client;
+
+ ui->client = gc;
client->client_data = gc;
}