Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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())
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
 def test_get_weakref_bad_args(self):
     with self.assertRaises(ValueError):
         utils.get_weakref(None)
Ejemplo n.º 6
0
 def __init__(self, func, gauge_point):
     self.gauge_point = gauge_point
     self.func = utils.get_weakref(func)