def __init__(self):
     self.export_name = "costreport"
     self.container = "test_container"
     self.directory = "cost"
     self.test_date = datetime(2019, 8, 15)
     self.month_range = utils.month_date_range(self.test_date)
     self.report_path = '{}/{}/{}'.format(self.directory, self.export_name,
                                          self.month_range)
     self.export_uuid = '9c308505-61d3-487c-a1bb-017956c9170a'
     self.export_file = '{}_{}.csv'.format(self.export_name,
                                           self.export_uuid)
     self.export_etag = 'absdfwef'
     self.export_key = '{}/{}'.format(self.report_path, self.export_file)
     self.bad_test_date = datetime(2019, 7, 15)
     self.bad_month_range = utils.month_date_range(self.bad_test_date)
     self.bad_report_path = '{}/{}/{}'.format(self.directory,
                                              self.export_name,
                                              self.bad_month_range)
Esempio n. 2
0
    def _get_report_path(self, date_time):
        """
        Return path of report files.

        Args:
            date_time (DateTime): The starting datetime object

        Returns:
            (String): "/blob_dir/export_name/YYYYMMDD-YYYYMMDD",
                    example: "/cost/costreport/20190801-20190831"

        """
        report_date_range = utils.month_date_range(date_time)
        return '{}/{}/{}'.format(self.directory, self.export_name,
                                 report_date_range)
Esempio n. 3
0
    def _create_cost_entry_bill(self, row, report_db_accessor):
        """Create a cost entry bill object.

        Args:
            row (dict): A dictionary representation of a CSV file row

        Returns:
            (str): A cost entry bill object id

        """
        table_name = AzureCostEntryBill
        row_date = row.get('UsageDateTime')

        report_date_range = utils.month_date_range(parser.parse(row_date))
        start_date, end_date = report_date_range.split('-')

        start_date_utc = parser.parse(start_date).replace(hour=0,
                                                          minute=0,
                                                          tzinfo=pytz.UTC)
        end_date_utc = parser.parse(end_date).replace(hour=0,
                                                      minute=0,
                                                      tzinfo=pytz.UTC)

        key = (start_date_utc, self._provider_id)
        if key in self.processed_report.bills:
            return self.processed_report.bills[key]

        if key in self.existing_bill_map:
            return self.existing_bill_map[key]

        data = self._get_data_for_table(row, table_name._meta.db_table)

        data['provider_id'] = self._provider_id
        data['billing_period_start'] = datetime.strftime(
            start_date_utc, '%Y-%m-%d %H:%M%z')
        data['billing_period_end'] = datetime.strftime(end_date_utc,
                                                       '%Y-%m-%d %H:%M%z')

        bill_id = report_db_accessor.insert_on_conflict_do_nothing(
            table_name,
            data,
            conflict_columns=['billing_period_start', 'provider_id'])

        self.processed_report.bills[key] = bill_id

        return bill_id
Esempio n. 4
0
    def create_azure_cost_entry_bill(self, provider_id, bill_date=None):
        """Create an Azure cost entry bill database object for test."""
        table_name = AZURE_REPORT_TABLE_MAP['bill']
        data = self.create_columns_for_table(table_name)
        data['provider_id'] = provider_id
        fake_bill_date = self.make_datetime_aware(self.fake.past_datetime())
        data['billing_period_start'] = fake_bill_date
        data['billing_period_end'] = fake_bill_date

        if bill_date:
            report_date_range = azure_utils.month_date_range(bill_date)
            bill_start, bill_end = report_date_range.split('-')

            data['billing_period_start'] = self.make_datetime_aware(
                parser.parse(bill_start))
            data['billing_period_end'] = self.make_datetime_aware(
                parser.parse(bill_end))

        with AzureReportDBAccessor(self.schema, self.column_map) as accessor:
            return accessor.create_db_object(table_name, data)