This process monitors external NGTS processes through Pyro4
.
The way the class monitors status is a series of boolean values
representing ok or not, and a corresponding set of integers. When a
process checks in, the integer value of the check state is set to
_ntimes
(e.g. 5) and then every time the status poll loop checks the
state, it decrements this counter. If the counter is 0 then the status
value is set to False
.
In the external process code, add the following shippet:
import Pyro4
hub = Pyro4.Proxy('PYRONAME:central.hub')
and then in the polling loop add the following:
hub.report_in('<name>')
where name
is the name of the process type (case insensitive).
For example with the transparency code:
hub.report_in('transparency')
The variables _ntimes
and _sleeptime
control the timeouts for each
monitored process. If a process has not reported in for _ntimes
loops
of _sleeptime
seconds, the status is set to False
.
To check if everything updated ok, report_in
returns a list of status
dictionaries. For example a successful update may look like:
[{'name': 'transparency',
'previous': {'connections': 0, 'status': False},
'ok': True}]
A failure (for example using an incorrect name) may look like this:
[{'reason': "No monitor for lkjnasg. Available monitors: ['alcor',
'cloud_watcher', 'microphones', 'rain_sensor', 'transparency']",
'ok': False}]
If there are connection issues, this will result in report_in
hanging
and blocking the calling code. Pyro4
will raise a timeout exception
which is worth catching and handling properly. Note this will not occur
when creating the Pyro4.Proxy
object, but rather when calling a method
on this object.