Exemplo n.º 1
0
    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");
    }