User Guide Functional Overview Requirements Architecture System Installation NetEye Additional Components Installation Setup The neteye Command Director NetEye Self Monitoring Tornado Business Service Monitoring IT Operation Analytics - Telemetry Geo Maps NagVis Audit Log Shutdown Manager Reporting ntopng Visual Monitoring with Alyvix Elastic Stack IT Operations (Command Orchestrator) Asset Management Service Level Management Cyber Threat Intelligence - SATAYO NetEye.Cloud Solution Monitoring Business Service Monitoring Asset Management ELK - Log Analytics SOC System Administrator SOC Attacker Centric Cyber Threat Intelligence - SATAYO NetEye Update & Upgrade Backup and Restore How To NetEye Extension Packs Troubleshooting Security Policy Glossary
module icon Visual Monitoring with Alyvix
Overview User Roles Install Alyvix Core Install Alyvix Service Nodes RDP Client Tutorial Overview Example: Windows Start Button Example: Open Windows Settings Example: Web Browser Test Case Example: Authentication Test Case Alyvix Tutorial Video Index Building Tools Editor: Interface Overview Editor: Script Building Editor: Managing Scripts Designer: Interface Overview Designer: Interface Options Designer: Component Tree Selector: Interface Overview Test Case Execution Test Case Format Test Case Management Dashboard Use Cases
ntopng Visual Monitoring with Alyvix Elastic Stack IT Operations (Command Orchestrator) Asset Management Service Level Management Cyber Threat Intelligence - SATAYO Introduction to NetEye Monitoring Business Service Monitoring IT Operation Analytics Visualization Network Visibility Log Management & Security Orchestrated Datacenter Shutdown Application Performance Monitoring User Experience Service Management Service Level Management & Reporting Requirements for a Node Cluster Requirements and Best Practices Kubernetes Networking NetEye Satellite Requirements TCP and UDP Ports Requirements Additional Software Installation Introduction Single Node Cluster Kubernetes NetEye Master Master-Satellite Architecture Underlying Operating System Acquiring NetEye ISO Image Installing ISO Image Single Nodes and Satellites Cluster Nodes Configuration of Tenants Satellite Nodes Only Nodes behind a Proxy Additional NetEye Components Satellites Nodes only Verify if a module is running correctly Accessing the New Module Cluster Satellite Security Backup and Restore Identity and Access Management External Identity Providers Configure federated LDAP/AD Emergency Reset of Keycloak Configuration Keycloak Hostname Configuration Advanced Configuration Roles Single Page Application in NetEye Module Permissions and Single Sign On Within NetEye Importing User Federation Groups inside another Group Importing OIDC IdP Groups inside another Group Resource Tuning Advanced Topics Basic Concepts & Usage Advanced Topics Monitoring Environment Templates Monitored Objects Import Monitored Objects Data Fields Deployment Icinga 2 Agents Configuration Baskets Dashboard Monitoring Status Integration with Elasticsearch VMD Permissions Notifications Jobs API Configuring Icinga Monitoring Retention Policy NetEye Self Monitoring Concepts Collecting Events Add a Filter Node WHERE Conditions Iterating over Event fields Retrieving Payload of an Event Extract Variables Create a Rule Tornado Actions Test your Configuration Export and Import Configuration Example Under the hood Development Retry Strategy Configuration Thread Pool Configuration API Reference Configure a new Business Process Create your first Business Process Node Importing Processes Operators The ITOA Module Configuring User Permissions Telegraf Metrics in NetEye Telegraf Configuration Telegraf on Monitored Hosts Visualizing Dashboards Customizing Grafana The NetEye Geo Map Visualizer Map Viewer Configuring Geo Maps NagVis Audit Log Overview Shutdown Manager user Shutdown Manager GUI Shutdown Commands Advanced Topics Overview User Role Management Cube Use Cases ntopng and NetEye Integration Permissions Retention Advanced Topics Overview User Roles Install Alyvix Core Install Alyvix Service Nodes RDP Client Tutorial Overview Example: Windows Start Button Example: Open Windows Settings Example: Web Browser Test Case Example: Authentication Test Case Alyvix Tutorial Video Index Building Tools Editor: Interface Overview Editor: Script Building Editor: Managing Scripts Designer: Interface Overview Designer: Interface Options Designer: Component Tree Selector: Interface Overview Test Case Execution Test Case Format Test Case Management Dashboard Use Cases Overview Architecture Authorization Kibana Elasticsearch Cluster Elasticsearch Configuration Replicas on a Single Node Elasticsearch Performance tuning Overview Enabling El Proxy Sending custom logs to El Proxy Configuration files Commands Elasticsearch Templates and Retentions El Proxy DLQ Blockchain Verification Handling Blockchain Corruptions El Proxy Metrics El Proxy Security El Proxy REST Endpoints Agents Logstash Rsyslog Elastic APM Elastic RUM Multitenant OpenTelemetry Collector Elastic XDR Overview Authorization in the Command Orchestrator Module Configuring CLI Commands Executing Commands Overview Permissions Installation Plugins Single Tenancy Multitenancy Communication through a Satellite Asset collection methods Display asset information in monitoring host page Overview Customers Availability Event Adjustment Outages Resource Advanced Topics Introduction The Intelligence We Produce Mitre Attack Coverage Getting Started Settings SATAYO Items Intelligence Requirements Managed Service Request Form FAQ Changelog SATAYO Community NetEye.Cloud as a SaaS solution NetEye.Cloud Subscription Base Concepts Authentication Options Authentication via IdP Group Claims for Authorization Management Authentication via Microsoft Entra ID Roles and Permissions Authorization Navigating the UI Monitoring with NetEye.Cloud Monitored Objects Finding and Filtering Hosts Exporting Monitoring Data Viewing Host and Service Details Organizing with Groups Tactical Overview Problems View Dashboard Typical Daily Interactions Scheduled Downtime Notifications and Alerts AutoDiscovery VMD Business Service Monitoring Business Process Logic Business Process View Asset Management in NetEye.Cloud Automatic Inventory Collection Software & License Management Contract & Supplier Management Change & Lifecycle Management Getting Started with ELK Analytics SOC System Administrator (AdS) Access to NetEye and Elastic Elastic Dashboards Elastic Discover Elastic Alerts Elastic Rules Introduction to SOC Attacker Centric Service Description NetEye SIEM About SATAYO Getting Started Threat Intelligence and Security Operations How SATAYO works MITRE ATT&CK Coverage Dashboard SATAYO Findings SATAYO REST API SaaS & Managed Mode SATAYO MCP Server Before you start Update Procedure Single Node Upgrade from 4.50 to 4.51 Cluster Upgrade from 4.50 to 4.51 Satellite Upgrade from 4.50 to 4.51 DPO machine Upgrade from 4.50 to 4.51 Create a mirror of the RPM repository Sprint Releases Feature Troubleshooting Backup and Restore Tornado Networking Service Management - Incident Response IT Operation Analytics - Telemetry Identity Provider (IdP) Configuration NetEye Cluster on Microsoft Azure NetEye Cluster on AWS Introduction to NEP Getting Started with NEPs Online Resources Obtaining NEP Insights Available Packages Advanced Topics NEP Updates & Upgrades Setup Configure swappiness Restarting Stopped Services Enable stack traces in web UI How to access standard logs Director does not deploy when services assigned to a host have the same name How to enable/disable debug logging Activate Debug Logging for Tornado Modules/Services do not start Sync Rule fails when trying to recreate Icinga object How to disable InfluxDB query logging Managing an Elasticsearch Cluster with a Full Disk Some logs are not indexed in Elasticsearch Elasticsearch is not functioning properly Reporting: Error when opening a report Debugging Logstash file input filter Bugfix Policy Reporting Vulnerabilities Cyber Resilience Act Compliance Glossary

Test Case Format

Alyvix test cases are stored as JSON files with an .alyvix extension, and represent the unique mechanism for interchange between Alyvix tools. Each file is self-contained, without any external dependencies.

Alyvix Core and its data structures are open source. The entire JSON file format of an Alyvix test case file is described in detail below.


Test Case Files

Each time you exit Designer or Selector, or save an object in Editor, the JSON object representing the test case is saved in the current directory under the file name:

<filename>.alyvix

where filename is the value of the -f parameter passed when starting Editor or Designer.

When you call Alyvix Robot via the command line with that file as a parameter, it will create a new data file based on the original file name, but with the resulting measures included. Appended to the file name is the timestamp at the moment of execution:

<filename>_<full-timestamp>.alyvix

For example:

logintest_20191220_145228_UTC+0100.alyvix

Note

The timestamped file is not produced when a test case is executed within Editor via alyvix-runblue, only when executed directly from Alyvix Robot, since storing the results is only useful in an automated monitoring scenario where the results may need to be used later.


Test Case JSON Structure

A single .alyvix file stores the entire test case, and a timestamped file additionally contains all measures resulting from its single execution run.

The following example JSON structure illustrates the high-level structure of the test case object:

 1{
 2   "maps": { },
 3   "objects": {
 4      "<test-case-object-name>": {
 5         "call": { },
 6         "components": {
 7            "<resolution>": {
 8               "groups": [
 9                  { "main": { },
10                    "subs": [ ] },
11                  { "main": { },
12                    "subs": [ ] },
13                  { "main": { },
14                    "subs": [ ] }
15               ],
16               "screen": "<base64>"
17            }
18         },
19         "date_modified": "<timestamp>",
20         "detection": {
21            "break": true,
22            "timeout_s": 10,
23            "type": "appear" },
24         "measure": {
25            "group": "<transaction-group-name>",
26            "output": true,
27            "series": { },
28            "thresholds": { } }
29      }
30   },
31   "script": {
32      "case": [
33         "<test-case-object-name>",
34         { "disable": "<test-case-object-name>" },
35         { "flow": "<test-case-object-name>",
36           "if-true": "<test-case-object-name>" },
37         { "flow": "<test-case-object-name>",
38           "if-false": "<test-case-object-name>" },
39         { "flow": "<test-case-object-name>",
40           "for": "<test-case-map-name>" }
41      ],
42      "sections": {
43         "<section-name>": [
44            "<test-case-object-name>"
45         ],
46         "exit": [ ],
47         "fail": [ ] }
48   }
49}

The individual sections making up the JSON structure are explained below.


Top Level

The top level corresponds to the principal elements of Alyvix Editor:

{ "maps": {
     "map-name":  { } },
  "objects": {
     "<test-case-object-name>":  { } },
  "script": {
     "case":  [ ],
     "sections":  { } }
}
  1. maps – An ordered set of values that a script can loop over, for instance to insert a sequence of values in multiple text fields.

  2. objects – A list of the individual test case objects created with Alyvix Designer. Each test case object is identified uniquely in the list by its object name.

  3. script – The scripts created for a test case, both the main script and any section (subroutine) scripts, in the order they are executed.


Maps

Each named map under the maps field contains a set of named keys (rows) and a fixed number of cell values, to represent an m x n matrix (columns cannot be named):

{ "<map-name-1>": {
     "<key-name-1>": [ "key1-val1",
                       "key1-val2" ],
     "<key-name-2>": [ "key2-val1",
                       "key2-val2" ] }
}

When arguments are passed to Alyvix Robot in the command line interface, a new map structure will be added under the name cli, and containing the arguments as keys. Because of this, the map name cli is reserved.


Objects

The value of each property contained within the objects substructure (shown here as “<test-case-object-name>”) corresponds to a test case object created in Designer/Editor. Those values have the following meanings:

{ "<test-case-object-name>": {
     "call": { },
     "components": { },
     "date_modified": "<timestamp>",
     "detection": { },
     "measure": { }
  }
}
  1. call – The recorded options to start or kill an external application when a test case object is first called

  2. components – The representation of the component tree

  3. date_modified – The time the test case object was last modified (also displayed in Selector)

  4. detection – The test case object’s detection conditions such as timeout, break, and appear/disappear

  5. measure – Details of the last execution via Alyvix Robot (see below) if this is a timestamped .alyvix file, along with the settings for transaction group, output, and thresholds.


Objects > {object} > Components

The components section represents the component tree of a given test case object. The example below shows how you can have a different component tree at each distinct screen resolution.

{ "components": {
    "<resolution>": {
        "groups": [
            { "main": {
                "detection": { },
                "interactions": { },
                "visuals": { } },
              "subs": [ ] },
            { "main": { },
              "subs": [ ] },
            { "main": { },
              "subs": [ ] } ],
        "screen": "<base64>" } }
}

<resolution> – The resolution of a screen capture as shown in Alyvix Selector. This value is not selected by the user, but depends on the hardware and the settings in use when the screen is captured.

  1. groups – A JSON array of exactly 3 items, each of which corresponds to one of the groups in the component tree (red, green and blue).

    1. main – The main component in a group.

      1. detection – Information about the match method to use when trying to detect the region of interest

      2. interactions – Details on any mouse or keyboard actions to initiate in the event of a positive detection

      3. visuals – Information about the region of interest and the selection box laid over the screen capture

    2. subs – A JSON array of exactly 4 items, each of which corresponds to one of the subcomponents in a group. The structure of each element is identical to the structure of the main component above.

  2. screen – The Base64 alyvix-ext-link-icon representation of the screen capture. There is exactly one screen capture for each resolution in a test case object.


Objects > {object} > Measure

The measure structure holds some of the user-selected options visible in Selector for a given test case object, along with the series array, which contains recorded data resulting from each run of the test case object by Alyvix Robot in the test case’s script within a single session.

The measure structure is empty in a plain .alyvix file, but contains measurements in a timestamped .alyvix file.

When a test case is executed, its .alyvix file is taken as the starting point, and thus the series structure for all of its test case objects is empty. Each time a test case object is called by the test case script, the results and auxiliary data are added to series as a new array element.

This example shows the structure and some default values:

{ "measure": {
    "group": "<transaction-group-name>",
    "output": "<true/false>",
    "series": [
        {
            "accuracy_ms": "<ms-amount>",
            "annotation": "<base64>",
            "exit": "<true/false/fail/not_executed>",
            "performance_ms": "<ms-amount>",
            "records": {
                "check": "<true/false>",
                "extract": "<extracted-text>",
                "image": "<base64>",
                "text": "<scraped-text>"
            },
            "resolution": {
                "height": "<pixel-amount>",
                "width": "<pixel-amount>"
            },
            "scaling_factor": "<zoom-amount>",
            "screenshot": "<base64>",
            "timestamp": "<epoch>"
        }
    ],
    "thresholds": {
        "critical_s": 5,
        "warning_s": 3 }
    }
}
  1. group – The transaction group assigned to the test case object

  2. output – Whether the test case object’s “Measure” checkbox is marked

  3. series – An array containing the results and auxiliary data for each run of the parent test case object, containing the following information:

    1. accuracy_ms – Given the performance measurement from the same run (see below), this is the interval (+/-) over which that measurement is guaranteed to have occurred

    2. annotation – The Base64 alyvix-ext-link-icon screen captured when the test case object was being run, and overlaid graphic annotations to indicate those components that matched as well as potentially the first component that did not match

    3. exit – The result type of the most recent run. If the test case object did not match, then the type false or fail is determined by whether the break flag was set

    4. performance_ms – The number of milliseconds that elapsed from when the run of a test case object began until a match was confirmed, subject to the accuracy interval described above; otherwise -1

    5. records – Temporary variables that are computed during the matching process, such as a text string extracted by a text component

    6. resolution – The screen resolution at which the test case object was executed

    7. scaling_factor – The Windows zoom level at the time when the test case object was executed

    8. screenshot – The Base64 alyvix-ext-link-icon representation of the screen during the test case screen capture, but is made during the execution phase, rather than during the building phase

    9. timestamp – The time (Unix epoch) when this series element was run; otherwise -1

  1. thresholds – The number of elapsed seconds from when the test case object has been started until a warning and/or critical alert should be triggered; if no values are specified, no alerts will be triggered


Script

The script parameter records the main script and any subroutines used to compose more complex interaction behaviors.

{ "case": [
     "<test-case-object-name>",
     { "disable": "<test-case-object-name>" },
     { "flow": "<test-case-object-name>",
       "if-true": "<test-case-object-name>" },
     { "flow": "<test-case-object-name>",
       "if-false": "<test-case-object-name>" },
     { "flow": "<test-case-object-name>",
       "for": "<test-case-map-name>" }
  ],
  "sections": {
     "<section-name>": [
        "<test-case-object-name>",
        "<test-case-object-name>"
     ],
     "exit": [],
     "fail": [] }
}
  1. case – The main script that will be executed by Alyvix Robot. The script is an ordered list of scripting elements in which a simple, enabled element is represented just by the name of a test case object. Other elements have the following meanings:

    1. disable – Skip this test case object and continue with the next

    2. flow – Indicates the test case object or section that is the value of this key should be executed by Alyvix Robot in the context of a conditional (if-true or if-false) or a loop (map)

    3. if-true – Evaluates whether the detection part of a given test case object would match, but without executing its actions

    4. if-false – As above, but if the test case object would not match

    5. for – Indicates there should be a loop over the values in the specified Map

  2. sections – Corresponds to the named subroutine scripts created in Alyvix Editor. Each section is a parameter where its key is the name of the section and its value is the same as the case value described above.

    1. exit – The (teardown) script to execute when a script has completed, regardless of whether it succeeded or failed

    2. fail – The (teardown) script to execute when a script has failed during the execution of its test case objects