Agent Events

An Agent Event contains the ID, properties, and time the event was generated.

The ID is decomposed as follows:

  • Agent Id
    The identity of the agent that generated the event.

  • Item UID
    The identity of the logical item that the event relates to:

    • Flow
      The flow the item is in.

    • Correlation Id
      The unique correlation Id of the item this event relates to or null/unset if this event could not be correlated. Note that correlation ID is only unique within each flow, but the combination of flow and correlation id uniquely identifies an 'Item' across the system.

Timestamps used in the protocol are expressed as nanoseconds since UTC Epoch.

{
 
"version":1, //Just a future-proofing mechanism. Always set this to 1.
"agentEvents":[
{
"eventId":{
"agentId":"Request", // Type
"itemId":{
"flow":"OrderFlow", // Flow
"correlationId":"cancelClOrd14695855:123.45.67.89:01234:123.45.67.89:0123" // Correlation ID
}
},
"timestamp":"1682505217344028000", // Timestamp
"payload": {
"venue":"MOCK FIX",
"msgType":"Cancel",
"ganttID":"Request :cancelClOrd14695812",
"reqMsgType":"Cancel",
"requestId":"cancelClOrd14695812",
"prevRequestId":"clOrd283224611",
"session":"123.45.67.89:01234:123.45.67.89:01234"
},
"hostname":"123.45.67.89",
"processId":"01234",
"location":"8211Location",
"subFlow":"rootContainer",
"sourceId":"ps-consumer",
"secondarySourceId":"MOCK FIX egress"
}
]
}

Interval

An interval event is purely a timing between two Agent Events. See below for a description of the JSON schema.

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"intervals": [
{
"startEventId": { // indicates where interval starts
"agentId": "", // ID of agent
"itemId": {
"flow": "", // Flow
"correlationId": "" // Correlation ID
}
},
"endEventId": { // indicates where interval ends
"agentId": "",
"itemId": {
"flow": "",
"correlationId": ""
}
},
"interval": "", // interval ID
"timestamp": "" //epoch nanosecond
}
]
}

Associations

An Association links two items together.  It is uniquely identified by a combination of:

  • Association ID
    The name of the association link: quoteToPriceAssociation for example

  • This Item ID
    The ID of the item at ‘this’ end of the association

  • Other item ID
    The ID of the item at the ‘other’ end of the association

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"associations": [
{
"associationId": "my association",
"thisItemId": {
"flow": "my flow A",
"correlationId": "cid1"
},
"otherItemId": {
"flow": "my flow B",
"correlationId": "cid2"
}
}
]
}

Alerts

Alerts are identified as follows:

  • Definition Id
    The definition ID for this category of alerts: “systemAlert-1” for example.

  • Label
    The human readable name of the alert: “System Alert” for example.

  • Id
    The unique ID of this alert instance.

  • Type
    The type of alert event.

  • Status
    An optional traffic-light indicator.

  • Timestamp
    When the alert was generated.

  • Message
    Describing what happened.

  • Properties
    Underlying properties about the alert.

  • Formatted Properties
    The above properties after formatting.

  • Group
    Optional alert group.

  • Config Type
    Optional configuration type.

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"alerts": [
{
"alertDefinitionId": "TestAggregatorAlertDefinition-1",
"label": "label",
"id": "alert-1620119524581000",
"status": "GREEN",
"timestamp": "1620118114061868600",
"message": "message12",
"properties": [
{
"New Status": "GREEN"
},
{
"p1 label": "val1"
}
],
"group": "a group",
"configType": "my alert type"
}
]
}

Timeseries

A Tick Summary is a time-series recording event of a 'double' value over a given period of time.  It is the summary of the recording of a number of physical ticks generated by an underlying source:

  • Stream ID
    The unique identity of the stream/source being recorded.

  • Timestamp
    The UTC time for the event.

  • Period
    The interval over which the recording was made in nanoseconds.

  • The following values are recorded during the period:

    • Tick Count
      The number of times the underlying source ticked.

    • Open
      The first value.

    • Close
      The last value.

    • High
      The highest value.

    • Low
      The lowest value.

    • Mean
      The mean of all values recorded during the period.

    • Time-weighted Average
      The time-weighted average of all values recorded during the period.

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"ticks": [
{
"streamId": "agg:myStreamId_val",
"timestamp": "1620119067125000000",
"period": "10000000000",
"tickCount": 5,
"openValue": 1.2,
"closeValue": 2.3,
"highValue": 5.5,
"lowValue": 0.4,
"meanValue": 4.3,
"timeWeightedAverage": 4.2
}
]
}

A Tick value is a time-series recording event of a specific value. This complements the Tick-Summary (above) by storing other values alongside ticking 'double' values.  The types of value currently supported are STRING and URL, but these may be extended at a later date:

  • Stream ID
    The unique identity of the stream/source being recorded.

  • Timestamp
    The UTC time for the event.

  • Period
    The interval over which the recording was made in nanoseconds.

  • Type
    The type of the value recorded: STRING or URL. 

  • String-Value
    The value held in a String.  Other types may be added in the future.

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"tickObjects": [
{
"streamId": "agg:myStreamId_val",
"timestamp": "1620119067125000000",
"period": "10000000000",
"stringValue": "A string"
}
]
}

Configuration

Configuration of the main data types being sent.  The configuration is sent every 60 seconds and can be used to map raw configuration Ids to labels and descriptions.  Please note that data may flow in advance of the configuration being sent.

  • timestamp
    The timestamp associated with the configuration, changing when any Velocimetrics configuration has changed. 

  • agent_configuration
    A list of agent ids, their flows and labels.

  • interval_configuration
    A list of interval ids, their agents and labels.

  • flow_configuration
    A list of flows ids and their labels.

  • association_configuration
    A list of associations ids, labels and links to flows and agents.

  • alert_configuration
    A list of alerts ids, their labels and descriptions.

  • timeseries_configuration
    A list of time-series source configurations.  Note that the details here are for the source of the time series than than for the time-series configuration used to capture as multiple time-series configurations can be used to capture the same source:

    • source_id
      This is the first part of the VmxTickSummary.stream_id when splitting the string using ':' as the separator.  For example: "myAggregator:a/b/c:a_column" → "myAggregator".

    • source_label
      The label for the source (usually aggregator name).

    • source_description
      The source description (usually aggregator description).

    • source_column
      A list of time-series columns:

      • value_id
        This is the column id portion of VmxTickSummary.stream_id when splitting the string ':' and taking the last part. For example: "myAggregator:a/b/c:a_column" → "a_column".

      • value_label
        The column label.

{
"version": 1, //Just a future-proofing mechanism. Always set this to 1.
"configuration": [
{
"timestamp": "1234000000",
"agentConfiguration": [
{
"agentId": "agentId2",
"agentLabel": "agentLabel2",
"flowId": "myFlow2"
},
{
"agentId": "agentId1",
"agentLabel": "agentLabel1",
"flowId": "myFlow1"
},
{
"agentId": "agentId3",
"agentLabel": "agentLabel3",
"flowId": "myFlow3"
}
],
"alertConfiguration": [
{
"alertDefinitionId": "alert2",
"alertLabel": "alertLabel2",
"alertDescription": "alertDesc2"
},
{
"alertDefinitionId": "alert1",
"alertLabel": "alertLabel1",
"alertDescription": "alertDesc1"
}
],
"associationConfiguration": [
{
"associationId": "assoc1",
"associationLabel": "assocLabel1",
"thisEndLabel": "assocThisEnd1",
"otherEndLabel": "assocOtherEnd1",
"thisEndFlowId": "myFlowLabel1",
"otherEndFlowId": "myFlowLabel2"
},
{
"associationId": "assoc2",
"associationLabel": "assocLabel2",
"thisEndLabel": "assocThisEnd2",
"otherEndLabel": "assocOtherEnd2",
"thisEndFlowId": "myFlowLabel2",
"otherEndFlowId": "myFlowLabel3"
}
],
"flowConfiguration": [
{
"flowId": "myFlow1",
"flowLabel": "myFlowLabel1"
},
{
"flowId": "myFlow2",
"flowLabel": "myFlowLabel2"
}
],
"intervalConfiguration": [
{
"startAgentId": "agentId1",
"endAgentId": "agentId2",
"intervalLabel": "interval1"
},
{
"startAgentId": "agentId2",
"endAgentId": "agentId3",
"intervalLabel": "interval2"
}
],
"timeseriesConfiguration": [
{
"sourceId": "agg2",
"sourceLabel": "myAgg2",
"sourceDescription": "aggDescription2",
"sourceColumn": [
{
"valueId": "col1",
"valueLabel": "colTitle2_1"
},
{
"valueId": "col3",
"valueLabel": "colTitle2_3"
}
]
},
{
"sourceId": "agg1",
"sourceLabel": "myAgg1",
"sourceDescription": "aggDescription1",
"sourceColumn": [
{
"valueId": "col1",
"valueLabel": "colTitle1"
},
{
"valueId": "col2",
"valueLabel": "colTitle2"
}
]
}
]
}
]
}

See Configuring CDF-I Topics in VMX-Analysis later in this document for the steps necessary to configure this topic name in the VMX-Analysis setup for CDF-I.

For more information about Agent Events, Intervals and Association see the Analytics Concepts Guide.