Example #1
0
    def setUp(self, config=None):
        if config is None:
            config = get_collector_config('UwsgiCollector', {
                'interval': '10',
                'url': 'http://www.example.com:80/'
            })
        else:
            config = get_collector_config('UwsgiCollector', config)

        self.collector = UwsgiCollector(config, configfile=config['collectors']['UwsgiCollector'])

        self.HTTPResponse = TestHTTPResponse()

        httplib.HTTPConnection.request = Mock(return_value=True)
        httplib.HTTPConnection.getresponse = Mock(
            return_value=self.HTTPResponse)
Example #2
0
class TestUwsgiCollector(CollectorTestCase):
    def setUp(self, config=None):
        if config is None:
            config = get_collector_config('UwsgiCollector', {
                'interval': '10',
                'url': 'http://www.example.com:80/'
            })
        else:
            config = get_collector_config('UwsgiCollector', config)

        self.collector = UwsgiCollector(config, configfile=config['collectors']['UwsgiCollector'])

        self.HTTPResponse = TestHTTPResponse()

        httplib.HTTPConnection.request = Mock(return_value=True)
        httplib.HTTPConnection.getresponse = Mock(
            return_value=self.HTTPResponse)

    def test_import(self):
        self.assertTrue(UwsgiCollector)

    @patch.object(logging.Logger, 'error')
    @patch.object(Collector, 'publish')
    def test_should_work_with_synthetic_data(self, publish_mock, logger_mock):
        self.setUp()

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-fake-1').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {
            'IdleWorkers': 0,
            'BusyWorkers': 0,
            'SigWorkers': 0,
            'CheapWorkers': 0,
            'PauseWorkers': 0,
            'UnknownStateWorkers': 0,
        })

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-fake-2').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {
            'IdleWorkers': 1,
            'BusyWorkers': 3,
            'SigWorkers': 1,
            'CheapWorkers': 1,
            'PauseWorkers': 1,
            'UnknownStateWorkers': 0,
        })

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-fake-3').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {
            'IdleWorkers': 0,
            'BusyWorkers': 1,
            'SigWorkers': 0,
            'CheapWorkers': 0,
            'PauseWorkers': 0,
            'UnknownStateWorkers': 1,
        })

        patch_read = patch.object(TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-fake-4').getvalue()))

        patch_read.start()
        self.assertFalse(logger_mock.called)
        self.collector.collect()
        self.assertTrue(logger_mock.called)
        patch_read.stop()

    @patch.object(Collector, 'publish')
    def test_should_work_with_real_data(self, publish_mock):
        self.setUp()

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-live-1').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {
            'IdleWorkers': 2,
            'BusyWorkers': 0,
            'SigWorkers': 0,
            'CheapWorkers': 0,
            'PauseWorkers': 0,
            'UnknownStateWorkers': 0,
        })

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-live-2').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {
            'IdleWorkers': 1,
            'BusyWorkers': 1,
            'SigWorkers': 0,
            'CheapWorkers': 0,
            'PauseWorkers': 0,
            'UnknownStateWorkers': 0,
        })

    @patch.object(Collector, 'publish')
    def test_should_work_with_multiple_servers(self, publish_mock):
        self.setUp(config={
            'urls': [
                'nickname1 http://localhost:2081/',
                'nickname2 http://localhost:2081/',
            ],
        })

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-live-1').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        self.assertPublishedMany(publish_mock, {})

        patch_read = patch.object(
            TestHTTPResponse,
            'read',
            Mock(return_value=self.getFixture(
                'status-json-live-4').getvalue()))

        patch_read.start()
        self.collector.collect()
        patch_read.stop()

        metrics = {
            'nickname1.IdleWorkers': 0,
            'nickname1.BusyWorkers': 2,
            'nickname1.SigWorkers': 0,
            'nickname1.CheapWorkers': 0,
            'nickname1.PauseWorkers': 0,
            'nickname1.UnknownStateWorkers': 0,

            'nickname2.IdleWorkers': 0,
            'nickname2.BusyWorkers': 2,
            'nickname2.SigWorkers': 0,
            'nickname2.CheapWorkers': 0,
            'nickname2.PauseWorkers': 0,
            'nickname2.UnknownStateWorkers': 0,
        }

        self.assertPublishedMany(publish_mock, metrics)

    @patch.object(Collector, 'publish')
    def test_sig0(self, publish_mock):
        self.setUp(config={
            'urls': 'vhost tcp://localhost:1789',
        })

        with patch.object(self.collector, 'read_pure_tcp', return_value=self.getFixture(
            'status-json-live-3').getvalue()):
            self.collector.collect()

        self.assertPublishedMany(publish_mock, {
            'vhost.IdleWorkers': 1,
            'vhost.BusyWorkers': 0,
            'vhost.SigWorkers': 1,
            'vhost.CheapWorkers': 0,
            'vhost.PauseWorkers': 0,
            'vhost.UnknownStateWorkers': 0,
        })

    @patch.object(Collector, 'publish')
    def test_issue_533(self, publish_mock):
        self.setUp(config={
            'urls': 'localhost http://localhost:80/server-status?auto,',
        })

        expected_urls = {'localhost': 'http://*****:*****@patch.object(Collector, 'publish')
    def test_url_with_port(self, publish_mock):
        self.setUp(config={
            'urls': 'localhost http://localhost:80/server-status?auto',
        })

        expected_urls = {'localhost': 'http://*****:*****@patch.object(Collector, 'publish')
    def test_url_without_port(self, publish_mock):
        self.setUp(config={
            'urls': 'localhost http://localhost/server-status?auto',
        })

        expected_urls = {'localhost': 'http://localhost/server-status?auto'}

        self.assertEqual(self.collector.urls, expected_urls)

    @patch.object(Collector, 'publish')
    def test_url_without_nickname(self, publish_mock):
        self.setUp(config={
            'urls': 'http://localhost/server-status?auto',
        })

        expected_urls = {'': 'http://localhost/server-status?auto'}

        self.assertEqual(self.collector.urls, expected_urls)

    @patch.object(Collector, 'publish')
    def test_issue_538(self, publish_mock):
        self.setUp(config={
            'enabled': True,
            'path_suffix': "",
            'ttl_multiplier': 2,
            'measure_collector_time': False,
            'byte_unit': 'byte',
            'urls': 'localhost http://localhost:80/server-status?auto',
        })

        expected_urls = {'localhost': 'http://*****:*****@patch.object(Collector, 'publish')
    def test_pure_tcp_reader(self, publish_mock):
        self.setUp()
        sock_data = {
            "foo1": "bar1",
            "foo2": "bar2",
            "list": ["a", "b", "c", "d"],
        }
        sock_data_string = json.dumps(sock_data)
        ms = MockSocket(sock_data_string)
        with patch('socket.socket') as mock_socket:
            mock_socket.return_value.recv = ms.recv
            json_data = self.collector.read_pure_tcp('127.0.0.1', 7)
            self.assertEqual(json.loads(json_data), sock_data)