Exemplo n.º 1
0
        //-------------------------------------------------------------------------------------------------//

        private LabExperimentStatus GetLabExperimentStatus(int experimentId, string sbName)
        {
            const string STRLOG_MethodName = "GetLabExperimentStatus";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            LabExperimentStatus labExperimentStatus = null;

            //
            // Check experiment status of each experiment engine
            //
            for (int i = 0; i < this.appData.farmSize; i++)
            {
                LabExperimentEngine labExperimentEngine = this.appData.labExperimentEngines[i];

                labExperimentStatus = labExperimentEngine.GetLabExperimentStatus(experimentId, sbName);
                if ((StatusCodes)labExperimentStatus.statusReport.statusCode != StatusCodes.Unknown)
                {
                    // This engine is running the experiment
                    break;
                }
            }

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName);

            return(labExperimentStatus);
        }
Exemplo n.º 2
0
        //-------------------------------------------------------------------------------------------------//

        public WaitEstimate GetEffectiveQueueLength(string userGroup, int priorityHint)
        {
            WaitEstimate waitEstimate = null;

            lock (this.managerLock)
            {
                //
                // NOTE: This implementation does not consider the group or priority of the user
                //

                // Get queue wait estimate
                waitEstimate = this.experimentQueue.GetWaitEstimate();

                // Add in time remaining before the next experiment can run
                LabExperimentStatus labExperimentStatus = this.GetLabExperimentStatus(0, null);
                waitEstimate.estWait += labExperimentStatus.statusReport.estRemainingRuntime;
            }

            return(waitEstimate);
        }
        //-------------------------------------------------------------------------------------------------//

        public LabExperimentStatus GetLabExperimentStatus(int experimentId, string sbName)
        {
            const string STRLOG_MethodName = "GetLabExperimentStatus";

            string logMessage = STRLOG_experimentId + experimentId.ToString() +
                                Logfile.STRLOG_Spacer + STRLOG_sbName + Logfile.STRLOG_Quote + sbName + Logfile.STRLOG_Quote +
                                Logfile.STRLOG_Spacer + STRLOG_unitId + unitId.ToString();

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName, logMessage);

            LabExperimentStatus labExperimentStatus = new LabExperimentStatus(
                new ExperimentStatus((int)StatusCodes.Unknown));

            int remainingRuntime = 0;

            lock (this.statusLock)
            {
                //
                // Check if the specified experiment is running on this engine
                //
                if ((this.labExperimentInfo != null) &&
                    (labExperimentInfo.experimentInfo.experimentId == experimentId) &&
                    (labExperimentInfo.experimentInfo.sbName.Equals(sbName, StringComparison.OrdinalIgnoreCase) == true))
                {
                    //
                    // Update the status code
                    //
                    StatusCodes status = this.labExperimentInfo.experimentInfo.status;
                    labExperimentStatus.statusReport.statusCode = (int)status;

                    if (status == StatusCodes.Running)
                    {
                        //
                        // The specified experiment is currently running, fill in information
                        //
                        labExperimentStatus.statusReport.estRuntime = (double)this.labExperimentInfo.experimentInfo.estExecutionTime;

                        // Calculate time already passed for the experiment
                        remainingRuntime = (int)((TimeSpan)(DateTime.Now - this.labExperimentInfo.startDateTime)).TotalSeconds;

                        // Now calculate the time remaining for the experiment
                        remainingRuntime = this.labExperimentInfo.experimentInfo.estExecutionTime - remainingRuntime;

                        //
                        // Estimated runtime may have been underestimated. Don't say remaining runtime is zero while
                        // the experiment is still running.
                        //
                        if (remainingRuntime < 1)
                        {
                            remainingRuntime = 1;
                        }

                        labExperimentStatus.statusReport.estRemainingRuntime = (double)remainingRuntime;

                        logMessage = STRLOG_estRuntime + labExperimentStatus.statusReport.estRuntime.ToString() +
                                     Logfile.STRLOG_Spacer + STRLOG_remainingRuntime + labExperimentStatus.statusReport.estRemainingRuntime.ToString();
                    }
                }
                else
                {
                    // Unkown experiment
                    labExperimentStatus = new LabExperimentStatus(new ExperimentStatus((int)StatusCodes.Unknown));
                }
            }

            logMessage = STRLOG_statusCode + ((StatusCodes)labExperimentStatus.statusReport.statusCode).ToString() +
                         Logfile.STRLOG_Spacer + logMessage;

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName, logMessage);

            return(labExperimentStatus);
        }
Exemplo n.º 4
0
        //-------------------------------------------------------------------------------------------------//

        public LabExperimentStatus GetExperimentStatus(int experimentId, string sbName)
        {
            const string STRLOG_MethodName = "GetExperimentStatus";

            LabExperimentStatus labExperimentStatus = null;

            lock (this.managerLock)
            {
                string logMessage = STRLOG_experimentId + experimentId.ToString() +
                                    Logfile.STRLOG_Spacer + STRLOG_sbName + Logfile.STRLOG_Quote + sbName + Logfile.STRLOG_Quote;

                Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName, logMessage);

                labExperimentStatus = new LabExperimentStatus();
                logMessage          = string.Empty;

                //
                // Get the status of the experiment from the queue table
                //
                StatusCodes status = this.experimentQueue.GetExperimentStatus(experimentId, sbName);
                if (status == StatusCodes.Unknown)
                {
                    //
                    // The experiment never existed
                    //
                }
                else if (status == StatusCodes.Waiting)
                {
                    //
                    // Experiment is waiting on the queue
                    //
                    QueuedExperimentInfo queuedExperimentInfo = this.experimentQueue.GetQueuedExperimentInfo(experimentId, sbName);
                    if (queuedExperimentInfo != null && queuedExperimentInfo.position > 0)
                    {
                        // Set the experiment status
                        labExperimentStatus.statusReport.statusCode = (int)queuedExperimentInfo.status;

                        // Get the queue position and wait time
                        labExperimentStatus.statusReport.wait =
                            new WaitEstimate(queuedExperimentInfo.position, queuedExperimentInfo.waitTime);

                        // Add in time for any currently running experiment ????
                        labExperimentStatus.statusReport.wait.estWait += GetMinRemainingRuntime();

                        // Get the time it takes to run the experiment
                        labExperimentStatus.statusReport.estRuntime          = queuedExperimentInfo.estExecutionTime;
                        labExperimentStatus.statusReport.estRemainingRuntime = queuedExperimentInfo.estExecutionTime;

                        logMessage =
                            Logfile.STRLOG_Spacer + STRLOG_QueuePosition + labExperimentStatus.statusReport.wait.effectiveQueueLength.ToString() +
                            Logfile.STRLOG_Spacer + STRLOG_QueueWaitTime + labExperimentStatus.statusReport.wait.estWait.ToString() +
                            Logfile.STRLOG_Spacer + STRLOG_estRuntime + labExperimentStatus.statusReport.estRuntime.ToString() +
                            Logfile.STRLOG_Spacer + STRLOG_remainingRuntime + labExperimentStatus.statusReport.estRemainingRuntime.ToString();
                    }
                }
                else if (status == StatusCodes.Running)
                {
                    //
                    // Experiment is currently running
                    //
                    labExperimentStatus = this.GetLabExperimentStatus(experimentId, sbName);
                }
                else
                {
                    //
                    // Experiment has completed, cancelled or failed
                    //
                    ResultReport resultReport = this.experimentResults.Load(experimentId, sbName);

                    // Set the experiment status
                    labExperimentStatus.statusReport.statusCode = resultReport.statusCode;
                }

                logMessage = STRLOG_statusCode + ((StatusCodes)labExperimentStatus.statusReport.statusCode).ToString() +
                             Logfile.STRLOG_Spacer + logMessage;

                Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName, logMessage);
            }

            return(labExperimentStatus);
        }