@@ -151,16 +151,11 @@ await _taskExecutionStatsCollection.UpdateOneAsync(o =>
151
151
152
152
public async Task < IEnumerable < ExecutionStats > > GetStatsAsync ( DateTime startTime , DateTime endTime , int PageSize = 10 , int PageNumber = 1 , string workflowId = "" , string taskId = "" )
153
153
{
154
- startTime = startTime . ToUniversalTime ( ) ;
154
+ CreateFilter ( startTime , endTime , workflowId , taskId , out var builder , out var filter ) ;
155
155
156
- var workflowNull = string . IsNullOrWhiteSpace ( workflowId ) ;
157
- var taskIdNull = string . IsNullOrWhiteSpace ( taskId ) ;
156
+ filter &= builder . Where ( GetExecutedTasksFilter ( ) ) ;
158
157
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 )
164
159
. Limit ( PageSize )
165
160
. Skip ( ( PageNumber - 1 ) * PageSize )
166
161
. ToListAsync ( ) ;
@@ -222,33 +217,52 @@ public async Task<long> GetStatsStatusCountAsync(DateTime startTime, DateTime en
222
217
}
223
218
224
219
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 )
225
232
{
226
233
var workflowNull = string . IsNullOrWhiteSpace ( workflowId ) ;
227
234
var taskIdNull = string . IsNullOrWhiteSpace ( taskId ) ;
228
235
229
- var builder = Builders < ExecutionStats > . Filter ;
230
- var filter = builder . Empty ;
231
-
236
+ builder = Builders < ExecutionStats > . Filter ;
237
+ filter = builder . Empty ;
232
238
filter &= builder . Where ( t => t . StartedUTC >= startTime . ToUniversalTime ( ) ) ;
233
239
filter &= builder . Where ( t => t . StartedUTC <= endTime . ToUniversalTime ( ) ) ;
234
240
filter &= builder . Where ( t => workflowNull || t . WorkflowId == workflowId ) ;
235
241
filter &= builder . Where ( t => taskIdNull || t . TaskId == taskId ) ;
236
- if ( statusFilter is not null )
237
- {
238
- filter &= builder . Where ( statusFilter ) ;
239
- }
242
+ }
240
243
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 ;
242
255
}
243
256
257
+
244
258
public async Task < long > GetStatsTotalCompleteExecutionsCountAsync ( DateTime startTime , DateTime endTime , string workflowId = "" , string taskId = "" )
245
259
{
246
260
var dispatched = TaskExecutionStatus . Dispatched . ToString ( ) ;
247
261
var created = TaskExecutionStatus . Created . ToString ( ) ;
248
262
var accepted = TaskExecutionStatus . Accepted . ToString ( ) ;
249
263
Expression < Func < ExecutionStats , bool > > statusFilter = t => t . Status != dispatched && t . Status != created && t . Status != accepted ;
250
264
251
- return await GetStatsCountAsync ( startTime , endTime , statusFilter , workflowId , taskId ) ;
265
+ return await GetStatsCountAsync ( startTime , endTime , GetExecutedTasksFilter ( ) , workflowId , taskId ) ;
252
266
}
253
267
254
268
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
265
279
266
280
public async Task < ( double avgTotalExecution , double avgArgoExecution ) > GetAverageStats ( DateTime startTime , DateTime endTime , string workflowId = "" , string taskId = "" )
267
281
{
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 ( ) ) ;
270
284
271
285
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 )
278
287
. Group ( g => new { g . Version } , r => new
279
288
{
280
289
avgTotalExecution = r . Average ( x => ( x . DurationSeconds ) ) ,
0 commit comments