Exemple #1
0
    def __init__(self,
                 transport_handler,
                 queue_capacity=100,
                 batch_size=10,
                 flush_interval=DEFAULT_FLUSH_INTERVAL,
                 io_loop=None,
                 error_reporter=None,
                 metrics_factory=None,
                 **kwargs):
        """
        :param transport_handler: Callback function that takes a message
            parameter and handles logging it
        :param queue_capacity: how many spans we can hold in memory before
            starting to drop spans
        :param batch_size: how many spans we can submit at once to Collector
        :param flush_interval: how often the auto-flush is called (in seconds)
        :param io_loop: which IOLoop to use.
        :param error_reporter:
        :param metrics_factory: an instance of MetricsFactory class, or None.
        :param kwargs:
            'logger'
        :return:
        """
        from threading import Lock

        self.transport_handler = transport_handler
        self.queue_capacity = queue_capacity
        self.batch_size = batch_size
        self.metrics_factory = metrics_factory or \
            LegacyMetricsFactory(Metrics())
        self.metrics = ReporterMetrics(self.metrics_factory)
        self.error_reporter = error_reporter or ErrorReporter(Metrics())
        self.logger = kwargs.get('logger', default_logger)

        if queue_capacity < batch_size:
            raise ValueError('Queue capacity cannot be less than batch size')

        self.io_loop = io_loop
        if self.io_loop is None:
            self.logger.error('Zipkin Reporter has no IOLoop')
        elif not six.callable(self.transport_handler):
            self.logger.error('Zipkin Reporter has no transport handler')
        else:
            self.queue = tornado.queues.Queue(maxsize=queue_capacity)
            self.stop = object()
            self.stopped = False
            self.stop_lock = Lock()
            self.flush_interval = flush_interval or None

            self.io_loop.spawn_callback(self._consume_queue)
Exemple #2
0
    def test_submit_failure(self):
        reporter, sender = self._new_reporter(batch_size=1)
        reporter.error_reporter = ErrorReporter(metrics=reporter.metrics,
                                                logger=logging.getLogger())

        assert Metrics.REPORTER_FAILURE not in reporter.metrics.counters

        # simulate exception in send
        reporter._send = mock.MagicMock(side_effect=ValueError())
        reporter.report_span(self._new_span('1'))

        yield self._wait_for(
            lambda: Metrics.REPORTER_FAILURE in reporter.metrics.counters)
        assert 1 == reporter.metrics.counters.get(Metrics.REPORTER_FAILURE)

        # silly test, for code coverage only
        yield reporter._submit([])
    def test_submit_failure(self):
        reporter, sender = self._new_reporter(batch_size=1)
        reporter.error_reporter = ErrorReporter(metrics=Metrics(),
                                                logger=logging.getLogger())

        reporter_failure_key = 'jaeger:reporter_spans.result_err'
        assert reporter_failure_key not in reporter.metrics_factory.counters

        # simulate exception in send
        reporter._send = mock.MagicMock(side_effect=ValueError())
        reporter.report_span(self._new_span('1'))

        yield self._wait_for(
            lambda: reporter_failure_key in reporter.metrics_factory.counters)
        assert 1 == reporter.metrics_factory.counters.get(reporter_failure_key)

        # silly test, for code coverage only
        yield reporter._submit([])