Exemplo n.º 1
0
        public async Task <string> SubmitNewTaskAndAwaitCompletionAsync(ControllableProcessTask task, bool successIsExpected)
        {
            var status = await TashAccessor.PutControllableProcessTaskAsync(task);

            Assert.AreEqual(HttpStatusCode.Created, status);

            var startTime = DateTime.Now;
            var result
                = await TashAccessor.AwaitCompletionAsync(task.Id, MilliSecondsToAttemptWhileRequestedOrProcessing)
                  ?? await TashAccessor.GetControllableProcessTaskAsync(task.Id);

            if (result.Status == ControllableProcessTaskStatus.Processing)
            {
                var endTime = DateTime.Now;
                var elapsed = (endTime - startTime).TotalMilliseconds;
                Assert.IsTrue(elapsed > MilliSecondsToAttemptWhileRequestedOrProcessing,
                              $"Task started at {startTime.ToLongTimeString()} and given up at {endTime.ToLongTimeString()}");
            }
            if (successIsExpected)
            {
                var errorMessage = $"Task status is {Enum.GetName(typeof(ControllableProcessTaskStatus), result.Status)}, error message: {result.ErrorMessage}";
                Assert.AreEqual(ControllableProcessTaskStatus.Completed, result.Status, errorMessage);
                return(result.Text);
            }
            else
            {
                var errorMessage = $"Unexpected task status {Enum.GetName(typeof(ControllableProcessTaskStatus), result.Status)}";
                Assert.AreEqual(ControllableProcessTaskStatus.Failed, result.Status, errorMessage);
                return(result.ErrorMessage);
            }
        }
Exemplo n.º 2
0
 public bool MarkTaskAsCompleted(ControllableProcessTask theTaskIAmProcessing, int processId, string type, string controlName, string text)
 {
     return(theTaskIAmProcessing != null &&
            theTaskIAmProcessing.Status == ControllableProcessTaskStatus.Processing &&
            theTaskIAmProcessing.ProcessId == processId &&
            theTaskIAmProcessing.Type == type &&
            theTaskIAmProcessing.ControlName == controlName &&
            theTaskIAmProcessing.Text == text);
 }
Exemplo n.º 3
0
        public static ControllableProcessTask CreateControllableProcessTask(global::System.Guid ID, int processId, global::Aspenlaub.Net.GitHub.CSharp.Tash.ControllableProcessTaskStatus status)
        {
            ControllableProcessTask controllableProcessTask = new ControllableProcessTask();

            controllableProcessTask.Id        = ID;
            controllableProcessTask.ProcessId = processId;
            controllableProcessTask.Status    = status;
            return(controllableProcessTask);
        }
Exemplo n.º 4
0
    public async Task <HttpStatusCode> ConfirmStatusAsync(Guid taskId, ControllableProcessTaskStatus status, string text, string errorMessage)
    {
        using (_SimpleLogger.BeginScope(SimpleLoggingScopeId.Create(nameof(ConfirmStatusAsync)))) {
            var methodNamesFromStack = _MethodNamesFromStackFramesExtractor.ExtractMethodNamesFromStackFrames();
            _SimpleLogger.LogInformationWithCallStack($"Confirm status {Enum.GetName(typeof(ControllableProcessStatus), status)} for task id={taskId}", methodNamesFromStack);

            DefaultContainer        context;
            ControllableProcessTask controllableProcessTask = null;
            bool wasExceptionThrown;
            do
            {
                wasExceptionThrown = false;
                context            = new DefaultContainer(new Uri(BaseUrl));
                try {
                    if (!await ProcessTaskExists(context, taskId))
                    {
                        return(HttpStatusCode.NotFound);
                    }
                    _SimpleLogger.LogInformationWithCallStack($"Select task with id={taskId} for update", methodNamesFromStack);
                    controllableProcessTask = await context.ControllableProcessTasks.ByKey(taskId).GetValueAsync();
                } catch {
                    _SimpleLogger.LogErrorWithCallStack($"Could not select task with id={taskId} for update, trying again", methodNamesFromStack);
                    wasExceptionThrown = true;
                }
            } while (wasExceptionThrown);

            if (controllableProcessTask == null)
            {
                _SimpleLogger.LogInformationWithCallStack($"No task found with id={taskId}", methodNamesFromStack);
                return(HttpStatusCode.NotFound);
            }

            _SimpleLogger.LogInformationWithCallStack($"Update task with id={taskId}", methodNamesFromStack);
            controllableProcessTask.Status       = status;
            controllableProcessTask.Text         = text;
            controllableProcessTask.ErrorMessage = errorMessage;
            context.UpdateObject(controllableProcessTask);
            var response = await context.SaveChangesAsync(SaveChangesOptions.None);

            var statusCode = response.Select(r => (HttpStatusCode)r.StatusCode).FirstOrDefault();
            return(statusCode);
        }
    }
Exemplo n.º 5
0
    public async Task <HttpStatusCode> PutControllableProcessTaskAsync(ControllableProcessTask processTask)
    {
        using (_SimpleLogger.BeginScope(SimpleLoggingScopeId.Create(nameof(PutControllableProcessTaskAsync)))) {
            var methodNamesFromStack = _MethodNamesFromStackFramesExtractor.ExtractMethodNamesFromStackFrames();
            _SimpleLogger.LogInformationWithCallStack($"Put controllable process task with id={processTask.Id}", methodNamesFromStack);
            var context = new DefaultContainer(new Uri(BaseUrl));
            ControllableProcessTask controllableProcessTask;
            if (await ProcessTaskExists(context, processTask.Id))
            {
                _SimpleLogger.LogInformationWithCallStack($"Update controllable process task with id={processTask.Id}", methodNamesFromStack);
                controllableProcessTask = await context.ControllableProcessTasks.ByKey(processTask.Id).GetValueAsync();

                controllableProcessTask.ProcessId   = processTask.ProcessId;
                controllableProcessTask.Type        = processTask.Type;
                controllableProcessTask.ControlName = processTask.ControlName;
                controllableProcessTask.Text        = processTask.Text;
                controllableProcessTask.Status      = processTask.Status;
                context.UpdateObject(controllableProcessTask);
            }
            else
            {
                _SimpleLogger.LogInformationWithCallStack($"Insert controllable process task with id={processTask.Id}", methodNamesFromStack);
                controllableProcessTask = new ControllableProcessTask {
                    Id          = processTask.Id,
                    ProcessId   = processTask.ProcessId,
                    Type        = processTask.Type,
                    ControlName = processTask.ControlName,
                    Text        = processTask.Text,
                    Status      = processTask.Status
                };
                context.AddToControllableProcessTasks(controllableProcessTask);
            }

            var response = await context.SaveChangesAsync(SaveChangesOptions.ReplaceOnUpdate);

            var statusCode = response.Select(r => (HttpStatusCode)r.StatusCode).FirstOrDefault();
            return(statusCode);
        }
    }
Exemplo n.º 6
0
 public void AddToControllableProcessTasks(ControllableProcessTask controllableProcessTask)
 {
     base.AddObject("ControllableProcessTasks", controllableProcessTask);
 }
Exemplo n.º 7
0
 public async Task <string> SubmitNewTaskAndAwaitCompletionAsync(ControllableProcessTask task)
 {
     return(await SubmitNewTaskAndAwaitCompletionAsync(task, true));
 }