Skip to content

Commit 4db093d

Browse files
authored
fix GetStatsAsync to only return executed executions (#831)
Signed-off-by: Lillie Dae <[email protected]>
1 parent 83392de commit 4db093d

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

src/WorkflowManager/Database/Repositories/TaskExecutionStatsRepository.cs

+34-25
Original file line numberDiff line numberDiff line change
@@ -151,16 +151,11 @@ await _taskExecutionStatsCollection.UpdateOneAsync(o =>
151151

152152
public async Task<IEnumerable<ExecutionStats>> GetStatsAsync(DateTime startTime, DateTime endTime, int PageSize = 10, int PageNumber = 1, string workflowId = "", string taskId = "")
153153
{
154-
startTime = startTime.ToUniversalTime();
154+
CreateFilter(startTime, endTime, workflowId, taskId, out var builder, out var filter);
155155

156-
var workflowNull = string.IsNullOrWhiteSpace(workflowId);
157-
var taskIdNull = string.IsNullOrWhiteSpace(taskId);
156+
filter &= builder.Where(GetExecutedTasksFilter());
158157

159-
var result = await _taskExecutionStatsCollection.Find(T =>
160-
T.StartedUTC >= startTime &&
161-
T.StartedUTC <= endTime.ToUniversalTime() &&
162-
(workflowNull || T.WorkflowId == workflowId) &&
163-
(taskIdNull || T.TaskId == taskId))
158+
var result = await _taskExecutionStatsCollection.Find(filter)
164159
.Limit(PageSize)
165160
.Skip((PageNumber - 1) * PageSize)
166161
.ToListAsync();
@@ -222,33 +217,52 @@ public async Task<long> GetStatsStatusCountAsync(DateTime startTime, DateTime en
222217
}
223218

224219
public async Task<long> GetStatsCountAsync(DateTime startTime, DateTime endTime, Expression<Func<ExecutionStats, bool>>? statusFilter = null, string workflowId = "", string taskId = "")
220+
{
221+
CreateFilter(startTime, endTime, workflowId, taskId, out var builder, out var filter);
222+
223+
if (statusFilter is not null)
224+
{
225+
filter &= builder.Where(statusFilter);
226+
}
227+
228+
return await _taskExecutionStatsCollection.CountDocumentsAsync(filter);
229+
}
230+
231+
private static void CreateFilter(DateTime startTime, DateTime endTime, string workflowId, string taskId, out FilterDefinitionBuilder<ExecutionStats> builder, out FilterDefinition<ExecutionStats> filter)
225232
{
226233
var workflowNull = string.IsNullOrWhiteSpace(workflowId);
227234
var taskIdNull = string.IsNullOrWhiteSpace(taskId);
228235

229-
var builder = Builders<ExecutionStats>.Filter;
230-
var filter = builder.Empty;
231-
236+
builder = Builders<ExecutionStats>.Filter;
237+
filter = builder.Empty;
232238
filter &= builder.Where(t => t.StartedUTC >= startTime.ToUniversalTime());
233239
filter &= builder.Where(t => t.StartedUTC <= endTime.ToUniversalTime());
234240
filter &= builder.Where(t => workflowNull || t.WorkflowId == workflowId);
235241
filter &= builder.Where(t => taskIdNull || t.TaskId == taskId);
236-
if (statusFilter is not null)
237-
{
238-
filter &= builder.Where(statusFilter);
239-
}
242+
}
240243

241-
return await _taskExecutionStatsCollection.CountDocumentsAsync(filter);
244+
/// <summary>
245+
/// Gets filter for tasks that have ran to completion.
246+
/// </summary>
247+
/// <returns></returns>
248+
public static Expression<Func<ExecutionStats, bool>> GetExecutedTasksFilter()
249+
{
250+
var dispatched = TaskExecutionStatus.Dispatched.ToString();
251+
var created = TaskExecutionStatus.Created.ToString();
252+
var accepted = TaskExecutionStatus.Accepted.ToString();
253+
254+
return t => t.Status != dispatched && t.Status != created && t.Status != accepted;
242255
}
243256

257+
244258
public async Task<long> GetStatsTotalCompleteExecutionsCountAsync(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "")
245259
{
246260
var dispatched = TaskExecutionStatus.Dispatched.ToString();
247261
var created = TaskExecutionStatus.Created.ToString();
248262
var accepted = TaskExecutionStatus.Accepted.ToString();
249263
Expression<Func<ExecutionStats, bool>> statusFilter = t => t.Status != dispatched && t.Status != created && t.Status != accepted;
250264

251-
return await GetStatsCountAsync(startTime, endTime, statusFilter, workflowId, taskId);
265+
return await GetStatsCountAsync(startTime, endTime, GetExecutedTasksFilter(), workflowId, taskId);
252266
}
253267

254268
public async Task<long> GetStatsStatusSucceededCountAsync(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "")
@@ -265,16 +279,11 @@ public async Task<long> GetStatsStatusFailedCountAsync(DateTime startTime, DateT
265279

266280
public async Task<(double avgTotalExecution, double avgArgoExecution)> GetAverageStats(DateTime startTime, DateTime endTime, string workflowId = "", string taskId = "")
267281
{
268-
var workflowNull = string.IsNullOrWhiteSpace(workflowId);
269-
var taskIdNull = string.IsNullOrWhiteSpace(taskId);
282+
CreateFilter(startTime, endTime, workflowId, taskId, out var builder, out var filter);
283+
filter &= builder.Where(t => t.Status == TaskExecutionStatus.Succeeded.ToString());
270284

271285
var test = await _taskExecutionStatsCollection.Aggregate()
272-
.Match(T =>
273-
T.StartedUTC >= startTime.ToUniversalTime() &&
274-
T.StartedUTC <= endTime.ToUniversalTime() &&
275-
(workflowNull || T.WorkflowId == workflowId) &&
276-
(taskIdNull || T.TaskId == taskId) &&
277-
T.Status == TaskExecutionStatus.Succeeded.ToString())
286+
.Match(filter)
278287
.Group(g => new { g.Version }, r => new
279288
{
280289
avgTotalExecution = r.Average(x => (x.DurationSeconds)),

0 commit comments

Comments
 (0)