def test_filter_exported_views(self):
        test_view_1_name = "testView1"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        test_view_1 = View(name=test_view_1_name,
                           description=description,
                           columns=columns,
                           measure=measure,
                           aggregation=aggregation)
        print("test view 1", test_view_1)

        test_view_2_name = "testView2"
        test_view_2 = View(name=test_view_2_name,
                           description=description,
                           columns=columns,
                           measure=measure,
                           aggregation=aggregation)
        print("test view 2", test_view_2)
        all_the_views = {test_view_1, test_view_2}
        print("all the views", all_the_views)
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        views = measure_to_view_map.filter_exported_views(
            all_views=all_the_views)
        print("filtered views", views)
        self.assertEqual(views, all_the_views)
    def test_record_with_exporter(self):
        exporter = mock.Mock()
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(name=measure_name,
                              description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        View(name=view_name,
             description=view_description,
             columns=view_columns,
             measure=view_measure,
             aggregation=view_aggregation)

        measure_value = 5
        tags = {"testTag1": "testTag1Value"}
        measurement_map = {measure: measure_value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map.exporters.append(exporter)
        measure_to_view_map._registered_measures = {}
        record = measure_to_view_map.record(tags=tags,
                                            measurement_map=measurement_map,
                                            timestamp=timestamp)
        self.assertNotEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)
 def test_register_view_with_exporter(self):
     exporter = mock.Mock()
     name = "testView"
     description = "testDescription"
     columns = mock.Mock()
     measure = MeasureInt("measure", "description", "1")
     aggregation = mock.Mock()
     view = View(name=name,
                 description=description,
                 columns=columns,
                 measure=measure,
                 aggregation=aggregation)
     timestamp = mock.Mock()
     measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
     measure_to_view_map.exporters.append(exporter)
     measure_to_view_map._registered_views = {}
     measure_to_view_map._registered_measures = {}
     measure_to_view_map.register_view(view=view, timestamp=timestamp)
     self.assertIsNone(measure_to_view_map.exported_views)
     self.assertEqual(measure_to_view_map._registered_views[view.name],
                      view)
     self.assertEqual(
         measure_to_view_map._registered_measures[measure.name], measure)
     self.assertIsNotNone(
         measure_to_view_map._measure_to_view_data_list_map[
             view.measure.name])
    def test_export(self):
        exporter = mock.Mock()
        view_data = []
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(
            name=measure_name, description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        view = View(
            name=view_name,
            description=view_description,
            columns=view_columns,
            measure=view_measure,
            aggregation=view_aggregation)

        measure_value = 5
        tags = {"testTag1": "testTag1Value"}
        measurement_map = {measure: measure_value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map.exporters.append(exporter)
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.export(view_data)
        self.assertTrue(True)
    def test_get_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        no_registered_views = measure_to_view_map.get_view(view_name=name,
                                                           timestamp=timestamp)
        self.assertEqual(None, no_registered_views)

        measure_to_view_map._registered_views = {name: view}
        measure_to_view_map._map = {
            view.measure.name:
            [ViewData(view=view, start_time=timestamp, end_time=timestamp)]
        }
        print(measure_to_view_map._map)
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNotNone(view_data)

        measure_to_view_map._map = {}
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNone(view_data)

        measure_to_view_map._map = {
            view.measure.name: [
                ViewData(view=mock.Mock(),
                         start_time=timestamp,
                         end_time=timestamp)
            ]
        }
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNone(view_data)
    def test_register_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertIsNone(measure_to_view_map.exported_views)
        self.assertEqual(measure_to_view_map._registered_views[measure.name],
                         view)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        test_measure = mock.Mock()
        measure_to_view_map._registered_measures = {measure.name: test_measure}
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        measure_to_view_map._registered_measures = {measure.name: None}
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertEqual(
            measure, measure_to_view_map._registered_measures[measure.name])
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        measure_to_view_map._registered_views = {name: view}
        test_result_1 = measure_to_view_map.register_view(view=view,
                                                          timestamp=timestamp)
        self.assertIsNone(test_result_1)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])
    def _record_metrics(self, metrics):
        # The list of view data is what we are going to use for the
        # final export to exporter.
        view_data_changed: List[ViewData] = []

        # Walk the protobufs and convert them to ViewData
        for metric in metrics:
            descriptor = metric.metric_descriptor
            timeseries = metric.timeseries

            if len(timeseries) == 0:
                continue

            columns = [label_key.key for label_key in descriptor.label_keys]
            start_time = timeseries[0].start_timestamp.seconds

            # Create the view and view_data
            measure = measure_module.BaseMeasure(
                descriptor.name, descriptor.description, descriptor.unit)
            view = self.view_manager.measure_to_view_map.get_view(
                descriptor.name, None)
            if not view:
                view = View(
                    descriptor.name,
                    descriptor.description,
                    columns,
                    measure,
                    aggregation=None)
                self.view_manager.measure_to_view_map.register_view(
                    view, start_time)
            view_data = (self.view_manager.measure_to_view_map.
                         _measure_to_view_data_list_map[measure.name][-1])
            view_data_changed.append(view_data)

            # Create the aggregation and fill it in the our stats
            for series in timeseries:
                tag_vals = tuple(val.value for val in series.label_values)
                for point in series.points:
                    if point.HasField("int64_value"):
                        data = CountAggregationData(point.int64_value)
                    elif point.HasField("double_value"):
                        data = LastValueAggregationData(
                            ValueDouble, point.double_value)
                    elif point.HasField("distribution_value"):
                        dist_value = point.distribution_value
                        counts_per_bucket = [
                            bucket.count for bucket in dist_value.buckets
                        ]
                        bucket_bounds = (
                            dist_value.bucket_options.explicit.bounds)
                        data = DistributionAggregationData(
                            dist_value.sum / dist_value.count,
                            dist_value.count,
                            dist_value.sum_of_squared_deviation,
                            counts_per_bucket, bucket_bounds)
                    else:
                        raise ValueError("Summary is not supported")

                    view_data.tag_value_aggregation_data_map[tag_vals] = data

        # Finally, export all the values
        self.view_manager.measure_to_view_map.export(view_data_changed)
Example #8
0
 def __init__(self, name, description, unit, tags: List[str]):
     self._measure = measure_module.MeasureInt(name, description, unit)
     tags = [tag_key_module.TagKey(tag) for tag in tags]
     self._view = View(name, description, tags, self.measure,
                       aggregation.LastValueAggregation())
    def test_record(self):
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(name=measure_name,
                              description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        view = View(name=view_name,
                    description=view_description,
                    columns=view_columns,
                    measure=view_measure,
                    aggregation=view_aggregation)

        measure_value = 5
        value = "testValue"
        tags = {"testTag1": "testTag1Value"}
        stats = {Measurement(measure=measure, value=measure_value): value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map._registered_measures = {}
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertNotEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)

        measure_to_view_map._registered_measures = {measure.name: measure}
        measure_to_view_map._map = {}
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)

        measure_to_view_map._map = {measure.name: mock.Mock()}
        measure_to_view_map.record(tags=tags, stats=stats, timestamp=timestamp)
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertTrue(measure.name in measure_to_view_map._map)

        measure_to_view_map._map = {"testing": mock.Mock()}
        measure_to_view_map.record(tags=tags, stats=stats, timestamp=timestamp)
        self.assertTrue(measure.name not in measure_to_view_map._map)

        measure_to_view_map_mock = mock.Mock()
        measure_to_view_map = measure_to_view_map_mock
        measure_to_view_map._registered_measures = {measure.name: measure}
        measure_to_view_map._map = mock.Mock()
        measure_to_view_map.record(tags=mock.Mock(),
                                   stats=mock.Mock(),
                                   timestamp=mock.Mock())
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNotNone(measure_to_view_map.view_datas)
        self.assertTrue(measure_to_view_map_mock.record.called)

        tags = {"testTag1": "testTag1Value"}
        stats = {}
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertIsNone(record)
    def test_register_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = MeasureInt("measure", "description", "1")
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertIsNone(measure_to_view_map.exported_views)
        self.assertEqual(measure_to_view_map._registered_views[view.name],
                         view)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])

        # Registers a view with an existing measure.
        view2 = View(name="testView2",
                     description=description,
                     columns=columns,
                     measure=measure,
                     aggregation=aggregation)
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view2, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)

        # Registers a view with a measure that has the same name as an existing
        # measure, but with different schema. measure2 and view3 should be
        # ignored.
        measure2 = MeasureInt("measure", "another measure", "ms")
        view3 = View(name="testView3",
                     description=description,
                     columns=columns,
                     measure=measure2,
                     aggregation=aggregation)
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view3, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure2.name], measure)

        measure_to_view_map._registered_measures = {measure.name: None}
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        # view is already registered, measure will not be registered again.
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])

        measure_to_view_map._registered_views = {name: view}
        test_result_1 = measure_to_view_map.register_view(view=view,
                                                          timestamp=timestamp)
        self.assertIsNone(test_result_1)
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])
import mock

from opencensus.stats import measure_to_view_map as measure_to_view_map_module
from opencensus.stats.aggregation import CountAggregation
from opencensus.stats.measure import BaseMeasure
from opencensus.stats.measure import MeasureInt
from opencensus.stats.view import View
from opencensus.stats.view_data import ViewData
from opencensus.tags import tag_key as tag_key_module

METHOD_KEY = tag_key_module.TagKey("method")
REQUEST_COUNT_MEASURE = MeasureInt("request_count", "number of requests", "1")
REQUEST_COUNT_VIEW_NAME = "request_count_view"
COUNT = CountAggregation()
REQUEST_COUNT_VIEW = View(REQUEST_COUNT_VIEW_NAME,
                          "number of requests broken down by methods",
                          [METHOD_KEY], REQUEST_COUNT_MEASURE, COUNT)


class TestMeasureToViewMap(unittest.TestCase):
    @staticmethod
    def _get_target_class():
        return measure_to_view_map_module.MeasureToViewMap

    def _make_one(self, *args, **kw):
        return self._get_target_class()(*args, **kw)

    def test_constructor(self):
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        self.assertEqual({},