Skip to content

Commit 2a0c339

Browse files
authored
Merge pull request #802 from Project-MONAI/AC-2220
Return 'totalSucceeded' stat in TaskExecutionStats
2 parents fa43b84 + 8960674 commit 2a0c339

File tree

7 files changed

+60
-1
lines changed

7 files changed

+60
-1
lines changed

src/Shared/Shared/Wrappers/StatsPagedResponse.cs

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class StatsPagedResponse<T> : PagedResponse<T>
2020
public DateTime PeriodStart { get; set; }
2121
public DateTime PeriodEnd { get; set; }
2222
public long TotalExecutions { get; set; }
23+
public long TotalSucceeded { get; set; }
2324
public long TotalFailures { get; set; }
2425
public long TotalInprogress { get; set; }
2526
public double AverageTotalExecutionSeconds { get; set; }

src/WorkflowManager/Database/Interfaces/ITaskExecutionStatsRepository.cs

+8
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,14 @@ public interface ITaskExecutionStatsRepository
7070
/// <returns>The count of all records in range</returns>
7171
Task<long> GetStatsStatusCountAsync(DateTime start, DateTime endTime, string status = "", string workflowId = "", string taskId = "");
7272

73+
/// <summary>
74+
/// Returns all stats in Succeeded status.
75+
/// </summary>
76+
/// <param name="startTime">start of the range.</param>
77+
/// <param name="endTime">end of the range.</param>
78+
/// <returns>All stats that succeeded</returns>
79+
Task<long> GetStatsStatusSucceededCountAsync(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "");
80+
7381
/// <summary>
7482
/// Returns all stats in Failed or PartialFail status.
7583
/// </summary>

src/WorkflowManager/Database/Repositories/TaskExecutionStatsRepository.cs

+13
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,19 @@ public async Task<long> GetStatsStatusCountAsync(DateTime start, DateTime endTim
220220
(statusNull || T.Status == status));
221221
}
222222

223+
public async Task<long> GetStatsStatusSucceededCountAsync(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "")
224+
{
225+
var workflowNull = string.IsNullOrWhiteSpace(workflowId);
226+
var taskIdNull = string.IsNullOrWhiteSpace(taskId);
227+
228+
return await _taskExecutionStatsCollection.CountDocumentsAsync(T =>
229+
T.StartedUTC >= startTime.ToUniversalTime() &&
230+
T.StartedUTC <= endTime.ToUniversalTime() &&
231+
(workflowNull || T.WorkflowId == workflowId) &&
232+
(taskIdNull || T.TaskId == taskId) &&
233+
T.Status == TaskExecutionStatus.Succeeded.ToString());
234+
}
235+
223236
public async Task<long> GetStatsStatusFailedCountAsync(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "")
224237
{
225238
var workflowNull = string.IsNullOrWhiteSpace(workflowId);

src/WorkflowManager/WorkflowManager/Controllers/TaskStatsController.cs

+4
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public async Task<IActionResult> GetOverviewAsync([FromQuery] DateTime startTime
8787

8888
try
8989
{
90+
var successes = _repository.GetStatsStatusSucceededCountAsync(startTime, endTime);
9091
var fails = _repository.GetStatsStatusFailedCountAsync(startTime, endTime);
9192
var running = _repository.GetStatsStatusCountAsync(startTime, endTime, TaskExecutionStatus.Accepted.ToString());
9293
var rangeCount = _repository.GetStatsStatusCountAsync(startTime, endTime);
@@ -98,6 +99,7 @@ public async Task<IActionResult> GetOverviewAsync([FromQuery] DateTime startTime
9899
PeriodStart = startTime,
99100
PeriodEnd = endTime,
100101
TotalExecutions = (int)rangeCount.Result,
102+
TotalSucceeded = (int)successes.Result,
101103
TotalFailures = (int)fails.Result,
102104
TotalInprogress = running.Result,
103105
AverageTotalExecutionSeconds = Math.Round(stats.Result.avgTotalExecution, 2),
@@ -149,6 +151,7 @@ public async Task<IActionResult> GetStatsAsync([FromQuery] TimeFilter filter, st
149151
try
150152
{
151153
var allStats = _repository.GetStatsAsync(filter.StartTime, filter.EndTime, pageSize, filter.PageNumber, workflowId ?? string.Empty, taskId ?? string.Empty);
154+
var successes = _repository.GetStatsStatusSucceededCountAsync(filter.StartTime, filter.EndTime, workflowId ?? string.Empty, taskId ?? string.Empty);
152155
var fails = _repository.GetStatsStatusFailedCountAsync(filter.StartTime, filter.EndTime, workflowId ?? string.Empty, taskId ?? string.Empty);
153156
var rangeCount = _repository.GetStatsStatusCountAsync(filter.StartTime, filter.EndTime, string.Empty, workflowId ?? string.Empty, taskId ?? string.Empty);
154157
var stats = _repository.GetAverageStats(filter.StartTime, filter.EndTime, workflowId ?? string.Empty, taskId ?? string.Empty);
@@ -168,6 +171,7 @@ public async Task<IActionResult> GetStatsAsync([FromQuery] TimeFilter filter, st
168171
res.PeriodStart = filter.StartTime;
169172
res.PeriodEnd = filter.EndTime;
170173
res.TotalExecutions = rangeCount.Result;
174+
res.TotalSucceeded = successes.Result;
171175
res.TotalFailures = fails.Result;
172176
res.TotalInprogress = running.Result;
173177
res.AverageTotalExecutionSeconds = Math.Round(stats.Result.avgTotalExecution, 2);

tests/IntegrationTests/TaskManager.IntegrationTests/Features/__snapshots__/ExecutionStatsFeature.ExecutionStatsForATaskAreReturned_Workflow_1_Task_2_.snap

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"periodStart": "2023-01-01T00:00:00",
1818
"periodEnd": "2023-04-26T15:01:01.2301205+01:00",
1919
"totalExecutions": 1,
20+
"totalSucceeded": 1,
2021
"totalFailures": 0,
2122
"totalInprogress": 1,
2223
"averageTotalExecutionSeconds": 30.0,

tests/IntegrationTests/TaskManager.IntegrationTests/Features/__snapshots__/ExecutionStatsFeature.ExecutionStatsForATaskAreReturned_workflow_1_task_1_.snap

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"periodStart": "2023-01-01T00:00:00",
1818
"periodEnd": "2023-04-26T15:01:01.0902241+01:00",
1919
"totalExecutions": 5,
20+
"totalSucceeded": 3,
2021
"totalFailures": 1,
2122
"totalInprogress": 1,
2223
"averageTotalExecutionSeconds": 30.0,

tests/UnitTests/WorkflowManager.Tests/Controllers/TaskExecutionStatsControllerTests.cs

+32-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public async Task GetListAsync_PayloadsExist_ReturnsList()
9393
[Fact]
9494
public async Task GetStatsOverviewAsync_ServiceException_ReturnProblem()
9595
{
96-
_repo.Setup(w => w.GetStatsStatusFailedCountAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>())).ThrowsAsync(new Exception());
96+
_repo.Setup(w => w.GetStatsStatusSucceededCountAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>(), It.IsAny<string>(), It.IsAny<string>())).ThrowsAsync(new Exception());
9797

9898
var result = await StatsController.GetOverviewAsync(It.IsAny<DateTime>(), It.IsAny<DateTime>());
9999

@@ -138,6 +138,22 @@ public async Task GetStatsAsync_Pass_All_Arguments_To_GetStatsAsync_In_Repo()
138138
);
139139
}
140140

141+
[Fact]
142+
public async Task GetStatsAsync_Pass_All_Arguments_To_GetStatsStatusSucceededCountAsync_in_Repo()
143+
{
144+
var startTime = new DateTime(2023, 4, 4);
145+
var endTime = new DateTime(2023, 4, 5);
146+
147+
var result = await StatsController.GetStatsAsync(new TimeFilter { StartTime = startTime, EndTime = endTime }, "workflow", "task");
148+
149+
_repo.Verify(v => v.GetStatsStatusSucceededCountAsync(
150+
It.Is<DateTime>(d => d.Equals(startTime)),
151+
It.Is<DateTime>(d => d.Equals(endTime)),
152+
It.Is<string>(s => s.Equals("workflow")),
153+
It.Is<string>(s => s.Equals("task"))));
154+
}
155+
156+
141157
[Fact]
142158
public async Task GetStatsAsync_Pass_All_Arguments_To_GetStatsStatusFailedCountAsync_in_Repo()
143159
{
@@ -200,6 +216,21 @@ public async Task GetOverviewAsync_Pass_All_Arguments_To_GetStatsCountAsync_in_R
200216
It.Is<string>(s => s.Equals(""))));
201217
}
202218

219+
[Fact]
220+
public async Task GetOverviewAsync_Pass_All_Arguments_To_GetStatsStatusSucceededCountAsync_in_Repo()
221+
{
222+
var startTime = new DateTime(2023, 4, 4);
223+
var endTime = new DateTime(2023, 4, 5);
224+
225+
var result = await StatsController.GetOverviewAsync(startTime, endTime);
226+
227+
_repo.Verify(v => v.GetStatsStatusSucceededCountAsync(
228+
It.Is<DateTime>(d => d.Equals(startTime)),
229+
It.Is<DateTime>(d => d.Equals(endTime)),
230+
It.Is<string>(s => s.Equals("")),
231+
It.Is<string>(s => s.Equals(""))));
232+
}
233+
203234
[Fact]
204235
public async Task GetOverviewAsync_Pass_All_Arguments_To_GetStatsStatusFailedCountAsync_in_Repo()
205236
{

0 commit comments

Comments
 (0)