Find an Answer
In GoToAssist's tree-structured database, leaf nodes (that is, nodes that can contain values) can also contain a history of previous values. You can track changes over time by using PQL functions in a query for historical values.
Each node in the tree-structured database that contains a value can also maintain a historical record of all previous revisions of that value.
For example, the cpu_utilization leaf node in the above diagram contains its current value, 34%, plus a time-series of previous values at different times. The revision history is like a 2-column table:
One column lists values; the other lists corresponding timestamps. The time series is simply a list of such pairs of values and timestamps. Each timestamp indicates when the system learned the corresponding value. New values are stored only if they are different from the previously stored value.
The tree-structured database can also maintain a historical record of previous values for non-leaf nodes, such as a set of running processes. It's likely that running processes would undergo some change between the times that the computer is queried. Instead of replacing the entire set, it's useful to be able to look back in time and see what the running set was at a previous point in time.
When historical information is kept at the node level, the time-series is a list of pairs of timestamps and pointers. Each pointer indicates a unique sub-tree copy that represents the sub-tree at that point in time. Only some nodes in the hierarchy are labeled for sub-tree copy. In the case of sub-tree copy, the entire sub-tree must be provided by the GoToAssist Crawler for each update.
In the following 2 examples, we have a network with two devices, each with an interface that has a history of revisions.
This query fetches the revision history of MAC addresses of device/interfaces per device:
SELECT interface/mac_address#history FROM /network/device
This query generates the revision history of interfaces on the devices in Sample database A:
row history(interface/mac_address) history when2008-03-31T20:15:48.488011Z mac_addressnull history when2008-04-01T03:27:48.488011Z mac_addressnull history when2008-04-01T10:39:48.488011Z mac_addressnull history when2008-04-01T17:51:48.488011Z mac_addressnull history when2008-04-02T01:03:48.488011Z mac_addressnull history when2008-04-02T08:15:48.488011Z mac_addressnull history when2008-04-02T15:27:48.488011Z mac_addressnull history when2008-04-02T22:39:48.488011Z mac_addressnull ...
This query fetches the revision history of the same MAC addresses of device/interfaces per interface:
SELECT interface/(mac_address, name#history) FROM /network/device
This query uses a path-scoped projection where the path restricts the SELECT clause. It generates the same revision history of the same interfaces as in Query 1, but this time the MAC addresses are correlated by interface:
row interface/(mac_address, history(name)) item mac_address 02:A1:A2:A3:A4:A4 history when 2008-03-31T20:15:48.488011Z name null history when 2008-04-01T03:27:48.488011Z name null history when 2008-04-01T10:39:48.488011Z name null history when 2008-04-01T17:51:48.488011Z name null history when 2008-04-02T01:03:48.488011Z name null history when 2008-04-02T08:15:48.488011Z name null history when 2008-04-02T15:27:48.488011Z name null history when 2008-04-02T22:39:48.488011Z name null ...