MTQueue¶
- class lsst.ts.observatory.control.maintel.MTQueue(domain: Optional[Union[Domain, str]] = None, log: Optional[Logger] = None, intended_usage: Optional[int] = None)¶
Bases:
ScriptQueue
High level class to operate the Main Telescope ScriptQueue.
- Parameters:
- domain
salobj.Domain
Domain for remotes. If
None
, creates a domain.- log
logging.Logger
Optional logging class to be used for logging operations. If
None
, creates a new logger.- intended_usage
int
Optional bitmask that maps to a list of intended operations. This is used to limit the resources allocated by the class by gathering some knowledge about the usage intention. By default allocates all resources.
- domain
Attributes Summary
List of components names.
List of remotes names.
Define class usages.
Define valid usages.
Methods Summary
add
(is_standard, script, config[, ...])Add script to the script queue.
add_external
(script, config[, description, ...])Add external script to the script queue.
add_standard
(script, config[, description, ...])Add standard script to the script queue.
assert_all_enabled
([message])Check if all components are in the enabled state.
Assert liveliness of components belonging to the group.
cancel_not_done
(tasks)Cancel all coroutines in
coro_list
.check_comp_heartbeat
(component)Monitor heartbeats from the specified component and raises and exception if not.
check_component_state
(component[, desired_state])Monitor the summary state of a component and raises an exception if it is or goes to a state different than the desired state.
close
()Return components for which check is enabled.
enable
([overrides])Enable all components.
expand_overrides
([overrides])Expand an overrides dict with entries for every component.
get_heartbeat
(component)Get last heartbeat for component.
Get user identity.
Get the last sample of evt_queue.
get_required_resources
(component, intended_usage)Return the required resources based on the intended usage of the class.
get_script_schema
(is_standard, script)Get script schema.
get_simulation_mode
([components])Return a list with the simulation mode for components in the group.
get_software_versions
([components])Return a list with the software versions for components in the group.
get_state
(component[, ignore_timeout])Get summary state for component.
get_work_components
([components])Parse input into a list of valid components from the group.
List external scripts.
List standard scripts.
next_heartbeat
(component)Get next heartbeat for component.
next_state
(component)Get summary state for component.
offline
()Put all CSCs in offline.
pause
()Pause script queue.
process_as_completed
(tasks)Process tasks are they complete.
Reset all checks, enabling check for all components.
resume
()Resume script queue.
set_rem_loglevel
(level)Set remotes log level.
set_state
(state[, overrides, components])Set summary state for all components.
standby
()Put all CSCs in standby.
validate_config
(is_standard, script, config)Validade script configuration.
Wait until queue is paused.
Wait until queue is running.
Attributes Documentation
- components¶
List of components names.
The name of the CSC follow the format used in the class constructor, e.g. CSCName or CSCName:index (for indexed components), e.g. “Hexapod:1” (for Hexapod with index=1) or “ATHexapod”.
- components_attr¶
List of remotes names.
The remotes names are reformatted to fit the requirements for object attributes. It will be the name of the CSC (as in
components
) in lowercase, replacing the colon by an underscore, e.g. “Hexapod:1” -> “hexapod_1” or “ATHexapod” -> “athexapod”.
- queue_remote¶
- script_separator = ':'¶
- usages¶
Define class usages.
This property defines what remote resources are needed for each class usages. Each item in the dictionary contain a list of components, if the remotes will be used for “read only” operations an which topics will be required. The “key” of the dictionary is the usage enumeration value.
- Returns:
- usages
dict
Dictionary with class usages.
- usages
- valid_use_cases¶
Define valid usages.
When subclassing, overwrite this method to return the proper enum.
- Returns:
- usages: enum
Methods Documentation
- async add(is_standard: bool, script: str, config: dict, description: str = '', log_level: int = 10, pause_checkpoint: str = '') None ¶
Add script to the script queue.
- Parameters:
- is_standard
bool
Is script standard?
- script
str
Script path.
- config
dict
Script configuration.
- description
str
, optional Short description of why you are running the script (default: empty).
- log_level
int
, optional Script log level (default: DEBUG).
- pause_checkpoint
str
, optional Pause the script at the specified checkpoint (default: empty).
- is_standard
- async add_external(script: str, config: dict, description: str = '', log_level: int = 10, pause_checkpoint: str = '') None ¶
Add external script to the script queue.
- Parameters:
- async add_standard(script: str, config: dict, description: str = '', log_level: int = 10, pause_checkpoint: str = '') None ¶
Add standard script to the script queue.
- Parameters:
- async assert_all_enabled(message: str = '') None ¶
Check if all components are in the enabled state.
- Parameters:
- message: `str`
Additional message to append to error.
- async assert_liveliness() None ¶
Assert liveliness of components belonging to the group.
The assertion is done by waiting for a new heartbeat from the component. The
check
feature will apply to the assertion so components marked withcheck=False
will be skipped.- Raises:
- AssertionError
If cannot get heartbeat for one or more components.
- async static cancel_not_done(tasks: List[Task]) None ¶
Cancel all coroutines in
coro_list
.Remove futures from input tasks list and cancel them.
- Parameters:
- tasks
list
[futures
] A list of coroutines to cancel.
- tasks
- async check_comp_heartbeat(component: str) None ¶
Monitor heartbeats from the specified component and raises and exception if not.
This method will run forever as long as the component continues to send heartbeats. The intention is that this can run alongside an operation, to make sure the component remains responsive.
- Parameters:
- component
str
Name of the component to follow. The name of the CSC follow the format CSCName or CSCName:index (for indexed components), e.g. “Hexapod:1” (for Hexapod with index=1) or “ATHexapod”.
- component
- Raises:
- RuntimeError
If the component does not send heartbeats in
self.fast_timeout
seconds.
- async check_component_state(component: str, desired_state: State = State.ENABLED) None ¶
Monitor the summary state of a component and raises an exception if it is or goes to a state different than the desired state.
This method will run forever as long as the summary state remains unchanged. The intention is that this can run alongside an operation that require the component to be in a certain state, when the operation is completed, the task can be canceled.
- Parameters:
- component
str
Name of the component to follow. Must be one of: atmcs, atptg, ataos, atpneumatics, athexapod, atdome, atdometrajectory
- desired_state
salobj.State
Desired state of the CSC.
- component
- Raises:
- RuntimeError
If state is not
desired_state
.- KeyError
If component is not found.
- async enable(overrides: Optional[Dict[str, str]] = None) None ¶
Enable all components.
This method will enable all group components. Users can provide overrides for the start command (in a dictionary).
- Parameters:
- overrides: `dict`
Dictionary with overrides to apply. If
None
use recommended overrides.
- async expand_overrides(overrides: Optional[Dict[str, str]] = None) Dict[str, str] ¶
Expand an overrides dict with entries for every component.
Any components that have no specified override are set to “”.
- Parameters:
- overrides
dict
orNone
A dictionary with (component name, overrides) pair or
None
. The component name is as it appears in thecomponents_attr
attribute, which is the name of the CSC in lowercase, replacing “:” by “_” for indexed components, e.g. “Hexapod:1” -> “hexapod_1” or “ATHexapod” -> “athexapod”.
- overrides
- Returns:
- complete_overrides
dict
Dictionary with overrides for every component in the group. Unspecifies components have override “”.
- complete_overrides
- Raises:
- RuntimeError
If an item in the parameter
overrides
dictionary is not a CSC in the group.
- async get_heartbeat(component: str) BaseMsgType ¶
Get last heartbeat for component.
- Parameters:
- component
str
Name of the component.
- component
- Returns:
- heartbeat
Last component heartbeat.
- async get_queue() BaseMsgType ¶
Get the last sample of evt_queue.
- Returns:
- queue
ScriptQueue.evt_queue.DataType
Last queue event sample.
- queue
- Raises:
- RuntimeError:
If no sample is received in
fast_timeout
seconds.
- get_required_resources(component: str, intended_usage: Union[None, int]) Any ¶
Return the required resources based on the intended usage of the class.
When subclassing, overwrite this method to add the child class use cases.
- Parameters:
- component: `str`
Name of the component, with index as it appears in
components_attr
attribute (e.g. test_1 for the Test component with index 1).- intended_usage: `int` or `None`
An integer constructed from the
self.valid_use_cases
. Usages can be combined to enable combined operations (see base class documentation). If None, returns appropriate values to load all resources.
- Returns:
- resources: types.SimpleNamespace
A simple namespaces with the following attributes:
- Raises:
- KeyError: If component is not in the list of components.
- async get_simulation_mode(components: Optional[List[str]] = None) Dict[str, BaseMsgType] ¶
Return a list with the simulation mode for components in the group.
- async get_software_versions(components: Optional[List[str]] = None) Dict[str, BaseMsgType] ¶
Return a list with the software versions for components in the group.
- async get_state(component: str, ignore_timeout: bool = False) State ¶
Get summary state for component.
- Parameters:
- component
str
Name of the component.
- ignore_timeout
bool
If
True
will return None in case it times out getting the state. Default isFalse
, which means raiseTimeoutError
.
- component
- Returns:
- state
salobj.State
orNone
Current state of component.
- state
- Raises:
asyncio.TimeoutError
If can not get state in
self.fast_timeout
seconds.
- get_work_components(components: Optional[List[str]] = None) List[str] ¶
Parse input into a list of valid components from the group.
- async next_heartbeat(component: str) BaseMsgType ¶
Get next heartbeat for component.
- Parameters:
- component
str
Name of the component.
- component
- Returns:
- heartbeat
Last component heartbeat.
- async next_state(component: str) State ¶
Get summary state for component.
- Parameters:
- component
str
Name of the component.
- component
- Returns:
- state
salobj.State
Current state of component.
- state
- async process_as_completed(tasks: List[Task]) Any ¶
Process tasks are they complete.
If the first task that finishes completes successfully, it will cancel all other tasks in the list, empty the input list and return the value of the task. If the task results in an exception, it will cancel all other tasks, empty the list and raise the exception.
- Parameters:
- tasks
list`[`asyncio.Tasks
] List of asyncio tasks to process.
- tasks
- Returns:
- ret_val
object
Return value from the first completed task.
- ret_val
- set_rem_loglevel(level: int) None ¶
Set remotes log level.
Useful to prevent the internal salobj warnings when read queues are filling up.
- Parameters:
- level
int
Log level.
- level
- async set_state(state: State, overrides: Optional[Dict[str, str]] = None, components: Optional[List[str]] = None) None ¶
Set summary state for all components.
- Parameters:
- state
salobj.State
Desired state.
- overrides
dict
or None Settings to apply for each component.
- components
list[`str
]` List of components to set state, as they appear in
self.components_attr
.
- state
- Raises:
- RuntimeError
If a component in
components
is not part of the group.If it fails to transition one or more components.
- async validate_config(is_standard: bool, script: str, config: Dict[str, Any]) None ¶
Validade script configuration.