def test_add_current_month_deltas_no_previous_data_w_query_data(self): """Test that current month deltas are calculated with no previous data for field two.""" url = "?filter[time_scope_value]=-1&filter[resolution]=monthly&filter[limit]=1" query_params = self.mocked_query_params(url, OCPCpuView) handler = OCPReportQueryHandler(query_params) handler._delta = "usage__foo" q_table = handler._mapper.provider_map.get("tables").get("query") with tenant_context(self.tenant): query = q_table.objects.filter(handler.query_filter) query_data = query.annotate(**handler.annotations) group_by_value = handler._get_group_by() query_group_by = ["date"] + group_by_value query_order_by = ("-date", ) query_order_by += (handler.order, ) annotations = annotations = handler.report_annotations query_data = query_data.values(*query_group_by).annotate( **annotations) aggregates = handler._mapper.report_type_map.get("aggregates") metric_sum = query.aggregate(**aggregates) query_sum = { key: metric_sum.get(key) if metric_sum.get(key) else Decimal(0) for key in aggregates } result = handler.add_current_month_deltas(query_data, query_sum) self.assertEqual(result, query_data) self.assertIsNotNone(handler.query_delta["value"]) self.assertIsNone(handler.query_delta["percent"])
def test_add_current_month_deltas_no_previous_data_wo_query_data(self): """Test that current month deltas are calculated with no previous month data.""" OCPReportDataGenerator(self.tenant, self.provider).remove_data_from_tenant() OCPReportDataGenerator( self.tenant, self.provider, current_month_only=True ).add_data_to_tenant() url = '?filter[time_scope_value]=-2&filter[resolution]=monthly&filter[time_scope_units]=month&filter[limit]=1&delta=usage__request' # noqa: E501 query_params = self.mocked_query_params(url, OCPCpuView) handler = OCPReportQueryHandler(query_params) q_table = handler._mapper.provider_map.get('tables').get('query') with tenant_context(self.tenant): query = q_table.objects.filter(handler.query_filter) query_data = query.annotate(**handler.annotations) group_by_value = handler._get_group_by() query_group_by = ['date'] + group_by_value query_order_by = ('-date',) query_order_by += (handler.order,) annotations = annotations = handler.report_annotations query_data = query_data.values(*query_group_by).annotate(**annotations) aggregates = handler._mapper.report_type_map.get('aggregates') metric_sum = query.aggregate(**aggregates) query_sum = { key: metric_sum.get(key) if metric_sum.get(key) else Decimal(0) for key in aggregates } result = handler.add_current_month_deltas(query_data, query_sum) self.assertEqual(result, query_data) self.assertEqual(handler.query_delta['value'], Decimal(0)) self.assertIsNone(handler.query_delta['percent'])
def test_add_current_month_deltas(self): """Test that current month deltas are calculated.""" url = '?' query_params = self.mocked_query_params(url, OCPCpuView) handler = OCPReportQueryHandler(query_params) handler._delta = 'usage__request' q_table = handler._mapper.provider_map.get('tables').get('query') with tenant_context(self.tenant): query = q_table.objects.filter(handler.query_filter) query_data = query.annotate(**handler.annotations) group_by_value = handler._get_group_by() query_group_by = ['date'] + group_by_value query_order_by = ('-date',) query_order_by += (handler.order,) annotations = handler.report_annotations query_data = query_data.values(*query_group_by).annotate(**annotations) aggregates = handler._mapper.report_type_map.get('aggregates') metric_sum = query.aggregate(**aggregates) query_sum = {key: metric_sum.get(key) for key in aggregates} result = handler.add_current_month_deltas(query_data, query_sum) delta_field_one, delta_field_two = handler._delta.split('__') field_one_total = Decimal(0) field_two_total = Decimal(0) for entry in result: field_one_total += entry.get(delta_field_one, 0) field_two_total += entry.get(delta_field_two, 0) delta_percent = entry.get('delta_percent') expected = ( ( entry.get(delta_field_one, 0) / entry.get(delta_field_two, 0) * 100 ) if entry.get(delta_field_two) else 0 ) self.assertEqual(delta_percent, expected) expected_total = ( field_one_total / field_two_total * 100 if field_two_total != 0 else 0 ) self.assertEqual(handler.query_delta.get('percent'), expected_total)
def test_add_current_month_deltas_no_previous_data_w_query_data(self): """Test that current month deltas are calculated with no previous data for field two.""" OCPReportDataGenerator(self.tenant).remove_data_from_tenant() OCPReportDataGenerator(self.tenant, current_month_only=True).add_data_to_tenant() query_params = { 'filter': { 'resolution': 'monthly', 'time_scope_value': -1, 'limit': 1 }, } query_string = '?filter[resolution]=monthly&' + \ 'filter[time_scope_value]=-1&' + \ 'filter[limit]=1' handler = OCPReportQueryHandler(query_params, query_string, self.tenant, **{'report_type': 'cpu'}) handler._delta = 'usage__foo' q_table = handler._mapper.provider_map.get('tables').get('query') with tenant_context(self.tenant): query = q_table.objects.filter(handler.query_filter) query_data = query.annotate(**handler.annotations) group_by_value = handler._get_group_by() query_group_by = ['date'] + group_by_value query_order_by = ('-date', ) query_order_by += (handler.order, ) annotations = annotations = handler.report_annotations query_data = query_data.values(*query_group_by).annotate( **annotations) aggregates = handler._mapper.report_type_map.get('aggregates') metric_sum = query.aggregate(**aggregates) query_sum = { key: metric_sum.get(key) if metric_sum.get(key) else Decimal(0) for key in aggregates } result = handler.add_current_month_deltas(query_data, query_sum) self.assertEqual(result, query_data) self.assertIsNotNone(handler.query_delta['value']) self.assertIsNone(handler.query_delta['percent'])