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 test_constructor_WithNonAsciiChars(self): key = '值' description = '测试用键' label_key = label_key_module.LabelKey(key, description) self.assertIsNotNone(label_key) self.assertEqual(label_key.key, key) self.assertEqual(label_key.description, description)
def test_constructor_Empty(self): key = '' description = '' label_key = label_key_module.LabelKey(key, description) self.assertIsNotNone(label_key) self.assertEqual(label_key.key, '') self.assertEqual(label_key.description, '')
def test_constructor(self): key = 'key1' description = 'description1' label_key = label_key_module.LabelKey(key, description) self.assertIsNotNone(label_key) self.assertEqual(label_key.key, key) self.assertEqual(label_key.description, description)
def view_to_metric_descriptor(view): """Get a MetricDescriptor for given view data. :type view: (:class: '~opencensus.stats.view.View') :param view: the view data to for which to build a metric descriptor """ return metric_descriptor.MetricDescriptor( view.name, view.description, view.measure.unit, get_metric_type(view.measure, view.aggregation), # TODO: add label key description [label_key.LabelKey(tk, "") for tk in view.columns])
def test_get_metric_descriptor_bad_type(self): exporter = stackdriver.StackdriverStatsExporter( options=stackdriver.Options(project_id='project_id'), client=mock.Mock()) bad_type_oc_md = metric_descriptor.MetricDescriptor( name='name', description='description', unit='unit', # Need a valid type to create the descriptor type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64, label_keys=[label_key.LabelKey('key', 'description')]) bad_type_oc_md._type = 100 with self.assertRaises(TypeError): exporter.get_metric_descriptor(bad_type_oc_md)
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)
def test_get_metric_descriptor_custom_prefix(self): exporter = stackdriver.StackdriverStatsExporter( options=stackdriver.Options(default_monitoring_labels={'dk': 'dd'}, metric_prefix='metric_prefix', project_id='project_id'), client=mock.Mock()) oc_md = metric_descriptor.MetricDescriptor( name='name', description='description', unit='unit', type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64, label_keys=[label_key.LabelKey('ck', 'cd')]) sd_md = exporter.get_metric_descriptor(oc_md) self.assertIn('metric_prefix', sd_md.type) self.assertIn('metric_prefix', sd_md.name)
def get_metric_descriptor(self): """Get a MetricDescriptor for this view. Lazily creates a MetricDescriptor for metrics conversion. :rtype: :class: `opencensus.metrics.export.metric_descriptor.MetricDescriptor` :return: A converted Metric. """ # noqa with self._md_cache_lock: if self._metric_descriptor is None: self._metric_descriptor = metric_descriptor.MetricDescriptor( self.name, self.description, self.measure.unit, self.aggregation.get_metric_type(self.measure), # TODO: add label key description [label_key.LabelKey(tk, "") for tk in self.columns]) return self._metric_descriptor
def test_register_metric_descriptor(self): exporter = stackdriver.StackdriverStatsExporter( options=stackdriver.Options(metric_prefix='metric_prefix', project_id='project_id'), client=mock.Mock()) oc_md = metric_descriptor.MetricDescriptor( name='name', description='description', unit='unit', type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64, label_keys=[label_key.LabelKey('key', 'description')]) exporter.register_metric_descriptor(oc_md) self.assertEqual(exporter.client.create_metric_descriptor.call_count, 1) exporter.register_metric_descriptor(oc_md) self.assertEqual(exporter.client.create_metric_descriptor.call_count, 1)
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)
def __init__(self, project_id="", resource="", metric_prefix="", default_monitoring_labels=None): self.project_id = project_id self.resource = resource self.metric_prefix = metric_prefix if default_monitoring_labels is None: self.default_monitoring_labels = { label_key.LabelKey(OPENCENSUS_TASK, OPENCENSUS_TASK_DESCRIPTION): label_value.LabelValue(get_task_value()) } else: for key, val in default_monitoring_labels.items(): if not isinstance(key, label_key.LabelKey): raise TypeError if not isinstance(val, label_value.LabelValue): raise TypeError self.default_monitoring_labels = default_monitoring_labels
def test_get_metric_descriptor(self): exporter = stackdriver.StackdriverStatsExporter( options=stackdriver.Options(default_monitoring_labels={'dk': 'dd'}, project_id='project_id'), client=mock.Mock()) oc_md = metric_descriptor.MetricDescriptor( name='name', description='description', unit='unit', type_=metric_descriptor.MetricDescriptorType.GAUGE_INT64, label_keys=[label_key.LabelKey('ck', 'cd')]) sd_md = exporter.get_metric_descriptor(oc_md) self.assertEqual(sd_md.metric_kind, monitoring_v3.enums.MetricDescriptor.MetricKind.GAUGE) self.assertEqual(sd_md.value_type, monitoring_v3.enums.MetricDescriptor.ValueType.INT64) self.assertIsInstance(sd_md, monitoring_v3.types.MetricDescriptor) exporter.client.create_metric_descriptor.assert_not_called()
# Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import unittest from opencensus.metrics import label_key from opencensus.metrics.export import metric_descriptor from opencensus.metrics.export import value NAME = 'metric' DESCRIPTION = 'Metric description' UNIT = '0.738.[ft_i].[lbf_av]/s' LABEL_KEY1 = label_key.LabelKey('key1', 'key description one') LABEL_KEY2 = label_key.LabelKey('值', '测试用键') LABEL_KEYS = (LABEL_KEY1, LABEL_KEY2) class TestMetricDescriptor(unittest.TestCase): def test_init(self): md = metric_descriptor.MetricDescriptor( NAME, DESCRIPTION, UNIT, metric_descriptor.MetricDescriptorType.GAUGE_DOUBLE, (LABEL_KEY1, LABEL_KEY2)) self.assertEqual(md.name, NAME) self.assertEqual(md.description, DESCRIPTION) self.assertEqual(md.unit, UNIT) self.assertEqual(md.type,