Compare commits

...
8 Commits
19 changed files with 109 additions and 71 deletions

No files matched your search

+1
View File
@@ -263,6 +263,7 @@ message CMEUserData{
map<string, string> misc_tags = 60;
string smp_instruction = 70;
string max_order_rate_per_connection = 80;
string location = 90;
}
message CMEUserMarketDataEntitlementData{
-2
View File
@@ -71,8 +71,6 @@ message JetFIX {
optional bool log_fix_stream = 260 [default=false];
optional bool use_persisted_quote_ids = 270 [default=true];
optional uint32 quote_id_reservation_size = 290 [default=100000];
optional uint32 poll_period_ms = 300 [default=100];
optional bool use_dedicated_core = 310 [default=false];
optional uint32 cme_market_segment_id = 320 [default=0];
optional string trading_session_id = 330 [default=""];
+1 -1
View File
@@ -1 +1 @@
set(sources cmds/AutoCert.cpp;cmds/Benchmark.cpp;cmds/CmdRegistry.cpp;cmds/ConfigCheck.cpp;cmds/Help.cpp;cmds/Md.cpp;cmds/QuickTest.cpp;cmds/Run.cpp;cmds/RunSim.cpp;cmds/Span.cpp;cmds/Test.cpp;cmds/TestCeloxica.cpp;dspark/mirage.cpp;dspark/mirage/routing/Router.cpp;exchange_sim/ExchangeSim.cpp;exchange_sim/ExchangeSimApplication.cpp;exchange_sim/book/Book.cpp;exchange_sim/book/ExchangeSim.proto;exchange_sim/book/Order.cpp;exchange_sim/book/OrderMatcher.cpp;exchange_sim/book/book_transform.cpp;exchange_sim/tests/test_book_transform.cpp;http/ApiGateway.cpp;http/WebServer.cpp;jetfix/codec/FIXArray.cpp;jetfix/common/OutFIX.cpp;jetfix/connection/AsyncReader.cpp;jetfix/connection/IConnection.cpp;jetfix/connection/SocketConnection.cpp;jetfix/gateway/CoreGateway.cpp;jetfix/gateway/JetFIXGateway.cpp;jetfix/gateway/Session.cpp;jetfix/store/FIXFileStore.cpp;jetfix/store/session_name.cpp;jetfix/tests/async_reader_tests.cpp;jetfix/tests/decoding_tests.cpp;jetfix/tests/fix_encoding_stream_tests.cpp;jetfix/tests/fix_fragment_tests.cpp;jetfix/tests/jetfix_performance_tests.cpp;jetfix/tests/sample_fix.cpp;jetfix/tests/store_tests.cpp;main.cpp;md/platforms/celoxica/CXListener.cpp;md/platforms/celoxica/CXMain.cpp;md/platforms/celoxica/tests/cx_tests.cpp;md/platforms/mdp3_onixs/MDP3Listener.cpp;md/platforms/mdp3_onixs/MDP3Main.cpp;md/platforms/mdp3_onixs/MDP3Utils.cpp;md/platforms/mdp3_onixs/tests/mdp3_tests.cpp;md/run_md.cpp;mercury/actors/Actor.cpp;mercury/broker/AsyncEventBroker.cpp;mercury/broker/CoreEventBroker.cpp;mercury/broker/IEventBroker.cpp;mercury/events/TimerEvent.cpp;mercury/mercury_utils/Executor.cpp;mercury/mercury_utils/IPollableActor.cpp;mercury/mercury_utils/mercury_common.cpp;mercury/synopsis/SynopsisBuilder.cpp;mercury/topics/ITopic.cpp;orderman/actors/AsyncFactory.cpp;orderman/actors/ExecutionGateway.cpp;orderman/actors/FillStore.cpp;orderman/actors/OrderStore.cpp;orderman/actors/SecuritySrc.cpp;orderman/actors/ServiceBridge.cpp;orderman/actors/order_manager/OrderBuilder.cpp;orderman/actors/order_manager/OrderManager.cpp;orderman/actors/order_manager/OrderServicesData.cpp;orderman/events/CancelRejectEvent.cpp;orderman/events/NewExecutionReportEvent.cpp;orderman/limiter/LimitStore.cpp;orderman/limiter/Limiter.cpp;orderman/limiter/ProductLimitNode.cpp;orderman/limiter/ProductLimitTree.cpp;orderman/limiter/SecurityLimitNode.cpp;orderman/limiter/SecurityLimitTree.cpp;orderman/limiter/tests/limit_tests.cpp;orderman/order_factory/OrderFactory.cpp;orderman/order_router/OrderRouter.cpp;orderman/orderman_utils/fix_order_codec.cpp;orderman/orders/IcebergOrder.cpp;orderman/orders/NativeOrder.cpp;orderman/orders/Order.cpp;orderman/orders/TimeBoxOrder.cpp;orderman/orders/book_algos/BookAlgo.cpp;orderman/orders/book_algos/JoinOrder.cpp;orderman/orders/book_algos/LeanOrder.cpp;orderman/orders/book_algos/TickOrder.cpp;orderman/orders/book_algos/TopOrder.cpp;orderman/orders/spreader_orders/SpreaderOrder.cpp;orderman/orders/spreader_orders/spreader/LegPropertyData.cpp;orderman/orders/spreader_orders/spreader/QuoteLegPriceQuantityState.cpp;orderman/orders/spreader_orders/spreader/SingleFillHedger.cpp;orderman/orders/spreader_orders/spreader/SingleLegQuoter.cpp;orderman/orders/spreader_orders/spreader/SpreaderBookkeepingData.cpp;orderman/orders/spreader_orders/spreader/SpreaderChildOrderState.cpp;orderman/orders/spreader_orders/spreader/SpreaderLegData.cpp;orderman/orders/spreader_orders/spreader/SpreaderUtils.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderOrderBuilder.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderOrderServices.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderPreActivationOrderServices.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerEndStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerStartStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForCancelAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForFirstAckCancelledStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForFirstAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWorkingStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterEndStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterStartStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForCancelAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForFirstAckCancelledWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForFirstAckWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForSizeStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWorkingStateWorker.cpp;orderman/Line truncated
set(sources cmds/AutoCert.cpp;cmds/Benchmark.cpp;cmds/CmdRegistry.cpp;cmds/ConfigCheck.cpp;cmds/Help.cpp;cmds/Md.cpp;cmds/QuickTest.cpp;cmds/Run.cpp;cmds/RunSim.cpp;cmds/Span.cpp;cmds/Test.cpp;cmds/TestCeloxica.cpp;dspark/mirage.cpp;dspark/mirage/routing/Router.cpp;exchange_sim/ExchangeSim.cpp;exchange_sim/ExchangeSimApplication.cpp;exchange_sim/book/Book.cpp;exchange_sim/book/ExchangeSim.proto;exchange_sim/book/Order.cpp;exchange_sim/book/OrderMatcher.cpp;exchange_sim/book/book_transform.cpp;exchange_sim/tests/test_book_transform.cpp;http/ApiGateway.cpp;http/WebServer.cpp;jetfix/codec/FIXArray.cpp;jetfix/common/OutFIX.cpp;jetfix/connection/AsyncReader.cpp;jetfix/connection/IConnection.cpp;jetfix/connection/SocketConnection.cpp;jetfix/gateway/CoreGateway.cpp;jetfix/gateway/JetFIXGateway.cpp;jetfix/gateway/Session.cpp;jetfix/store/FIXFileStore.cpp;jetfix/store/session_name.cpp;jetfix/tests/async_reader_tests.cpp;jetfix/tests/decoding_tests.cpp;jetfix/tests/fix_encoding_stream_tests.cpp;jetfix/tests/fix_fragment_tests.cpp;jetfix/tests/jetfix_performance_tests.cpp;jetfix/tests/sample_fix.cpp;jetfix/tests/store_tests.cpp;main.cpp;md/platforms/celoxica/CXListener.cpp;md/platforms/celoxica/CXMain.cpp;md/platforms/celoxica/tests/cx_tests.cpp;md/platforms/mdp3_onixs/MDP3Listener.cpp;md/platforms/mdp3_onixs/MDP3Main.cpp;md/platforms/mdp3_onixs/MDP3Utils.cpp;md/platforms/mdp3_onixs/tests/mdp3_tests.cpp;md/run_md.cpp;mercury/actors/Actor.cpp;mercury/broker/AsyncEventBroker.cpp;mercury/broker/CoreEventBroker.cpp;mercury/broker/IEventBroker.cpp;mercury/events/TimerEvent.cpp;mercury/mercury_utils/Executor.cpp;mercury/mercury_utils/IPollableActor.cpp;mercury/mercury_utils/mercury_common.cpp;mercury/synopsis/SynopsisBuilder.cpp;mercury/topics/ITopic.cpp;metrics/metrics.cpp;metrics/system_metrics.cpp;orderman/actors/AsyncFactory.cpp;orderman/actors/ExecutionGateway.cpp;orderman/actors/FillStore.cpp;orderman/actors/OrderStore.cpp;orderman/actors/SecuritySrc.cpp;orderman/actors/ServiceBridge.cpp;orderman/actors/order_manager/OrderBuilder.cpp;orderman/actors/order_manager/OrderManager.cpp;orderman/actors/order_manager/OrderServicesData.cpp;orderman/events/CancelRejectEvent.cpp;orderman/events/NewExecutionReportEvent.cpp;orderman/limiter/LimitStore.cpp;orderman/limiter/Limiter.cpp;orderman/limiter/ProductLimitNode.cpp;orderman/limiter/ProductLimitTree.cpp;orderman/limiter/SecurityLimitNode.cpp;orderman/limiter/SecurityLimitTree.cpp;orderman/limiter/tests/limit_tests.cpp;orderman/order_factory/OrderFactory.cpp;orderman/order_router/OrderRouter.cpp;orderman/orderman_utils/fix_order_codec.cpp;orderman/orders/IcebergOrder.cpp;orderman/orders/NativeOrder.cpp;orderman/orders/Order.cpp;orderman/orders/TimeBoxOrder.cpp;orderman/orders/book_algos/BookAlgo.cpp;orderman/orders/book_algos/JoinOrder.cpp;orderman/orders/book_algos/LeanOrder.cpp;orderman/orders/book_algos/TickOrder.cpp;orderman/orders/book_algos/TopOrder.cpp;orderman/orders/spreader_orders/SpreaderOrder.cpp;orderman/orders/spreader_orders/spreader/LegPropertyData.cpp;orderman/orders/spreader_orders/spreader/QuoteLegPriceQuantityState.cpp;orderman/orders/spreader_orders/spreader/SingleFillHedger.cpp;orderman/orders/spreader_orders/spreader/SingleLegQuoter.cpp;orderman/orders/spreader_orders/spreader/SpreaderBookkeepingData.cpp;orderman/orders/spreader_orders/spreader/SpreaderChildOrderState.cpp;orderman/orders/spreader_orders/spreader/SpreaderLegData.cpp;orderman/orders/spreader_orders/spreader/SpreaderUtils.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderOrderBuilder.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderOrderServices.cpp;orderman/orders/spreader_orders/spreader/external_interfacing/SpreaderPreActivationOrderServices.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerEndStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerStartStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForCancelAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForFirstAckCancelledStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWaitingForFirstAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/hedger/hedger_states/HedgerWorkingStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterEndStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterStartStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForCancelAckStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForFirstAckCancelledWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForFirstAckWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoter_states/QuoterWaitingForSizeStateWorker.cpp;orderman/orders/spreader_orders/spreader/quoter/quoteLine truncated
@@ -112,9 +112,9 @@ int SocketConnection::write (WriteVec const&vec,size_t vec_size,size_t cid)
iv[i].iov_len = vec[i].second;
}
tracepoint (bts_trace,trace_order,(char*) "SocketConnection.pre_write", 0,cid);
tracepoint (bts_trace,trace_order,(char*) "SocketConnection.pre_write", 0,cid,0);
auto result = ::writev (_fd,iv,(int) vec_size);
tracepoint (bts_trace,trace_order,(char*) "SocketConnection.post_write", 0,cid);
tracepoint (bts_trace,trace_order,(char*) "SocketConnection.post_write", 0,cid,0);
if (_log && result >0) {
for (size_t i = 0; i < vec_size;i++)
_out_log.write (vec[i].first, vec[i].second);
@@ -139,7 +139,7 @@ CoreGateway::~CoreGateway() {
}
void CoreGateway::send(orderman::TickToTradeCorID cid, OutFIXPtr const &fix) {
tracepoint(bts_trace, trace_order, (char *)"CoreGateway.send", 0, cid);
tracepoint(bts_trace, trace_order, (char *)"CoreGateway.send", 0, cid,0);
me->event_queue.enqueue(EventData(&CoreGateway::sync_send, cid, fix));
}
@@ -257,7 +257,7 @@ void CoreGateway::sync_stop(EventData const &) {
void CoreGateway::sync_send(EventData const &ev) {
tracepoint(bts_trace, trace_order, (char *)"CoreGateway.sync_send", 0,
ev.cid);
ev.cid,0);
switch (me->state) {
case State::OFF:
bts_assert(false);
+3 -3
View File
@@ -106,7 +106,7 @@ void Session::start() {
}
void Session::send(orderman::TickToTradeCorID cid, OutFIXPtr const &msgs) {
tracepoint (bts_trace,trace_order,(char*) "Session.send", 0,cid);
tracepoint (bts_trace,trace_order,(char*) "Session.send", 0,cid,0);
switch (me->state) {
case State::READY:
case State::CERT_MODE:
@@ -563,12 +563,12 @@ void Session::internal_send(orderman::TickToTradeCorID cid,
data_vec[i].first = s.data();
data_vec[i].second = s.size();
}
tracepoint (bts_trace,trace_order,(char*) "Session.internal_send.pre_write", 0,cid);
tracepoint (bts_trace,trace_order,(char*) "Session.internal_send.pre_write", 0,cid,0);
if (me->connection.write(data_vec, msgs->fix.size(), cid) < 0) {
terminate_session(JetFIXError::CONNECTION_ERROR);
return;
}
tracepoint (bts_trace,trace_order,(char*) "Session.internal_send.post_write", 0,cid);
tracepoint (bts_trace,trace_order,(char*) "Session.internal_send.post_write", 0,cid,0);
me->last_sent_msg_timestamp = me->now();
me->store.store(msgs);
msgs->set_ts(OutFIX::POST_STORE, utils::TimeStamp::now());
@@ -106,19 +106,19 @@ MDP3Listener::~MDP3Listener() {
//
// Warnings/Errors
void MDP3Listener::onError(onixs::Handler&, const onixs::ErrorArgs& error) {
tracepoint (bts_trace,trace_order,(char*) "onError", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onError", _latest_sequence, (uint16_t) _latest_sequence, 0);
LOG(md,Warn, "OnixS Error: {} - {}", error.description(), error.source());
}
void MDP3Listener::onWarning(onixs::Handler&, const onixs::WarningArgs& warning) {
tracepoint (bts_trace,trace_order,(char*) "onWarning", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onWarning", _latest_sequence, (uint16_t) _latest_sequence, 0);
LOG(md,Warn, "OnixS Warn: {} - {}", warning.description(), warning.source());
}
void MDP3Listener::onInstrumentRecovery(onixs::Handler& h) {
tracepoint (bts_trace,trace_order,(char*) "onInstrumentRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onInstrumentRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
LOG(md,Info, "Beginning security definition recovery for channel {}", h.settings().channel());
}
void MDP3Listener::onEndOfInstrumentRecovery(onixs::Handler& h, const onixs::RecoveryCompletionArgs&) {
tracepoint (bts_trace,trace_order,(char*) "onEndOfInstrumentRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onEndOfInstrumentRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
LOG(md,Info, "Finished Security definition recovery for channel {}", h.settings().channel());
}
// void MDP3Listener::onGap(onixs::Handler& h, const Security&, unsigned) {
@@ -129,22 +129,22 @@ void MDP3Listener::onEndOfInstrumentRecovery(onixs::Handler& h, const onixs::Rec
//
// Gap Recovery
void MDP3Listener::onMarketRecovery(onixs::Handler& h) {
tracepoint (bts_trace,trace_order,(char*) "onMarketRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onMarketRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
update_all_status(COCONUTSECURITYSTATUS_PACKET_LOSS);
LOG(md,Info, "Beginning market recovery for channel {}", h.settings().channel());
}
void MDP3Listener::onEndOfMarketRecovery(onixs::Handler& h, const onixs::RecoveryCompletionArgs&) {
tracepoint (bts_trace,trace_order,(char*) "onEndOfMarketRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onEndOfMarketRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
update_all_status(COCONUTSECURITYSTATUS_OK);
LOG(md,Info, "Finished market recovery for channel {}", h.settings().channel());
}
void MDP3Listener::onTcpRecovery(onixs::Handler& h) {
tracepoint (bts_trace,trace_order,(char*) "onTcpRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onTcpRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
update_all_status(COCONUTSECURITYSTATUS_PACKET_LOSS);
LOG(md,Info, "Beginning tcp recovery for channel {}", h.settings().channel());
}
void MDP3Listener::onEndOfTcpRecovery(onixs::Handler& h, const onixs::RecoveryCompletionArgs&) {
tracepoint (bts_trace,trace_order,(char*) "onEndOfTcpRecovery", 0, _latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onEndOfTcpRecovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
update_all_status(COCONUTSECURITYSTATUS_OK);
LOG(md,Info, "Finished tcp recovery for channel {}", h.settings().channel());
}
@@ -171,12 +171,12 @@ void MDP3Listener::onPacket(onixs::Handler&, const onixs::PacketArgs& args) {
// was needed for clang compilation
tracepoint (bts_trace,trace_order,(char*) "onPacket",
_packet_arrived.to_uint64() - (onixs_now-onixs_zero),_latest_sequence);
_latest_sequence,(uint16_t) _latest_sequence, onixs_now-onixs_zero);
}
void MDP3Listener::onEndOfPacket(onixs::Handler&, const onixs::PacketArgs&) {
tracepoint (bts_trace,trace_order,(char*) "onEndOfPacket.begin", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onEndOfPacket.begin", _latest_sequence, (uint16_t) _latest_sequence, 0);
flush_books();
tracepoint (bts_trace,trace_order,(char*) "onEndOfPacket.end", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onEndOfPacket.end", _latest_sequence, (uint16_t) _latest_sequence, 0);
}
//
@@ -230,7 +230,7 @@ void set_security_common(const Definition& def, FixedSecurity& fsec) {
}
void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security& osec, const onixs::InstrumentDefinitionFutureArgs& def) {
tracepoint (bts_trace,trace_order,(char*) "onDefinition.future", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onDefinition.future", _latest_sequence, (uint16_t) _latest_sequence, 0);
const auto& sec = def.message();
auto exchange_id = sec.securityId();
// LOG(Info, MarketData) << "onDefinition future " << exchange_id;
@@ -255,7 +255,7 @@ void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security& osec, co
add_security(fsec);
}
void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security&, const onixs::InstrumentDefinitionOptionArgs& def) {
tracepoint (bts_trace,trace_order,(char*) "onDefinition.option", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onDefinition.option", _latest_sequence, (uint16_t) _latest_sequence, 0);
const auto& sec = def.message();
auto exchange_id = sec.securityId();
// LOG(Info, MarketData) << "onDefinition option " << exchange_id;
@@ -288,7 +288,7 @@ void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security&, const o
}
void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security&, const onixs::InstrumentDefinitionSpreadArgs& spread_args) {
tracepoint (bts_trace,trace_order,(char*) "onDefinition.spread", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onDefinition.spread", _latest_sequence, (uint16_t) _latest_sequence, 0);
const auto& sec = spread_args.message();
auto exchange_id = sec.securityId();
// LOG(Info, MarketData) << "onDefinition spread " << exchange_id;
@@ -339,7 +339,7 @@ void MDP3Listener::onDefinition(onixs::Handler&, const onixs::Security&, const o
//
// Book
void MDP3Listener::onBookUpdate(onixs::Handler&, const onixs::Security& sec, const onixs::ConsolidatedBook& book) {
tracepoint (bts_trace,trace_order,(char*) "onBookUpdate", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onBookUpdate", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto data = _index.get_security(sec.id());
if (data == nullptr) return;
@@ -389,7 +389,7 @@ void on_trade(SecurityData* data, const onixs::PRICE& price, int size, const oni
}
void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& arg) {
tracepoint (bts_trace,trace_order,(char*) "onTrade.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onTrade.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != NULL) {
int size = 0;
@@ -400,7 +400,7 @@ void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const on
}
}
void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const onixs::TradeSummaryArgs& arg) {
tracepoint (bts_trace,trace_order,(char*) "onTrade.summary", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onTrade.summary", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != NULL) {
auto size = arg.entry().entrySize();
@@ -409,7 +409,7 @@ void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const on
}
}
void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const onixs::TradeArgs& arg) {
tracepoint (bts_trace,trace_order,(char*) "onTrade.trade_args", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onTrade.trade_args", _latest_sequence, (uint16_t) _latest_sequence, 0);
if (arg.entry().updateAction() == onixs::UpdateAction::New) {
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
@@ -423,7 +423,7 @@ void MDP3Listener::onTrade(onixs::Handler&, const onixs::Security& sec, const on
//
// RFQ
void MDP3Listener::onQuoteRequest(onixs::Handler&, const onixs::Security& sec, const onixs::QuoteRequestRelatedSymArgs& arg) {
tracepoint (bts_trace,trace_order,(char*) "onQuoteRequest", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onQuoteRequest", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto ts = utils::TimeStamp::now();
@@ -472,7 +472,7 @@ void MDP3Listener::onQuoteRequest(onixs::Handler&, const onixs::Security& sec, c
//
// Volume
void MDP3Listener::onElectronicVolume(onixs::Handler&, const onixs::Security& sec, const onixs::VolumeArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onElectronicVolume.volume", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onElectronicVolume.volume", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
bts_assert_d( args.entry().entryType().value() == 'e');
@@ -482,7 +482,7 @@ void MDP3Listener::onElectronicVolume(onixs::Handler&, const onixs::Security& se
}
}
void MDP3Listener::onElectronicVolume(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onElectronicVolume.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onElectronicVolume.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data) {
int32_t size;
@@ -495,7 +495,7 @@ void MDP3Listener::onElectronicVolume(onixs::Handler&, const onixs::Security& se
//
// Misc
void MDP3Listener::onSettlementPrice(onixs::Handler&, const onixs::Security& sec, const onixs::DailyStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onSettlementPrice.daily", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onSettlementPrice.daily", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price;
@@ -510,7 +510,7 @@ void MDP3Listener::onSettlementPrice(onixs::Handler&, const onixs::Security& sec
}
}
void MDP3Listener::onSettlementPrice(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onSettlementPrice.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onSettlementPrice.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price;
@@ -525,7 +525,7 @@ void MDP3Listener::onSettlementPrice(onixs::Handler&, const onixs::Security& sec
}
}
void MDP3Listener::onOpenInterest(onixs::Handler&, const onixs::Security& sec, const onixs::DailyStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onOpenInterest.daily", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onOpenInterest.daily", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price;
@@ -535,7 +535,7 @@ void MDP3Listener::onOpenInterest(onixs::Handler&, const onixs::Security& sec, c
}
}
void MDP3Listener::onOpenInterest(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onOpenInterest.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onOpenInterest.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price;
@@ -545,7 +545,7 @@ void MDP3Listener::onOpenInterest(onixs::Handler&, const onixs::Security& sec, c
}
}
void MDP3Listener::onOpeningPrice(onixs::Handler&, const onixs::Security& sec, const onixs::SessionStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onOpeningPrice.session", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onOpeningPrice.session", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price = args.entry().entryPx();
@@ -558,7 +558,7 @@ void MDP3Listener::onOpeningPrice(onixs::Handler&, const onixs::Security& sec, c
}
}
void MDP3Listener::onOpeningPrice(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onOpeningPrice.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onOpeningPrice.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
onixs::PRICE price;
@@ -573,7 +573,7 @@ void MDP3Listener::onOpeningPrice(onixs::Handler&, const onixs::Security& sec, c
}
}
void MDP3Listener::onHighTradePrice(onixs::Handler&, const onixs::Security& sec, const onixs::SessionStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onHighTradePrice.session", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onHighTradePrice.session", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
@@ -583,7 +583,7 @@ void MDP3Listener::onHighTradePrice(onixs::Handler&, const onixs::Security& sec,
}
}
void MDP3Listener::onHighTradePrice(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onHighTradePrice.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onHighTradePrice.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
@@ -595,7 +595,7 @@ void MDP3Listener::onHighTradePrice(onixs::Handler&, const onixs::Security& sec,
}
}
void MDP3Listener::onLowTradePrice(onixs::Handler&, const onixs::Security& sec, const onixs::SessionStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onLowTradePrice.session", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onLowTradePrice.session", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
@@ -605,7 +605,7 @@ void MDP3Listener::onLowTradePrice(onixs::Handler&, const onixs::Security& sec,
}
}
void MDP3Listener::onLowTradePrice(onixs::Handler&, const onixs::Security& sec, const onixs::RecoveryEntryArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onLowTradePrice.recovery", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onLowTradePrice.recovery", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
@@ -617,7 +617,7 @@ void MDP3Listener::onLowTradePrice(onixs::Handler&, const onixs::Security& sec,
}
}
void MDP3Listener::onHighestBid(onixs::Handler&, const onixs::Security& sec, const onixs::SessionStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onHighestBid.session", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onHighestBid.session", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
@@ -627,7 +627,7 @@ void MDP3Listener::onHighestBid(onixs::Handler&, const onixs::Security& sec, con
}
}
void MDP3Listener::onLowestOffer(onixs::Handler&, const onixs::Security& sec, const onixs::SessionStatisticsArgs& args) {
tracepoint (bts_trace,trace_order,(char*) "onLowestOffer.session", 0,_latest_sequence);
tracepoint (bts_trace,trace_order,(char*) "onLowestOffer.session", _latest_sequence, (uint16_t) _latest_sequence, 0);
auto* data = _index.get_security(sec.id());
if (data != nullptr) {
auto display_factor = data->handle.security().display_factor;
+3 -1
View File
@@ -24,6 +24,7 @@ struct Metric {
Metric(const std::string&, const std::vector<Label>&);
virtual void print(std::ostream&) const = 0;
std::string str() const;
virtual ~Metric() {}
};
template <class T>
@@ -144,4 +145,5 @@ class MetricsContainer {
};
}}//namespace
}}//namespace
@@ -265,7 +265,7 @@ void ExecutionGateway::on_outgoing_fix(
mercury::Update<OutFIXMsgEvent> const &msg) {
if (msg.events)
for (auto const &ev : *(msg.events)) {
tracepoint (bts_trace,trace_order,(char*) "on_outgoing_fix", 0,ev.cid);
tracepoint (bts_trace,trace_order,(char*) "on_outgoing_fix", 0,ev.cid,0);
me->gw.send(ev.cid, ev.msg);
}
}
+1 -1
View File
@@ -65,7 +65,7 @@ class MDSource : public mercury::Actor, public mercury::IPollableActor {
md::HandleReadResult::SUCCESS) {
book._security_key = SecurityKey(handle->key());
corid = handle->sequence();
tracepoint (bts_trace,trace_order,(char*) "MDSource", 0, corid);
tracepoint (bts_trace,trace_order,(char*) "MDSource", 0, corid,0);
publish(_book_update, book, corid);
}
}
@@ -64,8 +64,9 @@ void OrderManager::on_securities(
me->services_data.limiter.add_securities(secs);
if (me->state == State::WAIT_SEC) {
LOG(OrderMan, Info, "Order manager received initial set of {} "
"securities. Waiting for orders now",
LOG(OrderMan, Info,
"Order manager received initial set of {} "
"securities. Waiting for orders now",
update.events->size());
// obtain recovered orders
me->state = State::WAIT_ORDERS;
@@ -342,8 +343,9 @@ void OrderManager::on_admin_data(const mercury::Update<NewAdminDataEvent> &m) {
if (m.events) {
if (me->state == State::WAIT_ADMIN) {
LOG(OrderMan, Info, "Order manager received admin data. Subscribing "
"to security list now ");
LOG(OrderMan, Info,
"Order manager received admin data. Subscribing "
"to security list now ");
me->state = State::WAIT_SEC;
subscribe<NewSecuritiesEvent>([this](auto const &sec_update) {
this->on_securities(sec_update);
@@ -356,5 +358,5 @@ void OrderManager::on_admin_data(const mercury::Update<NewAdminDataEvent> &m) {
}
}
}
}
}
} // namespace orderman
} // namespace bts
@@ -268,7 +268,7 @@ NativeOrder::~NativeOrder() {}
void NativeOrder::on_activate(Price p, Quantity q,
bts::orderman::OrderServices &services,
TickToTradeCorID cid) {
tracepoint(bts_trace, trace_order, (char *)"on_activate", 0, cid);
tracepoint(bts_trace, trace_order, (char *)"on_activate", 0, cid,0);
bts_assert(!me->services);
me->services = &services;
@@ -445,7 +445,7 @@ void NativeOrder::on_activate(Price p, Quantity q,
}
void NativeOrder::on_update(Price p, Quantity q, TickToTradeCorID cid) {
tracepoint(bts_trace, trace_order, (char *)"on_update", 0, cid);
tracepoint(bts_trace, trace_order, (char *)"on_update", 0, cid,0);
switch (me->state.status()) {
@@ -87,7 +87,7 @@ void SpreaderOrder::_on_time(const bts::mercury::TimerEvent& t_event){
}
void SpreaderOrder::_on_book_update(const BookUpdateEvent& book_event){
if (!_active) return;
tracepoint (bts_trace,trace_order,(char*) "_on_book_update", 0,book_event.correlation_id);
tracepoint (bts_trace,trace_order,(char*) "_on_book_update", 0,book_event.correlation_id,0);
_state_worker->on_book (book_event.correlation_id, book_event.book);
}
void SpreaderOrder::_on_child_order_update(const OrderStateUpdateEvent& ord_ev){
@@ -329,4 +329,4 @@ void SpreaderOrder::_send_check_termination(bool force){
_state_worker->on_check_termination();
}
}
}}
}}
@@ -4,12 +4,41 @@ sqlite3 trace_data/trace.sqlite <<EOF
.separator ","
create table raw_trace (seq integer, ts integer, hts text, msg text, cpu integer, tid integer,arg1 integer);
.import trace_data/parsed_trace.txt raw_trace
create table trace as
create table trace (ts integer, hts text, msg text, cpu integer, tid integer,arg1 integer,arg2 interger, arg3 integer);
.import trace_data/parsed_trace.txt trace
create table shots as
select hts, ts,arg1 seq, arg2 seq16,arg3 offset from trace where msg='SocketConnection.pre_write';
create table packets as
select hts, ts,arg1 seq, arg2 seq16,arg3 offset from trace where msg='onPacket';
create table paired_all as
select
shots.ts shot_ts,
shots.hts shot_hts,
packets.ts packet_ts,
packets.hts packet_hts,
shots.seq16 seq16,
packets.seq seq,
packets.offset offset
from
shots, packets
where
shots.seq16 = packets.seq16 and shots.ts > packets.ts ;
create table shot_packet as
select
(seq % 65535) seq16, seq, ts, hts, msg, cpu, tid, arg1
from
raw_trace;
create index trace_seq_idx on trace(seq16);
(shot_ts - max(packet_ts)) / 1000 t,
shot_ts,
max(packet_ts) packet_ts,
max(seq) seq
from
paired_all
group by
shot_ts;
create table tick_to_trade as
select
shot_packet.*,
(shot_packet.t + packets.offset/1000) total_t,
packets.offset,
packets.seq16
from
shot_packet, packets where shot_packet.packet_ts = packets.ts;
EOF
@@ -4,7 +4,7 @@ import re
import fileinput
import sys
sample = "[11:13:02.685629121] (+0.000001447) pp-12 bts_trace:quoter: { cpu_id = 2 }, { pthread_id = 140322906629888 }, { msg = \"handle_updated\", arg1 = 3893975869889250, arg2 = 0 }"
sample = "[11:13:02.685629121] (+0.000001447) pp-12 bts_trace:quoter: { cpu_id = 2 }, { pthread_id = 140322906629888 }, { msg = \"handle_updated\", arg1 = 3893975869889250, arg2 = 0 , arg3 = 0 }"
rx = '\\[(?P<ts_hour>\\d\\d)\\:(?P<ts_min>\\d\\d)\\:(?P<ts_sec>\\d\\d)\\.(?P<ts_ns>\\d*).*?\\{ (?P<ctx1>.*?)\\ }, ' '\\{ (?P<ctx2>.*?) \\}, ' '\\{ (?P<udata>.*?) \\}'
rcx = re.compile(rx)
@@ -29,9 +29,9 @@ for line in sys.stdin:
parse_group(g.group('ctx1'),row)
parse_group(g.group('ctx2'),row)
parse_group(g.group('udata'),row)
# seq, ts, hts,msg,cpu,tid,arg1
#ts, hts,msg,cpu,tid,arg1,arg2, arg3
#print row
print ("%s,%s,%s,%s,%s,%s,%s" % (row['arg2'],row['t'],row['ts'],row['msg'],row['cpu_id'],row['pthread_id'],row['arg1']))
print ("%s,%s,%s,%s,%s,%s,%s,%s" % (row['t'],row['ts'],row['msg'],row['cpu_id'],row['pthread_id'],row['arg1'],row['arg2'],row['arg3']))
+2 -1
View File
@@ -11,11 +11,12 @@
TRACEPOINT_EVENT(bts_trace, trace_order,
TP_ARGS(char *, text, long long, argument1, long long, argument2),
TP_ARGS(char *, text, long long, argument1, long long, argument2, long long, argument3),
TP_FIELDS(
ctf_string(msg, text)
ctf_integer(long long, arg1,argument1)
ctf_integer(long long, arg2,argument2)
ctf_integer(long long, arg3,argument3)
))
#endif /* _BTS_TP_H */
+1
View File
@@ -55,6 +55,7 @@ let defaultScratchUser = {
miscTags = JSMap.empty<string>
smpInstruction = ""
maxOrderRatePerConnection = ""
location = ""
}
iceData = {
authorizedTrader = ""
+6 -2
View File
@@ -1,3 +1,7 @@
#!/bin/bash
cid=`docker ps | grep bluetradingsystems/linux_docker | awk '{print $1}'`
docker exec $cid /bin/bash -c "cd build/clang_debug/ && ninja"
if [ -f /.dockerenv ]; then
ninja
else
cid=`docker ps | grep bluetradingsystems/linux_docker | awk '{print $1}'`
docker exec $cid /bin/bash -c "cd build/clang_debug/ && ninja"
fi
+2 -2
View File
@@ -6,7 +6,7 @@ cd $DIR/../build/
rm -rf clang_debug
mkdir clang_debug
cd clang_debug
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=`realpath ../../tools/linux_control/rtags.sh` ../..
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_CXX_COMPILER=`realpath ../../tools/linux_control/rtags.sh` ../..
cd ..
rm -rf ninja_debug
@@ -18,7 +18,7 @@ cd ..
rm -rf ninja_release
mkdir ninja_release
cd ninja_release
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_CXX_COMPILER=g++ ../..
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++ ../..
cd ..