@@ -1313,7 +1313,7 @@ def list_pools(batch_client, config):
13131313 ' * low priority:' ,
13141314 ' * current: {}' .format (pool .current_low_priority_nodes ),
13151315 ' * target: {}' .format (pool .target_low_priority_nodes ),
1316- ' * max tasks per node: {}' .format (pool .max_tasks_per_node ),
1316+ ' * tasks slots per node: {}' .format (pool .task_slots_per_node ),
13171317 ' * enable inter node communication: {}' .format (
13181318 pool .enable_inter_node_communication ),
13191319 ' * autoscale enabled: {}' .format (pool .enable_auto_scale ),
@@ -1517,10 +1517,10 @@ def pool_stats(batch_client, config, pool_id=None):
15171517 if node .running_tasks_count is not None :
15181518 tasks_running .append (node .running_tasks_count )
15191519 total_running_tasks = sum (tasks_running )
1520- runnable_task_slots = runnable_nodes * pool .max_tasks_per_node
1520+ runnable_task_slots = runnable_nodes * pool .task_slots_per_node
15211521 total_task_slots = (
15221522 pool .current_dedicated_nodes + pool .current_low_priority_nodes
1523- ) * pool .max_tasks_per_node
1523+ ) * pool .task_slots_per_node
15241524 busy_task_slots_fraction = (
15251525 0 if runnable_task_slots == 0 else
15261526 total_running_tasks / runnable_task_slots
@@ -1998,17 +1998,32 @@ def job_stats(batch_client, config, jobid=None):
19981998 task_wall_times = []
19991999 task_counts = batchmodels .TaskCounts (
20002000 active = 0 , running = 0 , completed = 0 , succeeded = 0 , failed = 0 )
2001+ task_slots = batchmodels .TaskSlotCounts (
2002+ active = 0 , running = 0 , completed = 0 , succeeded = 0 , failed = 0 )
20012003 total_tasks = 0
2004+ total_slots = 0
20022005 for job in jobs :
20032006 job_count += 1
20042007 # get task counts
20052008 tc = batch_client .job .get_task_counts (job_id = job .id )
2006- task_counts .active += tc .active
2007- task_counts .running += tc .running
2008- task_counts .completed += tc .completed
2009- task_counts .succeeded += tc .succeeded
2010- task_counts .failed += tc .failed
2011- total_tasks += tc .active + tc .running + tc .completed
2009+ task_counts .active += tc .task_counts .active
2010+ task_counts .running += tc .task_counts .running
2011+ task_counts .completed += tc .task_counts .completed
2012+ task_counts .succeeded += tc .task_counts .succeeded
2013+ task_counts .failed += tc .task_counts .failed
2014+ total_tasks += (
2015+ tc .task_counts .active + tc .task_counts .running +
2016+ tc .task_counts .completed
2017+ )
2018+ task_slots .active += tc .task_slot_counts .active
2019+ task_slots .running += tc .task_slot_counts .running
2020+ task_slots .completed += tc .task_slot_counts .completed
2021+ task_slots .succeeded += tc .task_slot_counts .succeeded
2022+ task_slots .failed += tc .task_slot_counts .failed
2023+ total_slots = (
2024+ tc .task_slot_counts .active + tc .task_slot_counts .running +
2025+ tc .task_slot_counts .completed
2026+ )
20122027 if job .execution_info .end_time is not None :
20132028 job_times .append (
20142029 (job .execution_info .end_time -
@@ -2054,6 +2069,29 @@ def job_stats(batch_client, config, jobid=None):
20542069 100 * task_counts .failed / task_counts .completed
20552070 if task_counts .completed > 0 else 0
20562071 ),
2072+ '* Total slots: {}' .format (total_slots ),
2073+ ' * Active: {0} ({1:.2f}% of total)' .format (
2074+ task_slots .active ,
2075+ 100 * task_slots .active / total_slots if total_slots > 0 else 0
2076+ ),
2077+ ' * Running: {0} ({1:.2f}% of total)' .format (
2078+ task_slots .running ,
2079+ 100 * task_slots .running / total_slots if total_slots > 0 else 0
2080+ ),
2081+ ' * Completed: {0} ({1:.2f}% of total)' .format (
2082+ task_slots .completed ,
2083+ 100 * task_slots .completed / total_slots if total_slots > 0 else 0
2084+ ),
2085+ ' * Succeeded: {0} ({1:.2f}% of completed)' .format (
2086+ task_slots .succeeded ,
2087+ 100 * task_slots .succeeded / task_slots .completed
2088+ if task_slots .completed > 0 else 0
2089+ ),
2090+ ' * Failed: {0} ({1:.2f}% of completed)' .format (
2091+ task_slots .failed ,
2092+ 100 * task_slots .failed / task_slots .completed
2093+ if task_slots .completed > 0 else 0
2094+ ),
20572095 ]
20582096 if len (job_times ) > 0 :
20592097 log .extend ([
@@ -3883,7 +3921,7 @@ def get_task_counts(batch_client, config, jobid=None):
38833921 raw = {}
38843922 for job in jobs :
38853923 jobid = settings .job_id (job )
3886- log = ['task counts for job {}' .format (jobid )]
3924+ log = ['task counts and slot counts for job {}' .format (jobid )]
38873925 try :
38883926 if settings .raw (config ):
38893927 raw [jobid ] = util .print_raw_output (
@@ -3901,11 +3939,25 @@ def get_task_counts(batch_client, config, jobid=None):
39013939 raise
39023940 else :
39033941 if not settings .raw (config ):
3904- log .append ('* active: {}' .format (tc .active ))
3905- log .append ('* running: {}' .format (tc .running ))
3906- log .append ('* completed: {}' .format (tc .completed ))
3907- log .append (' * succeeded: {}' .format (tc .succeeded ))
3908- log .append (' * failed: {}' .format (tc .failed ))
3942+ log .append ('* task counts:' )
3943+ log .append (' * active: {}' .format (tc .task_counts .active ))
3944+ log .append (' * running: {}' .format (tc .task_counts .running ))
3945+ log .append (' * completed: {}' .format (
3946+ tc .task_counts .completed ))
3947+ log .append (' * succeeded: {}' .format (
3948+ tc .task_counts .succeeded ))
3949+ log .append (' * failed: {}' .format (tc .task_counts .failed ))
3950+ log .append ('* task slots:' )
3951+ log .append (' * active: {}' .format (
3952+ tc .task_slot_counts .active ))
3953+ log .append (' * running: {}' .format (
3954+ tc .task_slot_counts .running ))
3955+ log .append (' * completed: {}' .format (
3956+ tc .task_slot_counts .completed ))
3957+ log .append (' * succeeded: {}' .format (
3958+ tc .task_slot_counts .succeeded ))
3959+ log .append (' * failed: {}' .format (
3960+ tc .task_slot_counts .failed ))
39093961 logger .info (os .linesep .join (log ))
39103962 if util .is_not_empty (raw ):
39113963 util .print_raw_json (raw )
@@ -5429,15 +5481,15 @@ def add_jobs(
54295481 if recurrence .job_manager .allow_low_priority_node
54305482 else 0
54315483 )
5432- total_slots = cloud_pool .max_tasks_per_node * total_vms
5484+ total_slots = cloud_pool .task_slots_per_node * total_vms
54335485 else :
54345486 total_vms = (
54355487 pool .vm_count .dedicated +
54365488 pool .vm_count .low_priority
54375489 if recurrence .job_manager .allow_low_priority_node
54385490 else 0
54395491 )
5440- total_slots = pool .max_tasks_per_node * total_vms
5492+ total_slots = pool .task_slots_per_node * total_vms
54415493 if total_slots == 1 :
54425494 logger .error (
54435495 ('Only 1 scheduling slot available which is '
0 commit comments