public ActiveAnalysis( AnalysisId id, AnalysisTemplate template, ITaskScheduler taskScheduler, ILogAnalyserEngine logAnalyserEngine, TimeSpan maximumWaitTime) { if (template == null) { throw new ArgumentNullException(nameof(template)); } if (taskScheduler == null) { throw new ArgumentNullException(nameof(taskScheduler)); } if (logAnalyserEngine == null) { throw new ArgumentNullException(nameof(logAnalyserEngine)); } _id = id; _template = template; _taskScheduler = taskScheduler; _maximumWaitTime = maximumWaitTime; _logFiles = new List <ILogFile>(); _logFile = new LogFileProxy(taskScheduler, maximumWaitTime); _logAnalyserEngine = logAnalyserEngine; _analysers = new Dictionary <DataSourceAnalyser, AnalyserTemplate>(); _syncRoot = new object(); }
/// <inheritdoc /> public Task SaveSnapshot(IAnalysis analysis, AnalysisViewTemplate viewTemplate) { var tmp = analysis as ActiveAnalysis; if (tmp == null) { throw new ArgumentException("It makes no sense to create a snapshot from anything else but an active analysis", nameof(analysis)); } var analysisSnapshot = tmp.CreateSnapshot(); var template = new AnalysisTemplate(analysisSnapshot.Analysers.Select(x => new AnalyserTemplate { Id = x.Id, AnalyserPluginId = x.AnalyserPluginId, Configuration = x.Configuration })); var clone = viewTemplate.Clone(); var results = analysisSnapshot.Analysers.Select(x => new AnalyserResult { AnalyserId = x.Id, Result = x.Result }).ToList(); var snapshot = new Core.Analysis.AnalysisSnapshot(template, clone, results); return(_snapshots.Save(snapshot)); }
public IAnalysis CreateAnalysis(AnalysisTemplate template, AnalysisViewTemplate viewTemplate) { ActiveAnalysisConfiguration analysisConfiguration; var id = AnalysisId.CreateNew(); var analysis = new ActiveAnalysis(id, template, _taskScheduler, _dataSourceAnalyserEngine, TimeSpan.FromMilliseconds(100)); try { analysisConfiguration = new ActiveAnalysisConfiguration(id, template, viewTemplate); lock (_syncRoot) { _templates.Add(analysisConfiguration); _analyses.Add(analysis.Id, analysis); _lastSavedAnalyses.Add(analysis.Id, analysisConfiguration); } } catch (Exception) { analysis.Dispose(); //< ActiveAnalysis actually spawns new analyses on the engine so we should cancel those in case an exception si thrown here... throw; } SaveAsync(analysisConfiguration).Wait(); return(analysis); }
public void TestCreateAnalysis3() { var storage = new AnalysisStorage(_taskScheduler, _filesystem, _dataSourceAnalyserEngine.Object, _typeFactory); var analysisTemplate = new AnalysisTemplate(); var analysisViewTemplate = new AnalysisViewTemplate(); var analysis = storage.CreateAnalysis(analysisTemplate, analysisViewTemplate); analysisViewTemplate.Add(new PageTemplate { Title = "A great page" }); var task = storage.SaveAsync(analysis.Id); task.Should().NotBeNull(); task.Wait(TimeSpan.FromSeconds(5)).Should().BeTrue("because the modified template should've been saved"); var anotherStorage = new AnalysisStorage(_taskScheduler, _filesystem, _dataSourceAnalyserEngine.Object, _typeFactory); anotherStorage.AnalysisTemplates.Should().HaveCount(1, "because we've created and saved one template"); var template = anotherStorage.AnalysisTemplates.First(); template.Should().NotBeNull(); template.ViewTemplate.Pages.Should().HaveCount(1, "because we've added one page to that template"); var pageTemplate = template.ViewTemplate.Pages.First(); pageTemplate.Should().NotBeNull(); pageTemplate.Title.Should().Be("A great page"); }
public void TestCtor1() { var id = AnalysisId.CreateNew(); var template = new AnalysisTemplate(); var viewTemplate = new AnalysisViewTemplate(); var configuration = new ActiveAnalysisConfiguration(id, template, viewTemplate); configuration.Id.Should().Be(id); configuration.Template.Should().BeSameAs(template); configuration.ViewTemplate.Should().BeSameAs(viewTemplate); }
public void Setup() { _taskScheduler = new ManualTaskScheduler(); _analysisEngine = new Mock <ILogAnalyserEngine>(); _analysisEngine.Setup(x => x.CreateAnalysis(It.IsAny <ILogFile>(), It.IsAny <DataSourceAnalysisConfiguration>(), It.IsAny <IDataSourceAnalysisListener>())) .Returns(() => new Mock <IDataSourceAnalysisHandle>().Object); _template = new AnalysisTemplate(); }
public void TestRoundtripEmpty() { var id = AnalysisId.CreateNew(); var template = new AnalysisTemplate(); var viewTemplate = new AnalysisViewTemplate(); var configuration = new ActiveAnalysisConfiguration(id, template, viewTemplate); var actualConfiguration = configuration.Roundtrip(); actualConfiguration.Id.Should().Be(id); actualConfiguration.Template.Should().NotBeNull(); actualConfiguration.ViewTemplate.Should().NotBeNull(); }
public static Stream GetAnalysisTemplate(AnalysisTemplate template) { switch (template) { case AnalysisTemplate.CustomerSales: return(GetTemplateStream("CustomerAnalysis.xlsx")); case AnalysisTemplate.ProductSales: return(GetTemplateStream("ProductAnalysis.xlsx")); default: throw new NotSupportedException(template.ToString()); } }
public AnalysisViewModel CreateNew() { var viewTemplate = new AnalysisViewTemplate(); var template = new AnalysisTemplate(); var analysis = _analysisStorage.CreateAnalysis(template, viewTemplate); var viewModel = new AnalysisViewModel(_dispatcher, viewTemplate, analysis, _analysisStorage); _active.Add(viewModel); _activeById.Add(viewModel.Id, viewModel); viewModel.OnRemove += AnalysisOnOnRemove; Update(); return(viewModel); }
public ActiveAnalysis( AnalysisId id, AnalysisTemplate template, ITaskScheduler taskScheduler, IDataSourceAnalyserEngine analyserEngine, TimeSpan maximumWaitTime) { if (template == null) { throw new ArgumentNullException(nameof(template)); } if (taskScheduler == null) { throw new ArgumentNullException(nameof(taskScheduler)); } if (analyserEngine == null) { throw new ArgumentNullException(nameof(analyserEngine)); } _id = id; _template = template; _taskScheduler = taskScheduler; _maximumWaitTime = maximumWaitTime; _logFiles = new Dictionary <DataSourceId, ILogFile>(); _logFile = new LogFileProxy(taskScheduler, maximumWaitTime); _analyserEngine = analyserEngine; _analysers = new Dictionary <IDataSourceAnalyser, AnalyserTemplate>(); _syncRoot = new object(); foreach (var analysisTemplate in template.Analysers) { // TODO: Solve this conundrum Add((AnalyserTemplate)analysisTemplate); } }