A tracker—when activated—monitors the machine state and the associated mapper represents it as a tree of nodes, in a hierarchical way. Other objects and scripts can query this tree, and register callbacks that trigger when it changes.
The node tree usually represents the state of the operating system. A node can map against a software entity such as a thread. Other nodes group child nodes based on a property they share, such as being part of the same process or running under the same access level. Another possibility is to group by guest OS for a Hypervisor, as the framework supports stacked node trees.
Each tree will consist of a single root node at the base. This root node usually provides the overall system details, such as the name of the operating system.
The node tree changes over time, and nodes will be created and destroyed as processes and threads are born and die.
The OSA framework provides a couple of interfaces in order to operate on the node tree. For getting the state of the node tree there is the osa_node_tree_query
interface. For monitoring changes to the node tree the osa_node_tree_notification
interface can be used. See the API - Reference Manual for details about these interfaces and section 2.5 for scripting examples.
In the interfaces and commands used to interact with the node tree, every node is identified by a node ID, which is an integer that is unique. The IDs are never reused by the framework.
Each node has a set of named properties that contain information about what the node represents. Which properties exist depends on the type of node, but the properties listed below are the standard properties, which all nodes have (except where noted):
extra_id
. If the list is empty, the property name
should be used to identify the node. The extra_id
property is useful for finding a unique node without having to know its node ID.Each tracker defines its own set of node properties. See documentation for each tracker for further details.
The node-tree
command can be used to print the current node tree. See figure 1 for an illustration of a node tree.
A node can be active for a certain processor in which case all its ancestors will also be active. The exact meaning of this depends on the node type, but for a thread node this means that the thread is executing on the active processor. To see which processors a certain node is active on the get_current_processors
function in the osa_node_tree_query
interface can be used. To get a list of all active nodes the get_current_nodes
function in the same interface can be used.
The following rules apply for active nodes: