Esempio n. 1
0
        private async Task <List <List <DataValuesModel> > > AllHistory(string energySource)
        {
            // Retrieve config values
            string energySourceMPAN         = _config.GetValue <string>($"OctopusApi:{energySource}:mpan");
            string energySourceSerialNumber = _config.GetValue <string>($"OctopusApi:{energySource}:serial_number");

            // Call api to retrieve count or records to retrieve
            ApiModel tempUse = await _octopusHelper.GetConsumption(energySource, energySourceMPAN, energySourceSerialNumber);

            DataSourcesModel energySourceModel = await _dataSources.GetDataSourceIdFromName(energySource);

            double energySourcePages = Math.Ceiling(tempUse.Count / 100d);

            List <List <DataValuesModel> > energySourceHistory = new List <List <DataValuesModel> >();
            List <Task <ApiModel> >        tasks = new List <Task <ApiModel> >();

            for (int page = 1; page < (energySourcePages + 1); page++)
            {
                tasks.Add(_octopusHelper.GetConsumptionPage(energySource, page, energySourceMPAN, energySourceSerialNumber));
            }

            var results = await Task.WhenAll(tasks);

            int countOfRetrievedRecords = 0;

            foreach (var item in results)
            {
                List <DataValuesModel> tempList = MapApiToDatabase(item, energySourceModel);
                countOfRetrievedRecords += tempList.Count;
                energySourceHistory.Add(tempList);
            }

            if (tempUse.Count == countOfRetrievedRecords)
            {
                return(energySourceHistory);
            }
            else
            {
                // TODO: Find a more elegant way to handle the error
                throw new Exception();
            }
        }