/// <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; }
/// <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); }
/// <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> /// 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); }
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(); }
/// <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)); }
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)); }
/// <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 CurvesController(IDataPublisher objPublisher, ICSVParser objCSVParser, IXMLGenerator objXMLGenerator) { dataPublisher = objPublisher; csvParser = objCSVParser; xmlGenerator = objXMLGenerator; }
public EventPublisher(RouteCollection routeCollection, IDataPublisher publisher) { _routeCollection = routeCollection.Filter <TProducer>(); _publisher = publisher; }
public EventPublisher(RouteCollection <TProducer> routeCollection, IDataPublisher publisher) { _routeCollection = routeCollection; _publisher = publisher; }
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); }
private void AddLocal(IDataPublisher publisher) { publisher.Starting += OnPublisherStarted; publisher.Finishing += OnPublisherFinishing; publisher.Finished += OnPublisherFinished; }
public void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher) { AddLocal(publisher); _publisherContainer.AddPublisher(publisher); }
/// <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); }
public void AddPublisher(IDataPublisher publisher) { AddLocal(publisher); _publisherContainer.AddPublisher(publisher); }
public virtual void AddPublisher <TWorkItem>(IDataPublisher <TWorkItem> publisher) => _publishers.AddPublisher(publisher);
private void OnPublisherAdded(Object sender, IDataPublisher e) { e.ProgressChanged += OnPublisherProgressChanged; e.Cancelling += OnPublisherCancelling; PublisherAdded?.Invoke(sender, e); }
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); }