char **job_files;
} ui;
+static void clear_ui_info(struct gui *ui)
+{
+ gtk_label_set_text(GTK_LABEL(ui->probe.hostname), "");
+ gtk_label_set_text(GTK_LABEL(ui->probe.os), "");
+ gtk_label_set_text(GTK_LABEL(ui->probe.arch), "");
+ gtk_label_set_text(GTK_LABEL(ui->probe.fio_ver), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.name), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.iotype), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.ioengine), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.iodepth), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.jobs), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.files), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.read_bw), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.read_iops), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.write_bw), "");
+ gtk_label_set_text(GTK_LABEL(ui->eta.write_iops), "");
+}
+
static void gfio_set_connected(struct gui *ui, int connected)
{
if (connected) {
ui->connected = 0;
gtk_button_set_label(GTK_BUTTON(ui->button[CONNECT_BUTTON]), "Connect");
gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 0);
+ clear_ui_info(ui);
}
}
return label_widget;
}
-static GtkWidget *create_text_entry(GtkWidget *hbox, const char *defval)
-{
- GtkWidget *text, *box;
-
- box = gtk_hbox_new(FALSE, 3);
- gtk_container_add(GTK_CONTAINER(hbox), box);
-
- text = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(box), text, TRUE, TRUE, 0);
- gtk_entry_set_text(GTK_ENTRY(text), defval);
-
- return text;
-}
-
static GtkWidget *create_spinbutton(GtkWidget *hbox, double min, double max, double defval)
{
GtkWidget *button, *box;
start_job_thread(ui);
}
-static void connect_clicked(__attribute__((unused)) GtkWidget *widget,
- gpointer data)
+static void file_open(GtkWidget *w, gpointer data);
+
+static void connect_clicked(GtkWidget *widget, gpointer data)
{
struct gui *ui = data;
if (!ui->connected) {
+ if (!ui->nr_job_files)
+ file_open(widget, data);
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ui->thread_status_pb), "No jobs running");
fio_clients_connect();
pthread_create(&ui->t, NULL, job_thread, NULL);
gfio_set_connected(ui, 1);
- } else
+ } else {
+ fio_clients_terminate();
gfio_set_connected(ui, 0);
+ }
}
static void add_button(struct gui *ui, int i, GtkWidget *buttonbox,
}
}
-void report_error(GError* error)
+void report_error(GError *error)
{
if (ui.error_info_bar == NULL) {
ui.error_info_bar = gtk_info_bar_new_with_buttons(GTK_STOCK_OK,
}
}
-static int get_connection_details(char **host, int *port, int *type)
+static int get_connection_details(char **host, int *port, int *type,
+ int *server_start)
{
GtkWidget *dialog, *box, *vbox, *hentry, *hbox, *frame, *pentry, *combo;
+ GtkWidget *button;
char *typeentry;
dialog = gtk_dialog_new_with_buttons("Connection details",
gtk_container_add(GTK_CONTAINER(hbox), combo);
+ frame = gtk_frame_new("Options");
+ gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5);
+ box = gtk_vbox_new(FALSE, 10);
+ gtk_container_add(GTK_CONTAINER(frame), box);
+
+ hbox = gtk_hbox_new(TRUE, 4);
+ gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
+
+ button = gtk_check_button_new_with_label("Auto-spawn fio backend");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), 1);
+ gtk_widget_set_tooltip_text(button, "When running fio locally, it is necessary to have the backend running on the same system. If this is checked, gfio will start the backend automatically for you if it isn't already running.");
+ gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 6);
+
gtk_widget_show_all(dialog);
if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) {
*type = Fio_client_socket;
g_free(typeentry);
+ *server_start = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
+
gtk_widget_destroy(dialog);
return 0;
}
GSList *filenames, *fn_glist;
GtkFileFilter *filter;
char *host;
- int port, type;
+ int port, type, server_start;
dialog = gtk_file_chooser_dialog_new("Open File",
GTK_WINDOW(ui.window),
gtk_widget_destroy(dialog);
- if (get_connection_details(&host, &port, &type))
+ if (get_connection_details(&host, &port, &type, &server_start))
goto err;
filenames = fn_glist;
ui.nr_job_files++;
ui.client = fio_client_add_explicit(host, type, port);
- ui.client->client_data = &ui;
-#if 0
- if (error) {
+ if (!ui.client) {
+ GError *error;
+
+ error = g_error_new(g_quark_from_string("fio"), 1,
+ "Failed to add client %s", host);
report_error(error);
g_error_free(error);
- error = NULL;
}
-#endif
+ ui.client->client_data = &ui;
g_free(filenames->data);
filenames = g_slist_next(filenames);
*/
ui->thread_status_pb = gtk_progress_bar_new();
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ui->thread_status_pb), 0.0);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ui->thread_status_pb), "No jobs running");
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ui->thread_status_pb), "No connections");
gtk_container_add(GTK_CONTAINER(ui->buttonbox), ui->thread_status_pb);