コード例 #1
0
    def test_generator_wrapper(self):
        reporter = TestTelemetryReporter()
        telemetry.set_reporter(reporter)

        range_max = 10

        def generator():
            for g in range(range_max):
                yield g

        factory = generator_wrapper_factory(generate_record_telemetry('test.'), state='model', enable_if=None)
        wrapped_generator = factory(generator)

        i = j = 0
        for i in wrapped_generator():
            self.assertEqual(j, i)
            j += 1
        self.assertEqual(range_max - 1, i)

        self.assertLessEqual(0, reporter.get_record('test.latency'))
        self.assertEqual(1, reporter.get_count('test.requests'))

        reporter.record('test.latency', 0)

        wrapped_generator = factory(generator)

        def trigger_generator_exit():
            # trigger the GeneratorExit when this goes out of scope
            iterator = wrapped_generator()
            six.next(iterator)

        trigger_generator_exit()

        self.assertLessEqual(0, reporter.get_record('test.latency'))
        self.assertEqual(2, reporter.get_count('test.requests'))
コード例 #2
0
class HelloTestCase(helper.CPWebCase):
    def setup_server():
        cherrypy.tree.mount(hello_app.HelloWorld())
    setup_server = staticmethod(setup_server)

    def setUp(self):
        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_once(self):
        self.getPage('/')
        self.assertStatus(200)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts, {'web.status.2xx': 1, 'web.requests': 1})

    def test_twice(self):
        self.getPage('/')
        self.getPage('/')
        self.assertStatus(200)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {'web.status.2xx': 2, 'web.requests': 2})

    def test_redirect(self):
        self.getPage('/redirect')
        self.assertStatus(303)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {'web.status.3xx': 1, 'web.requests': 1})

    def test_notfound(self):
        self.getPage('/notfound')
        self.assertStatus(404)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {'web.status.4xx': 1, 'web.requests': 1})

    def test_error(self):
        self.getPage('/error')
        self.assertStatus(505)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {'web.status.5xx': 1, 'web.requests': 1})
コード例 #3
0
    def _instrument_native_instance(self, conn):
        telemetry_reporter = TestTelemetryReporter()
        telemetry.set_reporter(telemetry_reporter)

        cur = conn.cursor()

        cur.execute("SELECT 1")
        self.assertEqual((1, ), cur.fetchone())
        cur.execute("SELECT 1, 2")
        self.assertEqual((1, 2), cur.fetchone())

        self.assertIn('data.psycopg2.execute.latency',
                      telemetry_reporter.records)
        self.assertIn('data.psycopg2.fetchone.latency',
                      telemetry_reporter.records)
コード例 #4
0
class IOTestCase(helper.CPWebCase):
    def setup_server():
        cherrypy.tree.mount(io_app.IOApp())

    setup_server = staticmethod(setup_server)

    def setUp(self):
        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_data(self):
        self.getPage('/sqlite')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency', 'data.sqlite.execute.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(
            self.reporter.counts, {
                'web.status.2xx': 1,
                'web.requests': 1,
                'data.sqlite.execute.requests': 1
            })

    def test_network(self):
        self.getPage('/urllib')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency', 'external.http.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(
            self.reporter.counts, {
                'web.status.2xx': 1,
                'external.http.requests': 1,
                'web.requests': 1,
                'external.http.status.2xx': 1
            })
コード例 #5
0
ファイル: test_io.py プロジェクト: momirza/librato-python-web
class IOTestCase(unittest.TestCase):
    def setUp(self):
        io_app.app.config['TESTING'] = True
        self.app = io_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_data(self):
        r = self.app.get('/sqlite')

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency', 'data.sqlite.execute.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(
            self.reporter.counts, {
                'web.status.2xx': 1,
                'web.requests': 1,
                'data.sqlite.execute.requests': 1
            })

    def test_network(self):
        r = self.app.get('/urllib2')

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency', 'external.http.response.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(
            self.reporter.counts, {
                'web.status.2xx': 1,
                'external.http.requests': 1,
                'web.requests': 1,
                'external.http.status.2xx': 1
            })
コード例 #6
0
    def test_generator_wrapper(self):
        reporter = TestTelemetryReporter()
        telemetry.set_reporter(reporter)

        range_max = 10

        def generator():
            for g in range(range_max):
                yield g

        factory = generator_wrapper_factory(generate_record_telemetry('test.'),
                                            state='model',
                                            enable_if=None)
        wrapped_generator = factory(generator)

        i = j = 0
        for i in wrapped_generator():
            self.assertEqual(j, i)
            j += 1
        self.assertEqual(range_max - 1, i)

        self.assertLessEqual(0, reporter.get_record('test.latency'))
        self.assertEqual(1, reporter.get_count('test.requests'))

        reporter.record('test.latency', 0)

        wrapped_generator = factory(generator)

        def trigger_generator_exit():
            # trigger the GeneratorExit when this goes out of scope
            iterator = wrapped_generator()
            six.next(iterator)

        trigger_generator_exit()

        self.assertLessEqual(0, reporter.get_record('test.latency'))
        self.assertEqual(2, reporter.get_count('test.requests'))
コード例 #7
0
ファイル: test_io.py プロジェクト: librato/librato-python-web
class IOTestCase(helper.CPWebCase):
    def setup_server():
        cherrypy.tree.mount(io_app.IOApp())
    setup_server = staticmethod(setup_server)

    def setUp(self):
        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_data(self):
        self.getPage('/sqlite')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency',
            'wsgi.response.latency',
            'web.response.latency',
            'data.sqlite.execute.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts,
                         {'web.status.2xx': 1, 'web.requests': 1, 'data.sqlite.execute.requests': 1})

    def test_network(self):
        self.getPage('/urllib')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency',
            'wsgi.response.latency',
            'web.response.latency',
            'external.http.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts,
                         {'web.status.2xx': 1, 'external.http.requests': 1,
                          'web.requests': 1, 'external.http.status.2xx': 1})
コード例 #8
0
ファイル: test_io.py プロジェクト: librato/librato-python-web
class IOTestCase(unittest.TestCase):
    def setUp(self):
        io_app.app.config['TESTING'] = True
        self.app = io_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_data(self):
        r = self.app.get('/sqlite')

        expected_gauge_metrics = [
            'app.response.latency',
            'wsgi.response.latency',
            'web.response.latency',
            'data.sqlite.execute.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts,
                         {'web.status.2xx': 1, 'web.requests': 1, 'data.sqlite.execute.requests': 1})

    def test_network(self):
        r = self.app.get('/urllib2')

        expected_gauge_metrics = [
            'app.response.latency',
            'wsgi.response.latency',
            'web.response.latency',
            'external.http.response.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts,
                         {'web.status.2xx': 1, 'external.http.requests': 1,
                          'web.requests': 1, 'external.http.status.2xx': 1})
コード例 #9
0
 def setUp(self):
     self.reporter = TestTelemetryReporter()
     telemetry.set_reporter(self.reporter)
コード例 #10
0
ファイル: test_io.py プロジェクト: librato/librato-python-web
    def setUp(self):
        io_app.app.config['TESTING'] = True
        self.app = io_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)
コード例 #11
0
    def setUp(self):
        hello_app.app.config['TESTING'] = True
        self.app = hello_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)
コード例 #12
0
class HelloTestCase(unittest.TestCase):
    def setUp(self):
        hello_app.app.config['TESTING'] = True
        self.app = hello_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_once(self):
        r = self.app.get('/')

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts, {
            'web.status.2xx': 1,
            'web.requests': 1
        })

    def test_twice(self):
        r = self.app.get('/')
        r = self.app.get('/')

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {
            'web.status.2xx': 2,
            'web.requests': 2
        })

    def test_redirect(self):
        # Excluding the trailing will redirect
        r = self.app.get('/dir')

        self.assertEqual(r.status_code, 301)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {
            'web.status.3xx': 1,
            'web.requests': 1
        })

    def test_notfound(self):
        r = self.app.get('/notfound/')

        self.assertEqual(r.status_code, 404)
        self.assertIn("Verify this text!", r.data.decode())

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {
            'web.status.4xx': 1,
            'web.requests': 1
        })

    def test_error(self):
        r = self.app.get('/error/')

        self.assertEqual(r.status_code, 505)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {
            'web.status.5xx': 1,
            'web.requests': 1
        })
コード例 #13
0
 def setUp(self):
     self.reporter = TestTelemetryReporter()
     telemetry.set_reporter(self.reporter)
コード例 #14
0
class HelloTestCase(unittest.TestCase):
    def setUp(self):
        hello_app.app.config['TESTING'] = True
        self.app = hello_app.app.test_client()

        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_once(self):
        r = self.app.get('/')

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertGreater(self.reporter.get_gauge_value('wsgi.response.latency'),
                           self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts, {'web.status.2xx': 1, 'web.requests': 1})

    def test_twice(self):
        r = self.app.get('/')
        r = self.app.get('/')

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        self.assertEqual(r.status_code, 200)
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {'web.status.2xx': 2, 'web.requests': 2})

    def test_redirect(self):
        # Excluding the trailing will redirect
        r = self.app.get('/dir')

        self.assertEqual(r.status_code, 301)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {'web.status.3xx': 1, 'web.requests': 1})

    def test_notfound(self):
        r = self.app.get('/notfound/')

        self.assertEqual(r.status_code, 404)
        self.assertIn("Verify this text!", r.data.decode())

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {'web.status.4xx': 1, 'web.requests': 1})

    def test_error(self):
        r = self.app.get('/error/')

        self.assertEqual(r.status_code, 505)

        expected_gauge_metrics = ['app.response.latency', 'wsgi.response.latency', 'web.response.latency']
        six.assertCountEqual(self, self.reporter.get_gauge_names(), expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {'web.status.5xx': 1, 'web.requests': 1})
コード例 #15
0
    def test_instrumented_proxy_native_instance(self):
        import psycopg2
        from objproxies import ObjectWrapper

        class MeasureWrapper(ObjectWrapper):
            def __init__(self, subject, measured_methods, metric_name,
                         state_name, enable_if, disable_if):
                super(MeasureWrapper, self).__init__(subject)

                # initialize all wrapped methods
                instrumented = {}
                for m in [
                        m for m in inspect.getmembers(subject)
                        if measured_methods is None or m[0] in measured_methods
                ]:
                    name = m[0]
                    factory = contextmanager_wrapper_factory(
                        telemetry_context_manager(metric_name % name), {},
                        state_name, enable_if, disable_if)
                    instrumented[name] = factory(m[1])
                object.__setattr__(self, '__instrumented__', instrumented)

            def __getattr__(self, attr, oga=object.__getattribute__):
                if not attr.startswith('__'):
                    instrumented = object.__getattribute__(
                        self, '__instrumented__')
                    if attr in instrumented:
                        return instrumented.get(attr)
                return super(MeasureWrapper, self).__getattr__(attr, oga)

        def wrap(f, measured_methods, metric_name, state_name, enable_if,
                 disable_if):
            def decorator(*args, **keywords):
                c = f(*args, **keywords)
                return MeasureWrapper(c, measured_methods, metric_name, state_name, enable_if, disable_if) \
                    if hasattr(c, '__class__') else c

            return decorator

        def override_class_methods(cls, method_names, metric_name, state_name,
                                   enable_if, disable_if):
            methods = {
                m: wrap(getattr(cls, m), ['execute', 'fetchone'], metric_name,
                        state_name, enable_if, disable_if)
                for m in method_names
            }
            methods['__isproxy__'] = True  # temporary?
            sub_class = type(cls.__name__, (cls, ), methods)
            sub_class.__module__ = cls.__module__
            setattr(sys.modules[cls.__module__], cls.__name__, sub_class)

        telemetry_reporter = TestTelemetryReporter()
        telemetry.set_reporter(telemetry_reporter)

        # Override native class factory methods to wrapped returned objects
        override_class_methods(psycopg2.extensions.connection, ['cursor'],
                               'data.psycopg2.%s.', 'data', None, 'model')

        self.assertTrue(psycopg2.extensions.connection.__isproxy__)
        conn = psycopg2.extensions.connection(LOCAL_DSN)
        cur = conn.cursor()

        self.assertEqual(MeasureWrapper, type(cur))
        cur.execute("SELECT 1")
        self.assertEqual((1, ), cur.fetchone())
        cur.execute("SELECT 1, 2")
        self.assertEqual((1, 2), cur.fetchone())

        self.assertIn('data.psycopg2.execute.latency',
                      telemetry_reporter.records)
        self.assertIn('data.psycopg2.fetchone.latency',
                      telemetry_reporter.records)
コード例 #16
0
class HelloTestCase(helper.CPWebCase):
    def setup_server():
        cherrypy.tree.mount(hello_app.HelloWorld())

    setup_server = staticmethod(setup_server)

    def setUp(self):
        self.reporter = TestTelemetryReporter()
        telemetry.set_reporter(self.reporter)

    def tearDown(self):
        telemetry.set_reporter(None)

    def test_once(self):
        self.getPage('/')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertGreater(
            self.reporter.get_gauge_value('wsgi.response.latency'),
            self.reporter.get_gauge_value('web.response.latency'))

        self.assertEqual(self.reporter.counts, {
            'web.status.2xx': 1,
            'web.requests': 1
        })

    def test_twice(self):
        self.getPage('/')
        self.getPage('/')
        self.assertStatus(200)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {
            'web.status.2xx': 2,
            'web.requests': 2
        })

    def test_redirect(self):
        self.getPage('/redirect')
        self.assertStatus(303)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {
            'web.status.3xx': 1,
            'web.requests': 1
        })

    def test_notfound(self):
        self.getPage('/notfound')
        self.assertStatus(404)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)
        self.assertEqual(self.reporter.counts, {
            'web.status.4xx': 1,
            'web.requests': 1
        })

    def test_error(self):
        self.getPage('/error')
        self.assertStatus(505)

        expected_gauge_metrics = [
            'app.response.latency', 'wsgi.response.latency',
            'web.response.latency'
        ]
        six.assertCountEqual(self, self.reporter.get_gauge_names(),
                             expected_gauge_metrics)

        self.assertEqual(self.reporter.counts, {
            'web.status.5xx': 1,
            'web.requests': 1
        })