def get_exporter_thread(metric_producers, exporter, interval=None): """Get a running task that periodically exports metrics. Get a `PeriodicTask` that periodically calls: export(itertools.chain(*all_gets)) where all_gets is the concatenation of all metrics produced by the metric producers in metric_producers, each calling metric_producer.get_metrics() :type metric_producers: list(:class:`opencensus.metrics.export.metric_producer.MetricProducer`) :param metric_producers: The list of metric producers to use to get metrics :type exporter: :class:`opencensus.stats.base_exporter.MetricsExporter` :param exporter: The exporter to use to export metrics. :type interval: int or float :param interval: Seconds between export calls. :rtype: :class:`PeriodicTask` :return: A running thread responsible calling the exporter. """ weak_gets = [ utils.get_weakref(producer.get_metrics) for producer in metric_producers ] weak_export = utils.get_weakref(exporter.export_metrics) def export_all(): all_gets = [] for weak_get in weak_gets: get = weak_get() if get is None: raise TransportError("Metric producer is not available") all_gets.append(get()) export = weak_export() if export is None: raise TransportError("Metric exporter is not available") export(itertools.chain(*all_gets)) tt = PeriodicMetricTask(interval, export_all, name=exporter.__class__.__name__) tt.start() return tt
def test_get_weakref_unbound(self): mock_val = Mock() func = lambda: mock_val # noqa ref = utils.get_weakref(func) self.assertIsInstance(ref, weakref.ref) self.assertIs(ref(), func) self.assertIs(ref()(), mock_val) del func gc.collect() self.assertIsNotNone(ref) self.assertIsNone(ref())
def test_get_weakref_bound(self): mock_val = Mock() getter = TestGetWeakref.Getter(mock_val) ref = utils.get_weakref(getter.get) self.assertIsInstance(ref, WeakMethod) self.assertEqual(ref(), getter.get) self.assertIs(ref()(), mock_val) del getter gc.collect() self.assertIsNotNone(ref) self.assertIsNone(ref())
def get_exporter_thread(metric_producer, exporter, interval=None): """Get a running task that periodically exports metrics. Get a `PeriodicTask` that periodically calls: exporter.export_metrics(metric_producer.get_metrics()) :type metric_producer: :class:`opencensus.metrics.export.metric_producer.MetricProducer` :param exporter: The producer to use to get metrics to export. :type exporter: :class:`opencensus.stats.base_exporter.MetricsExporter` :param exporter: The exporter to use to export metrics. :type interval: int or float :param interval: Seconds between export calls. :rtype: :class:`PeriodicTask` :return: A running thread responsible calling the exporter. """ weak_get = utils.get_weakref(metric_producer.get_metrics) weak_export = utils.get_weakref(exporter.export_metrics) def export_all(): get = weak_get() if get is None: raise TransportError("Metric producer is not available") export = weak_export() if export is None: raise TransportError("Metric exporter is not available") export(get()) tt = PeriodicTask(export_all, interval=interval) tt.start() return tt
def test_get_weakref_bad_args(self): with self.assertRaises(ValueError): utils.get_weakref(None)
def __init__(self, func, gauge_point): self.gauge_point = gauge_point self.func = utils.get_weakref(func)