def test_export_exemplar(self):
        metric = _create_metric(
            metric_descriptor.MetricDescriptorType.CUMULATIVE_DISTRIBUTION,
            points=[
                point.Point(value=_create_distribution_value(
                    bounds=[1],
                    buckets=[
                        value.Bucket(count=1,
                                     exemplar=value.Exemplar(
                                         value=2.5,
                                         timestamp=TEST_TIME_STR,
                                         attachments={'key1': 'value1'})),
                        value.Bucket(count=0),
                    ]),
                            timestamp=datetime.now())
            ])

        handler = mock.Mock(spec=ocagent.ExportRpcHandler)
        ocagent.StatsExporter(handler).export_metrics([metric])

        self.assertEqual(
            handler.send.call_args[0][0].metrics[0].timeseries[0].points[0].
            distribution_value.buckets[0].exemplar,
            metrics_pb2.DistributionValue.Exemplar(
                value=2.5,
                timestamp=timestamp_pb2.Timestamp(seconds=1545699723,
                                                  nanos=4000),
                attachments={'key1': 'value1'}))
    def to_point(self, timestamp):
        """Get a Point conversion of this aggregation.

        This method creates a :class: `opencensus.metrics.export.point.Point`
        with a :class: `opencensus.metrics.export.value.ValueDistribution`
        value, and creates buckets and exemplars for that distribution from the
        appropriate classes in the `metrics` package.

        :type timestamp: :class: `datetime.datetime`
        :param timestamp: The time to report the point as having been recorded.

        :rtype: :class: `opencensus.metrics.export.point.Point`
        :return: a :class: `opencensus.metrics.export.value.ValueDistribution`
        -valued Point.
        """
        buckets = [None] * len(self.counts_per_bucket)
        for ii, count in enumerate(self.counts_per_bucket):
            stat_ex = self.exemplars.get(ii, None)
            if stat_ex is not None:
                metric_ex = value.Exemplar(stat_ex.value, stat_ex.timestamp,
                                           copy.copy(stat_ex.attachments))
                buckets[ii] = value.Bucket(count, metric_ex)
            else:
                buckets[ii] = value.Bucket(count)

        bucket_options = value.BucketOptions(value.Explicit(self.bounds))
        return point.Point(
            value.ValueDistribution(
                count=self.count_data,
                sum_=self.sum,
                sum_of_squared_deviation=self.sum_of_sqd_deviations,
                bucket_options=bucket_options,
                buckets=buckets), timestamp)
    def test_init_bad_args(self):

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(-1, VD_SUM,
                                           VD_SUM_OF_SQUARED_DEVIATION,
                                           BUCKET_BOUNDS, BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(0, VD_SUM,
                                           VD_SUM_OF_SQUARED_DEVIATION,
                                           BUCKET_BOUNDS, BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(0, 0, VD_SUM_OF_SQUARED_DEVIATION,
                                           BUCKET_BOUNDS, BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(VD_COUNT, VD_SUM,
                                           VD_SUM_OF_SQUARED_DEVIATION, None,
                                           BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(VD_COUNT, VD_SUM,
                                           VD_SUM_OF_SQUARED_DEVIATION, [],
                                           BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(0, 0, 0, BUCKET_BOUNDS, BUCKETS)

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(
                VD_COUNT, VD_SUM, VD_SUM_OF_SQUARED_DEVIATION, [1, 1],
                [value_module.Bucket(1, None),
                 value_module.Bucket(1, None)])

        with self.assertRaises(ValueError):
            value_module.ValueDistribution(VD_COUNT - 1, VD_SUM,
                                           VD_SUM_OF_SQUARED_DEVIATION,
                                           BUCKET_BOUNDS, BUCKETS)
    def setUp(self):
        self.double_value = value_module.Value.double_value(55.5)
        self.long_value = value_module.Value.long_value(9876543210)
        self.timestamp = '2018-10-06T17:57:57.936475Z'

        value_at_percentile = [summary_module.ValueAtPercentile(99.5, 10.2)]
        snapshot = summary_module.Snapshot(10, 87.07, value_at_percentile)
        self.summary = summary_module.Summary(10, 6.6, snapshot)
        self.summary_value = value_module.Value.summary_value(self.summary)
        self.distribution_value = value_module.ValueDistribution(
            100,
            1000.0,
            10.0,
            list(range(11)),
            [value_module.Bucket(10, None) for ii in range(10)],
        )
Example #5
0
 def test_init(self):
     bucket = value_module.Bucket(1, self.exemplar)
     self.assertEqual(bucket.count, 1)
     self.assertEqual(bucket.exemplar, self.exemplar)
Example #6
0
        snapshot = summary_module.Snapshot(10, 87.07, value_at_percentile)
        summary = summary_module.Summary(10, 6.6, snapshot)

        summary_value = value_module.Value.summary_value(summary)

        self.assertIsNotNone(summary_value)
        self.assertIsInstance(summary_value, value_module.ValueSummary)
        self.assertEqual(summary_value.value, summary)


VD_COUNT = 100
VD_SUM = 1000.0
VD_SUM_OF_SQUARED_DEVIATION = 10.0
BOUNDS = list(range(1, 10))
BUCKET_OPTIONS = value_module.BucketOptions(value_module.Explicit(BOUNDS))
BUCKETS = [value_module.Bucket(10, None) for ii in range(10)]


class TestValueDistribution(unittest.TestCase):
    def test_init(self):
        distribution = value_module.ValueDistribution(
            VD_COUNT, VD_SUM, VD_SUM_OF_SQUARED_DEVIATION, BUCKET_OPTIONS,
            BUCKETS)
        self.assertEqual(distribution.count, VD_COUNT)
        self.assertEqual(distribution.sum, VD_SUM)
        self.assertEqual(distribution.sum_of_squared_deviation,
                         VD_SUM_OF_SQUARED_DEVIATION)
        self.assertEqual(distribution.bucket_options, BUCKET_OPTIONS)
        self.assertEqual(distribution.bucket_options.type_.bounds, BOUNDS)
        self.assertEqual(distribution.buckets, BUCKETS)