3737
3838from .forward_controller import ForwardControllersPool
3939import reachy2_monitoring as rm
40+ import prometheus_client as pc
4041
4142class TracedCommands :
4243 def __init__ (self , traceparent = "" ) -> None :
@@ -55,6 +56,9 @@ def __init__(self, node_name, controllers_file):
5556 self .logger = self .get_logger ()
5657 self .tracer = rm .tracer (node_name )
5758 self .on_dynamic_joint_commands_counter = 0
59+ pc .start_http_server (10002 )
60+ self .sum_joint_states = pc .Summary ("dynamic_state_router_on_dynamic_joint_states_time" ,
61+ "Time spent during on_dynamic_joint_states callback" )
5862
5963 self .freq , self .forward_controllers = ForwardControllersPool .parse (
6064 self .logger , controllers_file
@@ -335,26 +339,27 @@ def handle_regular_commands(self, commands):
335339 # Subscription: DynamicJointState cb
336340 def on_dynamic_joint_states (self , state : DynamicJointState ):
337341 """Retreive the joint state from /dynamic_joint_states."""
338- if not self .joint_state_ready .is_set ():
339- for uid , name in enumerate (state .joint_names ):
340- self .joint_state [name ] = {}
341- self .joint_state [name ]["name" ] = name
342- self .joint_state [name ]["uid" ] = uid
343-
344- self .joint_command [name ] = {}
345-
346- for uid , (name , kv ) in enumerate (
347- zip (state .joint_names , state .interface_values )
348- ):
349- for k , v in zip (kv .interface_names , kv .values ):
350- self .joint_state [name ][k ] = v
351-
352- if not self .joint_state_ready .is_set ():
353- for name , state in self .joint_state .items ():
354- if "position" in state :
355- state ["target_position" ] = state ["position" ]
356-
357- self .joint_state_ready .set ()
342+ with self .sum_joint_states .time ():
343+ if not self .joint_state_ready .is_set ():
344+ for uid , name in enumerate (state .joint_names ):
345+ self .joint_state [name ] = {}
346+ self .joint_state [name ]["name" ] = name
347+ self .joint_state [name ]["uid" ] = uid
348+
349+ self .joint_command [name ] = {}
350+
351+ for uid , (name , kv ) in enumerate (
352+ zip (state .joint_names , state .interface_values )
353+ ):
354+ for k , v in zip (kv .interface_names , kv .values ):
355+ self .joint_state [name ][k ] = v
356+
357+ if not self .joint_state_ready .is_set ():
358+ for name , state in self .joint_state .items ():
359+ if "position" in state :
360+ state ["target_position" ] = state ["position" ]
361+
362+ self .joint_state_ready .set ()
358363
359364 def on_forward_position_controller_update (
360365 self , msg : Float64MultiArray , controller_name : str
0 commit comments