diff --git a/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs b/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs index 818d00832..e2e2cbd61 100644 --- a/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs +++ b/src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs @@ -143,6 +143,8 @@ public async Task GetDailyStatsAsync([FromQuery] TimeFilter filte TotalAwaitingReview = g.Count(i => string.Compare(i.Status, ApplicationReviewStatus.AwaitingReview.ToString(), true) == 0), }); + + var pagedStats = statsDto.Skip((filter.PageNumber - 1) * pageSize).Take(pageSize); var res = CreateStatsPagedResponse(pagedStats, validFilter, statsDto.Count(), _uriService, route); @@ -152,7 +154,7 @@ public async Task GetDailyStatsAsync([FromQuery] TimeFilter filte res.PeriodEnd = filter.EndTime; res.TotalExecutions = allStats.Count(); res.TotalSucceeded = statsDto.Sum(s => s.TotalApprovals); - res.TotalFailures = statsDto.Sum(s => s.TotalFailures); + res.TotalFailures = statsDto.Sum(s => s.TotalFailures + s.TotalCancelled + s.TotalRejections); res.TotalInprogress = statsDto.Sum(s => s.TotalAwaitingReview); res.AverageTotalExecutionSeconds = Math.Round(avgTotalExecution, 2); res.AverageArgoExecutionSeconds = Math.Round(avgArgoExecution, 2); diff --git a/tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs b/tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs index e3c81a073..727f3c9dd 100644 --- a/tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs +++ b/tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs @@ -336,6 +336,102 @@ public async Task GetAllStatsAsync_Pass_All_Arguments_To_GetStatsAsync_In_Repo() It.Is(s => s.Equals(""))) ); } + + [Fact] + public async Task GetAllStatsAsync_Get_Correct_Reject_Count() + { + var startTime = new DateTime(2023, 4, 4); + var endTime = new DateTime(2023, 4, 5); + const int pageNumber = 1; + const int pageSize = 10; + + var executionStats = new ExecutionStats[] + { + new ExecutionStats + { + ExecutionId = Guid.NewGuid().ToString(), + StartedUTC = _startTime, + WorkflowInstanceId= "workflow", + TaskId = "task", + Status = "Failed", + Reason = Messaging.Events.FailureReason.Rejected, + }, + }; + + _repo.Setup(w => w.GetAllStatsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(executionStats); + + var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow"); + + var resultCollection = result.As().Value.As>>().Data; + + Assert.Equal(1, resultCollection.First().TotalExecutions); + Assert.Equal(1, resultCollection.First().TotalRejections); + Assert.Equal(1, resultCollection.First().TotalFailures); + } + + [Fact] + public async Task GetAllStatsAsync_Get_Correct_Canceled_Count() + { + var startTime = new DateTime(2023, 4, 4); + var endTime = new DateTime(2023, 4, 5); + const int pageNumber = 1; + const int pageSize = 10; + + var executionStats = new ExecutionStats[] + { + new ExecutionStats + { + ExecutionId = Guid.NewGuid().ToString(), + StartedUTC = _startTime, + WorkflowInstanceId= "workflow", + TaskId = "task", + Status = "Failed", + Reason = Messaging.Events.FailureReason.TimedOut, + }, + }; + + _repo.Setup(w => w.GetAllStatsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(executionStats); + + var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow"); + + var resultCollection = result.As().Value.As>>().Data; + + Assert.Equal(1, resultCollection.First().TotalExecutions); + Assert.Equal(1, resultCollection.First().TotalCancelled); + Assert.Equal(0, resultCollection.First().TotalFailures); + } + + [Fact] + public async Task GetAllStatsAsync_Get_Correct_Accepted_Count() + { + var startTime = new DateTime(2023, 4, 4); + var endTime = new DateTime(2023, 4, 5); + const int pageNumber = 1; + const int pageSize = 10; + + var executionStats = new ExecutionStats[] + { + new ExecutionStats + { + ExecutionId = Guid.NewGuid().ToString(), + StartedUTC = _startTime, + WorkflowInstanceId= "workflow", + TaskId = "task", + Status = "Succeeded", + Reason = Messaging.Events.FailureReason.None, + }, + }; + + _repo.Setup(w => w.GetAllStatsAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(executionStats); + + var result = await StatsController.GetDailyStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime, PageNumber = pageNumber, PageSize = pageSize }, "workflow"); + + var resultCollection = result.As().Value.As>>().Data; + + Assert.Equal(1, resultCollection.First().TotalExecutions); + Assert.Equal(1, resultCollection.First().TotalApprovals); + Assert.Equal(0, resultCollection.First().TotalFailures); + } } #pragma warning restore CS8604 // Possible null reference argument. #pragma warning restore CS8602 // Dereference of a possibly null reference.