/// <summary>
 ///
 /// </summary>
 /// <param name="outlierCalculator">Algorithm to calcuate outlier</param>
 /// <param name="source">Input data source</param>
 /// <param name="plotter">Output data source</param>
 /// <param name="bufferSize">Data items to hold before processing</param>
 public OutlierSpotter(IOutlierCalculator outlierCalculator, IDataPublisher source, IDataPlotter plotter, int bufferSize)
 {
     _outlierCalculator = outlierCalculator;
     _plotter           = plotter;
     _source            = source;
     _bufferSize        = bufferSize;
 }
Example #2
0
        /// <summary>
        ///  异步缓冲连接器
        /// </summary>
        /// <param name="pipeCode">缓冲DataFlow 对应的Key   默认对应的flow是异步线程池</param>
        /// <param name="option"></param>
        protected BaseMsgFlow(string pipeCode, DataFlowOption option) : base(pipeCode, PipeType.MsgFlow)
        {
            if (string.IsNullOrEmpty(pipeCode))
            {
                throw new ArgumentNullException(nameof(pipeCode), "消息类型PipeCode不能为空!");
            }

            _pusher = CreateFlow(pipeCode, this, option);
        }
Example #3
0
        /// <summary>
        /// Application arguments:
        /// arg0: Selected Exchange. Has to be enum StockModel.Master.Exchange
        /// arg1: Data generator to use. Has to be IDataPublisher.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //Loading system startup data for all the exchanges
            List <Exchange> exchanges = new List <Exchange>();

            //defaults selected...
            selectedExchange = Exchange.FAKE_NASDAQ;
            dataGenerator    = YahooDataGenerator.Instance;

            ResolveAppArgs(args);

            exchanges = Enum.GetValues(typeof(Exchange)).OfType <Exchange>().ToList();

            InMemoryObjects.LoadInMemoryObjects(exchanges);

            TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD);

            //Start data generation - this will start fetching data for all symbols of current exchange
            //Later, need to change this to only subscribe to the specific symbol(s) selected.
            dataGenerator.StartDataGeneration(300, selectedExchange);

            sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);

            List <StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == selectedExchange).Symbols;

            List <SymbolFeeds>       generatedData = new List <SymbolFeeds>();
            List <StockModel.Symbol> symbolList    = new List <StockModel.Symbol>();


            Action <double, string> addMovingAverage = new Action <double, string>((val, MVA_id) => {
                sender.SendMVA(val, MVA_id);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Sent value {0} to redis", val);
                Console.ResetColor();
            });

            Parallel.ForEach(symbols, (symbol) =>
            {
                //subscribe
                dataGenerator.SubscribeFeed(symbol.Id, (Feed fd) =>
                {
                    sender.SendFeed(fd, selectedExchange.ToString());

                    Console.WriteLine(fd.ToString());
                });

                //add subscription for each aggregator configured
                //RXProcessing.AddAggregator(dataGenerator, new MovingAverage(),
                //    addMovingAverage
                //    , symbol.Id);
            });

            Console.Read();
        }
Example #4
0
        /// <summary>
        /// Application arguments:
        /// arg0: Selected Exchange. Has to be enum StockModel.Master.Exchange
        /// arg1: Data generator to use. Has to be IDataPublisher.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //Loading system startup data for all the exchanges
            List<Exchange> exchanges = new List<Exchange>();

            //defaults selected...
            selectedExchange = Exchange.FAKE_NASDAQ;
            dataGenerator = YahooDataGenerator.Instance;

            ResolveAppArgs(args);

            exchanges = Enum.GetValues(typeof(Exchange)).OfType<Exchange>().ToList();

            InMemoryObjects.LoadInMemoryObjects(exchanges);

            TimeSpan updateDuration = TimeSpan.FromMilliseconds(Constants.FAKE_DATA_GENERATE_PERIOD);

            //Start data generation - this will start fetching data for all symbols of current exchange
            //Later, need to change this to only subscribe to the specific symbol(s) selected.
            dataGenerator.StartDataGeneration(300, selectedExchange);

            sender = SenderFactory.GetSender(FeederQueueSystem.REDIS_CACHE);

            List<StockModel.Symbol> symbols = InMemoryObjects.ExchangeSymbolList.SingleOrDefault(x => x.Exchange == selectedExchange).Symbols;

            List<SymbolFeeds> generatedData = new List<SymbolFeeds>();
            List<StockModel.Symbol> symbolList = new List<StockModel.Symbol>();

            Action<double, string> addMovingAverage = new Action<double, string>((val,MVA_id) => {

                sender.SendMVA(val, MVA_id);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Sent value {0} to redis", val);
                Console.ResetColor();
            });

            Parallel.ForEach(symbols, (symbol) =>
            {
                //subscribe
                dataGenerator.SubscribeFeed(symbol.Id, (Feed fd) =>
                {
                    sender.SendFeed(fd, selectedExchange.ToString());

                    Console.WriteLine(fd.ToString());
                });

                //add subscription for each aggregator configured
                //RXProcessing.AddAggregator(dataGenerator, new MovingAverage(),
                //    addMovingAverage
                //    , symbol.Id);
            });

            Console.Read();
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="CatalystRuntime"/> class.
 /// </summary>
 /// <param name="adapter">The catalyst adapter.</param>
 /// <param name="administrator">The administrator.</param>
 /// <param name="instanceDescriptor">The instance descriptor.</param>
 public CatalystRuntime(Catalyst adapter, CatalystAdministrator administrator, InstanceDescriptor instanceDescriptor)
 {
     _adapter            = adapter;
     _administrator      = administrator;
     _webChannelFactory  = adapter.WebChannelFactory;
     _instanceDescriptor = instanceDescriptor;
     _dataPublisher      = instanceDescriptor.DataPublicationEndpoints
                           .Where(endpoint => endpoint != null)
                           .Select(endpoint => adapter.DataPublisherFactory.CreatePublisher(endpoint))
                           .FirstOrDefault(publisherFactory => publisherFactory != null);
 }
Example #6
0
 public Sensors(IDataPublisher dataPublisher, IDataRepository iDataRepo, ReadService rdS)
 {
     sensorDataRepo      = iDataRepo;
     sensorDataPublisher = dataPublisher;
     readService         = rdS;
     sensorDataRepo.SetData(readService.ReadCSVFile("./Data.csv"));
     turnedOn          = true;
     timeStep          = 4;
     currentData       = new LiveMetaData(sensorDataRepo.GetData().First().StationId, timeStep, DateTime.Now);
     cancelTokenSource = new CancellationTokenSource();
     _httpClient       = new HttpClient();
 }
Example #7
0
        /// <summary>
        /// Process application args
        /// </summary>
        /// <param name="args"></param>
        /// <param name="selectedExchange"></param>
        private static void ResolveAppArgs(string[] args)
        {
            if (args != null)
            {
                if (args.Length > 0)
                {
                    if (!Enum.TryParse(args[0], out selectedExchange))
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Incorrect/missing app args for exchange. Setting default exchange as FAKE_NASDAQ");
                        Console.ResetColor();
                        selectedExchange = Exchange.FAKE_NASDAQ;
                    }
                }
                if (args.Length > 1)
                {
                    switch (args[1].ToUpper())
                    {
                    case "YHOO":
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Setting data generator as YahooDataGenerator");
                        Console.ResetColor();
                        dataGenerator = YahooDataGenerator.Instance;
                        break;

                    case "FAKE":
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Setting data generator as FakeDataGenerator");
                        Console.ResetColor();
                        dataGenerator = FakeDataGenerator.Instance;
                        break;

                    default:
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Unexpected app args for data generator");
                        Console.ResetColor();
                        throw new Exception("Unexpected app args for data generator.");
                    }
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("App args missing for data generator. Using defaults.");
                    Console.ResetColor();
                }
            }
        }
        public static void AddAggregator(IDataPublisher publisher,
                                         IAggregator <double, double> agg,
                                         Action <double, string> act, int symbolId)
        {
            eventAsObservable = from update in  Observable.FromEvent <OnFeedReceived, Feed>(
                mktH => publisher.FeedArrived += mktH,
                mktH => publisher.FeedArrived -= mktH
                ).Where((feed) => feed.SymbolId == symbolId)
                                select update.LTP;

            //aggregates and yields results.
            subs = eventAsObservable
                   .Scan <double, double>(0,
                                          (acc, currentValue) =>
            {
                return(agg.Aggregate(currentValue));
            }).Subscribe((state) => act(state, Constants.REDIS_MVA_ROOM_PREFIX + symbolId));
        }
Example #9
0
        public PipeWatcherProxy(IPipeLineWatcher watcher, string dataFlowKey, DataFlowOption option)
        {
            if (!string.IsNullOrEmpty(dataFlowKey))
            {
                _dataFlowKey = dataFlowKey;
                _publisher   = DataFlowFactory.RegisterFlow <WatchDataItem>(dataFlowKey, WatchCallBack, option);
            }
            else
            {
                _watchDataQueue = new ActionBlock <WatchDataItem>(WatchCallBack,
                                                                  new ExecutionDataflowBlockOptions()
                {
                    MaxDegreeOfParallelism = 4
                });
            }

            _watcher = watcher;
        }
        public static void AddAggregator(IDataPublisher publisher, 
            IAggregator<double, double> agg, 
            Action<double, string> act, int symbolId)
        {
            eventAsObservable = from update in  Observable.FromEvent<OnFeedReceived, Feed>(
                mktH => publisher.FeedArrived += mktH,
                mktH => publisher.FeedArrived -= mktH
                ).Where((feed) => feed.SymbolId == symbolId)
                                    select update.LTP;

            //aggregates and yields results.
            subs = eventAsObservable
                .Scan<double, double>(0,
                (acc, currentValue) =>
                {
                    return agg.Aggregate(currentValue);
                }).Subscribe((state) => act(state, Constants.REDIS_MVA_ROOM_PREFIX + symbolId));
        }
Example #11
0
 /// <summary>
 /// Process application args
 /// </summary>
 /// <param name="args"></param>
 /// <param name="selectedExchange"></param>
 private static void ResolveAppArgs(string[] args)
 {
     if (args != null)
     {
         if (args.Length > 0)
         {
             if (!Enum.TryParse(args[0], out selectedExchange))
             {
                 Console.ForegroundColor = ConsoleColor.Red;
                 Console.WriteLine("Incorrect/missing app args for exchange. Setting default exchange as FAKE_NASDAQ");
                 Console.ResetColor();
                 selectedExchange = Exchange.FAKE_NASDAQ;
             }
         }
         if (args.Length > 1)
         {
            switch(args[1].ToUpper())
             {
                 case "YHOO":
                     Console.ForegroundColor = ConsoleColor.Green;
                     Console.WriteLine("Setting data generator as YahooDataGenerator");
                     Console.ResetColor();
                     dataGenerator =  YahooDataGenerator.Instance;
                     break;
                 case "FAKE":
                     Console.ForegroundColor = ConsoleColor.Green;
                     Console.WriteLine("Setting data generator as FakeDataGenerator");
                     Console.ResetColor();
                     dataGenerator = FakeDataGenerator.Instance;
                     break;
                 default:
                     Console.ForegroundColor = ConsoleColor.Red;
                     Console.WriteLine("Unexpected app args for data generator");
                     Console.ResetColor();
                     throw new Exception("Unexpected app args for data generator.");
             }
         }
         else
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.WriteLine("App args missing for data generator. Using defaults.");
             Console.ResetColor();
         }
     }
 }
Example #12
0
 public CurvesController(IDataPublisher objPublisher, ICSVParser objCSVParser, IXMLGenerator objXMLGenerator)
 {
     dataPublisher = objPublisher;
     csvParser     = objCSVParser;
     xmlGenerator  = objXMLGenerator;
 }
Example #13
0
 public EventPublisher(RouteCollection routeCollection, IDataPublisher publisher)
 {
     _routeCollection = routeCollection.Filter <TProducer>();
     _publisher       = publisher;
 }
Example #14
0
 public EventPublisher(RouteCollection <TProducer> routeCollection, IDataPublisher publisher)
 {
     _routeCollection = routeCollection;
     _publisher       = publisher;
 }
Example #15
0
 public override void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher)
 => _publishers.AddPublisher(publisher);
 public void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher)
 {
     Publishers.Add(publisher);
     PublisherAdded?.Invoke(this, publisher);
 }
Example #17
0
 private void AddLocal(IDataPublisher publisher)
 {
     publisher.Starting  += OnPublisherStarted;
     publisher.Finishing += OnPublisherFinishing;
     publisher.Finished  += OnPublisherFinished;
 }
Example #18
0
 public void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher)
 {
     AddLocal(publisher);
     _publisherContainer.AddPublisher(publisher);
 }
Example #19
0
 /// <summary>
 ///  消息发布者
 /// </summary>
 /// <param name="defaultPushMsgKey">缓冲DataFlow 对应的消息Key   默认对应的flow实现是异步线程池</param>
 /// <param name="option"></param>
 protected BaseMsgPublisher(string defaultPushMsgKey, DataPublisherOption option = null) : base(defaultPushMsgKey,
                                                                                                PipeType.MsgPublisher)
 {
     _pusher = CreatePublisher(option);
 }
Example #20
0
 public void AddPublisher(IDataPublisher publisher)
 {
     AddLocal(publisher);
     _publisherContainer.AddPublisher(publisher);
 }
Example #21
0
 public virtual void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher)
 => _publishers.AddPublisher(publisher);
Example #22
0
 private void OnPublisherAdded(Object sender, IDataPublisher e)
 {
     e.ProgressChanged += OnPublisherProgressChanged;
     e.Cancelling      += OnPublisherCancelling;
     PublisherAdded?.Invoke(sender, e);
 }
Example #23
0
 public virtual void AddPublisher(IDataPublisher publisher)
 => _publishers.AddPublisher(publisher);
 public void AddPublisher(IDataPublisher publisher)
 {
     Publishers.Add(publisher);
     PublisherAdded?.Invoke(this, publisher);
 }
 public void AddPublisher(IDataPublisher publisher)
 {
     publisher.Starting += OnProcessorStart;
     WorkerProvider.AddPublisher(publisher);
 }