Output: CDF-I topics
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 exampleThis Item ID
The ID of the item at ‘this’ end of the associationOther 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.