public void ScheduleCAnBeStartedAndStopped() { var scheduleName = "testSchedule"; var delay = 10; var chainName1 = "testChain"; var chainName2 = "testChain2"; var chains = new[] { new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}), new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {}) }; var config = new ScheduleElement(scheduleName, delay, string.Join(",", chainName1, chainName2)); var schedule = new Schedule(config, chains); var tokenSource = new CancellationTokenSource(); var cancellationToken = tokenSource.Token; var task = Task.Factory.StartNew(() => schedule.Start(cancellationToken), cancellationToken); Thread.Sleep(1000); tokenSource.Cancel(); task.Wait(); }
public static BuiltComponents BuildStandardSinkSet(IStandardSinkSetConfiguration simpleConfig, IEnumerable<ISnapshotProvider> source) { var sources = new List<ISnapshotProvider>(); sources.AddRange(source); var bufferElement = new SinkElement(simpleConfig); var storeElement = new StoreElement(simpleConfig); var plotterElement = new PlotterElement(simpleConfig); var bufferConfig = new CircularDataSinkConfiguration(new[] {bufferElement}); var storeConfig = new FileSystemDataStoreConfiguration(new[] {storeElement}); var plotterConfig = new PlotterConfiguration(new[] {plotterElement}); var sinks = new List<ISnapshotConsumer>(); var buffers = CircularDataSinkBuilder.Build(bufferConfig); sinks.AddRange(buffers); sources.AddRange(buffers); var stores = FileSystemDataStoreBuilder.Build(storeConfig); sinks.AddRange(stores); sources.AddRange(stores); var multiSinks = new List<IMultipleSnapshotConsumer>(); multiSinks.AddRange(MultiPlotterBuilder.Build(plotterConfig)); var bufferChainElement = new ChainElement( simpleConfig.Id + " Buffer Chain", simpleConfig.Name, simpleConfig.Id + " Source", simpleConfig.Id + " Buffer", ""); var sinkChainElement = new ChainElement( simpleConfig.Id + " Sink Chain", simpleConfig.Name, simpleConfig.Id + " Buffer", simpleConfig.Id + " Store", simpleConfig.Id + " Plotter"); var preloadChainElement = new ChainElement( simpleConfig.Id + " Preload Chain", simpleConfig.Name, simpleConfig.Id + " Store", simpleConfig.Id + " Buffer", ""); var chainConfig = new ChainConfiguration(new[] {bufferChainElement, sinkChainElement, preloadChainElement}); var preloadScheduleElement = new ScheduleElement(simpleConfig.Id + " Preload Schedule", simpleConfig.Delay, preloadChainElement.Id); var preloadScheduleConfig = new ScheduleConfiguration(new[] {preloadScheduleElement}); var chainNames = String.Join(",", new[] {sinkChainElement.Id, bufferChainElement.Id}); var scheduleElement = new ScheduleElement(simpleConfig.Id + " Schedule", simpleConfig.Delay, chainNames); var scheduleConfig = new ScheduleConfiguration(new[] {scheduleElement}); return new BuiltComponents(sources, sinks, multiSinks, chainConfig, preloadScheduleConfig, scheduleConfig); }
public Schedule(ScheduleElement config, IEnumerable<IChain> chains) { Delay = config.Delay * 1000; Name = config.Name; var chainNames = config.Chains.Split(','); Chains = chains.Where(c => chainNames.Contains(c.Id)).ToArray(); }
public void ScheduleCanBeInstantiatedUsingConfiguration() { var scheduleName = "testSchedule"; var delay = 10; var chainName1 = "testChain"; var chainName2 = "testChain2"; var chains = new[] { new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}), new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {}) }; var config = new ScheduleElement(scheduleName, delay, string.Join(",", "id1", "id2")); var schedule = new Schedule(config, chains); Assert.AreEqual(scheduleName, schedule.Name); Assert.AreEqual(delay * 1000, schedule.Delay); Assert.AreEqual(2, schedule.Chains.Count()); }
public void SchedulesCanBeRunOnce() { var scheduleName = "testSchedule"; var delay = 10; var chainName1 = "testChain"; var chainName2 = "testChain2"; var chains = new[] { new MultipleSinkChain("id1", chainName1, new NullSource(), new ISnapshotConsumer[] {}), new MultipleSinkChain("id2", chainName2, new NullSource(), new ISnapshotConsumer[] {}) }; var config = new ScheduleElement(scheduleName, delay, string.Join(",", chainName1, chainName2)); var schedule = new Schedule(config, chains); schedule.RunOnce(); // mock out source, sink and assert }
public void ScheduleBuilderCanBuildAScheduleForMultipleChainsFromConfig() { var scheduleName = "testSchedule"; var delay = 10; var snapshot = new Snapshot { new MetricData(0.5, DateTime.Parse("12 Aug 2008"), new List<string> { "value" }) }; var configs = new List<ChainElement> { new ChainElement("chainId1", "firstTestChain", "testSourceId", "testBufferId", ""), new ChainElement("chainId2", "secondTestChain", "testSourceId", "testBufferId", "") }; var source = MockRepository.GenerateMock<ISnapshotProvider>(); source.Expect(s => s.Snapshot()).Return(snapshot).Repeat.Any(); source.Expect(s => s.Name).Return("testSource").Repeat.Any(); source.Expect(s => s.Id).Return("testSourceId").Repeat.Any(); var buffer = MockRepository.GenerateMock<ISnapshotConsumer>(); buffer.Expect(b => b.Update(snapshot)); buffer.Expect(s => s.Name).Return("testBuffer").Repeat.Any(); buffer.Expect(s => s.Id).Return("testBufferId").Repeat.Any(); var sources = new HashSet<ISnapshotProvider> { source }; var sinks = new HashSet<ISnapshotConsumer> { buffer }; var chains = ChainBuilder.Build(sources, sinks, new HashSet<IMultipleSnapshotConsumer>(), configs); var scheduleConfig = new ScheduleElement(scheduleName, delay, string.Join(",", "chainId1", "chainId2")); var schedules = ScheduleBuilder.Build(new [] { scheduleConfig }, chains); Assert.IsInstanceOf<IEnumerable<ISchedule>>(schedules); Assert.AreEqual(scheduleName, schedules.First().Name); Assert.AreEqual(2, schedules.First().Chains.Count()); }