Beispiel #1
0
 public void MatchFound(
     EventBean theEvent,
     ICollection<FilterHandleCallback> allStmtMatches)
 {
     if (collector != null) {
         var holder = new EPDataFlowEventBeanCollectorContext(graphContext, factory.IsSubmitEventBean, theEvent);
         collector.Collect(holder);
     }
     else if (factory.IsSubmitEventBean) {
         emittables.Push(theEvent);
     }
     else {
         emittables.Push(theEvent.Underlying);
     }
 }
Beispiel #2
0
        public void TestPerformance()
        {
            int numEvents  = 1;
            int numThreads = 2;

            Configuration config = new Configuration();

            config.EngineDefaults.Threading.IsListenerDispatchPreserveOrder = false;
            EPServiceProvider engine = EPServiceProviderManager.GetDefaultProvider(config);

            engine.EPAdministrator.Configuration.AddEventType(typeof(TransactionEvent));
            engine.EPAdministrator.Configuration.AddPlugInSingleRowFunction("MyDynModel", GetType().FullName, "MyDynModel");

            String      epl  = "select MyDynModel({Col_001, Col_002, Col_003}) as model_score from TransactionEvent";
            EPStatement stmt = engine.EPAdministrator.CreateEPL(epl);

            stmt.Subscriber = new MySubscriber();

            var queue = new LinkedBlockingQueue <Runnable>();
            var latch = new CountDownLatch(numEvents);

            for (int i = 0; i < numEvents; i++)
            {
                queue.Push((new MyRunnable(engine.EPRuntime, latch, new TransactionEvent(1, 2, 3))).Run);
            }

            var threads = Executors.NewFixedThreadPool(numThreads);

            var delta = PerformanceObserver.TimeMillis(
                () =>
            {
                for (int ii = 0; ii < numThreads; ii++)
                {
                    threads.Submit(
                        () =>
                    {
                        Runnable runnable;
                        while (queue.Pop(0, out runnable))
                        {
                            runnable.Invoke();
                        }
                    });
                }


                //ThreadPoolExecutor threads = new ThreadPoolExecutor(numThreads, numThreads, 10, TimeUnit.SECONDS, queue);
                //threads.PrestartAllCoreThreads();
                latch.Await(TimeSpan.FromMinutes(1));
                if (latch.Count > 0)
                {
                    throw new Exception("Failed to complete in 1 minute");
                }
            });

            Console.WriteLine("Took " + delta + " millis");
            threads.Shutdown();
            threads.AwaitTermination(TimeSpan.FromSeconds(10));
        }
Beispiel #3
0
 /**
  * Callback chamado após o recebimento de mensagem FIX
  * de incremental de MarketData.
  *
  */
 public override void onMessage(MarketDataIncrementalRefresh message, SessionID sessionId)
 {
     try
     {
         filaMensagensFIXIncremental.Push(message);
     }
     catch (Exception e)
     {
         logger.Error("Falha na leitura da fila filaMensagensFIXIncremental: " +
                      e.Message);
     }
 }
Beispiel #4
0
 /**
  * Callback chamado após o recebimento de mensagem FIX
  * de instantâneo de MarketData.
  *
  */
 public override void onMessage(
     MarketDataSnapshotFullRefresh message,
     SessionID sessionId)
 {
     try
     {
         filaMensagensFIXInstantaneo.Push(message);
     }
     catch (Exception e)
     {
         logger.Error("Falha na leitura da fila filaMensagensFIXInstantaneo: " +
                      e.Message);
     }
 }
Beispiel #5
0
        /**
         * Método chamado quando recebe os eventos BMF.
         * Os eventos são tratados e inseridos na fila da camada consumer.
         */
        public void Update(EventBean[] newEvents, EventBean[] oldEvents)
        {
            EventoBMF bmEvent = (EventoBMF)newEvents[0].Underlying;

            try
            {
                filaMensagensLivroOfertas.Push(bmEvent);
                logger.Debug("Mensagens na fila: " + filaMensagensLivroOfertas.Count);
            }

            catch (Exception e)
            {
                logger.Error(e.Message);
            }
        }
        public void Update(EventBean[] newEvents, EventBean[] oldEvents)
        {
            EventoBovespa bovEvent = (EventoBovespa)newEvents[0].Underlying;

            try
            {
                filaMensagensLivroOfertas.Push(bovEvent);
                if (logger.IsDebugEnabled)
                {
                    logger.Debug("Mensagens na fila: " + filaMensagensLivroOfertas.Count);
                }
            }

            catch (Exception e)
            {
                logger.Error(e);
            }
        }
Beispiel #7
0
        /**
         * Monta e envia mensagem de Instrumento da BM&F para o ESPER.
         * Layout da mensagem:
         *   SeqNum						9(15)
         *   type							X(1)	( '.' - Instrumento )
         *   symbol							X(20)
         *   securityID					X(20)
         *   body:
         *      SecurityIDSource (22)		X(1)
         *      Product (460)				9(3)
         *      CFICode (461)				X(6)
         *      SecurityType (167)			X(32)
         *      SecuritySubType (762)		X(32)
         *      MaturityMonthYear (200)	9(6)
         *      MaturityDate (541)		9(8)
         *      IssueDate (225)			9(8)
         *      CountryOfIssue (470)		X(2)
         *      ContractMultiplier (231)	X(15)
         *      SecurityExchange (207)	X(10)
         *      SecurityDesc (107)			X(100)
         *      ContractSettlMonth (667)	9(6)
         *      DatedDate (873)			9(8)
         *      Currency (15)				X(10)
         *      RoundLot (561)				9(15)
         *      MinTradeVol (562)			9(15)
         *      Asset (6937)				X(10)
         *      StrikePrice (202)			X(15)
         *      SecurityGroup (9918)		X(15)
         *
         * @param msgSeqNum
         * @param ocorrencia
         * @param grupo
         *
         */
        private void enviaInstrumento(
            int msgSeqNum,
            uint ocorrencia,
            SecurityList.NoRelatedSym grupo)
        {
            string mensagemMDS;

            try
            {
                // SeqNum - 9(15)
                mensagemMDS = msgSeqNum.ToString("D10");
                mensagemMDS = mensagemMDS + ocorrencia.ToString("D5");

                // type - X(1)
                mensagemMDS = mensagemMDS + '.';  // QuickFix.MDEntryType.INSTRUMENT;

                // symbol - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20);

                // securityID - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20);

                // body
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityIDSource()) ? grupo.getString(SecurityIDSource.FIELD) : " ").PadLeft(1);
                mensagemMDS = mensagemMDS + (grupo.isSet(new Product()) ? grupo.getInt(Product.FIELD) : 0).ToString("D3");
                mensagemMDS = mensagemMDS + (grupo.isSet(new CFICode()) ? grupo.getString(CFICode.FIELD) : " ").PadLeft(6);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityType()) ? grupo.getString(SecurityType.FIELD) : " ").PadLeft(32);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecuritySubType()) ? grupo.getString(SecuritySubType.FIELD) : " ").PadLeft(32);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityMonthYear()) ? grupo.getInt(MaturityMonthYear.FIELD) : 0).ToString("D6");
                mensagemMDS = mensagemMDS + (grupo.isSet(new MaturityDate()) ? grupo.getInt(MaturityDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new IssueDate()) ? grupo.getInt(IssueDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new CountryOfIssue()) ? grupo.getString(CountryOfIssue.FIELD) : " ").PadLeft(2);
                mensagemMDS = mensagemMDS + (grupo.isSet(new ContractMultiplier()) ? grupo.getString(ContractMultiplier.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityExchange()) ? grupo.getString(SecurityExchange.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new SecurityDesc()) ? grupo.getString(SecurityDesc.FIELD) : "").PadLeft(100);
                mensagemMDS = mensagemMDS + (grupo.isSet(new ContractSettlMonth()) ? grupo.getInt(ContractSettlMonth.FIELD) : 0).ToString("D6");
                mensagemMDS = mensagemMDS + (grupo.isSet(new DatedDate()) ? grupo.getInt(DatedDate.FIELD) : 0).ToString("D8");
                mensagemMDS = mensagemMDS + (grupo.isSet(new Currency()) ? grupo.getString(Currency.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new RoundLot()) ? grupo.getInt(RoundLot.FIELD) : 0).ToString("D15");
                mensagemMDS = mensagemMDS + (grupo.isSet(new MinTradeVol()) ? grupo.getInt(MinTradeVol.FIELD) : 0).ToString("D15");
                // Asset
                mensagemMDS = mensagemMDS + (grupo.isSetField(6937) ? grupo.getString(6937) : " ").PadLeft(10);

                mensagemMDS = mensagemMDS + (grupo.isSet(new StrikePrice()) ? grupo.getString(StrikePrice.FIELD) : " ").PadLeft(15);

                // SecurityGroup
                mensagemMDS = mensagemMDS + (grupo.isSetField(9918) ? grupo.getString(9918) : " ").PadLeft(15);

                try
                {
                    filaMensagensRetransmissorBMF.Push(mensagemMDS);
                }
                catch (Exception e)
                {
                    logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " +
                                 e.Message);
                }

                logger.Debug("INSTRUMENT - Instrumento[" +
                             grupo.getString(Symbol.FIELD) + "] Mensagem[" +
                             mensagemMDS + "]");
            }
            catch (FieldNotFound e)
            {
                logger.Error("Campo nao encontrado na mensagem: " + e.Message, e);
                return;
            }
            catch (Exception ex)
            {
                logger.Error("enviaInstrumento(): " + ex.Message, ex);
                return;
            }
        }
Beispiel #8
0
        /**
         * Monta e envia mensagem Market Data de Incremental para o ESPER.
         * Layout da mensagem:
         * SeqNum									9(15)
         * type										X(1)
         * symbol									X(20)
         * securityID								X(20)
         * body:
         *      MDUpdateAction (279)				X(1)
         *      MDEntryID (278)					X(10)
         *      MDEntryDate (272)					X(8)
         *      MDEntryTime (273)					X(8)
         *
         *		MDEntryPositionNo (290)			X(6)
         *		MDEntryPx (270)					X(15)
         *		MDEntrySize (271)					X(15)
         *		NumberOfOrders (346)				X(15)
         *		OrderID (37)						X(50)
         *		MDEntryBuyer (288)					X(10)
         *		MDEntrySeller (289)				X(10)
         *		TickDirection (274)				X(1)
         *		NetChgPrevDay (451)				X(11)
         *		UniqueTradeID (6032)				X(20)
         *		OpenCloseSettlFlag (286)			9(1)
         *		TradingSessionSubID (625)		X(2)
         *		SecurityTradingStatus (326)		9(3)
         *		NoReferentialPrices (6932)		9(3)
         *			ReferentialPriceType (6934)	9(1)
         *			ReferentialPx (6933)			X(15)
         *			TransactTime (60)				X(20)
         */
        private void enviaIncremental(
            int seqNum,
            uint ocorrencia,
            MarketDataIncrementalRefresh mensagem,
            MarketDataIncrementalRefresh.NoMDEntries grupo)
        {
            string mensagemMDS;

            try
            {
                // SeqNum - 9(15)
                mensagemMDS = seqNum.ToString("D10");
                mensagemMDS = mensagemMDS + ocorrencia.ToString("D5");

                // type - X(1)
                mensagemMDS = mensagemMDS + grupo.getChar(MDEntryType.FIELD);

                // symbol - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(Symbol.FIELD).PadLeft(20);

                // securityID - X(20)
                mensagemMDS = mensagemMDS + grupo.getString(SecurityID.FIELD).PadLeft(20);

                // body

                // Se OFERTA_COMPRA ou OFERTA_VENDA, envia NEW em MDUpdateAction
                if (grupo.getChar(MDEntryType.FIELD) == MDEntryType.BID ||
                    grupo.getChar(MDEntryType.FIELD) == MDEntryType.OFFER)
                {
                    mensagemMDS = mensagemMDS +
                                  (grupo.isSet(new MDUpdateAction()) ?
                                   grupo.getChar(MDUpdateAction.FIELD) : MDUpdateAction.NEW);
                }
                else
                {
                    mensagemMDS = mensagemMDS + MDUpdateAction.NEW;
                }

                mensagemMDS = mensagemMDS + " ".PadLeft(10);;
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryDate()) ? grupo.getString(MDEntryDate.FIELD) : " ").PadLeft(8);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryTime()) ? grupo.getString(MDEntryTime.FIELD) : " ").PadLeft(8);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPositionNo()) ? grupo.getString(MDEntryPositionNo.FIELD) : " ").PadLeft(6);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryPx()) ? grupo.getString(MDEntryPx.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySize()) ? grupo.getString(MDEntrySize.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new NumberOfOrders()) ? grupo.getString(NumberOfOrders.FIELD) : " ").PadLeft(15);
                mensagemMDS = mensagemMDS + (grupo.isSet(new OrderID()) ? grupo.getString(OrderID.FIELD) : " ").PadLeft(50);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntryBuyer()) ? grupo.getString(MDEntryBuyer.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new MDEntrySeller()) ? grupo.getString(MDEntrySeller.FIELD) : " ").PadLeft(10);
                mensagemMDS = mensagemMDS + (grupo.isSet(new TickDirection()) ? grupo.getString(TickDirection.FIELD) : " ");
                mensagemMDS = mensagemMDS + (grupo.isSet(new NetChgPrevDay()) ? grupo.getString(NetChgPrevDay.FIELD) : " ").PadLeft(11);
                mensagemMDS = mensagemMDS + (grupo.isSetField(6032) ? grupo.getString(6032).PadLeft(20) : " ").PadLeft(20);
                mensagemMDS = mensagemMDS + (grupo.isSet(new OpenCloseSettlFlag()) ? grupo.getInt(OpenCloseSettlFlag.FIELD).ToString() : "0");
                mensagemMDS = mensagemMDS + (grupo.isSet(new TradingSessionSubID()) ? grupo.getString(TradingSessionSubID.FIELD).PadLeft(2) : "  ");
                mensagemMDS = mensagemMDS + (grupo.isSetField(326) ? grupo.getInt(326).ToString("D3") : "000");

                if (grupo.isSetField(6932))
                {
                    int ocorrencias = grupo.getInt(6932);
                    mensagemMDS = mensagemMDS + ocorrencias.ToString("D3");

                    for (uint ocorrenciaPrecos = 1;
                         ocorrenciaPrecos <= ocorrencias; ocorrenciaPrecos++)
                    {
                        //ATP: Sinistraço!!!!
                        Group grupoPrecos = new Group(6932, 6934, new int[] { 6934, 6933, 60, 0 });

                        grupo.getGroup(ocorrenciaPrecos, grupoPrecos);

                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6934) ? grupoPrecos.getInt(6934).ToString("D1") : "0");
                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(6933) ? grupoPrecos.getString(6933) : " ").PadLeft(15);
                        mensagemMDS = mensagemMDS + (grupoPrecos.isSetField(TransactTime.FIELD) ? grupoPrecos.getString(TransactTime.FIELD) : " ").PadLeft(20);
                    }
                }
                else
                {
                    mensagemMDS = mensagemMDS + "000";
                }

                try
                {
                    filaMensagensRetransmissorBMF.Push(mensagemMDS);
                }
                catch (Exception e)
                {
                    logger.Error("Falha na leitura da fila filaMensagensRetransmissorBMF: " +
                                 e.Message);
                }

                logger.Debug("INCREMENTAL - Instrumento[" +
                             grupo.getString(Symbol.FIELD) + "] tipo[" +
                             grupo.getChar(MDEntryType.FIELD) + "] acao[" +
                             grupo.getChar(MDUpdateAction.FIELD) + "] Mensagem[" +
                             mensagemMDS + "]");
            }
            catch (FieldNotFound e)
            {
                logger.Error("Campo nao encontrado na mensagem: " + e.Message);
                return;
            }
            catch (Exception ex)
            {
                logger.Error("enviaIncremental: " +
                             ex.Message, ex);
            }
        }
Beispiel #9
0
 public void Submit(object @object)
 {
     queue.Push(@object);
 }