def test_get_bill_ids_from_provider_with_start_and_end_date(self): """Test that bill IDs are returned for an GCP provider with both dates.""" date_accessor = DateAccessor() with ProviderDBAccessor( provider_uuid=self.gcp_provider_uuid) as provider_accessor: provider = provider_accessor.get_provider() with GCPReportDBAccessor(schema=self.schema) as accessor: end_date = date_accessor.today_with_timezone("utc").replace(day=1) start_date = end_date for i in range(2): start_date = start_date - relativedelta(months=i) bills = accessor.get_cost_entry_bills_query_by_provider( provider.uuid) with schema_context(self.schema): bills = (bills.filter( billing_period_start__gte=start_date.date()).filter( billing_period_start__lte=end_date.date()).all()) expected_bill_ids = [str(bill.id) for bill in bills] bills = utils.get_bills_from_provider(self.gcp_provider_uuid, self.schema, start_date=start_date, end_date=end_date) with schema_context(self.schema): bill_ids = [str(bill.id) for bill in bills] self.assertEqual(bill_ids, expected_bill_ids)
def test_get_bill_ids_from_provider(self): """Test that bill IDs are returned for an GCP provider.""" with schema_context(self.schema): expected_bill_ids = GCPCostEntryBill.objects.values_list("id") expected_bill_ids = sorted(bill_id[0] for bill_id in expected_bill_ids) bills = utils.get_bills_from_provider(self.gcp_provider_uuid, self.schema) with schema_context(self.schema): bill_ids = sorted(bill.id for bill in bills) self.assertEqual(bill_ids, expected_bill_ids) # Try with unknown provider uuid bills = utils.get_bills_from_provider(self.unkown_test_provider_uuid, self.schema) self.assertEqual(bills, [])
def update_summary_tables(self, start_date, end_date): """Populate the summary tables for reporting. Args: start_date (str) The date to start populating the table. end_date (str) The date to end on. Returns (str, str) A start date and end date. """ start_date, end_date = self._get_sql_inputs(start_date, end_date) with schema_context(self._schema): self._handle_partitions(self._schema, UI_SUMMARY_TABLES, start_date, end_date) bills = get_bills_from_provider( self._provider.uuid, self._schema, datetime.datetime.strptime(start_date, "%Y-%m-%d"), datetime.datetime.strptime(end_date, "%Y-%m-%d"), ) bill_ids = [] with schema_context(self._schema): bill_ids = [str(bill.id) for bill in bills] with GCPReportDBAccessor(self._schema) as accessor: # Need these bills on the session to update dates after processing bills = accessor.bills_for_provider_uuid(self._provider.uuid, start_date) for start, end in date_range_pair(start_date, end_date): LOG.info( "Updating GCP report summary tables: \n\tSchema: %s" "\n\tProvider: %s \n\tDates: %s - %s\n\tBills: %s", self._schema, self._provider.uuid, start, end, str(bill_ids), ) accessor.populate_line_item_daily_summary_table( start, end, bill_ids) accessor.populate_ui_summary_tables(start, end, self._provider.uuid) accessor.populate_tags_summary_table(bill_ids, start_date, end_date) for bill in bills: if bill.summary_data_creation_datetime is None: bill.summary_data_creation_datetime = self._date_accessor.today_with_timezone( "UTC") bill.summary_data_updated_datetime = self._date_accessor.today_with_timezone( "UTC") bill.save() return start_date, end_date
def _update_markup_cost(self, start_date, end_date): """Store markup costs.""" try: bills = get_bills_from_provider(self._provider.uuid, self._schema, start_date, end_date) with CostModelDBAccessor( self._schema, self._provider.uuid) as cost_model_accessor: markup = cost_model_accessor.markup markup_value = float(markup.get("value", 0)) / 100 with GCPReportDBAccessor(self._schema) as report_accessor: with schema_context(self._schema): bill_ids = [str(bill.id) for bill in bills] report_accessor.populate_markup_cost(markup_value, start_date, end_date, bill_ids) except GCPCostModelCostUpdaterError as error: LOG.error("Unable to update markup costs. Error: %s", str(error))
def update_daily_tables(self, start_date, end_date): """Populate the daily tables for reporting. Args: start_date (str) The date to start populating the table. end_date (str) The date to end on. Returns (str, str): A start date and end date. """ start_date, end_date = self._get_sql_inputs(start_date, end_date) bills = get_bills_from_provider( self._provider.uuid, self._schema, datetime.datetime.strptime(start_date, "%Y-%m-%d"), datetime.datetime.strptime(end_date, "%Y-%m-%d"), ) bill_ids = [] with schema_context(self._schema): bill_ids = [str(bill.id) for bill in bills] with GCPReportDBAccessor(self._schema) as accessor: for start, end in date_range_pair(start_date, end_date): LOG.info( "Updating GCP report daily tables for \n\tSchema: %s" "\n\tProvider: %s \n\tDates: %s - %s\n\tBills: %s", self._schema, self._provider.uuid, start, end, str(bill_ids), ) accessor.populate_line_item_daily_table(start, end, bill_ids) return start_date, end_date