ARDI 2026 added the new Introspection function to the driver framework.
This optional driver feature is used to ask the underlying system for information that would be useful when creating a user-interface. For example, the textcycle driver that replays an Excel spreadsheet full of data uses the Introspection function to return the names of each of the columns in the worksheet.
Our UI can then load these column names into a list - making it easy for users to pick exactly which column to bind their properties to.
You can access Introspection data through the /api/driverintro function. When used on live or historical data, the endpoint takes four parameters…
| Parameter | Meaning |
|---|---|
| source | The ID of the data source asset |
| mode | If the data source is live (0) or historical (1) |
| context | The context ID (defaults to '1') |
| query | A query string that is passed on to the driver |
When used on event sources, it only has two…
| Parameter | Meaning |
|---|---|
| evsource | The driver ID |
| query | A query string that is passed on to the driver |
The response is in JSON format, although the exact structure of the response depends on the driver itself. The content may be as simple as a list of strings, or it may be a set of complex objects.
The introspection function has an optional 'query' parameter that can be passed a string. This can be used in several ways…
1) It can provide the point at a hierarchy/relationship structure you want to ask about (to let you browse through hierarchies),
2) It can provide search, allowing you to enter the first few letts of a name,
3) It can provide simple autocomplete functionality, letting you progressively fill in content.
4) By adding special characters, you can request different types of resource (ie. a '' searches for tables, '/views/' looks only for views, and 'mytable.' searches for the fields inside mytable).
5) You can simply ignore it if your data source/UI doesn't need it
As a simple example, here's a drop-list control that we pre-fill with all of the point names that a data-source contains…
<div class="loading"> <span style="color: silver;"> Loading Options... </span> </div> <div class="mname" style="display: none;"> <b style="font-weight; bold;">Metric name: </b><br/> <select style="width: 100%;" id="namecolumn" name="address"></select> </div> <script> $.post('<?php echo $siteroot;?>/api/driverintro?source=<?php echo $_REQUEST['source'];?>&mode=<?php echo $_REQUEST['mode'];?>&profile=<?php echo $_REQUEST['profile'];?>',function (d) { d.sort(); var content = ""; for(var q=0;q<d.length;q++) { content += '<option>' + d[q] + '</option>'; } $('#namecolumn').html('<option value="">[Choose A Label]</option>' + content); $('.mname').fadeIn(500); $('.loading').hide(0); }); </script>
This creates a loading indicator and a drop-list of options.
The droplist is initially hidden. In the background, a call is sent to driverintro that returns a list of strings containing the names of every data point the source contains.
These are sorted, loaded into the droplist, and then the 'loading' indicator is removed and the droplist fades in.