def test_handle_upload_no_data(self): client = mock.Mock() option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) exporter.handle_upload(None) self.assertFalse(client.create_time_series.called)
def test_create_timeseries(self): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter(view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) view_manager.register_view(VIDEO_SIZE_VIEW) tag_value = tag_value_module.TagValue("1200") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY, tag_value) measure_map = stats_recorder.new_measurement_map() measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view(VIDEO_SIZE_VIEW_NAME, None) time_serie = exporter.create_time_series_list(v_data,"") self.assertIsNotNone(time_serie) time_serie = exporter.create_time_series_list(v_data,"global") self.assertIsNotNone(time_serie)
def test_create_metric_descriptor(self): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() option = stackdriver.Options(project_id="project-test", metric_prefix="teste") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) desc = exporter.create_metric_descriptor(VIDEO_SIZE_VIEW) self.assertNotEqual(desc, None)
def test_export_no_data(self): client = mock.Mock() transport = mock.Mock() option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter( options=option, client=client, transport=transport) exporter.export(None) self.assertFalse(exporter.transport.export.called)
def test_create_metric_descriptor(self): client = mock.Mock() option = stackdriver.Options(project_id="project-test", metric_prefix="teste") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) desc = exporter.create_metric_descriptor(VIDEO_SIZE_VIEW) self.assertIsNotNone(desc)
def test_on_register_view(self): client = mock.Mock() view_none = None option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) exporter.on_register_view(VIDEO_SIZE_VIEW) exporter.on_register_view(view_none) self.assertTrue(client.create_metric_descriptor.called)
def test_constructor_param(self): project_id = 1 default_labels = {'key1': 'value1'} exporter = stackdriver.StackdriverStatsExporter( options=stackdriver.Options(project_id=project_id), default_labels=default_labels) self.assertEqual(exporter.options.project_id, project_id) self.assertEqual(exporter.default_labels, default_labels)
def test_create_timeseries_with_resource(self, monitor_resource_mock): client = mock.Mock() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) view_manager.register_view(VIDEO_SIZE_VIEW) tag_value = tag_value_module.TagValue("1200") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY, tag_value) measure_map = stats_recorder.new_measurement_map() measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view( VIDEO_SIZE_VIEW_NAME, None) mocked_labels = { 'instance_id': 'my-instance', 'project_id': 'my-project', 'zone': 'us-east1', 'pod_id': 'localhost', 'namespace_id': 'namespace' } monitor_resource_mock.return_value = mock.Mock() monitor_resource_mock.return_value.resource_type = 'gce_instance' monitor_resource_mock.return_value.get_resource_labels.return_value = mocked_labels time_series = exporter.create_time_series_list(v_data, "", "") self.assertEquals(time_series.resource.type, "gce_instance") self.assertEquals( time_series.metric.type, "custom.googleapis.com/opencensus/my.org/views/video_size_test2") self.assertIsNotNone(time_series) time_series = exporter.create_time_series_list(v_data, "global", "") self.assertEquals( time_series.metric.type, "custom.googleapis.com/opencensus/my.org/views/video_size_test2") self.assertIsNotNone(time_series)
def test_export_with_data(self): client = mock.Mock() transport = mock.Mock() v_data = view_data_module.ViewData( view=VIDEO_SIZE_VIEW, start_time=TEST_TIME, end_time=TEST_TIME) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter( options=option, client=client, transport=transport) exporter.export(view_data) self.assertTrue(exporter.transport.export.called)
def test_handle_upload_with_data(self, monitor_resource_mock): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() v_data = view_data_module.ViewData( view=VIDEO_SIZE_VIEW, start_time=start_time, end_time=end_time) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter( options=option, client=client) exporter.handle_upload(view_data) self.assertTrue(client.create_time_series.called)
def test_make_request(self): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() v_data = view_data_module.ViewData(view=VIDEO_SIZE_VIEW, start_time=start_time, end_time=end_time) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) requests = exporter.make_request(view_data,1) self.assertEqual(len(requests), 1)
def test_handle_upload_with_data(self, monitor_resource_mock): client = mock.Mock() v_data = view_data_module.ViewData(view=VIDEO_SIZE_VIEW, start_time=TEST_TIME, end_time=TEST_TIME) v_data.record(context=tag_map_module.TagMap(), value=2, timestamp=None) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) exporter.handle_upload(view_data) self.assertTrue(client.create_time_series.called)
def test_create_timeseries_float_tagvalue(self, monitor_resource_mock): client = mock.Mock() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) agg_3 = aggregation_module.SumAggregation(sum=2.2) view_name3 = "view-name3" new_view3 = view_module.View(view_name3, "processed video size over time", [FRONTEND_KEY_FLOAT], VIDEO_SIZE_MEASURE_FLOAT, agg_3) view_manager.register_view(new_view3) tag_value_float = tag_value_module.TagValue("1200") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY_FLOAT, tag_value_float) measure_map = stats_recorder.new_measurement_map() measure_map.measure_float_put(VIDEO_SIZE_MEASURE_FLOAT, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view(view_name3, None) time_series_list = exporter.create_time_series_list( v_data, "global", "") self.assertEqual(len(time_series_list), 1) [time_series] = time_series_list self.assertEqual(time_series.metric.type, "custom.googleapis.com/opencensus/view-name3") self.assertCorrectLabels(time_series.metric.labels, {FRONTEND_KEY_FLOAT_CLEAN: "1200"}, include_opencensus=True) self.assertIsNotNone(time_series.resource) self.assertEqual(len(time_series.points), 1) expected_value = monitoring_v3.types.TypedValue() expected_value.double_value = 2.2 + 25 * MiB self.assertEqual(time_series.points[0].value, expected_value)
def test_create_metric_descriptor_count(self): client = mock.Mock() option = stackdriver.Options( project_id="project-test", metric_prefix="teste") view_name_count = "view-count" agg_count = aggregation_module.CountAggregation(count=2) view_count = view_module.View( view_name_count, "processed video size over time", [FRONTEND_KEY], VIDEO_SIZE_MEASURE, agg_count) exporter = stackdriver.StackdriverStatsExporter( options=option, client=client) desc = exporter.create_metric_descriptor(view_count) self.assertIsNotNone(desc)
def test_create_metric_descriptor_sum_float(self): client = mock.Mock() option = stackdriver.Options( project_id="project-test", metric_prefix="teste") view_name_sum_float = "view-sum-float" agg_sum = aggregation_module.SumAggregation(sum=2) view_sum_float = view_module.View( view_name_sum_float, "processed video size over time", [FRONTEND_KEY_FLOAT], VIDEO_SIZE_MEASURE_FLOAT, agg_sum) exporter = stackdriver.StackdriverStatsExporter( options=option, client=client) desc = exporter.create_metric_descriptor(view_sum_float) self.assertIsNotNone(desc)
def test_create_metric_descriptor_last_value_float(self): client = mock.Mock() option = stackdriver.Options( project_id="project-test", metric_prefix="teste") view_name_base = "view-base" agg_base = aggregation_module.LastValueAggregation() view_base = view_module.View( view_name_base, "processed video size over time", [FRONTEND_KEY], VIDEO_SIZE_MEASURE_FLOAT, agg_base) exporter = stackdriver.StackdriverStatsExporter( options=option, client=client) desc = exporter.create_metric_descriptor(view_base) self.assertIsNotNone(desc)
def test_handle_upload(self): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() v_data = view_data_module.ViewData(view=VIDEO_SIZE_VIEW, start_time=start_time, end_time=end_time) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) exporter.handle_upload(view_data) self.assertTrue(True) exporter.handle_upload(None) self.assertTrue(True)
def test_create_metric_descriptor_base(self): client = mock.Mock() option = stackdriver.Options( project_id="project-test", metric_prefix="teste") view_name_base = "view-base" agg_base = aggregation_module.BaseAggregation() view_base = view_module.View( view_name_base, "processed video size over time", [FRONTEND_KEY], VIDEO_SIZE_MEASURE, agg_base) exporter = stackdriver.StackdriverStatsExporter( options=option, client=client) self.assertRaises(Exception, exporter.create_metric_descriptor, view_base)
def test_create_batched_time_series_with_many(self, monitor_resource_mock): client = mock.Mock() # First view with 3 view_name1 = "view-name1" view1 = view_module.View(view_name1, "test description", ['test'], VIDEO_SIZE_MEASURE, aggregation_module.LastValueAggregation()) v_data1 = view_data_module.ViewData(view=view1, start_time=TEST_TIME, end_time=TEST_TIME) v_data1.record(context=tag_map_module.TagMap({'test': '1'}), value=7, timestamp=None) v_data1.record(context=tag_map_module.TagMap({'test': '2'}), value=5, timestamp=None) v_data1.record(context=tag_map_module.TagMap({'test': '3'}), value=3, timestamp=None) # Second view with 2 view_name2 = "view-name2" view2 = view_module.View(view_name2, "test description", ['test'], VIDEO_SIZE_MEASURE, aggregation_module.LastValueAggregation()) v_data2 = view_data_module.ViewData(view=view2, start_time=TEST_TIME, end_time=TEST_TIME) v_data2.record(context=tag_map_module.TagMap({'test': '1'}), value=7, timestamp=None) v_data2.record(context=tag_map_module.TagMap({'test': '2'}), value=5, timestamp=None) view_data = [v_data1, v_data2] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) time_series_batches = exporter.create_batched_time_series(view_data, 2) self.assertEqual(len(time_series_batches), 3) [tsb1, tsb2, tsb3] = time_series_batches self.assertEqual(len(tsb1), 2) self.assertEqual(len(tsb2), 2) self.assertEqual(len(tsb3), 1)
def test_create_metric_descriptor_sum_int(self): client = mock.Mock() start_time = datetime.utcnow() end_time = datetime.utcnow() option = stackdriver.Options(project_id="project-test", metric_prefix="teste") view_name_sum_int= "view-sum-int" agg_sum = aggregation_module.SumAggregation(sum=2) view_sum_int = view_module.View(view_name_sum_int, "processed video size over time", [FRONTEND_KEY], VIDEO_SIZE_MEASURE, agg_sum) exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) desc = exporter.create_metric_descriptor(view_sum_int) self.assertNotEqual(desc, None)
def test_create_timeseries_last_value_float_tagvalue( self, monitor_resource_mock): client = mock.Mock() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) agg_1 = aggregation_module.LastValueAggregation(value=2) view_name1 = "view-name1" new_view1 = view_module.View(view_name1, "processed video size over time", [FRONTEND_KEY_FLOAT], VIDEO_SIZE_MEASURE_FLOAT, agg_1) view_manager.register_view(new_view1) tag_value_int = tag_value_module.TagValue("Abc") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY_INT, tag_value_int) measure_map = stats_recorder.new_measurement_map() measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view(view_name1, None) time_series = exporter.create_time_series_list(v_data, "global", "kubernetes.io/myorg") self.assertEquals(time_series.metric.type, "kubernetes.io/myorg/view-name1") self.assertIsNotNone(time_series)
def test_create_timeseries_something(self): """Check that exporter creates timeseries for multiple tag values. create_time_series_list should return a time series for each set of values in the tag value aggregation map. """ v_data = mock.Mock(spec=view_data_module.ViewData) v_data.view.name = "example.org/test_view" v_data.view.columns = [ tag_key_module.TagKey('color'), tag_key_module.TagKey('shape') ] v_data.view.aggregation.aggregation_type = \ aggregation_module.Type.COUNT v_data.start_time = TEST_TIME v_data.end_time = TEST_TIME rs_count = aggregation_data_module.CountAggregationData(10) bc_count = aggregation_data_module.CountAggregationData(20) v_data.tag_value_aggregation_data_map = { ('red', 'square'): rs_count, ('blue', 'circle'): bc_count, } exporter = stackdriver.StackdriverStatsExporter( options=mock.Mock(), client=mock.Mock(), ) time_series_list = exporter.create_time_series_list(v_data, "", "") self.assertEqual(len(time_series_list), 2) self.assertEqual(len(time_series_list[0].points), 1) self.assertEqual(len(time_series_list[1].points), 1) ts_by_color = { ts.metric.labels.get('color'): ts for ts in time_series_list } rs_ts = ts_by_color['red'] bc_ts = ts_by_color['blue'] self.assertEqual(rs_ts.metric.labels.get('shape'), 'square') self.assertEqual(bc_ts.metric.labels.get('shape'), 'circle') self.assertEqual(rs_ts.points[0].value.int64_value, 10) self.assertEqual(bc_ts.points[0].value.int64_value, 20)
def test_create_timeseries_from_distribution(self): """Check for explicit 0-bound bucket for SD export.""" v_data = mock.Mock(spec=view_data_module.ViewData) v_data.view.name = "example.org/test_view" v_data.view.columns = ['tag_key'] v_data.view.aggregation.aggregation_type = \ aggregation_module.Type.DISTRIBUTION v_data.start_time = TEST_TIME v_data.end_time = TEST_TIME # Aggregation over (10 * range(10)) for buckets [2, 4, 6, 8] dad = aggregation_data_module.DistributionAggregationData( mean_data=4.5, count_data=100, min_=0, max_=9, sum_of_sqd_deviations=825, counts_per_bucket=[20, 20, 20, 20, 20], bounds=[2, 4, 6, 8], exemplars={mock.Mock() for ii in range(5)}) v_data.tag_value_aggregation_data_map = {('tag_value', ): dad} exporter = stackdriver.StackdriverStatsExporter( options=mock.Mock(), client=mock.Mock(), ) time_series_list = exporter.create_time_series_list(v_data, "", "") self.assertEqual(len(time_series_list), 1) [time_series] = time_series_list self.assertCorrectLabels(time_series.metric.labels, {'tag_key': 'tag_value'}, include_opencensus=True) self.assertEqual(len(time_series.points), 1) [point] = time_series.points dv = point.value.distribution_value self.assertEqual(100, dv.count) self.assertEqual(4.5, dv.mean) self.assertEqual(825.0, dv.sum_of_squared_deviation) self.assertEqual([0, 20, 20, 20, 20, 20], dv.bucket_counts) self.assertEqual([0, 2, 4, 6, 8], dv.bucket_options.explicit_buckets.bounds)
def test_create_timeseries_float_tagvalue(self, monitor_resource_mock): client = mock.Mock() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) agg_2 = aggregation_module.SumAggregation(sum=2.2) view_name2 = "view-name2" new_view2 = view_module.View(view_name2, "processed video size over time", [FRONTEND_KEY_FLOAT], VIDEO_SIZE_MEASURE_FLOAT, agg_2) view_manager.register_view(new_view2) tag_value_float = tag_value_module.TagValue("1200") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY_FLOAT, tag_value_float) measure_map = stats_recorder.new_measurement_map() measure_map.measure_float_put(VIDEO_SIZE_MEASURE_FLOAT, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view(view_name2, None) time_series = exporter.create_time_series_list(v_data, "global", "") self.assertEquals(time_series.metric.type, "custom.googleapis.com/opencensus/view-name2") self.assertIsNotNone(time_series)
def setup_create_timeseries_test(self): client = mock.Mock() execution_context.clear() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) return view_manager, stats_recorder, exporter
def test_create_timeseries(self, monitor_resource_mock): client = mock.Mock() option = stackdriver.Options(project_id="project-test", resource="global") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) stats = stats_module.Stats() view_manager = stats.view_manager stats_recorder = stats.stats_recorder if len(view_manager.measure_to_view_map.exporters) > 0: view_manager.unregister_exporter( view_manager.measure_to_view_map.exporters[0]) view_manager.register_exporter(exporter) view_manager.register_view(VIDEO_SIZE_VIEW) tag_value = tag_value_module.TagValue("1200") tag_map = tag_map_module.TagMap() tag_map.insert(FRONTEND_KEY, tag_value) measure_map = stats_recorder.new_measurement_map() measure_map.measure_int_put(VIDEO_SIZE_MEASURE, 25 * MiB) measure_map.record(tag_map) v_data = measure_map.measure_to_view_map.get_view( VIDEO_SIZE_VIEW_NAME, None) time_series = exporter.create_time_series_list(v_data, "", "") self.assertEquals(time_series.resource.type, "global") self.assertEquals( time_series.metric.type, "custom.googleapis.com/opencensus/my.org/views/video_size_test2") self.assertIsNotNone(time_series) time_series = exporter.create_time_series_list(v_data, "global", "kubernetes.io/myorg") self.assertEquals(time_series.metric.type, "kubernetes.io/myorg/my.org/views/video_size_test2") self.assertIsNotNone(time_series)
def test_create_timeseries_invalid_aggregation(self): v_data = mock.Mock(spec=view_data_module.ViewData) v_data.view.name = "example.org/base_view" v_data.view.columns = [tag_key_module.TagKey('base_key')] v_data.view.aggregation.aggregation_type = \ aggregation_module.Type.NONE v_data.start_time = TEST_TIME v_data.end_time = TEST_TIME base_data = aggregation_data_module.BaseAggregationData(10) v_data.tag_value_aggregation_data_map = { (None, ): base_data, } exporter = stackdriver.StackdriverStatsExporter( options=mock.Mock(), client=mock.Mock(), ) self.assertRaises(TypeError, exporter.create_time_series_list, v_data, "", "")
def test_create_batched_time_series(self, monitor_resource_mock): client = mock.Mock() v_data = view_data_module.ViewData(view=VIDEO_SIZE_VIEW, start_time=TEST_TIME, end_time=TEST_TIME) v_data.record(context=tag_map_module.TagMap(), value=2, timestamp=None) view_data = [v_data] option = stackdriver.Options(project_id="project-test") exporter = stackdriver.StackdriverStatsExporter(options=option, client=client) time_series_batches = exporter.create_batched_time_series(view_data, 1) self.assertEqual(len(time_series_batches), 1) [time_series_batch] = time_series_batches self.assertEqual(len(time_series_batch), 1) [time_series] = time_series_batch self.assertEqual( time_series.metric.type, 'custom.googleapis.com/opencensus/' + VIDEO_SIZE_VIEW_NAME) self.assertCorrectLabels(time_series.metric.labels, {}, include_opencensus=True)
def test_create_timeseries_from_distribution(self): """Check for explicit 0-bound bucket for SD export.""" v_data = mock.Mock(spec=view_data_module.ViewData) v_data.view.name = "example.org/test_view" v_data.start_time = '2018-11-21T00:12:34.56Z' v_data.end_time = '2018-11-21T00:23:45.67Z' # Aggregation over (10 * range(10)) for buckets [2, 4, 6, 8] dad = aggregation_data_module.DistributionAggregationData( mean_data=4.5, count_data=100, min_=0, max_=9, sum_of_sqd_deviations=825, counts_per_bucket=[20, 20, 20, 20, 20], bounds=[2, 4, 6, 8], exemplars={mock.Mock() for ii in range(5)}) v_data.tag_value_aggregation_data_map = ({'tag_key': dad}) exporter = stackdriver.StackdriverStatsExporter( options=mock.Mock(), client=mock.Mock(), ) time_series = exporter.create_time_series_list(v_data, "", "") self.assertEqual(len(time_series.points), 1) [point] = time_series.points dv = point.value.distribution_value self.assertEqual(100, dv.count) self.assertEqual(4.5, dv.mean) self.assertEqual(825.0, dv.sum_of_squared_deviation) self.assertEqual([0, 20, 20, 20, 20, 20], dv.bucket_counts) self.assertEqual([0, 2, 4, 6, 8], dv.bucket_options.explicit_buckets.bounds)
def test_constructor(self): exporter = stackdriver.StackdriverStatsExporter() self.assertIsNone(exporter.client)