public void GetDetailedStats_SeveralMeterModulesForToday_CorrectValues() { // Arrange var statisticsRepository = new Mock <IStatisticsRepository>(); statisticsRepository .Setup(x => x.GetStatsByParameter(It.IsAny <string>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())) .Returns(new List <StatisticsDbEntry> { NewMeterStatisticsDbEntry(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 50), NewMeterStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 10), NewMeterStatisticsDbEntry(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 40), NewMeterStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 10), NewMeterStatisticsDbEntry(Today.AddHours(1).AddMinutes(10), Today.AddHours(1).AddMinutes(15), 30), NewMeterStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(10), Today.AddHours(1).AddMinutes(15), 10) }); // Act var service = new StatisticsCoreService(null, statisticsRepository.Object, _dateTime.Object); var result = service.GetDetailedStats(null, null, MeterParameter, Today, Today.AddDays(1)); // Assert Assert.That(result.Count, Is.EqualTo(3)); Assert.That(result[0].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(result[0].Value, Is.EqualTo(60)); Assert.That(result[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000 + 5 * 60 * 1000)); Assert.That(result[1].Value, Is.EqualTo(50)); Assert.That(result[2].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000 + 10 * 60 * 1000)); Assert.That(result[2].Value, Is.EqualTo(40)); }
internal void AddValue(string fieldName, double value, DateTime timestamp) { if (StatisticsCoreService.IsValidField(fieldName)) { // add value for StatisticsLogger use statValues.Add(new StatValue(value, timestamp)); } // "value" is the occurring event in this very moment, // so "Current" is holding previous value right now if (Current.Value != value) { lastEvent = new StatValue(Current.Value, Current.Timestamp); if (value == 0 && lastEvent.Value > 0) { lastOn = lastEvent; lastOff = new StatValue(value, timestamp); } else if (value > 0 && lastEvent.Value == 0) { lastOff = lastEvent; lastOn = new StatValue(value, timestamp); } } // keeep size within historyLimit (minutes) try { while ((DateTime.UtcNow - historyValues[historyValues.Count - 1].Timestamp).TotalMinutes > historyLimit) { historyValues.RemoveAll(sv => (DateTime.UtcNow - sv.Timestamp).TotalMinutes > historyLimit); } // leave this wrapped in a try..catch } catch { } // insert current value into history and so update "Current" to "value" historyValues.Insert(0, new StatValue(value, timestamp)); }
public void GetHourlyStats_SeveralSensorModulesOneDay_CorrectValues() { // Arrange var statisticsRepository = new Mock <IStatisticsRepository>(); statisticsRepository .Setup(x => x.GetStatsByParameter(It.IsAny <string>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())) .Returns(new List <StatisticsDbEntry> { NewSensorStatisticsDbEntry(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 27), NewSensorStatisticsDbEntry(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 28.54), NewSensorStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 12.5), NewSensorStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 11.3), NewSensorStatisticsDbEntry(Today.AddHours(2).AddMinutes(0), Today.AddHours(2).AddMinutes(5), 29), NewSensorStatisticsDbEntry(Today.AddHours(2).AddMinutes(5), Today.AddHours(2).AddMinutes(10), 25), NewSensorStatisticsDbEntryM2(Today.AddHours(2).AddMinutes(0), Today.AddHours(2).AddMinutes(5), 12), NewSensorStatisticsDbEntryM2(Today.AddHours(2).AddMinutes(5), Today.AddHours(2).AddMinutes(10), 14) }); // Act var service = new StatisticsCoreService(null, statisticsRepository.Object, _dateTime.Object); var result = service.GetHourlyStats(null, null, SensorParameter, Today, Today.AddDays(1)); // Assert Assert.That(result.Length, Is.EqualTo(3)); var minValues = result[0]; Assert.That(minValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(minValues[0].Value, Is.EqualTo(0)); Assert.That(minValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(minValues[1].Value, Is.EqualTo(11.3)); Assert.That(minValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(minValues[2].Value, Is.EqualTo(12)); var maxValues = result[1]; Assert.That(maxValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(maxValues[0].Value, Is.EqualTo(0)); Assert.That(maxValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(maxValues[1].Value, Is.EqualTo(28.54)); Assert.That(maxValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(maxValues[2].Value, Is.EqualTo(29)); var avgValues = result[2]; Assert.That(avgValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(avgValues[0].Value, Is.EqualTo(0)); Assert.That(avgValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(avgValues[1].Value, Is.EqualTo(19.835).Within(0.0001)); Assert.That(avgValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(avgValues[2].Value, Is.EqualTo(20).Within(0.0001)); }
public void GetHourlyStats_SpecificSensorModuleTwoDays_CorrectValues() { // Arrange var statisticsRepository = new Mock <IStatisticsRepository>(); statisticsRepository .Setup(x => x.GetStatsByParameterAndDevice(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())) .Returns(new List <StatisticsDbEntry> { NewSensorStatisticsDbEntry(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 27), NewSensorStatisticsDbEntry(Today.AddDays(1).AddHours(1).AddMinutes(5), Today.AddDays(1).AddHours(1).AddMinutes(10), 25), NewSensorStatisticsDbEntry(Today.AddHours(2).AddMinutes(0), Today.AddHours(2).AddMinutes(5), 29), NewSensorStatisticsDbEntry(Today.AddDays(1).AddHours(2).AddMinutes(5), Today.AddDays(1).AddHours(2).AddMinutes(10), 25), }); // Act var service = new StatisticsCoreService(null, statisticsRepository.Object, _dateTime.Object); var result = service.GetHourlyStats(Domain, Address, SensorParameter, Today, Today.AddDays(1)); // Assert Assert.That(result.Length, Is.EqualTo(3)); var minValues = result[0]; Assert.That(minValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(minValues[0].Value, Is.EqualTo(0)); Assert.That(minValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(minValues[1].Value, Is.EqualTo(25)); Assert.That(minValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(minValues[2].Value, Is.EqualTo(25)); var maxValues = result[1]; Assert.That(maxValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(maxValues[0].Value, Is.EqualTo(0)); Assert.That(maxValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(maxValues[1].Value, Is.EqualTo(27)); Assert.That(maxValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(maxValues[2].Value, Is.EqualTo(29)); var avgValues = result[2]; Assert.That(avgValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(avgValues[0].Value, Is.EqualTo(0)); Assert.That(avgValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(avgValues[1].Value, Is.EqualTo(26).Within(0.0001)); Assert.That(avgValues[2].Timestamp, Is.EqualTo(TodayMs + 2 * 3600 * 1000)); Assert.That(avgValues[2].Value, Is.EqualTo(27).Within(0.0001)); }
public void GetHourlyStats_SeveralMeterModulesTwoDays_CorrectValues() { // Arrange var statisticsRepository = new Mock <IStatisticsRepository>(); statisticsRepository .Setup(x => x.GetStatsByParameter(It.IsAny <string>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())) .Returns(new List <StatisticsDbEntry> { NewMeterStatisticsDbEntry(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 50), NewMeterStatisticsDbEntry(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 30), NewMeterStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(0), Today.AddHours(1).AddMinutes(5), 10), NewMeterStatisticsDbEntryM2(Today.AddHours(1).AddMinutes(5), Today.AddHours(1).AddMinutes(10), 10), NewMeterStatisticsDbEntry(Today.AddDays(1).AddHours(1).AddMinutes(0), Today.AddDays(1).AddHours(1).AddMinutes(5), 50), NewMeterStatisticsDbEntry(Today.AddDays(1).AddHours(1).AddMinutes(5), Today.AddDays(1).AddHours(1).AddMinutes(10), 40), NewMeterStatisticsDbEntryM2(Today.AddDays(1).AddHours(1).AddMinutes(0), Today.AddDays(1).AddHours(1).AddMinutes(5), 10), NewMeterStatisticsDbEntryM2(Today.AddDays(1).AddHours(1).AddMinutes(5), Today.AddDays(1).AddHours(1).AddMinutes(10), 30) }); // Act var service = new StatisticsCoreService(null, statisticsRepository.Object, _dateTime.Object); var result = service.GetHourlyStats(null, null, MeterParameter, Today.AddDays(-1), Today.AddDays(1)); // Assert Assert.That(result.Length, Is.EqualTo(3)); var minValues = result[0]; Assert.That(minValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(minValues[0].Value, Is.EqualTo(0)); Assert.That(minValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(minValues[1].Value, Is.EqualTo(20)); var maxValues = result[1]; Assert.That(maxValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(maxValues[0].Value, Is.EqualTo(0)); Assert.That(maxValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(maxValues[1].Value, Is.EqualTo(90)); var avgValues = result[2]; Assert.That(avgValues[0].Timestamp, Is.EqualTo(TodayMs)); Assert.That(avgValues[0].Value, Is.EqualTo(0)); Assert.That(avgValues[1].Timestamp, Is.EqualTo(TodayMs + 1 * 3600 * 1000)); Assert.That(avgValues[1].Value, Is.EqualTo(57.5)); }