コード例 #1
0
        public CalculateForecastErrorsTest(RepositoryFixture fixture)
        {
            _config          = fixture.Config;
            _unitOfWork      = fixture.UnitOfWork;
            _context         = fixture.Context;
            _startDate       = fixture.StartDate;
            _installationIds = fixture.InstallationIds;

            _minNumberOfMeasurements = fixture.Config.GetValue <short>(
                "AppSettings:AirlyApi:MinNumberOfMeasurements");

            _forecastErrorsCalculator = new PlainForecastErrorsCalculator(_config);

            _context.Clear();
        }
コード例 #2
0
        public async void DoWork(object state)
        {
            using (var scope = _serviceProvider.CreateScope())
            {
                _unitOfWork = scope.ServiceProvider.GetRequiredService <UnitOfWork>();

                var installations = await DownloadInstallationInfos();

                if (installations.Count > 0)
                {
                    var installationInfos = ConvertInstallations(installations);
                    await UpdateInstallationInfos(installationInfos);
                }

                var newMeasurementsList = await DownloadAllAirQualityData();

                if (newMeasurementsList.Count > 0)
                {
                    var(newMeasurements, newForecasts)
                        = await ConvertAllAirQualityData(newMeasurementsList);

                    await SaveAllAirQualityData(newMeasurements, newForecasts);
                }

                for (int i = 0; i < _forecastErrorsCalculators.Count; i++)
                {
                    _forecastErrorsCalculator = _forecastErrorsCalculators[i];

                    switch (_forecastErrorsCalculator)
                    {
                    case PlainForecastErrorsCalculator _:
                        _forecastErrorsRepository = _unitOfWork.PlainForecastErrorRepository;
                        break;

                    case ScaleForecastErrorsCalculator _:
                        _forecastErrorsRepository = _unitOfWork.ScaleForecastErrorRepository;
                        break;
                    }

                    var(hourlyErrors, dailyErrors) = await CalculateForecastErrors();
                    await SaveForecastErrors(hourlyErrors, dailyErrors);

                    var newTotalForecastErrors = await CalculateTotalForecastErrors();
                    await UpdateTotalForecastErrors(newTotalForecastErrors);
                }
            }
        }
コード例 #3
0
        public ProgramController(
            UnitOfWork unitOfWork,
            IForecastErrorsCalculator forecastErrorsCalculator = null,
            List <short> installationIds = null,
            short idForAllInstallations  = -1,
            IAirlyMeasurementsDownloader airlyMeasurementsDownloader = null,
            IAirlyInstallationDownloader airlyInstallationDownloader = null,
            ForecastErrorsRepository forecastErrorsRepository        = null,
            short minNumberOfMeasurements      = 24,
            short installationUpdateDaysPeriod = 7)
        {
            _unitOfWork = unitOfWork;
            _forecastErrorsCalculator    = forecastErrorsCalculator;
            _airlyMeasurementsDownloader = airlyMeasurementsDownloader;
            _airlyInstallationDownloader = airlyInstallationDownloader;
            _forecastErrorsRepository    = forecastErrorsRepository;

            _installationIds = installationIds;

            _minNumberOfMeasurements      = minNumberOfMeasurements;
            _idForAllInstallations        = idForAllInstallations;
            _installationUpdateDaysPeriod = installationUpdateDaysPeriod;
        }