public MainWindow() : base(Gtk.WindowType.Toplevel) { Build(); this.Title = "Apsim - HPC (UQ)"; this.SetIconFromFile(AppDomain.CurrentDomain.BaseDirectory + "/../UserInterface/Images/earth_connection24.png"); this.username.Text = Environment.GetEnvironmentVariable("USERNAME"); if (Configuration.Instance.Setting("remoteCluster") == "" || Configuration.Instance.Setting("cluster") == "awoonga.qriscloud.org.au") { this.radiobutton1.Active = false; this.radiobutton2.Active = true; } else if (Configuration.Instance.Setting("remoteCluster") == "tinaroo.rcc.uq.edu.au") { this.radiobutton1.Active = true; this.radiobutton2.Active = false; } if (Configuration.Instance.Setting("localInputFolder") != "") { this.dirEntry.Text = Configuration.Instance.Setting("localInputFolder"); this.dirEntry.Sensitive = true; this.fileEntry.Text = ""; this.fileEntry.Sensitive = false; } else { this.dirEntry.Text = ""; this.dirEntry.Sensitive = false; this.fileEntry.Text = ""; this.fileEntry.Sensitive = true; if (Configuration.Instance.Setting("localInputFile") != "") { this.fileEntry.Text = Configuration.Instance.Setting("localInputFile"); } } simsPerJobEntry.Text = Configuration.Instance.Setting("ClusterSimsPerJob"); hoursPerJobEntry.Text = Configuration.Instance.Setting("ClusterHoursPerJob"); versionComboBox.Clear(); CellRendererText cell = new CellRendererText(); versionComboBox.PackStart(cell, false); versionComboBox.AddAttribute(cell, "text", 0); versionStore = new ListStore(typeof(string)); versionComboBox.Model = versionStore; if (Configuration.Instance.Settings("remoteVersions").Count > 0) { foreach (string version in Configuration.Instance.Settings("remoteVersions")) { versionStore.AppendValues(version); } versionComboBox.Active = Configuration.Instance.Settings("remoteVersions").Count - 1; } if (Configuration.Instance.Setting("remoteUser") != "") { this.username.Text = Configuration.Instance.Setting("remoteUser"); } button4.Clicked += new EventHandler( (object sender, EventArgs e) => { string version = ""; TreeIter iter; if (versionComboBox.GetActiveIter(out iter)) { version = (string)versionComboBox.Model.GetValue(iter, 0); } if (version == "") { setMessage("go", "Please select a version to run with"); return; } if (fileEntry.Sensitive && fileEntry.Text != "") { Configuration.Instance.SetSetting("localInputFile", fileEntry.Text); } List <string> files = CSGeneral.StringManip.SplitStringHonouringQuotes(fileEntry.Text, ",").Cast <string>().ToList(); if (fileEntry.Sensitive && files.Any(x => !File.Exists(x))) { setMessage("go", "Please select a file to run"); return; } else if (dirEntry.Sensitive && Directory.Exists(dirEntry.Text)) { Configuration.Instance.SetSetting("localInputFolder", dirEntry.Text); foreach (string f in Directory.GetFiles(dirEntry.Text)) { if (System.IO.Path.GetExtension(f).ToLower() == ".sim") { files.Add(f); } else if (System.IO.Path.GetExtension(f).ToLower() == ".apsim") { files.Add(f); } } } if (files.Count == 0) { setMessage("go", "Please select a file to run"); return; } int numberSimsPerJob = 0; if (!Int32.TryParse(simsPerJobEntry.Text, out numberSimsPerJob)) { setMessage("go", "Please set number of simulations in each job"); return; } int hoursPerJob = 0; if (!Int32.TryParse(hoursPerJobEntry.Text, out hoursPerJob)) { setMessage("go", "Please set runtime of (single) job"); return; } hoursPerJob = Math.Max(hoursPerJob, 1); Configuration.Instance.SetSetting("ClusterSimsPerJob", numberSimsPerJob.ToString()); Configuration.Instance.SetSetting("ClusterHoursPerJob", hoursPerJob.ToString()); Configuration.Instance.SetSetting("clusterLocalDir", ""); Configuration.Instance.SetSetting("remoteRunDir", ""); Configuration.Instance.SetSetting("remoteJobId", ""); button4.Sensitive = false; exec.Go(this, new GoEventArgs(getCreds(), files, "/home/uqpdevo1/" + version + ".sapp", numberSimsPerJob, hoursPerJob)); }); button5.Clicked += new EventHandler( (object sender, EventArgs e) => { versionStore.Clear(); pushMessage("UpdateRemoteVersions", "Finding remote versions"); exec.getRemoteVersions(getCreds()); }); button6.Clicked += new EventHandler( async(object sender, EventArgs e) => { pushMessage("doDownloadOutputs", "Downloading data"); await Task.Run(() => exec.doDownloadOutputs()); }); button7.Clicked += new EventHandler( (object sender, EventArgs e) => { onChooseSaveLog(this, null); }); TextTag tag = new TextTag("monospace"); tag.Family = "monospace"; this.logWindow.Buffer.TagTable.Add(tag); this.logWindow.Buffer.ApplyTag("monospace", logWindow.Buffer.StartIter, logWindow.Buffer.EndIter); tag = new TextTag("stdout"); //tag.Background= FIXME; OnLogMessage("Started - version = " + Configuration.Instance.ApsimVersion() + "-" + Configuration.Instance.ExeBuildNumber()); helpWindow.Buffer.TagTable.Add(tag); helpWindow.Buffer.ApplyTag("monospace", helpWindow.Buffer.StartIter, helpWindow.Buffer.EndIter); TextIter ins = helpWindow.Buffer.EndIter; helpWindow.Buffer.InsertWithTagsByName(ref ins, helpText, "monospace"); //Handle persistance between runs in case of crash, disconnect etc. // If this is non-empty, it will be a remote directory string runPath = Configuration.Instance.Setting("remoteRunDir"); if (runPath != "") { button8.Sensitive = true; button8.Clicked += new EventHandler( async(object sender, EventArgs e) => { OnLogMessage("Resuming existing session, id = \"" + Configuration.Instance.Setting("remoteJobId") + "\""); exec.cred = getCreds(); exec.jobId = Configuration.Instance.Setting("remoteJobId"); label14.Text = "Job Running"; notebook1.Page = 1; await Task.Run(() => new Timer(new TimerCallback(exec.waitForCompletion), null, 30000, -1));; }); } statusbar.Push(this.statusbar.GetContextId("Toplevel"), "Ready"); }