public void TestTimeStampsGeneration() { // testing that we get 30 timestamps var st = DateTime.Today.AddDays(-5); var et = DateTime.Today; var tsList = TimeStampsGenerator.Get(TimeStampsGenerator.TimeStampsInterval.Daily, st, et); Assert.IsTrue(tsList.Count == 6, "has 6 timestamps"); Assert.IsTrue(tsList[0] == st, "st is there"); Assert.IsTrue(tsList[5] == et, "et is there"); }
public void TestTimeStampsGenerationSingleDay() { // testing that we get st et var st = DateTime.Today; var et = DateTime.Now; var tsList = TimeStampsGenerator.Get(TimeSpan.FromDays(1), st, et); Assert.IsTrue(tsList.Count == 2, "has 2 timestamps"); Assert.IsTrue(tsList[0] == st, "st is there"); Assert.IsTrue(tsList[1] == et, "et is there"); }
public void RunCalculations(IEnumerable <string> elementNames, DateTime startTime, DateTime endTime, TimeStampsGenerator.TimeStampsInterval interval, string afServerName, string afDatabaseName , int afThreadCount, int analysesThreadCount, int dataWriterDelay, string outputFile, bool enableWrite) { var statistics = new Statistics(); var dateWriter = new DataWriter(); var times = TimeStampsGenerator.Get(interval, startTime, endTime); var aftimes = times.Select(t => new AFTime(t)).ToList(); ConcurrentQueue <List <AFValue> > dataWritingQueue = null; #region AFConnection // connects to the the PI system _logger.InfoFormat("Connecting to AF server:{0} and database: {1}...", afServerName, afDatabaseName); var afServers = new PISystems(); var afServer = afServers[afServerName]; AFDatabase database; if (!afServer.ConnectionInfo.IsConnected) { afServer.Connect(); _logger.Info("AF server connected"); } database = afServer.Databases[afDatabaseName]; #endregion AFConnection statistics.Run(); if (enableWrite) { dateWriter.Run(dataWriterDelay, outputFile); } var elements = new List <AFElement>(); _logger.Info("Loading elements"); foreach (var elementName in elementNames) { var element = database.Elements[elementName]; if (element != null) { elements.Add(element); } else { _logger.WarnFormat("Passed element name \"{0}\" did not return an Element object. AF Database {1}", elementName, database.Name); } } AFElement.LoadElements(elements); _logger.InfoFormat("{0} Elements Loaded...", elements.Count); _logger.InfoFormat("Starting calculation from {0} to {1}. Means {2} evaluations per analysis to execute.", startTime, endTime, aftimes.Count); _logger.InfoFormat("Configuration:{0} threads for elements and {1} threads for Analyses", afThreadCount, analysesThreadCount); // for each element we carry out the calculations if (enableWrite) { dataWritingQueue = DataWriter.DataQueue; } Parallel.ForEach(elements, new ParallelOptions() { MaxDegreeOfParallelism = afThreadCount }, (element) => RunAnalysesParallel(element, aftimes, analysesThreadCount, dataWritingQueue)); }