Analyze Daily Device Health Anonymized (no PII) with REST API (version 2.0)

Use DEVICE_HEALTH_DAILY_ANONYMIZED to return the list of health events that occurred each day, without PII (personally identifiable information). For example, you can analyze whether the prevalence of certain types of health events in laptops over the past 200 days has a relationship to the number of CPU cores.

Each entry from DEVICE_HEALTH_DAILY_ANONYMIZED represents health event data aggregated over a day, with additional details exclusive of PII.

Note About how long Aternity keeps this data (retention) and how far back you can go, read here.
Note

This article covers the latest REST API version. For older version 1.0, click here.

Before You Begin

To send a REST API query in Excel, PowerBI or a browser, enter the URL of the REST API, your Aternity username (must have the OData REST API role) and its password. You can find this by selecting User icon > REST API Access. SSO users must generate (once) and use a special password, as Aternity's REST API does not authenticate with your enterprise's identity provider.

To view Aternity REST API, enter the base URL from Aternity > User icon > REST API Access, followed by the name of the API into a browser, Excel or PowerBI (learn more). For VIEWING, use <base_url>/latest/API_NAME; for INTEGRATIONS, use <base_url>/<version number>/API_NAME (for example, <base_url>/v1/API_NAME, or <base_url>/v1.0/API_NAME, or <base_url>/v2/API_NAME, or <base_url>/v2.0/API_NAME).

Get the latest REST API version for analyzing in the external app
Tip

Wherever possible, use $select and $filter to narrow your query, to avoid receiving an error like Returned data is too large. Learn more.

Examples

To access this API from a browser, Excel or Power BI (learn more), enter <base URL>/latest/DEVICE_HEALTH_DAILY_ANONYMIZED or <base URL>/v2/DEVICE_HEALTH_DAILY_ANONYMIZED

For example, to return the number of hardware health events health events in laptops over the past 200 days, aggregated by location, number of cores, CPU frequency, and the type of health event, use: .../DEVICE_HEALTH_DAILY_ANONYMIZED?$filter=SERVING_DEVICE_TYPE eq 'Laptop' and relative_time(last_200_days)&$select=BUSINESS_LOCATION,CPU_CORES,CPU_FREQUENCY,HEALTH_EVENT_CATEGORY

Supported Parameters

You can view the data by entering the URL into Excel, into a browser, or into or any OData compatible application such as Power BI.

You can add parameters to the URL to filter the returned data, by adding a question mark (?) followed by a parameter and value, such as .../API_NAME?$filter=(USERNAME eq 'jsmith@company.com'), or several parameter-value pairs each separated by an ampersand (&), like .../API_NAME?$format=xml&$top=5.

Query Options Description
$select=

Use $select to return only specific columns (attributes), to make queries more efficient: ...API_NAME?$select=COL1,COL2,COL3

$format=

Use $format to force the returned data to be either in XML or JSON format. This is only useful for testing the raw data in a web browser. For example: .../API_NAME?$format=xml

$orderby=

Use $orderby to sort the returned data according to the value you choose. For example, .../API_NAME?$orderby=LOCATION

$top=

Use $top (lower case only) when you are initially testing the response of the API by returning the first few entries.

Also, use $top to filter the returned data and to return only the first N entries.

For example, to return the first five entries (not sorted), use: ...API_NAME?$top=5

$filter=

Use $filter to insert conditions that narrow down the data, to return only entries where those conditions are true..

To limit the timeframe of a query, add $filter=relative_time() like, .../API_NAME?$filter=relative_time(last_x_hours) or (last_x_days). Learn more.

Create conditions for filtering with any of the following operators:

Query Operators Description
eq

Equal to

For example, COL4 eq 'val4'

ne

Not equal to

For example, COL4 ne 'val4'

gt

Greater than

For example, COL4 gt 'val4'

ge

Greater than or equal

For example, COL4 ge 'val4'

lt

Less than

For example, COL4 lt 'val4'

le

Less than or equal

For example, COL4 le 'val4'

and

Logical and

For example, COL1 eq 'value1' and COL2 ne 'value2'

or

Logical or

For example, COL1 eq 'value1' or COL2 ne 'value2'

not

Logical negation

Create conditions for filtering with any of the following functions:

Query Functions Description
startswith

For example, $filter=startswith(account_name,'Aternity')

endswith

For example, $filter=endswith(account_name,'Aternity')

contains

$filter=contains(COL5,'val5')

For example, $filter=contains(account_name,'Aternity')

in()

Instead of using AND, OR:

$filter=device_name eq ‘adam_covert_wks’ or device_name eq ‘adam_covert_vdi’ or device_name eq ‘adam_covert_tablet’

You can now use:

$filter=in(device_name,‘adam_covert_wks’,‘adam_covert_vdi’,‘adam_covert_tablet’)

Read carefully specific instructions for writing this function:
  • In must be followed directly by the opening parenthesis (no space allowed)

  • The first parameter is the field name (case insensitive)

  • The function requires at least two parameters, the field name and at least one field value

  • The rest of the parameters are the optional values that the field can have (i.e. the values we want to filter in) also case insensitive

  • Values are separated by comma and no spaces allowed

  • The last value must be followed by the closing parenthesis (no space allowed)

  • In() can be combined with any other filter using AND or OR

  • There can be more than one in() function in a filter. For example, $filter=in(location,’loc1’,’loc2’) or in(subnet,’sub1’sub2’). Another example, $filter=in(location,’loc1’,’loc2’) and in(subnet,’sub1’sub2’)

Use operators with parentheses to group conditions logically: .../API_NAME?$filter=(COLUMN1 eq 'value1' or COL2 neq 'val2') and (COL3 gt number) and not (COL4 eq 'val4' or contains(COL5,'val5'))

$search is NOT supported.

Do not use $search in Aternity's REST APIs.

Output

Each entry from DEVICE_HEALTH_DAILY_ANONYMIZED represents health event data aggregated over a day, with additional details exclusive of PII. If you use $select to display only specific columns, it makes the query faster by grouping all rows with identical attribute values into a single row with aggregated measurements.

The API returns two types of columns: Attributes (or dimensions) which are the properties of an entry, and Measurements which are the dynamic measured values. A single API row can display either a single measurement, or a weighted average of several entries grouped together. If you use $select to display several attributes, and all those attributes are identical, it groups them into a single entry.

Type Returned columns

Measurements

None

Attributes

Account_ID,Application_Name,Business_Location,Calendar_Date,Calendar_Month,Calendar_Week,Corp_Channel,Corp_Line_Of_Business,Corp_Market,Corp_Store_ID,Corp_Store_Type,Custom_Attribute_1 - 9,Custom_Pilot_Group,Device_CPU_Cores,Device_CPU_Frequency,Device_CPU_Generation,Device_CPU_Model,Device_CPU_Type,Device_Days_From_Last_Boot,Device_Domain,Device_Image_Build_Number,Device_Manufacturer,Device_Memory,Device_Model,Device_Network_Type,Device_Power_Plan,Device_Subnet,Device_Type,Health_Event_Category,Health_Event_Component,Health_Event_Component_and_Version,Health_Event_Component_Type,Health_Event_Component_Version,Health_Event_Exception_Type,Health_Event_Last_Timestamp,Health_Event_Manufacturer_Name,Health_Event_Name,Health_Event_Severity,Health_Event_Status,Health_Event_Stop_Event_Info,Health_Event_Sub_Category,Health_Event_Sub_Component,Health_Event_Sub_Component_And_Version,Health_Event_Sub_Component_Type,Health_Event_Sub_Component_Version,Health_Event_Volume,Location_City,Location_Country,Location_On_Site,Location_On_VPN,Location_Region,Location_State,Mobile_Carrier,MS_Office_License_Type,MS_Office_Version,MS_Stability_Index,OS_Architecture,OS_Disk_Type,OS_Family,OS_Name,OS_Version,Timeframe,User_Department,User_Office,User_Role,Wifi_BSSID,Wifi_Channel,Wifi_SSID,Account_Name

Additional Text Fields

Health_Event_ErrorHealth_Event_DetailsHealth_Event_Last_TimestampHealth_Event_Memory_ConsumedHealth_Event_Memory_TypeHealth_Event_Memory_UtilizationHealth_Event_StackHealth_Event_Volume

These are special text fields, and not classic measurements. Aternity does not aggregate these measurements because they are extremely diverse. But we allow bringing one value (when you bring all values, then you get the value for each row, and aggregation is not valuable because all values are different).

You can select a unique device, device name and time of the event, and all fields that are relevant to and describe a specific health event you want to analyze. These fields are meaningful only if to bring all attributes of the health event. For example, to get all data for an application crash event on Adam's PC.