Exemplo n.º 1
0
def view_data_to_metric(view_data, timestamp):
    """Convert a ViewData to a Metric at time `timestamp`.

    :type view_data: :class: `opencensus.stats.view_data.ViewData`
    :param view_data: The ViewData to convert.

    :type timestamp: :class: `datetime.datetime`
    :param timestamp: The time to set on the metric's point's aggregation,
    usually the current time.

    :rtype: :class: `opencensus.metrics.export.metric.Metric`
    :return: A converted Metric.
    """
    md = view_data.view.get_metric_descriptor()

    # TODO: implement gauges
    if is_gauge(md.type):
        ts_start = None  # pragma: NO COVER
    else:
        ts_start = view_data.start_time

    ts_list = []
    for tag_vals, agg_data in view_data.tag_value_aggregation_data_map.items():
        label_values = get_label_values(tag_vals)
        point = agg_data.to_point(timestamp)
        ts_list.append(time_series.TimeSeries(label_values, [point], ts_start))
    return metric.Metric(md, ts_list)
    def test_export_metrics(self):
        lv = label_value.LabelValue('val')
        val = value.ValueLong(value=123)
        dt = datetime(2019, 3, 20, 21, 34, 0, 537954)
        pp = point.Point(value=val, timestamp=dt)

        ts = [
            time_series.TimeSeries(label_values=[lv],
                                   points=[pp],
                                   start_timestamp=utils.to_iso_str(dt))
        ]

        desc = metric_descriptor.MetricDescriptor(
            name='name',
            description='description',
            unit='unit',
            type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64,
            label_keys=[label_key.LabelKey('key', 'description')])

        mm = metric.Metric(descriptor=desc, time_series=ts)

        exporter = stackdriver.StackdriverStatsExporter(client=mock.Mock())
        exporter.export_metrics([mm])

        self.assertEqual(exporter.client.create_time_series.call_count, 1)
        sd_args = exporter.client.create_time_series.call_args[0][1]
        self.assertEqual(len(sd_args), 1)
        [sd_arg] = exporter.client.create_time_series.call_args[0][1]
        self.assertEqual(sd_arg.points[0].value.int64_value, 123)
def _create_metric(descriptor_type=metric_descriptor.MetricDescriptorType.
                   CUMULATIVE_INT64,
                   points=[]):
    return metric.Metric(
        metric_descriptor.MetricDescriptor('', '', '', descriptor_type, []), [
            time_series.TimeSeries([label_value.LabelValue()], points,
                                   TEST_TIME_STR)
        ])
Exemplo n.º 4
0
    def test_init(self):

        # Check for required arg errors
        with self.assertRaises(ValueError):
            metric.Metric(Mock(), None)
        with self.assertRaises(ValueError):
            metric.Metric(None, Mock())

        mock_time_series = Mock(spec=time_series.TimeSeries)
        mock_time_series.check_points_type.return_value = True

        mock_descriptor = Mock(spec=metric_descriptor.MetricDescriptor)
        mock_descriptor.type = (
            metric_descriptor.MetricDescriptorType.GAUGE_INT64)

        mm = metric.Metric(
            mock_descriptor,
            [mock_time_series],
        )
        self.assertEqual(mm.time_series, [mock_time_series])
        self.assertEqual(mm.descriptor, mock_descriptor)
Exemplo n.º 5
0
    def test_init_missing_start_timestamp(self):
        mock_ts = Mock(spec=time_series.TimeSeries)
        mock_ts.check_points_type.return_value = True
        mock_ts_no_start = Mock(spec=time_series.TimeSeries)
        mock_ts_no_start.start_timestamp = None
        mock_ts_no_start.check_points_type.return_value = True

        mock_descriptor_gauge = Mock(spec=metric_descriptor.MetricDescriptor)
        mock_descriptor_gauge.type = (
            metric_descriptor.MetricDescriptorType.GAUGE_INT64)
        mock_descriptor_cumulative = (Mock(
            spec=metric_descriptor.MetricDescriptor))
        mock_descriptor_cumulative.type = (
            metric_descriptor.MetricDescriptorType.CUMULATIVE_INT64)

        (metric.Metric(mock_descriptor_gauge,
                       [mock_ts])._check_start_timestamp())
        (metric.Metric(mock_descriptor_cumulative,
                       [mock_ts])._check_start_timestamp())
        (metric.Metric(mock_descriptor_gauge,
                       [mock_ts_no_start])._check_start_timestamp())
        with self.assertRaises(ValueError):
            metric.Metric(mock_descriptor_cumulative,
                          [mock_ts_no_start])._check_start_timestamp()
    def test_export_single_metric(self, mock_stats, mock_client):
        """Check that we can export a set of a single metric."""

        lv = label_value.LabelValue('val')
        val = value.ValueLong(value=123)
        dt = datetime(2019, 3, 20, 21, 34, 0, 537954)
        pp = point.Point(value=val, timestamp=dt)

        ts = [
            time_series.TimeSeries(label_values=[lv],
                                   points=[pp],
                                   start_timestamp=utils.to_iso_str(dt))
        ]

        desc = metric_descriptor.MetricDescriptor(
            name='name2',
            description='description2',
            unit='unit2',
            type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64,
            label_keys=[label_key.LabelKey('key', 'description')])

        mm = metric.Metric(descriptor=desc, time_series=ts)
        mock_stats.get_metrics.return_value = [mm]

        with MockGetExporterThread() as mget:
            exporter = stackdriver.new_stats_exporter(
                stackdriver.Options(project_id=1))
            mget.transport.step()

        exporter.client.create_metric_descriptor.assert_called()
        self.assertEqual(exporter.client.create_metric_descriptor.call_count,
                         1)
        md_call_arg =\
            exporter.client.create_metric_descriptor.call_args[0][1]
        self.assertEqual(md_call_arg.metric_kind,
                         monitoring_v3.enums.MetricDescriptor.MetricKind.GAUGE)
        self.assertEqual(md_call_arg.value_type,
                         monitoring_v3.enums.MetricDescriptor.ValueType.INT64)

        exporter.client.create_time_series.assert_called()
        self.assertEqual(exporter.client.create_time_series.call_count, 1)
        ts_call_arg = exporter.client.create_time_series.call_args[0][1]
        self.assertEqual(len(ts_call_arg), 1)
        self.assertEqual(len(ts_call_arg[0].points), 1)
        self.assertEqual(ts_call_arg[0].points[0].value.int64_value, 123)
Exemplo n.º 7
0
    def get_metric(self, timestamp):
        """Get a metric including all current time series.

        Get a :class:`opencensus.metrics.export.metric.Metric` with one
        :class:`opencensus.metrics.export.time_series.TimeSeries` for each
        set of label values with a recorded measurement. Each `TimeSeries`
        has a single point that represents the last recorded value.

        :type timestamp: :class:`datetime.datetime`
        :param timestamp: Recording time to report, usually the current time.

        :rtype: :class:`opencensus.metrics.export.metric.Metric` or None
        :return: A converted metric for all current measurements.
        """
        if not self.points:
            return None

        with self._points_lock:
            ts_list = get_timeseries_list(self.points, timestamp)
        return metric.Metric(self.descriptor, ts_list)
def create_metric():
    lv = label_value.LabelValue('val')
    val = value.ValueLong(value=123)
    dt = datetime(2019, 3, 20, 21, 34, 0, 537954)
    pp = point.Point(value=val, timestamp=dt)

    ts = [
        time_series.TimeSeries(label_values=[lv],
                               points=[pp],
                               start_timestamp=utils.to_iso_str(dt))
    ]

    desc = metric_descriptor.MetricDescriptor(
        name='name',
        description='description',
        unit='unit',
        type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64,
        label_keys=[label_key.LabelKey('key', 'description')])

    return metric.Metric(descriptor=desc, time_series=ts)
Exemplo n.º 9
0
    def test_init_wrong_ts_type(self):
        mock_descriptor = Mock(spec=metric_descriptor.MetricDescriptor)

        mock_time_series1 = Mock(spec=time_series.TimeSeries)
        mock_time_series1.check_points_type.return_value = True

        mock_time_series2 = Mock(spec=time_series.TimeSeries)
        mock_time_series2.check_points_type.return_value = False

        for value_type in (
                metric_descriptor.MetricDescriptorType.GAUGE_INT64,
                metric_descriptor.MetricDescriptorType.CUMULATIVE_INT64,
                metric_descriptor.MetricDescriptorType.GAUGE_DOUBLE,
                metric_descriptor.MetricDescriptorType.CUMULATIVE_DOUBLE,
                metric_descriptor.MetricDescriptorType.GAUGE_DISTRIBUTION,
                metric_descriptor.MetricDescriptorType.CUMULATIVE_DISTRIBUTION,
                metric_descriptor.MetricDescriptorType.SUMMARY,
                10  # unspecified type
        ):
            with self.assertRaises(ValueError):
                mock_descriptor.type = value_type
                metric.Metric(mock_descriptor,
                              [mock_time_series1, mock_time_series2])
Exemplo n.º 10
0
    def get_metric(self, timestamp):
        """Get a metric including all current time series.

        Get a :class:`opencensus.metrics.export.metric.Metric` with one
        :class:`opencensus.metrics.export.time_series.TimeSeries` for each
        set of label values with a recorded measurement. Each `TimeSeries`
        has a single point that represents the last recorded value.

        :type timestamp: :class:`datetime.datetime`
        :param timestamp: Recording time to report, usually the current time.

        :rtype: :class:`opencensus.metrics.export.metric.Metric` or None
        :return: A converted metric for all current measurements.
        """
        if not self.points:
            return None

        ts_list = []
        with self._points_lock:
            for lv, gp in self.points.items():
                point = point_module.Point(
                    self.value_type(gp.value), timestamp)
                ts_list.append(time_series.TimeSeries(lv, [point], timestamp))
        return metric.Metric(self.descriptor, ts_list)