August'24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. PRs are always welcome. Latest Release: 1.14.32 (2024/3/24)
The co-ordinating assistant tracker is designed to allow components to register services and statistics they wish to make public to the rest of the system. Components can also query the co-ordinating assistant tracker to create linkages to specific services, and for specific global statistics.
Co-ordinating assistant trackers are designed to work in a singleton manner; accessible via a local or class interface (though this is not enforced).
The simplest way to obtain the global co-ordinating assistant tracker is via the getcat() class (static) method:
from Axon.CoordinatingAssistantTracker import coordinatingassistanttracker
theCAT = coordinatingassistanttracker.getcat()
The first time this method is called, the co-ordinating assistant tracker is created. Subsequent calls, wherever they are made from, return that same instance.
Components can register a named inbox on a component as a named service. This provides a way for a component to provide a service for other components - an inbox that another component can look up and create a linkage to.
Registering a service is simple:
theComponent = MyComponentProvidingServiceOnItsInbox()
theComponent.activate()
theCAT = coordinatingassistanttracker.getcat()
theCAT.registerService("MY_SERVICE", theComponent, "inbox")
Another component can then retrieve the service:
theCAT = coordinatingassistanttracker.getcat()
(comp, inboxname) = theCAT.retrieveService("MY_SERVICE")
Because services are run by components - these by definition die and so also need to be de-registered:
theCAT = coordinatingassistanttracker.getcat()
theCAT.deRegisterService("MY_SERVICE")
Microprocesses can also use the co-ordinating assistant tracker to log/retrieve statistics/information.
Use the trackValue() method to initially start tracking a value under a given name:
value = ...
theCAT = coordinatingassistanttracker.getcat()
theCAT.trackValue("MY_VALUE", value)
This can then be easily retrieved:
theCAT = coordinatingassistanttracker.getcat()
value= theCAT.retrieveValue("MY_VALUE")
Call the updateValue() method (not the trackValue() method) to update the value being tracked:
newvalue = ...
theCAT = coordinatingassistanttracker.getcat()
theCAT.updateValue("MY_VALUE", newvalue)
Although at initialisation a parent co-ordinating assistant tracker can be specified; this is not currently used.
Tests passed:
coordinatingassistanttracker([parent]) -> new coordinatingassistanttracker object.
Co-ordinating assistant tracker object tracks values and (component,inboxname) services under names.
Keyword arguments:
Deregister a service that was previously registered.
Raises Axon.AxonExceptions.MultipleServiceDeletion if the service is not/ no longer registered.
Returns list of names values are being tracked under.
Register a named inbox on a component as willing to offer a service with the specified name.
Keyword arguments:
Exceptions that may be raised:
Retrieve the (component, inboxName) service with the specified name.
Retrieve the value tracked (recorded) under the specified name.
Trying to retrieve a value under a name that isn't yet being tracked results in an Axon.AxonExceptions.AccessToUndeclaredTrackedVariable exception being raised.
Returns list of names of registered services
Track (record) the specified value under the specified name.
Once we start tracking a value, we have it's value forever (for now). Trying to track the same named value more than once causes an Axon.AxonExceptions.NamespaceClash exception. This is done to capture problems between interacting components
Update the value being tracked under the specified name with the new value provided.
Trying to update a value under a name that isn't yet being tracked results in an Axon.AxonExceptions.AccessToUndeclaredTrackedVariable exception being raised.
Got a problem with the documentation? Something unclear that could be clearer? Want to help improve it? Constructive criticism is very welcome - especially if you can suggest a better rewording!
Please leave you feedback here in reply to the documentation thread in the Kamaelia blog.
-- Automatic documentation generator, 09 Dec 2009 at 04:00:25 UTC/GMT