Exemple #1
0
 private void EnqueueAndWaitButton_Click(object sender, System.EventArgs e)
 {
     SySal.DAQSystem.DataProcessingBatchDesc desc = new SySal.DAQSystem.DataProcessingBatchDesc();
     desc.Description          = DescriptionText.Text;
     desc.AliasUsername        = AliasUsernameText.Text;
     desc.AliasPassword        = AliasPasswordText.Text;
     desc.Username             = UsernameText.Text;
     desc.Password             = PasswordText.Text;
     desc.MachinePowerClass    = 0;
     desc.CommandLineArguments = ArgumentsText.Text;
     desc.Filename             = ExePathText.Text;
     try
     {
         SySal.DAQSystem.IDataProcessingServer Srv = new SySal.DAQSystem.SyncDataProcessingServerWrapper((SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + DataProcText.Text + ":" + (BatchManagerCheck.Checked ? (int)SySal.DAQSystem.OperaPort.BatchServer : (int)SySal.DAQSystem.OperaPort.DataProcessingServer).ToString() + "/DataProcessingServer.rem"), System.TimeSpan.FromMilliseconds(10000));
         desc.Id = Srv.SuggestId;
         bool batchaccepted = Srv.Enqueue(desc);
         if (!batchaccepted)
         {
             MessageBox.Show("Batch Rejected", "Result", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
         while (!Srv.DoneWith(desc.Id))
         {
             System.Threading.Thread.Sleep(400);
         }
         desc = Srv.Result(desc.Id);
         DataProcessingComplete(desc, null);
     }
     catch (Exception x)
     {
         DataProcessingComplete(desc, x);
     }
     GC.Collect();
     ViewQueueButton_Click(this, null);
 }
Exemple #2
0
        public BatchInfoForm(SySal.DAQSystem.DataProcessingBatchDesc d)
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
            IdText.Text              = d.Id.ToString("X16");
            OwnerText.Text           = d.Username;
            ExePathText.Text         = d.Filename;
            CommandLineArgsText.Text = d.CommandLineArguments;
            DescriptionText.Text     = d.Description;
            StartText.Text           = d.Started.ToString();
        }
Exemple #3
0
        private void QueueBatchList_Click(object sender, System.EventArgs e)
        {
            OpenFileDialog mydlg = new OpenFileDialog();

            mydlg.Title  = "Select batch list";
            mydlg.Filter = "Batch list files (*.txt)|*.txt|All files (*.*)|*.*";
            if (mydlg.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamReader r = null;
                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(BatchList));
                SySal.DAQSystem.IDataProcessingServer  Srv  = null;
                BatchList bl = null;
                try
                {
                    r   = new System.IO.StreamReader(mydlg.FileName);
                    bl  = (BatchList)xmls.Deserialize(r);
                    Srv = new SySal.DAQSystem.SyncDataProcessingServerWrapper((SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + DataProcText.Text + ":" + (BatchManagerCheck.Checked ? (int)SySal.DAQSystem.OperaPort.BatchServer : (int)SySal.DAQSystem.OperaPort.DataProcessingServer).ToString() + "/DataProcessingServer.rem"), System.TimeSpan.FromMilliseconds(10000));
                    foreach (Batch b in bl.List)
                    {
                        SySal.DAQSystem.DataProcessingBatchDesc d = new SySal.DAQSystem.DataProcessingBatchDesc();
                        d.MachinePowerClass    = b.MachinePowerClass;
                        d.Description          = b.Description;
                        d.Filename             = b.Filename;
                        d.CommandLineArguments = b.CommandLineArguments;
                        d.Username             = UsernameText.Text;
                        d.Password             = PasswordText.Text;
                        d.Id = Srv.SuggestId;
                        Srv.Enqueue(d);
                    }
                }
                catch (Exception) {}
                if (r != null)
                {
                    r.Close();
                    r = null;
                }
                if (Srv != null)
                {
                    Srv = null;
                }
                GC.Collect();
            }
        }
Exemple #4
0
        private void DataProcessingComplete(SySal.DAQSystem.DataProcessingBatchDesc desc, System.Exception x)
        {
            string str     = ExeOutputsText.Text;
            int    percent = 0;

            try
            {
                percent = Convert.ToInt32(Math.Round(100 * desc.TotalProcessorTime.TotalMilliseconds / (desc.Finished - desc.Started).TotalMilliseconds));
            }
            catch (Exception) { percent = 0; };
            str += "\r\n\r\nProcess " + desc.Id.ToString("X16") + "\r\nStart: " + desc.Started.ToString() + " Finish: " + desc.Finished.ToString() +
                   "\r\nCPU Time: " + desc.TotalProcessorTime.ToString() + "\r\nCPU Time / Total time: " + percent.ToString() +
                   "%\r\n" + "Peak Virtual Memory (MB): " + (desc.PeakVirtualMemorySize / 1048576).ToString() +
                   "\r\nPeak Working Set (MB): " + (desc.PeakWorkingSet / 1048576).ToString();
            if (x != null)
            {
                str += "\r\nException: " + x.GetType().ToString() + "\r\n" + x.Message + "\r\n\r\nDetails: \r\n" + x.ToString();
            }
            ExeOutputsText.Text = str;
        }
Exemple #5
0
            public override bool Execute()
            {
                SySal.DAQSystem.IDataProcessingServer   DataProcSrv = (SySal.DAQSystem.IDataProcessingServer)System.Runtime.Remoting.RemotingServices.Connect(typeof(SySal.DAQSystem.IDataProcessingServer), "tcp://" + BatchServer + ":" + ((int)SySal.DAQSystem.OperaPort.BatchServer) + "/DataProcessingServer.rem");
                SySal.DAQSystem.DataProcessingBatchDesc bd          = new SySal.DAQSystem.DataProcessingBatchDesc();
                SySal.OperaDb.OperaDbCredentials        cred        = SySal.OperaDb.OperaDbCredentials.CreateFromRecord();
                bd.Username           = cred.OPERAUserName;
                bd.Password           = cred.OPERAPassword;
                bd.Description        = "ListScan - " + LineNumber;
                bd.Id                 = DataProcSrv.SuggestId;
                bd.MachinePowerClass  = MachinePowerClass;
                bd.OutputTextSaveFile = LogFile;
                bd.Filename           = ExeFile;
                bd.AliasPassword      = "";
                bd.AliasUsername      = "";
                Console.Write("(batch=" + bd.Id.ToString("X16") + ")");
                string s = "";
                int    i;

                for (i = 0; i < Arguments.Length; i++)
                {
                    if (i > 0)
                    {
                        s += " ";
                    }
                    if (Arguments[i].StartsWith("\"") == false)
                    {
                        s += "\"" + Arguments[i] + "\"";
                    }
                    else
                    {
                        s += Arguments[i];
                    }
                }
                bd.CommandLineArguments = s;
                return(DataProcSrv.Enqueue(bd));
            }
Exemple #6
0
        private static void Execute()
        {
            try
            {
                //System.Windows.Forms.MessageBox.Show("Eccomi");
                ThisThread = System.Threading.Thread.CurrentThread;

                StartupInfo = (SySal.DAQSystem.Drivers.VolumeOperationInfo)HE.StartupInfo;
                Conn        = new SySal.OperaDb.OperaDbConnection(StartupInfo.DBServers, StartupInfo.DBUserName, StartupInfo.DBPassword);
                Conn.Open();
                (DBKeepAliveThread = new System.Threading.Thread(DBKeepAliveThreadExec)).Start();

                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(CSScanDriverSettings));
                ProgSettings = (CSScanDriverSettings)xmls.Deserialize(new System.IO.StringReader(HE.ProgramSettings));
                xmls         = null;

                if (StartupInfo.ExeRepository.EndsWith("\\"))
                {
                    StartupInfo.ExeRepository = StartupInfo.ExeRepository.Remove(StartupInfo.ExeRepository.Length - 1, 1);
                }
                if (StartupInfo.ScratchDir.EndsWith("\\"))
                {
                    StartupInfo.ScratchDir = StartupInfo.ScratchDir.Remove(StartupInfo.ScratchDir.Length - 1, 1);
                }
                if (StartupInfo.LinkedZonePath.EndsWith("\\"))
                {
                    StartupInfo.LinkedZonePath = StartupInfo.LinkedZonePath.Remove(StartupInfo.LinkedZonePath.Length - 1, 1);
                }
                if (StartupInfo.RawDataPath.EndsWith("\\"))
                {
                    StartupInfo.RawDataPath = StartupInfo.RawDataPath.Remove(StartupInfo.RawDataPath.Length - 1, 1);
                }

                //create a directory where to put all acquisition files
                if (StartupInfo.RawDataPath.IndexOf(System.Convert.ToString(StartupInfo.ProcessOperationId)) < 0)
                {
                    StartupInfo.RawDataPath = StartupInfo.RawDataPath + "\\cssd_" + StartupInfo.BrickId + "_" + StartupInfo.ProcessOperationId;
                    if (!System.IO.Directory.Exists(StartupInfo.RawDataPath))
                    {
                        System.IO.Directory.CreateDirectory(StartupInfo.RawDataPath);
                    }
                }

                ProgressInfo = HE.ProgressInfo;
                if (StartupInfo.RecoverFromProgressFile)
                {
                    try
                    {
                        XmlDocument xmldoc = new XmlDocument();
                        xmldoc.LoadXml(ProgressInfo.CustomInfo.Replace('[', '<').Replace(']', '>'));
                        System.Xml.XmlNode xmlprog = xmldoc.FirstChild;

                        WaitingOnId                    = Convert.ToInt64(xmlprog["WaitingOnId"].InnerText);
                        CS1WideAreaScanDone            = Convert.ToBoolean(xmlprog["CS1WideAreaScanDone"].InnerText);
                        CS2WideAreaScanDone            = Convert.ToBoolean(xmlprog["CS2WideAreaScanDone"].InnerText);
                        CS1WideAreaScanProcOperationId = Convert.ToInt64(xmlprog["CS1WideAreaScanProcOperationId"].InnerText);
                        CS2WideAreaScanProcOperationId = Convert.ToInt64(xmlprog["CS2WideAreaScanProcOperationId"].InnerText);
                        CSMappingDone                  = Convert.ToBoolean(xmlprog["CSMappingDone"].InnerText);
                        CSCandidatesDone               = Convert.ToBoolean(xmlprog["CSCandidatesDone"].InnerText);
                        ComputeScanArea                = Convert.ToBoolean(xmlprog["ComputeScanArea"].InnerText);
                        MinX = Convert.ToDouble(xmlprog["MinX"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MaxX = Convert.ToDouble(xmlprog["MaxX"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MinY = Convert.ToDouble(xmlprog["MinY"].InnerText, System.Globalization.CultureInfo.InvariantCulture);
                        MaxY = Convert.ToDouble(xmlprog["MaxY"].InnerText, System.Globalization.CultureInfo.InvariantCulture);

                        ProgressInfo.ExitException = null;
                        HE.WriteLine("Restarting complete");
                    }
                    catch (Exception ex)
                    {
                        HE.WriteLine("Restarting failed - proceeding to re-initialize process.");
                        ProgressInfo            = HE.ProgressInfo;
                        ProgressInfo.Progress   = 0.0;
                        ProgressInfo.StartTime  = System.DateTime.Now;
                        ProgressInfo.FinishTime = ProgressInfo.StartTime.AddYears(1);
                        HE.WriteLine(ex.Message);
                    }
                }
                else
                {
                    CS1WideAreaScanDone            = false;
                    CS2WideAreaScanDone            = false;
                    CS1WideAreaScanProcOperationId = 0;
                    CS2WideAreaScanProcOperationId = 0;
                    CSMappingDone              = false;
                    CSCandidatesDone           = false;
                    ComputeScanArea            = true;
                    ProgressInfo               = new TaskProgressInfo();
                    ProgressInfo.Complete      = false;
                    ProgressInfo.ExitException = null;
                    ProgressInfo.Progress      = 0.0;
                    ProgressInfo.StartTime     = System.DateTime.Now;
                    ProgressInfo.FinishTime    = ProgressInfo.StartTime.AddYears(1);
                }

                UpdateProgress();

                HE.InterruptNotifier = new Exe();

                if (ProgSettings.WaitForScanningArea)
                {
                    while (ComputeScanArea == true)
                    {
                        System.Threading.Thread.Sleep(1000);
                    }
                }

                UpdateProgress();

                for (int i = 0; i < 2; i++)
                {
                    bool WideAreaScanDone = (i == 0) ? CS1WideAreaScanDone : CS2WideAreaScanDone;

                    while (WideAreaScanDone == false)
                    {
                        if (WaitingOnId == 0)
                        {
                            SySal.DAQSystem.Drivers.ScanningStartupInfo wasdstartupinfo = new SySal.DAQSystem.Drivers.ScanningStartupInfo();
                            wasdstartupinfo.DBPassword     = StartupInfo.DBPassword;
                            wasdstartupinfo.DBServers      = StartupInfo.DBServers;
                            wasdstartupinfo.DBUserName     = StartupInfo.DBUserName;
                            wasdstartupinfo.ExeRepository  = StartupInfo.ExeRepository;
                            wasdstartupinfo.LinkedZonePath = StartupInfo.LinkedZonePath;
                            wasdstartupinfo.MachineId      = StartupInfo.MachineId;
                            wasdstartupinfo.Plate          = new SySal.DAQSystem.Scanning.MountPlateDesc();
                            wasdstartupinfo.Plate.BrickId  = StartupInfo.BrickId;
                            wasdstartupinfo.Plate.PlateId  = i + 1;
                            long calibrationId;
                            wasdstartupinfo.MarkSet                 = MarkType.SpotXRay;
                            wasdstartupinfo.Plate.MapInitString     = SySal.OperaDb.Scanning.Utilities.GetMapString(wasdstartupinfo.Plate.BrickId, wasdstartupinfo.Plate.PlateId, false, MarkType.SpotXRay, out calibrationId, Conn, null);
                            wasdstartupinfo.Plate.TextDesc          = "Brick #" + wasdstartupinfo.Plate.BrickId + " Plate #" + wasdstartupinfo.Plate.PlateId;
                            wasdstartupinfo.ProcessOperationId      = 0;
                            wasdstartupinfo.ProgramSettingsId       = ProgSettings.WideAreaConfigId;
                            wasdstartupinfo.ProgressFile            = "";
                            wasdstartupinfo.RawDataPath             = StartupInfo.RawDataPath;
                            wasdstartupinfo.RecoverFromProgressFile = false;
                            wasdstartupinfo.ScratchDir              = StartupInfo.ScratchDir;
                            if (ComputeScanArea == true)
                            {
                                wasdstartupinfo.Zones = CalculateZones(wasdstartupinfo.Plate.BrickId, wasdstartupinfo.Plate.PlateId);
                            }
                            else
                            {
                                wasdstartupinfo.Zones         = new SySal.DAQSystem.Scanning.ZoneDesc[1];
                                wasdstartupinfo.Zones[0]      = new SySal.DAQSystem.Scanning.ZoneDesc();
                                wasdstartupinfo.Zones[0].MinX = MinX;
                                wasdstartupinfo.Zones[0].MaxX = MaxX;
                                wasdstartupinfo.Zones[0].MinY = MinY;
                                wasdstartupinfo.Zones[0].MaxY = MaxY;
                            }
                            WaitingOnId = HE.Start(wasdstartupinfo);
                            UpdateProgress();

                            HE.WriteLine("Starting wasd " + WaitingOnId);
                        }

                        SySal.DAQSystem.Drivers.Status status;
                        if (WaitingOnId != 0)
                        {
                            status = HE.Wait(WaitingOnId);
                            if (status == SySal.DAQSystem.Drivers.Status.Failed)
                            {
                                WaitingOnId = 0;
                                throw new Exception("Scan of the changeable sheet " + (i + 1) + " failed!\n");
                            }

                            HE.WriteLine("Waiting wasd " + WaitingOnId);
                        }

                        if (WaitingOnId != 0)
                        {
                            status = HE.GetStatus(WaitingOnId);
                            if (status == SySal.DAQSystem.Drivers.Status.Completed)
                            {
                                if (i == 0)
                                {
                                    CS1WideAreaScanDone            = true;
                                    CS1WideAreaScanProcOperationId = WaitingOnId;
                                }
                                else
                                {
                                    CS2WideAreaScanDone            = true;
                                    CS2WideAreaScanProcOperationId = WaitingOnId;
                                }
                                ProgressInfo.Progress = 0.45 * (i + 1);
                                WaitingOnId           = 0;
                                break;
                            }

                            HE.WriteLine("Checking status wasd " + WaitingOnId);
                        }
                        UpdateProgress();
                    }
                }

                if (CSMappingDone == false)
                {
                    HE.WriteLine("Start mapping");

                    DataProcSrv = HE.DataProcSrv;

                    SySal.DAQSystem.DataProcessingBatchDesc dbd = new SySal.DAQSystem.DataProcessingBatchDesc();
                    dbd.AliasUsername     = StartupInfo.DBUserName;
                    dbd.AliasPassword     = StartupInfo.DBPassword;
                    dbd.Description       = "Plate doublet mapping B#" + StartupInfo.BrickId;
                    dbd.Id                = DataProcSrv.SuggestId;
                    dbd.Token             = HE.Token;
                    dbd.MachinePowerClass = 5;
                    dbd.Filename          = StartupInfo.ExeRepository + @"\CSMap.exe";
//                    dbd.CommandLineArguments = StartupInfo.ProcessOperationId + " db:\\" + ProgSettings.CSMapConfigId + ".xml CSMap_" + StartupInfo.BrickId + "_" + StartupInfo.ProcessOperationId + " false " + StartupInfo.ProcessOperationId;
                    dbd.CommandLineArguments =
                        "db:\\" + CS1WideAreaScanProcOperationId + ".tlg " +
                        "db:\\" + CS2WideAreaScanProcOperationId + ".tlg " +
                        "db:\\" + StartupInfo.BrickId + " " +
                        "db:\\" + ProgSettings.CSMapConfigId + ".xml " +
                        StartupInfo.RawDataPath + @"\CSSD " +
                        StartupInfo.ProcessOperationId;

                    if (!DataProcSrv.Enqueue(dbd))
                    {
                        throw new Exception("Cannot schedule CSd mapping batch " + dbd.Id + " for brick " + StartupInfo.BrickId + ". Aborting.");
                    }
                    while (DataProcSrv.DoneWith(dbd.Id) == false)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                    dbd = DataProcSrv.Result(dbd.Id);

                    if (System.IO.File.Exists(StartupInfo.RawDataPath + @"\CHECK") == true)
                    {
                        CSMappingDone = true;
                    }
                    else
                    {
                        throw new Exception("Plate Mapping failure");
                    }
                }

                //DUMP MARK FILE
                System.IO.StreamWriter markFile = null;
                try
                {
                    long   CalibrationId;
                    string markString = SySal.OperaDb.Scanning.Utilities.GetMapString(StartupInfo.BrickId, 1, false, MarkType.SpotXRay, out CalibrationId, Conn, null);
                    markFile = new System.IO.StreamWriter(StartupInfo.RawDataPath + @"\marks.txt");
                    markFile.WriteLine(markString);
                    markFile.Flush();
                }
                catch { }
                finally
                {
                    if (markFile != null)
                    {
                        markFile.Close();
                    }
                }

                WaitingOnId           = 0;
                ProgressInfo.Progress = 1.0;
                ProgressInfo.Complete = true;
                UpdateProgress();
            }
            catch (Exception ex)
            {
                if (ProgressInfo == null)
                {
                    ProgressInfo = new SySal.DAQSystem.Drivers.TaskProgressInfo();
                }
                HE.WriteLine(ex.Message);
                ProgressInfo.Complete      = false;
                ProgressInfo.ExitException = ex.ToString();
                UpdateProgress();
            }
        }
Exemple #7
0
        /// <summary>
        /// Handles POST methods.
        /// </summary>
        /// <param name="sess">Session information.</param>
        /// <param name="page">ignored.</param>
        /// <param name="postfields">the action parameters passed.</param>
        /// <returns>the status page.</returns>
        public SySal.Web.ChunkedResponse HttpPost(SySal.Web.Session sess, string page, params string[] postfields)
        {
            string user        = "";
            string pwd         = "";
            string dbuser      = "";
            string dbpwd       = "";
            string exepath     = "";
            string cmdargs     = "";
            string desc        = "";
            string outsavefile = null;
            bool   enq         = false;
            bool   rem         = false;
            string xctext      = "";
            ulong  expid       = 0;
            uint   powerclass  = 5;

            System.Collections.ArrayList chk = new System.Collections.ArrayList();
            try
            {
                if (postfields != null)
                {
                    foreach (string s in postfields)
                    {
                        if (s.StartsWith(ExpandCmd + "="))
                        {
                            try
                            {
                                expid = Convert.ToUInt64(s.Substring(ExpandCmd.Length + 1));
                            }
                            catch (Exception) { }
                        }
                    }
                    foreach (string s in postfields)
                    {
                        int eq = s.IndexOf("=");
                        if (eq >= 0)
                        {
                            string t = s.Substring(0, eq).ToLower();
                            string v = SySal.Web.WebServer.URLDecode(s.Substring(eq + 1));
                            switch (t)
                            {
                            case PowerClassCmd: try
                                {
                                    powerclass = Convert.ToUInt32(v);
                                }
                                catch (Exception) { } break;

                            case CmdArgsCmd: cmdargs = v; break;

                            case DescCmd: desc = v; break;

                            case ExePathCmd: exepath = v; break;

                            case UserIdCmd: user = v; break;

                            case PasswordIdCmd: pwd = v; break;

                            case DBUserIdCmd: dbuser = v; break;

                            case DBPasswordIdCmd: dbpwd = v; break;

                            case OutSaveFileCmd: outsavefile = v; break;

                            case EnqBtn: enq = true; break;

                            case RemBtn: rem = true; break;

                            default: if (s.StartsWith(CheckCmd))
                                {
                                    try
                                    {
                                        chk.Add(System.Convert.ToUInt64(t.Substring(CheckCmd.Length)));
                                    }
                                    catch (Exception) { }
                                }
                                break;
                            }
                        }
                    }
                }
                if (enq)
                {
                    try
                    {
                        SySal.DAQSystem.DataProcessingBatchDesc bd = new SySal.DAQSystem.DataProcessingBatchDesc();
                        bd.Id                   = OperaDataProcessingServer.DPS.SuggestId;
                        bd.Filename             = exepath;
                        bd.CommandLineArguments = cmdargs;
                        bd.Username             = user;
                        bd.Password             = pwd;
                        bd.Token                = null;
                        bd.AliasUsername        = dbuser;
                        bd.AliasPassword        = dbpwd;
                        bd.Description          = desc;
                        bd.MachinePowerClass    = powerclass;
                        bd.OutputTextSaveFile   = outsavefile;
                        if (OperaDataProcessingServer.DPS.Enqueue(bd) == false)
                        {
                            throw new Exception("Batch refused.");
                        }
                    }
                    catch (Exception x)
                    {
                        xctext = x.ToString();
                    }
                }
                if (rem)
                {
                    foreach (ulong u in chk)
                    {
                        try
                        {
                            OperaDataProcessingServer.DPS.Remove(u, null, user, pwd);
                        }
                        catch (Exception x)
                        {
                            xctext = x.ToString();
                        }
                    }
                }
            }
            catch (Exception x)
            {
                xctext = x.ToString();
            }
            string html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n" +
                          "<html xmlns=\"http://www.w3.org/1999/xhtml\" >\r\n" +
                          "<head>\r\n" +
                          "    <meta http-equiv=\"pragma\" content=\"no-cache\">\r\n" +
                          "    <meta http-equiv=\"EXPIRES\" content=\"0\" />\r\n" +
                          "    <title>OperaDataProcessingServer Monitor - " + OperaDataProcessingServer.MachineName + "</title>\r\n" +
                          "    <style type=\"text/css\">\r\n" +
                          "    th { font-family: Arial,Helvetica; font-size: 12; color: white; background-color: teal; text-align: center; font-weight: bold }\r\n" +
                          "    td { font-family: Arial,Helvetica; font-size: 12; color: navy; background-color: white; text-align: right; font-weight: normal }\r\n" +
                          "    p {font-family: Arial,Helvetica; font-size: 14; color: black; background-color: white; text-align: left; font-weight: normal }\r\n" +
                          "    div {font-family: Arial,Helvetica; font-size: 14; color: black; background-color: white; text-align: center; font-weight: normal }\r\n" +
                          "    </style>\r\n" +
                          "</head>\r\n" +
                          "<body>\r\n" +
                          "<div><b>OperaDataProcessingServer Monitor (" + OperaDataProcessingServer.MachineName + ")<br>Last Update: " + System.DateTime.Now.ToLongTimeString() + "</b></div>\r\n" +
                          "<br><a href=\"/\">Refresh</a><br>\r\n" +
                          "<form action=\"/\" method=\"post\" enctype=\"application/x-www-form-urlencoded\">\r\n";

            if (xctext.Length > 0)
            {
                html += "<p><font color=\"red\">" + SySal.Web.WebServer.HtmlFormat(xctext) + "</font></p>\r\n";
            }
            if (OperaDataProcessingServer.DPS != null)
            {
                SySal.DAQSystem.DataProcessingBatchDesc [] batches = OperaDataProcessingServer.DPS.Queue;
                html += "<table border=\"1\" align=\"center\" width=\"100%\">\r\n" +
                        " <tr><th width=\"10%\">Batch</th><th width=\"5%\">PowerClass</th><th width=\"65%\">Description</th><th width=\"10%\">Owner</th><th width=\"10%\">Started</th></tr>\r\n";
                foreach (SySal.DAQSystem.DataProcessingBatchDesc b in batches)
                {
                    html += " <tr><td><input id=\"" + CheckCmd + b.Id + "\" name=\"" + CheckCmd + b.Id + "\" type=\"checkbox\" />" + b.Id.ToString("X16") + "</td><td>" + b.MachinePowerClass + "</td><td>" + SySal.Web.WebServer.HtmlFormat(b.Description) +
                            ((expid == b.Id) ? ("<br><div align=\"left\"><font face=\"Courier\"><c>" + SySal.Web.WebServer.HtmlFormat(b.Filename + " " + b.CommandLineArguments) + "</c></font></div>&nbsp;<a href=\"/?" + ExpandCmd + "=0\"><i>Shrink</i></a>") : ("&nbsp;<a href=\"/?" + ExpandCmd + "=" + b.Id + "\"><i>Expand</i></a>")) +
                            "</td><td>&nbsp;" + SySal.Web.WebServer.HtmlFormat((b.Username == null || b.Username == "") ? "N/A" : b.Username) + "</td><td>&nbsp;" + b.Started.ToString() + "</td></tr>\r\n";
                }

                html += "</table>\r\n" +
                        "<p><input id=\"" + EnqBtn + "\" name=\"" + EnqBtn + "\" type=\"submit\" value=\"Enqueue\"/>&nbsp;<input id=\"" + RemBtn + "\" name=\"" + RemBtn + "\" type=\"submit\" value=\"Remove Selected\"/></p>\r\n" +
                        "<p>Description <input id=\"" + DescCmd + "\" maxlength=\"1024\" name=\"" + DescCmd + "\" size=\"50\" type=\"text\" /></p>\r\n" +
                        "<p>Executable <input id=\"" + ExePathCmd + "\" maxlength=\"1024\" name=\"" + ExePathCmd + "\" size=\"50\" type=\"text\" value=\"" + SySal.Web.WebServer.HtmlFormat(OperaDataProcessingServer.ExeRepository) + "\" /></p>\r\n" +
                        "<p>Command line arguments <input id=\"" + CmdArgsCmd + "\" maxlength=\"10240\" name=\"" + CmdArgsCmd + "\" size=\"50\" type=\"text\" /></p>\r\n" +
                        "<p>Machine power class <input id=\"" + PowerClassCmd + "\" maxlength=\"5\" name=\"" + PowerClassCmd + "\" size=\"5\" type=\"text\" /></p>\r\n" +
                        "<p>Output save file <input id=\"" + OutSaveFileCmd + "\" maxlength=\"1024\" name=\"" + OutSaveFileCmd + "\" size=\"50\" type=\"text\" /></p>\r\n" +
                        "<table align=\"left\" border=\"0\">\r\n" +
                        " <tr><td align=\"left\" width=\"50%\"><p>Username</p></td><td align=\"right\" width=\"50%\"><input id=\"" + UserIdCmd + "\" maxlength=\"30\" name=\"" + UserIdCmd + "\" size=\"30\" type=\"text\" /></td></tr>\r\n" +
                        " <tr><td align=\"left\" width=\"50%\"><p>Password</p></td><td align=\"right\" width=\"50%\"><input id=\"" + PasswordIdCmd + "\" name=\"" + PasswordIdCmd + "\" size=\"30\" type=\"password\" /></td></tr>\r\n" +
                        " <tr><td align=\"left\" width=\"50%\"><p>DB User</p></td><td align=\"right\" width=\"50%\"><input id=\"" + DBUserIdCmd + "\" maxlength=\"30\" name=\"" + DBUserIdCmd + "\" size=\"30\" type=\"text\" /></td></tr>\r\n" +
                        " <tr><td align=\"left\" width=\"50%\"><p>DB Password</p></td><td align=\"right\" width=\"50%\"><input id=\"" + DBPasswordIdCmd + "\" name=\"" + DBPasswordIdCmd + "\" size=\"30\" type=\"password\" /></td></tr>\r\n" +
                        "</table>\r\n" +
                        "</form>\r\n";
            }
            html += "</body>\r\n";
            return(new SySal.Web.HTMLResponse(html));
        }