Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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));
        }