logstash-filter-fix_protocol 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/CONTRIBUTING.md +34 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +13 -0
- data/QUICKFIX_LICENSE.txt +46 -0
- data/README.md +151 -0
- data/lib/logstash/filters/data_dictionary.rb +16 -0
- data/lib/logstash/filters/fix_message.rb +91 -0
- data/lib/logstash/filters/fix_protocol.rb +61 -0
- data/logstash-filter-fix_message_filter.gemspec +34 -0
- data/spec/filters/fix_message_spec.rb +212 -0
- data/spec/filters/fix_protocol_spec.rb +71 -0
- data/spec/fixtures/FIX42.xml +2670 -0
- data/spec/fixtures/FIX50SP1.xml +9419 -0
- data/spec/fixtures/FIXT11.xml +383 -0
- data/spec/fixtures/fix-input.log +11 -0
- data/spec/fixtures/message_types/execution_report.txt +6 -0
- data/spec/fixtures/message_types/heartbeat.txt +2 -0
- data/spec/fixtures/message_types/logon.txt +2 -0
- data/spec/fixtures/message_types/market_data_snapshot.txt +2 -0
- data/spec/fixtures/message_types/new_order_single.txt +4 -0
- data/spec/fixtures/message_types/order_cancel_request.txt +3 -0
- data/spec/fixtures/message_types/reject.txt +2 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/data_dictionary_helper.rb +45 -0
- data/spec/support/fix_configuration.rb +33 -0
- data/spec/support/fixture_helper.rb +10 -0
- data/spec/support/logstash_helper.rb +3 -0
- metadata +224 -0
@@ -0,0 +1,383 @@
|
|
1
|
+
<fix type="FIXT" major="1" minor="1">
|
2
|
+
<header>
|
3
|
+
<field name="BeginString" required="Y"/>
|
4
|
+
<field name="BodyLength" required="Y"/>
|
5
|
+
<field name="MsgType" required="Y"/>
|
6
|
+
<field name="ApplVerID" required="N"/>
|
7
|
+
<field name="ApplExtID" required="N"/>
|
8
|
+
<field name="CstmApplVerID" required="N"/>
|
9
|
+
<field name="SenderCompID" required="Y"/>
|
10
|
+
<field name="TargetCompID" required="Y"/>
|
11
|
+
<field name="OnBehalfOfCompID" required="N"/>
|
12
|
+
<field name="DeliverToCompID" required="N"/>
|
13
|
+
<field name="SecureDataLen" required="N"/>
|
14
|
+
<field name="SecureData" required="N"/>
|
15
|
+
<field name="MsgSeqNum" required="Y"/>
|
16
|
+
<field name="SenderSubID" required="N"/>
|
17
|
+
<field name="SenderLocationID" required="N"/>
|
18
|
+
<field name="TargetSubID" required="N"/>
|
19
|
+
<field name="TargetLocationID" required="N"/>
|
20
|
+
<field name="OnBehalfOfSubID" required="N"/>
|
21
|
+
<field name="OnBehalfOfLocationID" required="N"/>
|
22
|
+
<field name="DeliverToSubID" required="N"/>
|
23
|
+
<field name="DeliverToLocationID" required="N"/>
|
24
|
+
<field name="PossDupFlag" required="N"/>
|
25
|
+
<field name="PossResend" required="N"/>
|
26
|
+
<field name="SendingTime" required="Y"/>
|
27
|
+
<field name="OrigSendingTime" required="N"/>
|
28
|
+
<field name="XmlDataLen" required="N"/>
|
29
|
+
<field name="XmlData" required="N"/>
|
30
|
+
<field name="MessageEncoding" required="N"/>
|
31
|
+
<field name="LastMsgSeqNumProcessed" required="N"/>
|
32
|
+
<component name="HopGrp" required="N"/>
|
33
|
+
</header>
|
34
|
+
<trailer>
|
35
|
+
<field name="SignatureLength" required="N"/>
|
36
|
+
<field name="Signature" required="N"/>
|
37
|
+
<field name="CheckSum" required="Y"/>
|
38
|
+
</trailer>
|
39
|
+
<messages>
|
40
|
+
<message name="Heartbeat" msgtype="0" msgcat="admin">
|
41
|
+
<field name="TestReqID" required="N"/>
|
42
|
+
</message>
|
43
|
+
<message name="TestRequest" msgtype="1" msgcat="admin">
|
44
|
+
<field name="TestReqID" required="Y"/>
|
45
|
+
</message>
|
46
|
+
<message name="ResendRequest" msgtype="2" msgcat="admin">
|
47
|
+
<field name="BeginSeqNo" required="Y"/>
|
48
|
+
<field name="EndSeqNo" required="Y"/>
|
49
|
+
</message>
|
50
|
+
<message name="Reject" msgtype="3" msgcat="admin">
|
51
|
+
<field name="RefSeqNum" required="Y"/>
|
52
|
+
<field name="RefTagID" required="N"/>
|
53
|
+
<field name="RefMsgType" required="N"/>
|
54
|
+
<field name="RefApplVerID" required="N"/>
|
55
|
+
<field name="RefApplExtID" required="N"/>
|
56
|
+
<field name="RefCstmApplVerID" required="N"/>
|
57
|
+
<field name="SessionRejectReason" required="N"/>
|
58
|
+
<field name="Text" required="N"/>
|
59
|
+
<field name="EncodedTextLen" required="N"/>
|
60
|
+
<field name="EncodedText" required="N"/>
|
61
|
+
</message>
|
62
|
+
<message name="SequenceReset" msgtype="4" msgcat="admin">
|
63
|
+
<field name="GapFillFlag" required="N"/>
|
64
|
+
<field name="NewSeqNo" required="Y"/>
|
65
|
+
</message>
|
66
|
+
<message name="Logout" msgtype="5" msgcat="admin">
|
67
|
+
<field name="SessionStatus" required="N"/>
|
68
|
+
<field name="Text" required="N"/>
|
69
|
+
<field name="EncodedTextLen" required="N"/>
|
70
|
+
<field name="EncodedText" required="N"/>
|
71
|
+
</message>
|
72
|
+
<message name="Logon" msgtype="A" msgcat="admin">
|
73
|
+
<field name="EncryptMethod" required="Y"/>
|
74
|
+
<field name="HeartBtInt" required="Y"/>
|
75
|
+
<field name="RawDataLength" required="N"/>
|
76
|
+
<field name="RawData" required="N"/>
|
77
|
+
<field name="ResetSeqNumFlag" required="N"/>
|
78
|
+
<field name="NextExpectedMsgSeqNum" required="N"/>
|
79
|
+
<field name="MaxMessageSize" required="N"/>
|
80
|
+
<component name="MsgTypeGrp" required="N"/>
|
81
|
+
<field name="TestMessageIndicator" required="N"/>
|
82
|
+
<field name="Username" required="N"/>
|
83
|
+
<field name="Password" required="N"/>
|
84
|
+
<field name="NewPassword" required="N"/>
|
85
|
+
<field name="EncryptedPasswordMethod" required="N"/>
|
86
|
+
<field name="EncryptedPasswordLen" required="N"/>
|
87
|
+
<field name="EncryptedPassword" required="N"/>
|
88
|
+
<field name="EncryptedNewPasswordLen" required="N"/>
|
89
|
+
<field name="EncryptedNewPassword" required="N"/>
|
90
|
+
<field name="SessionStatus" required="N"/>
|
91
|
+
<field name="DefaultApplVerID" required="Y"/>
|
92
|
+
<field name="DefaultApplExtID" required="N"/>
|
93
|
+
<field name="DefaultCstmApplVerID" required="N"/>
|
94
|
+
<field name="Text" required="N"/>
|
95
|
+
<field name="EncodedTextLen" required="N"/>
|
96
|
+
<field name="EncodedText" required="N"/>
|
97
|
+
</message>
|
98
|
+
<!--
|
99
|
+
<message name="XMLnonFIX" msgtype="n" msgcat="admin">
|
100
|
+
</message>
|
101
|
+
-->
|
102
|
+
</messages>
|
103
|
+
<components>
|
104
|
+
<component name="HopGrp">
|
105
|
+
<group name="NoHops" required="N">
|
106
|
+
<field name="HopCompID" required="N"/>
|
107
|
+
<field name="HopSendingTime" required="N"/>
|
108
|
+
<field name="HopRefID" required="N"/>
|
109
|
+
</group>
|
110
|
+
</component>
|
111
|
+
<component name="MsgTypeGrp">
|
112
|
+
<group name="NoMsgTypes" required="N">
|
113
|
+
<field name="RefMsgType" required="N"/>
|
114
|
+
<field name="MsgDirection" required="N"/>
|
115
|
+
<field name="RefApplVerID" required="N"/>
|
116
|
+
<field name="RefApplExtID" required="N"/>
|
117
|
+
<field name="RefCstmApplVerID" required="N"/>
|
118
|
+
<field name="DefaultVerIndicator" required="N"/>
|
119
|
+
</group>
|
120
|
+
</component>
|
121
|
+
</components>
|
122
|
+
<fields>
|
123
|
+
<field number="7" name="BeginSeqNo" type="SEQNUM"/>
|
124
|
+
<field number="8" name="BeginString" type="STRING"/>
|
125
|
+
<field number="9" name="BodyLength" type="LENGTH"/>
|
126
|
+
<field number="10" name="CheckSum" type="STRING"/>
|
127
|
+
<field number="16" name="EndSeqNo" type="SEQNUM"/>
|
128
|
+
<field number="34" name="MsgSeqNum" type="SEQNUM"/>
|
129
|
+
<field number="35" name="MsgType" type="STRING">
|
130
|
+
<value enum="0" description="HEARTBEAT"/>
|
131
|
+
<value enum="1" description="TEST_REQUEST"/>
|
132
|
+
<value enum="2" description="RESEND_REQUEST"/>
|
133
|
+
<value enum="3" description="REJECT"/>
|
134
|
+
<value enum="4" description="SEQUENCE_RESET"/>
|
135
|
+
<value enum="5" description="LOGOUT"/>
|
136
|
+
<value enum="6" description="INDICATION_OF_INTEREST"/>
|
137
|
+
<value enum="7" description="ADVERTISEMENT"/>
|
138
|
+
<value enum="8" description="EXECUTION_REPORT"/>
|
139
|
+
<value enum="9" description="ORDER_CANCEL_REJECT"/>
|
140
|
+
<value enum="A" description="LOGON"/>
|
141
|
+
<value enum="B" description="NEWS"/>
|
142
|
+
<value enum="C" description="EMAIL"/>
|
143
|
+
<value enum="D" description="ORDER_SINGLE"/>
|
144
|
+
<value enum="E" description="ORDER_LIST"/>
|
145
|
+
<value enum="F" description="ORDER_CANCEL_REQUEST"/>
|
146
|
+
<value enum="G" description="ORDER_CANCEL_REPLACE_REQUEST"/>
|
147
|
+
<value enum="H" description="ORDER_STATUS_REQUEST"/>
|
148
|
+
<value enum="J" description="ALLOCATION_INSTRUCTION"/>
|
149
|
+
<value enum="K" description="LIST_CANCEL_REQUEST"/>
|
150
|
+
<value enum="L" description="LIST_EXECUTE"/>
|
151
|
+
<value enum="M" description="LIST_STATUS_REQUEST"/>
|
152
|
+
<value enum="N" description="LIST_STATUS"/>
|
153
|
+
<value enum="P" description="ALLOCATION_INSTRUCTION_ACK"/>
|
154
|
+
<value enum="Q" description="DONT_KNOW_TRADE"/>
|
155
|
+
<value enum="R" description="QUOTE_REQUEST"/>
|
156
|
+
<value enum="S" description="QUOTE"/>
|
157
|
+
<value enum="T" description="SETTLEMENT_INSTRUCTIONS"/>
|
158
|
+
<value enum="V" description="MARKET_DATA_REQUEST"/>
|
159
|
+
<value enum="W" description="MARKET_DATA_SNAPSHOT_FULL_REFRESH"/>
|
160
|
+
<value enum="X" description="MARKET_DATA_INCREMENTAL_REFRESH"/>
|
161
|
+
<value enum="Y" description="MARKET_DATA_REQUEST_REJECT"/>
|
162
|
+
<value enum="Z" description="QUOTE_CANCEL"/>
|
163
|
+
<value enum="a" description="QUOTE_STATUS_REQUEST"/>
|
164
|
+
<value enum="b" description="MASS_QUOTE_ACKNOWLEDGEMENT"/>
|
165
|
+
<value enum="c" description="SECURITY_DEFINITION_REQUEST"/>
|
166
|
+
<value enum="d" description="SECURITY_DEFINITION"/>
|
167
|
+
<value enum="e" description="SECURITY_STATUS_REQUEST"/>
|
168
|
+
<value enum="f" description="SECURITY_STATUS"/>
|
169
|
+
<value enum="g" description="TRADING_SESSION_STATUS_REQUEST"/>
|
170
|
+
<value enum="h" description="TRADING_SESSION_STATUS"/>
|
171
|
+
<value enum="i" description="MASS_QUOTE"/>
|
172
|
+
<value enum="j" description="BUSINESS_MESSAGE_REJECT"/>
|
173
|
+
<value enum="k" description="BID_REQUEST"/>
|
174
|
+
<value enum="l" description="BID_RESPONSE"/>
|
175
|
+
<value enum="m" description="LIST_STRIKE_PRICE"/>
|
176
|
+
<value enum="n" description="XML_MESSAGE"/>
|
177
|
+
<value enum="o" description="REGISTRATION_INSTRUCTIONS"/>
|
178
|
+
<value enum="p" description="REGISTRATION_INSTRUCTIONS_RESPONSE"/>
|
179
|
+
<value enum="q" description="ORDER_MASS_CANCEL_REQUEST"/>
|
180
|
+
<value enum="r" description="ORDER_MASS_CANCEL_REPORT"/>
|
181
|
+
<value enum="s" description="NEW_ORDER_CROSS"/>
|
182
|
+
<value enum="t" description="CROSS_ORDER_CANCEL_REPLACE_REQUEST"/>
|
183
|
+
<value enum="u" description="CROSS_ORDER_CANCEL_REQUEST"/>
|
184
|
+
<value enum="v" description="SECURITY_TYPE_REQUEST"/>
|
185
|
+
<value enum="w" description="SECURITY_TYPES"/>
|
186
|
+
<value enum="x" description="SECURITY_LIST_REQUEST"/>
|
187
|
+
<value enum="y" description="SECURITY_LIST"/>
|
188
|
+
<value enum="z" description="DERIVATIVE_SECURITY_LIST_REQUEST"/>
|
189
|
+
<value enum="AA" description="DERIVATIVE_SECURITY_LIST"/>
|
190
|
+
<value enum="AB" description="NEW_ORDER_MULTILEG"/>
|
191
|
+
<value enum="AC" description="MULTILEG_ORDER_CANCEL_REPLACE"/>
|
192
|
+
<value enum="AD" description="TRADE_CAPTURE_REPORT_REQUEST"/>
|
193
|
+
<value enum="AE" description="TRADE_CAPTURE_REPORT"/>
|
194
|
+
<value enum="AF" description="ORDER_MASS_STATUS_REQUEST"/>
|
195
|
+
<value enum="AG" description="QUOTE_REQUEST_REJECT"/>
|
196
|
+
<value enum="AH" description="RFQ_REQUEST"/>
|
197
|
+
<value enum="AI" description="QUOTE_STATUS_REPORT"/>
|
198
|
+
<value enum="AJ" description="QUOTE_RESPONSE"/>
|
199
|
+
<value enum="AK" description="CONFIRMATION"/>
|
200
|
+
<value enum="AL" description="POSITION_MAINTENANCE_REQUEST"/>
|
201
|
+
<value enum="AM" description="POSITION_MAINTENANCE_REPORT"/>
|
202
|
+
<value enum="AN" description="REQUEST_FOR_POSITIONS"/>
|
203
|
+
<value enum="AO" description="REQUEST_FOR_POSITIONS_ACK"/>
|
204
|
+
<value enum="AP" description="POSITION_REPORT"/>
|
205
|
+
<value enum="AQ" description="TRADE_CAPTURE_REPORT_REQUEST_ACK"/>
|
206
|
+
<value enum="AR" description="TRADE_CAPTURE_REPORT_ACK"/>
|
207
|
+
<value enum="AS" description="ALLOCATION_REPORT"/>
|
208
|
+
<value enum="AT" description="ALLOCATION_REPORT_ACK"/>
|
209
|
+
<value enum="AU" description="CONFIRMATION_ACK"/>
|
210
|
+
<value enum="AV" description="SETTLEMENT_INSTRUCTION_REQUEST"/>
|
211
|
+
<value enum="AW" description="ASSIGNMENT_REPORT"/>
|
212
|
+
<value enum="AX" description="COLLATERAL_REQUEST"/>
|
213
|
+
<value enum="AY" description="COLLATERAL_ASSIGNMENT"/>
|
214
|
+
<value enum="AZ" description="COLLATERAL_RESPONSE"/>
|
215
|
+
<value enum="CA" description="ORDER_MASS_ACTION_REQUEST"/>
|
216
|
+
<value enum="CB" description="USER_NOTIFICATION"/>
|
217
|
+
<value enum="CC" description="STREAM_ASSIGNMENT_REQUEST"/>
|
218
|
+
<value enum="CD" description="STREAM_ASSIGNMENT_REPORT"/>
|
219
|
+
<value enum="CE" description="STREAM_ASSIGNMENT_REPORT_ACK"/>
|
220
|
+
<value enum="BA" description="COLLATERAL_REPORT"/>
|
221
|
+
<value enum="BB" description="COLLATERAL_INQUIRY"/>
|
222
|
+
<value enum="BC" description="NETWORK_STATUS_REQUEST"/>
|
223
|
+
<value enum="BD" description="NETWORK_STATUS_RESPONSE"/>
|
224
|
+
<value enum="BE" description="USER_REQUEST"/>
|
225
|
+
<value enum="BF" description="USER_RESPONSE"/>
|
226
|
+
<value enum="BG" description="COLLATERAL_INQUIRY_ACK"/>
|
227
|
+
<value enum="BH" description="CONFIRMATION_REQUEST"/>
|
228
|
+
<value enum="BI" description="TRADING_SESSION_LIST_REQUEST"/>
|
229
|
+
<value enum="BJ" description="TRADING_SESSION_LIST"/>
|
230
|
+
<value enum="BK" description="SECURITY_LIST_UPDATE_REPORT"/>
|
231
|
+
<value enum="BL" description="ADJUSTED_POSITION_REPORT"/>
|
232
|
+
<value enum="BM" description="ALLOCATION_INSTRUCTION_ALERT"/>
|
233
|
+
<value enum="BN" description="EXECUTION_ACKNOWLEDGEMENT"/>
|
234
|
+
<value enum="BO" description="CONTRARY_INTENTION_REPORT"/>
|
235
|
+
<value enum="BP" description="SECURITY_DEFINITION_UPDATE_REPORT"/>
|
236
|
+
<value enum="BQ" description="SETTLEMENT_OBLIGATION_REPORT"/>
|
237
|
+
<value enum="BR" description="DERIVATIVE_SECURITY_LIST_UPDATE_REPORT"/>
|
238
|
+
<value enum="BS" description="TRADING_SESSION_LIST_UPDATER_EPORT"/>
|
239
|
+
<value enum="BT" description="MARKET_DEFINITION_REQUEST"/>
|
240
|
+
<value enum="BU" description="MARKET_DEFINITION"/>
|
241
|
+
<value enum="BV" description="MARKET_DEFINITION_UPDATE_REPORT"/>
|
242
|
+
<value enum="BW" description="APPLICATION_MESSAGE_REQUEST"/>
|
243
|
+
<value enum="BX" description="APPLICATION_MESSAGE_REQUEST_ACK"/>
|
244
|
+
<value enum="BY" description="APPLICATION_MESSAGE_REPORT"/>
|
245
|
+
<value enum="BZ" description="ORDER_MASS_ACTION_REPORT"/>
|
246
|
+
</field>
|
247
|
+
<field number="36" name="NewSeqNo" type="SEQNUM"/>
|
248
|
+
<field number="43" name="PossDupFlag" type="BOOLEAN">
|
249
|
+
<value enum="N" description="ORIGINAL_TRANSMISSION"/>
|
250
|
+
<value enum="Y" description="POSSIBLE_DUPLICATE"/>
|
251
|
+
</field>
|
252
|
+
<field number="45" name="RefSeqNum" type="SEQNUM"/>
|
253
|
+
<field number="49" name="SenderCompID" type="STRING"/>
|
254
|
+
<field number="50" name="SenderSubID" type="STRING"/>
|
255
|
+
<field number="52" name="SendingTime" type="UTCTIMESTAMP"/>
|
256
|
+
<field number="56" name="TargetCompID" type="STRING"/>
|
257
|
+
<field number="57" name="TargetSubID" type="STRING"/>
|
258
|
+
<field number="58" name="Text" type="STRING"/>
|
259
|
+
<field number="89" name="Signature" type="DATA"/>
|
260
|
+
<field number="90" name="SecureDataLen" type="LENGTH"/>
|
261
|
+
<field number="91" name="SecureData" type="DATA"/>
|
262
|
+
<field number="93" name="SignatureLength" type="LENGTH"/>
|
263
|
+
<field number="95" name="RawDataLength" type="LENGTH"/>
|
264
|
+
<field number="96" name="RawData" type="DATA"/>
|
265
|
+
<field number="97" name="PossResend" type="BOOLEAN">
|
266
|
+
<value enum="N" description="ORIGINAL_TRANSMISSION"/>
|
267
|
+
<value enum="Y" description="POSSIBLE_RESEND"/>
|
268
|
+
</field>
|
269
|
+
<field number="98" name="EncryptMethod" type="INT">
|
270
|
+
<value enum="0" description="NONE_OTHER"/>
|
271
|
+
<value enum="1" description="PKCS"/>
|
272
|
+
<value enum="2" description="DES"/>
|
273
|
+
<value enum="3" description="PKCS_DES"/>
|
274
|
+
<value enum="4" description="PGP_DES"/>
|
275
|
+
<value enum="5" description="PGP_DES_MD5"/>
|
276
|
+
<value enum="6" description="PEM_DES_MD5"/>
|
277
|
+
</field>
|
278
|
+
<field number="108" name="HeartBtInt" type="INT"/>
|
279
|
+
<field number="112" name="TestReqID" type="STRING"/>
|
280
|
+
<field number="115" name="OnBehalfOfCompID" type="STRING"/>
|
281
|
+
<field number="116" name="OnBehalfOfSubID" type="STRING"/>
|
282
|
+
<field number="122" name="OrigSendingTime" type="UTCTIMESTAMP"/>
|
283
|
+
<field number="123" name="GapFillFlag" type="BOOLEAN">
|
284
|
+
<value enum="N" description="SEQUENCE_RESET_IGNORE_MSG_SEQ_NUM"/>
|
285
|
+
<value enum="Y" description="GAP_FILL_MESSAGE_MSG_SEQ_NUM_FIELD_VALID"/>
|
286
|
+
</field>
|
287
|
+
<field number="128" name="DeliverToCompID" type="STRING"/>
|
288
|
+
<field number="129" name="DeliverToSubID" type="STRING"/>
|
289
|
+
<field number="141" name="ResetSeqNumFlag" type="BOOLEAN">
|
290
|
+
<value enum="N" description="NO"/>
|
291
|
+
<value enum="Y" description="YES_RESET_SEQUENCE_NUMBERS"/>
|
292
|
+
</field>
|
293
|
+
<field number="142" name="SenderLocationID" type="STRING"/>
|
294
|
+
<field number="143" name="TargetLocationID" type="STRING"/>
|
295
|
+
<field number="144" name="OnBehalfOfLocationID" type="STRING"/>
|
296
|
+
<field number="145" name="DeliverToLocationID" type="STRING"/>
|
297
|
+
<field number="212" name="XmlDataLen" type="LENGTH"/>
|
298
|
+
<field number="213" name="XmlData" type="DATA"/>
|
299
|
+
<field number="347" name="MessageEncoding" type="STRING"/>
|
300
|
+
<field number="354" name="EncodedTextLen" type="LENGTH"/>
|
301
|
+
<field number="355" name="EncodedText" type="DATA"/>
|
302
|
+
<field number="369" name="LastMsgSeqNumProcessed" type="SEQNUM"/>
|
303
|
+
<field number="371" name="RefTagID" type="INT"/>
|
304
|
+
<field number="372" name="RefMsgType" type="STRING"/>
|
305
|
+
<field number="373" name="SessionRejectReason" type="INT">
|
306
|
+
<value enum="0" description="INVALID_TAG_NUMBER"/>
|
307
|
+
<value enum="1" description="REQUIRED_TAG_MISSING"/>
|
308
|
+
<value enum="2" description="TAG_NOT_DEFINED_FOR_THIS_MESSAGE_TYPE"/>
|
309
|
+
<value enum="3" description="UNDEFINED_TAG"/>
|
310
|
+
<value enum="4" description="TAG_SPECIFIED_WITHOUT_A_VALUE"/>
|
311
|
+
<value enum="5" description="VALUE_IS_INCORRECT"/>
|
312
|
+
<value enum="6" description="INCORRECT_DATA_FORMAT_FOR_VALUE"/>
|
313
|
+
<value enum="7" description="DECRYPTION_PROBLEM"/>
|
314
|
+
<value enum="8" description="SIGNATURE_PROBLEM"/>
|
315
|
+
<value enum="9" description="COMPID_PROBLEM"/>
|
316
|
+
<value enum="10" description="SENDINGTIME_ACCURACY_PROBLEM"/>
|
317
|
+
<value enum="11" description="INVALID_MSGTYPE"/>
|
318
|
+
<value enum="12" description="XML_VALIDATION_ERROR"/>
|
319
|
+
<value enum="13" description="TAG_APPEARS_MORE_THAN_ONCE"/>
|
320
|
+
<value enum="14" description="TAG_SPECIFIED_OUT_OF_REQUIRED_ORDER"/>
|
321
|
+
<value enum="15" description="REPEATING_GROUP_FIELDS_OUT_OF_ORDER"/>
|
322
|
+
<value enum="16" description="INCORRECT_NUMINGROUP_COUNT_FOR_REPEATING_GROUP"/>
|
323
|
+
<value enum="17" description="NON_DATA_VALUE_INCLUDES_FIELD_DELIMITER"/>
|
324
|
+
<value enum="18" description="INVALID_UNSUPPORTED_APPLICATION_VERSION"/>
|
325
|
+
<value enum="99" description="OTHER"/>
|
326
|
+
</field>
|
327
|
+
<field number="383" name="MaxMessageSize" type="LENGTH"/>
|
328
|
+
<field number="384" name="NoMsgTypes" type="NUMINGROUP"/>
|
329
|
+
<field number="385" name="MsgDirection" type="CHAR">
|
330
|
+
<value enum="R" description="RECEIVE"/>
|
331
|
+
<value enum="S" description="SEND"/>
|
332
|
+
</field>
|
333
|
+
<field number="464" name="TestMessageIndicator" type="BOOLEAN">
|
334
|
+
<value enum="N" description="FALES"/>
|
335
|
+
<value enum="Y" description="TRUE"/>
|
336
|
+
</field>
|
337
|
+
<field number="553" name="Username" type="STRING"/>
|
338
|
+
<field number="554" name="Password" type="STRING"/>
|
339
|
+
<field number="627" name="NoHops" type="NUMINGROUP"/>
|
340
|
+
<field number="628" name="HopCompID" type="STRING"/>
|
341
|
+
<field number="629" name="HopSendingTime" type="UTCTIMESTAMP"/>
|
342
|
+
<field number="630" name="HopRefID" type="SEQNUM"/>
|
343
|
+
<field number="789" name="NextExpectedMsgSeqNum" type="SEQNUM"/>
|
344
|
+
<field number="925" name="NewPassword" type="STRING"/>
|
345
|
+
<field number="1128" name="ApplVerID" type="STRING">
|
346
|
+
<value enum="0" description="FIX27"/>
|
347
|
+
<value enum="1" description="FIX30"/>
|
348
|
+
<value enum="2" description="FIX40"/>
|
349
|
+
<value enum="3" description="FIX41"/>
|
350
|
+
<value enum="4" description="FIX42"/>
|
351
|
+
<value enum="5" description="FIX43"/>
|
352
|
+
<value enum="6" description="FIX44"/>
|
353
|
+
<value enum="7" description="FIX50"/>
|
354
|
+
<value enum="8" description="FIX50SP1"/>
|
355
|
+
<value enum="9" description="FIX50SP2"/>
|
356
|
+
</field>
|
357
|
+
<field number="1129" name="CstmApplVerID" type="STRING"/>
|
358
|
+
<field number="1130" name="RefApplVerID" type="STRING"/>
|
359
|
+
<field number="1131" name="RefCstmApplVerID" type="STRING"/>
|
360
|
+
<field number="1137" name="DefaultApplVerID" type="STRING"/>
|
361
|
+
<field number="1156" name="ApplExtID" type="INT"/>
|
362
|
+
<field number="1400" name="EncryptedPasswordMethod" type="INT"/>
|
363
|
+
<field number="1401" name="EncryptedPasswordLen" type="LENGTH"/>
|
364
|
+
<field number="1402" name="EncryptedPassword" type="DATA"/>
|
365
|
+
<field number="1403" name="EncryptedNewPasswordLen" type="LENGTH"/>
|
366
|
+
<field number="1404" name="EncryptedNewPassword" type="DATA"/>
|
367
|
+
<field number="1406" name="RefApplExtID" type="INT"/>
|
368
|
+
<field number="1407" name="DefaultApplExtID" type="INT"/>
|
369
|
+
<field number="1408" name="DefaultCstmApplVerID" type="STRING"/>
|
370
|
+
<field number="1409" name="SessionStatus" type="INT">
|
371
|
+
<value enum="0" description="SESSION_ACTIVE"/>
|
372
|
+
<value enum="1" description="SESSION_PASSWORD_CHANGED"/>
|
373
|
+
<value enum="2" description="SESSION_PASSWORD_DUE_TO_EXPIRE"/>
|
374
|
+
<value enum="3" description="NEW_SESSION_PASSWORD_DOES_NOT_COMPLY_WITH_POLICY"/>
|
375
|
+
<value enum="4" description="SESSION_LOGOUT_COMPLETE"/>
|
376
|
+
<value enum="5" description="INVALID_USERNAME_OR_PASSWORD"/>
|
377
|
+
<value enum="6" description="ACCOUNT_LOCKED"/>
|
378
|
+
<value enum="7" description="LOGONS_ARE_NOT_ALLOWED_AT_THIS_TIME"/>
|
379
|
+
<value enum="8" description="PASSWORD_EXPIRED"/>
|
380
|
+
</field>
|
381
|
+
<field number="1410" name="DefaultVerIndicator" type="BOOLEAN"/>
|
382
|
+
</fields>
|
383
|
+
</fix>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
2015-08-31 17:48:20,890 FIXT.1.1:DUMMY_INC->ANOTHER_INC: 8=FIXT.1.19=14035=W34=249=DUMMY_INC52=20150831-17:48:20.89056=ANOTHER_INC22=9948=.AQUA-W262=golden_path_test268=1269=3270=640754272=20150831273=17:48:20.88210=070
|
2
|
+
2015-08-26 23:10:17,748 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=24035=834=649=DUMMY_INC52=20150826-23:10:17.74456=ANOTHER_INC57=Firm_B1=Inst_B6=011=best_buy14=517=ITRZ1201508261_2420=022=831=101032=537=ITRZ1201508261_1238=539=240=241=best_buy44=101154=155=ITRZ160=20150826-23:10:15.547150=2151=010=227
|
3
|
+
2015-08-31 20:48:26,536 FIXT.1.1:DUMMY_INC->ANOTHER_INC: 8=FIXT.1.19=18935=W34=549=DUMMY_INC52=20150831-20:48:26.53556=ANOTHER_INC22=9948=ITRZ21262=req_A268=2269=0270=0.01005271=10272=20150831273=20:48:26.514269=1270=0.0101271=2272=20150831273=20:48:26.51410=123
|
4
|
+
2015-08-26 23:08:38,096 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=18435=F34=249=ANOTHER_INC50=DefaultSenderSubID52=20150826-23:08:38.09456=DUMMY_INC1=DefaultAccount11=clordid_of_cancel41=part_fill_test_buy54=155=ITER60=20250407-13:14:15167=FUT200=20151210=147
|
5
|
+
2015-08-26 23:03:21,150 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=17335=D34=249=ANOTHER_INC50=683352=20150826-23:03:21.14656=DUMMY_INC1=kkozel11=1505123021=122=838=240=244=2271054=155=DUMMY_INC59=160=20250407-13:14:15100=XDMI167=FUT200=20150610=138
|
6
|
+
2015-08-26 23:03:21,150 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=17335=D34=249=ANOTHER_INC50=683352=20150826-23:03:21.14656=DUMMY_INC1=kkozel11=15101256921=122=838=240=244=2271054=155=DUMMY_INC59=160=20250407-13:14:15100=XDMI167=FUT200=20150610=138
|
7
|
+
2015-08-26 23:10:17,748 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=24035=834=649=DUMMY_INC52=20150826-23:10:17.74456=ANOTHER_INC57=Firm_B1=Inst_B6=011=15101256917=ITRZ1201508261_2420=022=831=101032=537=ITRZ1201508261_1238=539=240=241=best_buy44=101154=155=ITRZ160=20150826-23:10:15.547150=2151=010=227
|
8
|
+
2015-08-26 23:08:38,096 FIX.4.2:DUMMY_INC->ANOTHER_INC: 8=FIX.4.29=18435=F34=249=ANOTHER_INC50=DefaultSenderSubID52=20150826-23:08:38.09456=DUMMY_INC1=DefaultAccount11=clordid_of_cancel41=15101256954=155=ITER60=20250407-13:14:15167=FUT200=20151210=147
|
9
|
+
2015-08-31 17:48:20,890 FIXT.1.1:DUMMY_INC->ANOTHER_INC: 8=FIXT.1.19=14035=W34=249=DUMMY_INC52=20150831-17:48:20.89056=ANOTHER_INC22=9948=.AQUA-W262=golden_path_test268=1269=3270=640754272=20150831273=17:48:20.88210=070
|
10
|
+
2015-08-31 20:48:26,536 FIXT.1.1:DUMMY_INC->ANOTHER_INC: 8=FIXT.1.19=18935=W34=549=DUMMY_INC52=20150831-20:48:26.53556=ANOTHER_INC22=9948=ITRZ21262=req_A268=2269=0270=0.01005271=10272=20150831273=20:48:26.514269=1270=0.0101271=2272=20150831273=20:48:26.51410=123
|
11
|
+
|
@@ -0,0 +1,6 @@
|
|
1
|
+
8=FIX.4.19=13935=834=349=EXEC52=20121105-23:24:4256=BANZAI6=011=135215788257714=017=120=031=032=037=138=1000039=054=155=MSFT150=2151=010=059
|
2
|
+
8=FIX.4.19=15335=834=449=EXEC52=20121105-23:24:4256=BANZAI6=12.311=135215788257714=1000017=220=031=12.332=1000037=238=1000039=254=155=MSFT150=2151=010=230
|
3
|
+
8=FIX.4.19=13935=834=549=EXEC52=20121105-23:24:5556=BANZAI6=011=135215789503214=017=320=031=032=037=338=1000039=054=155=ORCL150=2151=010=049
|
4
|
+
8=FIX.4.19=15335=834=649=EXEC52=20121105-23:24:5556=BANZAI6=12.311=135215789503214=1000017=420=031=12.332=1000037=438=1000039=254=155=ORCL150=2151=010=220
|
5
|
+
8=FIX.4.19=13835=834=749=EXEC52=20121105-23:25:1256=BANZAI6=011=135215791235714=017=520=031=032=037=538=1000039=054=155=SPY150=2151=010=252
|
6
|
+
8=FIX.4.29=24035=834=649=DUMMY_INC52=20150826-23:10:17.74456=ANOTHER_INC57=Firm_B1=Inst_B6=011=best_buy14=517=ITRZ1201508261_2420=022=831=101032=537=ITRZ1201508261_1238=539=240=241=best_buy44=101154=155=ITRZ160=20150826-23:10:15.547150=2151=010=227
|
@@ -0,0 +1,2 @@
|
|
1
|
+
8=FIXT.1.19=18935=W34=549=DUMMY_INC52=20150831-20:48:26.53556=ANOTHER_INC22=9948=ITRZ21262=req_A268=2269=0270=0.01005271=10272=20150831273=20:48:26.514269=1270=0.0101271=2272=20150831273=20:48:26.51410=123
|
2
|
+
8=FIXT.1.19=14035=W34=249=DUMMY_INC52=20150831-17:48:20.89056=ANOTHER_INC22=9948=.AQUA-W262=golden_path_test268=1269=3270=640754272=20150831273=17:48:20.88210=070
|
@@ -0,0 +1,4 @@
|
|
1
|
+
8=FIX.4.19=10335=D34=349=BANZAI52=20121105-23:24:4256=EXEC11=135215788257721=138=1000040=154=155=MSFT59=010=062
|
2
|
+
8=FIX.4.19=10335=D34=449=BANZAI52=20121105-23:24:5556=EXEC11=135215789503221=138=1000040=154=155=ORCL59=010=047
|
3
|
+
8=FIX.4.19=10835=D34=549=BANZAI52=20121105-23:25:1256=EXEC11=135215791235721=138=1000040=244=1054=155=SPY59=010=003
|
4
|
+
8=FIX.4.29=17335=D34=249=ANOTHER_INC50=683352=20150826-23:03:21.14656=DUMMY_INC1=kkozel11=1505123021=122=838=240=244=2271054=155=DUMMY_INC59=160=20250407-13:14:15100=XDMI167=FUT200=20150610=138
|
@@ -0,0 +1,3 @@
|
|
1
|
+
8=FIX.4.19=10435=F34=649=BANZAI52=20121105-23:25:1656=EXEC11=135215791643738=1000041=135215791235754=155=SPY10=198
|
2
|
+
8=FIX.4.19=10435=F34=749=BANZAI52=20121105-23:25:2556=EXEC11=135215792530938=1000041=135215791235754=155=SPY10=197
|
3
|
+
8=FIX.4.29=18435=F34=249=ANOTHER_INC50=DefaultSenderSubID52=20150826-23:08:3809456=DUMMY_INC1=DefaultAccount11=clordid_of_cancel41=part_fill_test_buy54=155=ITER60=20250407-13:14:15167=FUT200=20151210=147
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
require 'pry'
|
3
|
+
|
4
|
+
Dir[("#{Dir.pwd}/spec/support/**/*.rb")].each { |f| require f }
|
5
|
+
|
6
|
+
# Base config
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.filter_run :focus
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
|
11
|
+
config.order = :random
|
12
|
+
end
|
13
|
+
|
14
|
+
LF = LogStash::Filters
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'logstash/filters/data_dictionary'
|
2
|
+
|
3
|
+
require 'rexml/document'
|
4
|
+
|
5
|
+
module LogStash
|
6
|
+
module Filters
|
7
|
+
class DataDictionary < quickfix.DataDictionary
|
8
|
+
|
9
|
+
# These are just helpers to visualize data dictionary as ruby hash
|
10
|
+
def get_reverse_value_name(tag, name)
|
11
|
+
if @reverse_lookup[tag].has_key?(name)
|
12
|
+
@reverse_lookup[tag][name]
|
13
|
+
else
|
14
|
+
name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def reverse_lookup
|
19
|
+
@reverse_lookup ||= parse_xml
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def parse_xml
|
25
|
+
lookup = {}
|
26
|
+
|
27
|
+
doc = ::REXML::Document.new(@file)
|
28
|
+
|
29
|
+
doc.elements.each("fix/fields/field") do |f|
|
30
|
+
tag = f.attributes['number'].to_i
|
31
|
+
lookup[tag] ||= {}
|
32
|
+
|
33
|
+
f.elements.each("value") do |v|
|
34
|
+
lookup[ tag ][v.attributes['description']] = v.attributes['enum']
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#also map pretty msg type names
|
39
|
+
doc.elements.each("fix/messages/message") do |m|
|
40
|
+
lookup[35][m.attributes['name']] = m.attributes['msgtype']
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'fixture_helper'
|
2
|
+
|
3
|
+
module FixConfiguration
|
4
|
+
include FixtureHelper
|
5
|
+
|
6
|
+
def fix_5_configuration
|
7
|
+
<<-CONFIG
|
8
|
+
filter {
|
9
|
+
fix_protocol {
|
10
|
+
message => fix_message
|
11
|
+
session_dictionary_path => "#{ load_fixture("FIXT11.xml") }"
|
12
|
+
data_dictionary_path => "#{ load_fixture("FIX50SP1.xml") }"
|
13
|
+
}
|
14
|
+
}
|
15
|
+
CONFIG
|
16
|
+
end
|
17
|
+
|
18
|
+
def fix_4_configuration
|
19
|
+
<<-CONFIG
|
20
|
+
filter {
|
21
|
+
fix_protocol {
|
22
|
+
message => fix_message
|
23
|
+
data_dictionary_path => "#{ load_fixture("FIX42.xml") }"
|
24
|
+
}
|
25
|
+
}
|
26
|
+
CONFIG
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
RSpec.configure do |config|
|
31
|
+
config.include FixConfiguration
|
32
|
+
config.extend FixConfiguration
|
33
|
+
end
|