modality metrics

Command: modality metrics

The main functionality of this command is exposed via subcommands:

# modality metrics complexity

Command: modality metrics complexity <component | probe | event> [region-expression]

Calculate a metric reflecting complexity at a component-, probe-, or event-level for the given region. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one. Since the acceptable level of complexity depends on your system design, this command is especially useful in a CI context to flag high-risk changes, i.e. changes which substantially increase complexity.

# Example

$ modality metrics complexity event
Cyclomatic complexity: 89.000

$ modality metrics complexity probe
Cyclomatic complexity: 3.000

# Options

<component | probe | event> - The level of detail at which complexity will be calculated: component interactions, probe interactions, or event transitions.

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics coupling

Command: modality metrics coupling <component | probe | event> [region expression]

Calculate a metric reflecting coupling at a component-, probe-, or event-level for the given region. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics coupling probe
Coupling factor: 1.000
Mean practical module coupling factor: 0.667
Per-node practical module coupling:
  CONSUMER_PROBE: 0.667
  MONITOR_PROBE: 0.667
  PRODUCER_PROBE: 0.667

# Options

<component | probe | event> - The level of detail at which coupling will be calculated: component interactions, probe interactions, or event transitions.

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics coverage

Command: modality metrics coverage [region-expression]

Calculate coverage for the given region. Coverage is defined as the percentage of defined instrumentation points that were actually observed. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics coverage
Coverage Summary:
  Event: 0.119
  Failure: 0.000
  Expectation state: 0.000
  Probes reporting: 0.778

# Options

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

-v, -vv, --verbose - Provide (more) verbose output.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics cross-similarity

Command: modality metrics cross-similarity [session name]

Given a session, return a table of metrics reflecting its similarity to all other selected sessions.

# Example

$ modality metrics cross-similarity example-sessionm
╔═════════════════════════════════════════════════════════════╦══════════════════╦═══════════════════╗
║                       example-session                       ║ first-comparison ║ second-comparison ║
╠═════════════════════════════════════════════════════════════╬══════════════════╬═══════════════════╣
║ (RECVD_MSG @ CONSUMER)                                      ║                  ║                   ║
║   description="Consumer received measurement message"       ║                  ║                   ║
║ * Count: 72659 (-667) ║         59 (-667) ║
║ * Mean: 7.344-3.729 (-11.073) ║    3.983 (-3.361) ║
║ * StdDev: 15.7074.050 (-11.657) ║   2.521 (-13.186) ║
║ * Min: -18.000-9.000 (9.000) ║   -1.000 (17.000) ║
║ * Max: 100.0006.000 (-94.000) ║   8.000 (-92.000) ║
║ * Median: 4.000-5.000 (-9.000) ║     5.000 (1.000) ║
╠═════════════════════════════════════════════════════════════╬══════════════════╬═══════════════════╣
║ (CONSUMER_TIMEOUT @ MONITOR)                                ║                  ║                   ║
║   description="Monitor detected consumer heartbeat timeout" ║                  ║                   ║
║ * Count: 230 (-23) ║           0 (-23) ║
╠═════════════════════════════════════════════════════════════╬══════════════════╬═══════════════════╣
║ (SAMPLED @ PRODUCER)                                        ║                  ║                   ║
║   description="Producer sampled raw measurement"            ║                  ║                   ║
║ * Count: 2506177 (-2329) ║       177 (-2329) ║
║ * Mean: 1.451-3.712 (-5.163) ║     3.989 (2.538) ║
║ * StdDev: 6.6524.063 (-2.589) ║    2.564 (-4.088) ║
║ * Min: -18.000-10.000 (8.000) ║   -1.000 (17.000) ║
║ * Max: 20.0006.000 (-14.000) ║   9.000 (-11.000) ║
║ * Median: 2.000-5.000 (-7.000) ║     5.000 (3.000) ║
╠═════════════════════════════════════════════════════════════╬══════════════════╬═══════════════════╣
...

# Options

[session name] - Use the given session rather than the default one to compare against all other selected sessions.

--all-events - Display all events instead of only events with a significant difference.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

--deltas - Display delta values relative to the base session.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events in the calculation.

--session <session selection>... - Specify a session to compare the given session to. This parameter may be supplied multiple times and combined with --sessions. When no sessions are supplied to compare to, all other sessions associated with the same SUT as the given session will be selected. Mutually exclusive with the --when option.

--sessions <sessions selection> - A comma-separated list of sessions to compare with the given session. Can be combined with --session. When no sessions are supplied to compare to, all other sessions associated with the same SUT as the given session will be selected. Mutually exclusive with the --when option.

--show-similar-stats - Display all statistical values instead of only those with a significant difference.

-v, -vv, --verbose - Provide (more) verbose output.

--when <trace expression> - Determine the selected sessions to compare against based on the evaluation of a trace expression checked against all available sessions. If the check returns true that session will be selected. Mutually exclusive with the --session and --sessions options.

--with-sut <sut name> - Use the given SUT rather than the one currently associated with this session.

# modality metrics falsifiability

Command: modality metrics falsifiability [region-expression]

Given a region, return a summary of failures within scopes. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics falsifiability
Scope Failure Summary:
  Scope: DroneSetup
    Failing scope instances: []
    Passing scope instances: [2021-05-10T10-37-39Z 2]
    Failures:

  Scope: DroneOperational
    Failing scope instances: [2021-05-10T10-37-39Z 3]
    Passing scope instances: []
    Failures:
      Expectation: NOMINAL_VOLTAGE_CHECK @ PX4_BATTERY
      Expectation: FAILURE_DETECTOR_STATUS_ROLL_ACTIVE @ PX4_COMMANDER

  Scope: Case Study: Failure Detector Failsafe
    Failing scope instances: [2021-05-10T10-37-39Z 1]
    Passing scope instances: []
    Failures:
      Expectation: NOMINAL_VOLTAGE_CHECK @ PX4_BATTERY
      Expectation: FAILURE_DETECTOR_STATUS_ROLL_ACTIVE @ PX4_COMMANDER

# Options

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--stimulus-only - Only stimulus-side expectation outcomes matter, any failure of any stimulus-side expectation means the related test region is a failure. Otherwise, any failure of any stimulus-side or SUT-side expectation means the related test region is a failure.

--using <session name> - Use the given session rather than a region expression or the default session.

--with-sut <sut name> - Use the given SUT rather than the one currently associated with this session.

# modality metrics fault-localization

Command: modality metrics fault-localization [region-expression]

Given a region, locate some suspicious patterns in the system under test. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics fault-localization --mode spectrum
Found 1 distinct problem in 15 cases.
Problem: Expectation CONSUMER_TIMEOUT @ MONITOR
    Failing cases: example-session [scope StimulusScriptRunning 7, scope StimulusScriptRunning 8, scope StimulusScriptRunning 9, scope StimulusScriptRunning 14]
    Passing cases: example-session [scope StimulusScriptRunning 1, scope StimulusScriptRunning 2, scope StimulusScriptRunning 3, scope StimulusScriptRunning 4, scope StimulusScriptRunning 5, scope StimulusScriptRunning 6, scope StimulusScriptRunning 10, scope StimulusScriptRunning 11, scope StimulusScriptRunning 12, scope StimulusScriptRunning 13, scope StimulusScriptRunning 15]
    Suspicious Single Elements:
      Score: 1.000
      Occurred in 4 / 4 failing cases and 0 / 11 passing cases
      Element:
        *  (INIT @ CONSUMER)
      ...

    Suspicious Sequences:
      Score: 0.894
      Occurred in 4 / 4 failing cases and 1 / 11 passing cases
      Sequence:
        *  │  (SENT_MEASUREMENT @ PRODUCER (_.payload >= 46))
          │  
        *  │  (SENT_HEARTBEAT @ PRODUCER (_.payload <= 1))
        »╗  
        │  *  (MONITOR in monitor-component)
      ...

    Suspicious Pairs:
      Score: 1.000
      Element A:
        *  (SAMPLED @ PRODUCER (_.payload > -3 AND _.payload < 1))
        
      Element B:
        *  (INIT @ CONSUMER)
...

$ modality metrics fault-localization --mode spectrum \
    --good-sessions "flight-6,flight-7" --bad-sessions "flight-11,flight-12" \
    --postcondition "ROLL_ANGLE@SENSOR_FUSION (_.payload >= 1.570 OR _.payload <= -1.570) -> LONGITUDE@SENSOR_FUSION as longitude" \
    --postcondition-label "longitude"
...

# Options

[region-expression] - A region expression which this command will be constrained to.

--bad-session <bad session>... - Only relevant for spectrum mode. This parameter may be supplied multiple times, each time indicating an example of an unsuccessful/failing session.

--bad-sessions <bad sessions> - Only relevant for spectrum mode. A comma-separated list of unsuccessful/failing sessions.

--bound-examples-by-mutation-epoch - Only relevant for causal mode. For each positive or negative example, look back through its history only up to the edges of the current mutation epoch. Without this flag each example will look back through history as far as possible.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

--event-buckets <event buckets>... - Only relevant for spectrum mode. Manually specify the payload bucketing boundaries for an event. Payload bucketing is part of the process of determining suspicious candidates so that, if only certain payload values for an event cause a problem, that can be found. This parameter may be supplied multiple times, each time indicating an event and the payload values to use as bucket boundaries when grouping. Values must be numeric, non-repeating, and ordered least to most.

Example: --event-buckets="FOO_EVENT@PROBE_BAR [-1.5, 0, 2.9]" would result in the following buckets:

  • payload < -1.5
  • payload >= 1.5 && payload < 0
  • payload >= 0 && payload < 2.9
  • payload >= 2.9

-f, --format <text | json> - The printed output format. Defaults to text.

--good-session <good session>... - Only relevant for spectrum mode. This parameter may be supplied multiple times, each time indicating an example of a successful/passing session.

--good-sessions <good sessions> - Only relevant for spectrum mode. A comma-separated list of successful/passing sessions.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--mode <causal | spectrum | auto> - Specify an approach to fault localization. causal focuses on expectation failures and their possible causes throughout the given region or session. spectrum focuses on bucketing the given region or session and then finding problems for each bucket, and is especially well-aligned with objective measurements or scopes. Defaults to auto, where Modality will determine what approach is best to use.

--negative-primary-binding <negative primary binding> - Only relevant for causal mode. Which query binding alias in the negative-query is the key event of interest, which will be used as the pivot point for the analysis.

--negative-query <negative query> - Only relevant for causal mode. The query used to find examples of the "things are officially bad" side of the split.

--objective-instance <objective instance> - Which specific instance of an objective to target.

--objective-name <objective name> - Target an objective and its measurements rather than an explicit region.

--positive-primary-binding <positive primary binding> - Only relevant for causal mode. Which query binding alias in the positive-query is the key event of interest, which will be used as the pivot point for the analysis.

--positive-query <positive query> - Only relevant for causal mode. The query used to find examples of the "things are cool" side of the split.

--postcondition <postcondition> - Only relevant for spectrum mode. Only consider events which are causally BEFORE a match to this query. Determining what is causally before requires a single event as a starting point. If your postcondition matches a single event, that event will be used. If your postcondition is a pattern matching more than one event you must pass the --postcondition-label option to specify which event to use as the starting point. That event must be labeled using AS, and its label is the value to give to --postcondition-label.

--postcondition-label <postcondition-label> - When using --postcondition, use this label to identify which event in the postcondition query to use as the starting point for causal reasoning. This option must be passed if the postcondition is a pattern matching more than one event. The event to use must be labeled with AS, and that label is passed to this option. If postcondition is not given, this is ignored.

--precondition <precondition> - Only relevant for spectrum mode. Only consider events which are causally AFTER a match to this query. Determining what is causally after requires a single event as a starting point. If your precondition matches a single event, that event will be used. If your precondition is a pattern matching more than one event you must pass the --precondition-label option to specify which event to use as the starting point. That event must be labeled using AS, and its label is the value to give to --precondition-label.

--precondition-label <precondition-label> - When using precondition, use this label to identify which event in the precondition query to use as the starting point for causal reasoning. This option must be passed if the precondition is a pattern matching more than one event. The event to use must be labeled with AS, and that label is passed to this option. If precondition is not given, this is ignored.

--quick - Use settings which give a faster, if less accurate, result.

--using <session name> - Use the given session rather than a region expression or the default session.

-v, -vv, --verbose - Provide (more) verbose output.

--with-sut <sut name> - Use the given SUT rather than the one currently associated with this session.

# modality metrics impact

Command: modality metrics impact <name> <instance-id>

Given an entity and instance, return some general impact metrics. Supported pairs include:

# Example

$ modality metrics impact example-objective 1
Name: example-objective
Instance: 1
Mutations: 15
  Instance: 1
    Mutator: sample-data-mutator
    Probe: PRODUCER
    Parameters: [sample=63]
    Associated Failures: 0
    Distinct Failure Tags: 0
    Probe Breadth: 0
    Probe Reach: 0
    Causal Reach: 0
  Instance: 2
    Mutator: sample-data-mutator
    Probe: PRODUCER
    Parameters: [sample=10]
    Associated Failures: 0
    Distinct Failure Tags: 0
    Probe Breadth: 0
    Probe Reach: 0
    Causal Reach: 0
...
Summary Statistics By Measurement Region:
  Execution Run: 0
    Region: session = 'example-session' AND mutation_epoch = 2
      Interactions: 71
      Passing Expectation Instances: 18
      Failure Instances: 0
      Scopes Begun: 0
      Probes With Passing Expectations: 1
      Probes With Failing Expectations: 0
      Distinct Events: 11
      Distinct Passing Expectations: 1
      Distinct Failing Expectations: 0
      Distinct Events With Payloads: 7
      Distinct Payloads: 21
      Mutation epochs: [2]
      Associated Mutations: 0
      Not Associated Mutations: 0
  Execution Run: 1
    Region: session = 'example-session' AND mutation_epoch = 4
      Interactions: 71
      Passing Expectation Instances: 18
      Failure Instances: 0
      Scopes Begun: 0
      Probes With Passing Expectations: 1
      Probes With Failing Expectations: 0
      Distinct Events: 11
      Distinct Passing Expectations: 1
      Distinct Failing Expectations: 0
      Distinct Events With Payloads: 7
      Distinct Payloads: 21
      Mutation epochs: [4]
      Associated Mutations: 1
        Instance: 2
          Mutator: sample-data-mutator
          Probe: PRODUCER
          Parameters: [sample=10]
          Associated Failures: 0
          Distinct Failure Tags: 0
          Probe Breadth: 0
          Probe Reach: 0
          Causal Reach: 0
      Not Associated Mutations: 0
...

# Options

<name> - The name of a given entity. An <objective-name> can be paired with an objective <instance-id>. A <mutator-name> can be paired with a mutation <instance-id>.

<instance-id> - An instance of the entity given in <name>.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Include internal entities in the output.

--using <session name> - Use the given session rather than the default one.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics loops

Command: modality metrics loops

Calculate the loops found within the given region, and the nodes which comprise the loop at either a component-, probe-, or event-level. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics loops event
Loop: 1
  Origin: TASK_LOOP @ CONSUMER
  Distinct events: 1
  Path:
    *  (TASK_LOOP @ CONSUMER)
      
    *  (TASK_LOOP @ CONSUMER)
    
Loop: 2
  Origin: TASK_LOOP @ CONSUMER
  Distinct events: 2
  Path:
    *  (TASK_LOOP @ CONSUMER)
      
    *  (SENT_HEARTBEAT @ CONSUMER)
      
    *  (TASK_LOOP @ CONSUMER)
...

# Options

<component | probe | event> - The level at which to search for loops. Can return loops found in component interactions, probe interactions, or event transitions.

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics pattern-frequency

Command: modality metrics pattern-frequency <singles | doubles | triples> [region-expression]

Calculate the common one-, two-, or three-hop patterns and the count of their occurrences for the given region. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics pattern-frequency triples
Pattern 1:
  Frequency: 11253
    *  (TASK_LOOP @ CONSUMER)
      
    *  (TASK_LOOP @ CONSUMER)
      
    *  (TASK_LOOP @ CONSUMER)
    
Pattern 2:
  Frequency: 1137
    *  (SAMPLED @ PRODUCER)
      
    *  (SAMPLED @ PRODUCER)
      
    *  (SENT_MEASUREMENT @ PRODUCER)
    
Pattern 3:
  Frequency: 831
    │  *  (SAMPLED @ PRODUCER)
    │    
    │  *  (SENT_MEASUREMENT @ PRODUCER)
    │    
    ɮ  
      │  
    *  │  (CONSUMER in consumer-component)
...

# Options

<singles | doubles | triples> - Whether to show common single events, two-event patterns, or three-event patterns.

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

-v, -vv, --verbose - Provide (more) verbose output (-v, -vv).

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics similarity

Command: modality metrics similarity <region-expression-a> <region-expression-b>

Given two region expressions, return a metric reflecting their similarity.

# Example

$ modality metrics similarity 'session="test-session" and scope="DroneSetup"' 'session="test-session" and scope="DroneOperational"'
Doubles: 0.973
Triples: 0.984

# Options

<region-expression-a> - The region expression for comparison to <region-expression-b>.

<region-expression-b> - The region expression for comparison to <region-expression-a>.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics summary

Command: modality metrics summary [region-expression]

Given a region, return some general summary statistics. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics summary -v
Interactions: 1352
Passing Expectation Instances: 421
Failure Instances: 39
Scopes Begun: 19

Sessions With Mutations: 1
Injected Mutations: 16
Active Mutations: 16
Mutation Epochs: 39
Overlapping Mutations By Session:
  Session: example-session
    Injected Mutations:
      Instance: 2
        Mutator: sample-data-mutator
        Probe: PRODUCER
        Parameters: [sample=19]
        Associated Failures: 0
        Distinct Failure Tags: 0
        Probe Breadth: 0
        Probe Reach: 0
        Causal Reach: 0
      Instance: 8
        Mutator: sample-data-mutator
        Probe: PRODUCER
        Parameters: [sample=67]
        Associated Failures: 5
        Distinct Failure Tags: 5
        Probe Breadth: 1
        Probe Reach: 0
        Causal Reach: 0
      Instance: 4
        Mutator: sample-data-mutator
        Probe: PRODUCER
        Parameters: [sample=82]
        Associated Failures: 7
        Distinct Failure Tags: 5
        Probe Breadth: 1
        Probe Reach: 0
        Causal Reach: 0
...

Probes With Passing Expectations: 1
Probes With Failing Expectations: 1
Distinct Events: 17
Distinct Passing Expectations: 1
Distinct Failing Expectations: 1
Distinct Events By Component:
  consumer-component: 5
  monitor-component: 7
  producer-component: 5

Distinct Events With Payloads: 7
Distinct Payloads: 21
Event Payloads By Component:
  consumer-component
    RECVD_MSG: 3
    SENT_HEARTBEAT: 3
  monitor-component
    HEARTBEAT_ID_CHECK: 3
    RECVD_MSG: 3
  producer-component
    SAMPLED: 3
    SENT_HEARTBEAT: 3
    SENT_MEASUREMENT: 3

# Options

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

-v, -vv, --verbose - Provide (more) verbose output (-v, -vv).

--with-sut <sut name> - Use the given SUT rather than the default one.

# modality metrics topology

Command: modality metrics topology <component | probe | event> [region expression]

Generate a state machine-like topology representing the unique events, probes, or components and their direct relationships for the given region. If neither a region expression nor the --using flag is provided, run the calculation against the default session, if there is one.

# Example

$ modality metrics topology event
SOURCE                         DESTINATION
CONSUMER_REGISTERED @ MONITOR  CONSUMER_TIMEOUT @ MONITOR
CONSUMER_REGISTERED @ MONITOR  DEINIT @ MONITOR
CONSUMER_REGISTERED @ MONITOR  RECVD_MSG @ MONITOR
CONSUMER_TIMEOUT @ MONITOR     CONSUMER_TIMEOUT @ MONITOR
CONSUMER_TIMEOUT @ MONITOR     DEINIT @ MONITOR
CONSUMER_TIMEOUT @ MONITOR     RECVD_MSG @ MONITOR
HEARTBEAT_ID_CHECK @ MONITOR   CONSUMER_REGISTERED @ MONITOR
HEARTBEAT_ID_CHECK @ MONITOR   CONSUMER_TIMEOUT @ MONITOR
HEARTBEAT_ID_CHECK @ MONITOR   DEINIT @ MONITOR
HEARTBEAT_ID_CHECK @ MONITOR   PRODUCER_REGISTERED @ MONITOR
HEARTBEAT_ID_CHECK @ MONITOR   RECVD_MSG @ MONITOR
INIT @ MONITOR                 CONSUMER_TIMEOUT @ MONITOR
INIT @ MONITOR                 DEINIT @ MONITOR
INIT @ MONITOR                 RECVD_MSG @ MONITOR
PRODUCER_REGISTERED @ MONITOR  CONSUMER_TIMEOUT @ MONITOR
PRODUCER_REGISTERED @ MONITOR  DEINIT @ MONITOR
PRODUCER_REGISTERED @ MONITOR  RECVD_MSG @ MONITOR
RECVD_MSG @ MONITOR            HEARTBEAT_ID_CHECK @ MONITOR
INIT @ CONSUMER                RECVD_MSG @ CONSUMER
INIT @ CONSUMER                SENT_HEARTBEAT @ CONSUMER
RECVD_MSG @ CONSUMER           TASK_LOOP @ CONSUMER
SENT_HEARTBEAT @ CONSUMER      CONSUMER_TIMEOUT @ MONITOR
SENT_HEARTBEAT @ CONSUMER      DEINIT @ MONITOR
SENT_HEARTBEAT @ CONSUMER      RECVD_MSG @ MONITOR
SENT_HEARTBEAT @ CONSUMER      DEINIT @ CONSUMER
SENT_HEARTBEAT @ CONSUMER      RECVD_MSG @ CONSUMER
SENT_HEARTBEAT @ CONSUMER      SENT_HEARTBEAT @ CONSUMER
SENT_HEARTBEAT @ CONSUMER      TASK_LOOP @ CONSUMER
TASK_LOOP @ CONSUMER           DEINIT @ CONSUMER
TASK_LOOP @ CONSUMER           RECVD_MSG @ CONSUMER
TASK_LOOP @ CONSUMER           SENT_HEARTBEAT @ CONSUMER
TASK_LOOP @ CONSUMER           TASK_LOOP @ CONSUMER
INIT @ PRODUCER                SAMPLED @ PRODUCER
SAMPLED @ PRODUCER             SAMPLED @ PRODUCER
SAMPLED @ PRODUCER             SENT_MEASUREMENT @ PRODUCER
SENT_HEARTBEAT @ PRODUCER      CONSUMER_TIMEOUT @ MONITOR
SENT_HEARTBEAT @ PRODUCER      DEINIT @ MONITOR
SENT_HEARTBEAT @ PRODUCER      RECVD_MSG @ MONITOR
SENT_HEARTBEAT @ PRODUCER      DEINIT @ PRODUCER
SENT_HEARTBEAT @ PRODUCER      SAMPLED @ PRODUCER
SENT_MEASUREMENT @ PRODUCER    DEINIT @ CONSUMER
SENT_MEASUREMENT @ PRODUCER    RECVD_MSG @ CONSUMER
SENT_MEASUREMENT @ PRODUCER    SENT_HEARTBEAT @ CONSUMER
SENT_MEASUREMENT @ PRODUCER    TASK_LOOP @ CONSUMER
SENT_MEASUREMENT @ PRODUCER    DEINIT @ PRODUCER
SENT_MEASUREMENT @ PRODUCER    SAMPLED @ PRODUCER
SENT_MEASUREMENT @ PRODUCER    SENT_HEARTBEAT @ PRODUCER

# Options

<component | probe | event> - The level of detail at which topology will be calculated: component interactions, probe interactions, or event transitions.

[region-expression] - A region expression which this command will be constrained to.

--color <always | never | auto> - Whether to color the output. Default is auto, which will autodetect the target output location and whether or not it is capable of handling color escape codes.

-f, --format <text | json> - The printed output format. Defaults to text.

--include-internal - Consider Modality's internal events/probes/components in the calculation.

--using <session name> - Use the given session rather than a region expression or the default session.

--with-sut <sut name> - Use the given SUT rather than the default one.