private StationBasedRiverMeasureViewModel ProcessReadings(StationReadings readings) { try { var riverMeasureView = new StationBasedRiverMeasureViewModel(); riverMeasureView.StationName = readings.Readings.FirstOrDefault().Measure.Station.Label; riverMeasureView.MinValue = readings.Readings.Min(r => r.Value); riverMeasureView.MinValueDate = readings.Readings .Where(r => r.Value == riverMeasureView.MinValue) .OrderByDescending(i => i.DateTime) .ToList()[0].DateTime; riverMeasureView.MaxValue = readings.Readings.Max(r => r.Value); riverMeasureView.MaxValueDate = readings.Readings .Where(r => r.Value == riverMeasureView.MaxValue) .OrderByDescending(i => i.DateTime) .ToList()[0].DateTime; riverMeasureView.AverageValue = readings.Readings.Average(r => r.Value); return(riverMeasureView); } catch (Exception ex) { _logger.LogException(ex, _config.GetDefaultLoggingPath()); return(null); } }
public async Task <StationBasedRiverMeasureViewModel> GetRiverWaterLevelDataAtStation(string stationReference, CommandLineViewModel commandObj) { try { var cacheKey = stationReference.ToLower() + JoinFilters(commandObj); var processedCacheKey = cacheKey + "-processed"; var riverMeasureView = new StationBasedRiverMeasureViewModel(); riverMeasureView = (StationBasedRiverMeasureViewModel)_memoryCache.Get(processedCacheKey); if (riverMeasureView != null) { return(riverMeasureView); } else { var readingsFromCache = (StationReadings)_memoryCache.Get(cacheKey); if (readingsFromCache != null) { riverMeasureView = ProcessReadings(readingsFromCache); // Add processed data to cache memory _memoryCache.AddOrGetExisting(processedCacheKey, riverMeasureView); return(riverMeasureView); } else { var responseData = await _externalService.GetAsync(BuildApiStationReadingsUrl(stationReference, commandObj)); var readings = JsonConvert.DeserializeObject <StationReadings>(responseData); if (readings != null) { if (readings.Readings != null && readings.Readings.Any()) { // Add readings data to cache memory _memoryCache.AddOrGetExisting(cacheKey, readings); riverMeasureView = ProcessReadings(readings); // Add processed data to cache memory _memoryCache.AddOrGetExisting(processedCacheKey, riverMeasureView); return(riverMeasureView); } } } } return(riverMeasureView); } catch (Exception ex) { _logger.LogException(ex, _config.GetDefaultLoggingPath()); return(null); } }
public void Given_ValidStationReferenceWithExistingCacheEntry_When_CallingGetRiverWaterLevelDataAtStation_Then_CachedDataReturned() { var resultView = new StationBasedRiverMeasureViewModel { AverageValue = 0.134M, MaxValue = 3.456M, MaxValueDate = DateTime.Today, MinValue = 1.234M, MinValueDate = DateTime.Today, StationName = "Whatever" }; _mockCache.Setup(m => m.Get(It.IsAny <string>())).Returns(resultView); var result = _monitor.GetRiverWaterLevelDataAtStation(_stationRef, _commandObj).Result; Assert.That(result, Is.Not.Null); Assert.That(result, Is.EqualTo(resultView)); }