Esempio n. 1
0
        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");
        }
Esempio n. 3
0
        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));
        }