Beispiel #1
0
        public override void TryClose(bool?dialogResult = default(bool?))
        {
            var shell        = IoC.Get <IShell>();
            var propertyTool = shell.Tools.FirstOrDefault(t => t is IPropertyGrid);

            if (propertyTool != null && _shouldClosePropertyGridOnDeactivate)
            {
                shell.Tools.Remove(propertyTool);
            }

            Result.Clear();
            Result = null;

            _propertyInfo = null;

            base.TryClose(dialogResult);
        }
Beispiel #2
0
        private void SubscribeToJob()
        {
            var job = default(JobModelProxy);

            Task.Run(() =>
            {
                try
                {
                    //AsyncExecution.Run(ThreadPriority.Normal, () =>
                    // Wait for the job ID to be set by our backend service
                    while (_jobId == Guid.Empty)
                    {
                        if (_runbookViewModel.Runbook.JobID != null)
                        {
                            _jobId = _runbookViewModel.Runbook.JobID;
                        }

                        Thread.Sleep(1 * 1000);
                    }

                    if (_runbookViewModel.Runbook.JobID != null && _runbookViewModel.Runbook.JobID != Guid.Empty)
                    {
                        job = _backendService.GetJobDetails(_runbookViewModel.Runbook);
                    }
                    else if (_jobId != Guid.Empty)
                    {
                        job = _backendService.GetJobDetails(_jobId);
                    }

                    if (job != null)
                    {
                        Execute.OnUIThread(() =>
                        {
                            foreach (var entry in job.Result)
                            {
                                Result.Add(entry);
                            }

                            JobStatus = job.JobStatus;
                            NotifyOfPropertyChange(() => DisplayName);

                            _propertyInfo                  = new ExecutionResultPropertyInfo();
                            _propertyInfo.JobID            = (_jobId == null) ? Guid.Empty : (Guid)_jobId;
                            _propertyInfo.RunbookID        = (_runbookViewModel != null) ? ((RunbookModelProxy)_runbookViewModel.Model).RunbookID : Guid.Empty;
                            _propertyInfo.RunbookName      = (_runbookViewModel != null) ? ((RunbookModelProxy)_runbookViewModel.Model).RunbookName : "Unknown";
                            _propertyInfo.JobStatus        = job.JobStatus;
                            _propertyInfo.StartTime        = job.StartTime;
                            _propertyInfo.EndTime          = job.EndTime;
                            _propertyInfo.CreationTime     = job.CreationTime;
                            _propertyInfo.LastModifiedTime = job.LastModifiedTime;
                            _propertyInfo.ErrorCount       = job.ErrorCount;
                            _propertyInfo.WarningCount     = job.WarningCount;
                            _propertyInfo.Exception        = job.JobException;

                            if (!string.IsNullOrEmpty(job.JobException))
                            {
                                _output.AppendLine("Error when executing runbook:");
                                _output.AppendLine(job.JobException);
                                _output.AppendLine(" ");
                            }

                            _inspectorTool.SelectedObject = _propertyInfo;
                        });
                    }

                    bool hasDisplayedException = false;
                    while (!_completedExecutionStatus.Contains(job.JobStatus))
                    {
                        job = _backendService.GetJobDetails(_runbookViewModel.Runbook);

                        if (job != null)
                        {
                            Execute.OnUIThread(() =>
                            {
                                JobStatus = job.JobStatus;
                                NotifyOfPropertyChange(() => DisplayName);

                                _propertyInfo.StartTime    = job.StartTime;
                                _propertyInfo.EndTime      = job.EndTime;
                                _propertyInfo.ErrorCount   = job.ErrorCount;
                                _propertyInfo.WarningCount = job.WarningCount;
                                _propertyInfo.JobStatus    = job.JobStatus;
                                _propertyInfo.Exception    = job.JobException;

                                if (!String.IsNullOrEmpty(job.JobException) && !hasDisplayedException)
                                {
                                    _output.AppendLine("Error when executing runbook:");
                                    _output.AppendLine(job.JobException);
                                    _output.AppendLine(" ");

                                    hasDisplayedException = true;
                                }

                                _inspectorTool.SelectedObject = null;
                                _inspectorTool.SelectedObject = _propertyInfo;

                                foreach (var entry in job.Result)
                                {
                                    Result.Add(entry);
                                }
                            });
                        }

                        Thread.Sleep(5 * 1000);
                    }

                    // The job is completed
                    _runbookViewModel.Runbook.JobID = Guid.Empty;
                    LongRunningOperation.Stop();
                }
                catch (Exception ex)
                {
                    GlobalExceptionHandler.Show(ex);
                    _runbookViewModel.Runbook.JobID = Guid.Empty;

                    job.JobStatus = "Failed";
                }
            });

            if (job != null)
            {
                var output = IoC.Get <IOutput>();
                output.AppendLine("Job executed with status: " + job.JobStatus);
            }
        }