private async Task <List <DataValuesModel> > NewHistory(string energySource) { // Retrieve config values string energySourceMPAN = _config.GetValue <string>($"OctopusApi:{energySource}:mpan"); string energySourceSerialNumber = _config.GetValue <string>($"OctopusApi:{energySource}:serial_number"); // Retrieve latest record from database and the data source id DataValuesModel lastRecordEnergySource = await _dataValues.RetrieveLastRecordForSourceAsync(energySource); DataSourcesModel energySourceModel = await _dataSources.GetDataSourceIdFromName(energySource); // Variables List <DataValuesModel> returnList = new List <DataValuesModel>(); int page = 1; int useCount = 0; while (true) { // Get a page of values ApiModel temp = await _octopusHelper.GetConsumptionPage(energySource, page, energySourceMPAN, energySourceSerialNumber); if (useCount == 0) { useCount = temp.Count; } else if (useCount != temp.Count) { // Throw an error if the ammount of records get changed as the program is making subsequent calls // Look if there is a more gracefull way of handling this error in the future throw new Exception(); } // Parse from ApiModel to List<DataValuesModel> List <DataValuesModel> tempList = MapApiToDatabase(temp, energySourceModel); // Look at each record and determine if the last record in the database has been reached foreach (var item in tempList) { // TODO: look at a way to incorporate a way to determine if two instances of a class hold the same values determining them as "equal" // even if they are different instances of a class. bool tempBoolTest = item.Data_source_id == lastRecordEnergySource.Data_source_id & item.Data_Value == lastRecordEnergySource.Data_Value & item.Data_interval_start_datetime == lastRecordEnergySource.Data_interval_start_datetime & item.Data_interval_start_offset == lastRecordEnergySource.Data_interval_start_offset & item.Data_interval_end_datetime == lastRecordEnergySource.Data_interval_end_datetime & item.Data_interval_end_offset == lastRecordEnergySource.Data_interval_end_offset; // Record match found if (tempBoolTest) { return(returnList); } // Record not found else { returnList.Add(item); } } page++; } }
private async Task InitialChartTrackerFill(string chartsTarget) { // Get first record DataValuesModel firstRecordEnergySource = await _dataValues.RetrieveFirstRecordForSourceAsync(chartsTarget); DataSourcesModel energySourceModel = await _dataSources.GetDataSourceIdFromName(chartsTarget); List <ChartTrackerModel> chartsToMake = new List <ChartTrackerModel>(); // Add daily chart chartsToMake.Add(new ChartTrackerModel { Data_source_id = energySourceModel.Data_source_id, Chart_type = "Daily", Chart_last_from = firstRecordEnergySource.Data_interval_start_datetime.Date - TimeSpan.FromDays(1), Chart_last_to = firstRecordEnergySource.Data_interval_start_datetime.Date, Chart_next_from = firstRecordEnergySource.Data_interval_start_datetime.Date, Chart_next_to = firstRecordEnergySource.Data_interval_start_datetime.Date + TimeSpan.FromDays(1) }); // Add weekly chart DateTime firstMonday = firstRecordEnergySource.Data_interval_start_datetime.Date; while (firstMonday.DayOfWeek != DayOfWeek.Monday) { firstMonday -= TimeSpan.FromDays(1); } chartsToMake.Add(new ChartTrackerModel { Data_source_id = energySourceModel.Data_source_id, Chart_type = "Weekly", Chart_last_from = firstMonday - TimeSpan.FromDays(7), Chart_last_to = firstMonday, Chart_next_from = firstMonday, Chart_next_to = firstMonday + TimeSpan.FromDays(7) }); // Add monthly chart DateTime firstMonth = firstRecordEnergySource.Data_interval_start_datetime.Date; firstMonth -= TimeSpan.FromDays(firstMonth.Day - 1); chartsToMake.Add(new ChartTrackerModel { Data_source_id = energySourceModel.Data_source_id, Chart_type = "Monthly", Chart_last_from = firstMonth.AddMonths(-1), Chart_last_to = firstMonth, Chart_next_from = firstMonth, Chart_next_to = firstMonth.AddMonths(1) }); // Add quaterly chart DateTime quarterStart = firstMonth; while (quarterStart.Month != 1 && quarterStart.Month != 4 && quarterStart.Month != 7 && quarterStart.Month != 10) { quarterStart = quarterStart.AddMonths(-1); } chartsToMake.Add(new ChartTrackerModel { Data_source_id = energySourceModel.Data_source_id, Chart_type = "Quarterly", Chart_last_from = quarterStart.AddMonths(-3), Chart_last_to = quarterStart, Chart_next_from = quarterStart, Chart_next_to = quarterStart.AddMonths(3) }); // Add yearly chart DateTime yearStart = quarterStart.AddMonths(1 - quarterStart.Month); chartsToMake.Add(new ChartTrackerModel { Data_source_id = energySourceModel.Data_source_id, Chart_type = "Yearly", Chart_last_from = yearStart.AddMonths(-12), Chart_last_to = yearStart, Chart_next_from = yearStart, Chart_next_to = yearStart.AddMonths(12) }); // Add rolling yearly chart // Save charts to make await _chartTracker.SaveChartsToTrackerAsync(chartsToMake); }