@@ -67,6 +67,14 @@ public class Task {
67
67
68
68
private static final String TOTAL = "total" ;
69
69
70
+ private static final String AVERAGE = "average" ;
71
+
72
+ private static final String MIN = "min" ;
73
+
74
+ private static final String MAX = "max" ;
75
+
76
+ public static final String THREAD_INFO = "thread_info" ;
77
+
70
78
private final long id ;
71
79
72
80
private final String type ;
@@ -175,8 +183,11 @@ private TaskInfo taskInfo(String localNodeId, boolean detailed, boolean excludeS
175
183
resourceStats = new TaskResourceStats (new HashMap <>() {
176
184
{
177
185
put (TOTAL , getTotalResourceStats ());
186
+ put (AVERAGE , getAverageResourceStats ());
187
+ put (MIN , getMinResourceStats ());
188
+ put (MAX , getMaxResourceStats ());
178
189
}
179
- });
190
+ }, getThreadUsage () );
180
191
}
181
192
return taskInfo (localNodeId , description , status , resourceStats );
182
193
}
@@ -289,6 +300,27 @@ public TaskResourceUsage getTotalResourceStats() {
289
300
return new TaskResourceUsage (getTotalResourceUtilization (ResourceStats .CPU ), getTotalResourceUtilization (ResourceStats .MEMORY ));
290
301
}
291
302
303
+ /**
304
+ * Returns current average per-execution resource usage of the task.
305
+ */
306
+ public TaskResourceUsage getAverageResourceStats () {
307
+ return new TaskResourceUsage (getAverageResourceUtilization (ResourceStats .CPU ), getAverageResourceUtilization (ResourceStats .MEMORY ));
308
+ }
309
+
310
+ /**
311
+ * Returns current min per-execution resource usage of the task.
312
+ */
313
+ public TaskResourceUsage getMinResourceStats () {
314
+ return new TaskResourceUsage (getMinResourceUtilization (ResourceStats .CPU ), getMinResourceUtilization (ResourceStats .MEMORY ));
315
+ }
316
+
317
+ /**
318
+ * Returns current max per-execution resource usage of the task.
319
+ */
320
+ public TaskResourceUsage getMaxResourceStats () {
321
+ return new TaskResourceUsage (getMaxResourceUtilization (ResourceStats .CPU ), getMaxResourceUtilization (ResourceStats .MEMORY ));
322
+ }
323
+
292
324
/**
293
325
* Returns total resource consumption for a specific task stat.
294
326
*/
@@ -305,6 +337,76 @@ public long getTotalResourceUtilization(ResourceStats stats) {
305
337
return totalResourceConsumption ;
306
338
}
307
339
340
+ /**
341
+ * Returns average per-execution resource consumption for a specific task stat.
342
+ */
343
+ private long getAverageResourceUtilization (ResourceStats stats ) {
344
+ long totalResourceConsumption = 0L ;
345
+ int threadResourceInfoCount = 0 ;
346
+ for (List <ThreadResourceInfo > threadResourceInfosList : resourceStats .values ()) {
347
+ for (ThreadResourceInfo threadResourceInfo : threadResourceInfosList ) {
348
+ final ResourceUsageInfo .ResourceStatsInfo statsInfo = threadResourceInfo .getResourceUsageInfo ().getStatsInfo ().get (stats );
349
+ if (threadResourceInfo .getStatsType ().isOnlyForAnalysis () == false && statsInfo != null ) {
350
+ totalResourceConsumption += statsInfo .getTotalValue ();
351
+ threadResourceInfoCount ++;
352
+ }
353
+ }
354
+ }
355
+ return (threadResourceInfoCount > 0 ) ? totalResourceConsumption / threadResourceInfoCount : 0 ;
356
+ }
357
+
358
+ /**
359
+ * Returns minimum per-execution resource consumption for a specific task stat.
360
+ */
361
+ private long getMinResourceUtilization (ResourceStats stats ) {
362
+ if (resourceStats .size () == 0 ) {
363
+ return 0L ;
364
+ }
365
+ long minResourceConsumption = Long .MAX_VALUE ;
366
+ for (List <ThreadResourceInfo > threadResourceInfosList : resourceStats .values ()) {
367
+ for (ThreadResourceInfo threadResourceInfo : threadResourceInfosList ) {
368
+ final ResourceUsageInfo .ResourceStatsInfo statsInfo = threadResourceInfo .getResourceUsageInfo ().getStatsInfo ().get (stats );
369
+ if (threadResourceInfo .getStatsType ().isOnlyForAnalysis () == false && statsInfo != null ) {
370
+ minResourceConsumption = Math .min (minResourceConsumption , statsInfo .getTotalValue ());
371
+ }
372
+ }
373
+ }
374
+ return minResourceConsumption ;
375
+ }
376
+
377
+ /**
378
+ * Returns maximum per-execution resource consumption for a specific task stat.
379
+ */
380
+ private long getMaxResourceUtilization (ResourceStats stats ) {
381
+ long maxResourceConsumption = 0L ;
382
+ for (List <ThreadResourceInfo > threadResourceInfosList : resourceStats .values ()) {
383
+ for (ThreadResourceInfo threadResourceInfo : threadResourceInfosList ) {
384
+ final ResourceUsageInfo .ResourceStatsInfo statsInfo = threadResourceInfo .getResourceUsageInfo ().getStatsInfo ().get (stats );
385
+ if (threadResourceInfo .getStatsType ().isOnlyForAnalysis () == false && statsInfo != null ) {
386
+ maxResourceConsumption = Math .max (maxResourceConsumption , statsInfo .getTotalValue ());
387
+ }
388
+ }
389
+ }
390
+ return maxResourceConsumption ;
391
+ }
392
+
393
+ /**
394
+ * Returns the total and active number of thread executions for the task.
395
+ */
396
+ public TaskThreadUsage getThreadUsage () {
397
+ int numThreadExecutions = 0 ;
398
+ int activeThreads = 0 ;
399
+ for (List <ThreadResourceInfo > threadResourceInfosList : resourceStats .values ()) {
400
+ numThreadExecutions += threadResourceInfosList .size ();
401
+ for (ThreadResourceInfo threadResourceInfo : threadResourceInfosList ) {
402
+ if (threadResourceInfo .isActive ()) {
403
+ activeThreads ++;
404
+ }
405
+ }
406
+ }
407
+ return new TaskThreadUsage (numThreadExecutions , activeThreads );
408
+ }
409
+
308
410
/**
309
411
* Adds thread's starting resource consumption information
310
412
* @param threadId ID of the thread
0 commit comments