mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Merge pull request #10037 from ipmb/features/nginx_status
Adds Nginx status module
This commit is contained in:
commit
a1561ec7e3
@ -2,7 +2,7 @@
|
||||
'''
|
||||
Support for nginx
|
||||
'''
|
||||
|
||||
import urllib2
|
||||
# Import salt libs
|
||||
import salt.utils
|
||||
import salt.utils.decorators as decorators
|
||||
@ -93,3 +93,42 @@ def signal(signal=None):
|
||||
else:
|
||||
ret = 'Command: "{0}" completed successfully!'.format(cmd)
|
||||
return ret
|
||||
|
||||
|
||||
def status(url="http://127.0.0.1/status"):
|
||||
"""
|
||||
Return the data from an Nginx status page as a dictionary.
|
||||
http://wiki.nginx.org/HttpStubStatusModule
|
||||
|
||||
url
|
||||
The URL of the status page. Defaults to 'http://127.0.0.1/status'
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
salt '*' nginx.status
|
||||
"""
|
||||
resp = urllib2.urlopen(url)
|
||||
status = resp.read()
|
||||
resp.close()
|
||||
|
||||
lines = status.splitlines()
|
||||
if not len(lines) == 4:
|
||||
return
|
||||
# "Active connections: 1 "
|
||||
active_connections = lines[0].split()[2]
|
||||
# "server accepts handled requests"
|
||||
# " 12 12 9 "
|
||||
accepted, handled, requests = lines[2].split()
|
||||
# "Reading: 0 Writing: 1 Waiting: 0 "
|
||||
_, reading, _, writing, _, waiting = lines[3].split()
|
||||
return {
|
||||
'active connections': int(active_connections),
|
||||
'accepted': int(accepted),
|
||||
'handled': int(handled),
|
||||
'requests': int(requests),
|
||||
'reading': int(reading),
|
||||
'writing': int(writing),
|
||||
'waiting': int(waiting),
|
||||
}
|
||||
|
55
tests/unit/modules/nginx_test.py
Normal file
55
tests/unit/modules/nginx_test.py
Normal file
@ -0,0 +1,55 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import urllib2
|
||||
# Import Salt Testing libs
|
||||
from salttesting import skipIf, TestCase
|
||||
from salttesting.helpers import ensure_in_syspath
|
||||
from salttesting.mock import NO_MOCK, NO_MOCK_REASON, Mock, patch
|
||||
|
||||
from salt.modules import nginx
|
||||
|
||||
ensure_in_syspath('../../')
|
||||
|
||||
MOCK_STATUS_OUTPUT = """Active connections: 7
|
||||
server accepts handled requests
|
||||
46756 46756 89318
|
||||
Reading: 0 Writing: 7 Waiting: 0"""
|
||||
|
||||
|
||||
class MockUrllibStatus(object):
|
||||
"""Mock of urllib2 call for Nginx status"""
|
||||
def read(self):
|
||||
return MOCK_STATUS_OUTPUT
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
|
||||
|
||||
@skipIf(NO_MOCK, NO_MOCK_REASON)
|
||||
@patch('salt.utils.which', Mock(return_value='/usr/bin/nginx'))
|
||||
class NginxTestCase(TestCase):
|
||||
|
||||
@patch('urllib2.urlopen', Mock(return_value=MockUrllibStatus()))
|
||||
def test_nginx_status(self):
|
||||
result = nginx.status()
|
||||
urllib2.urlopen.assert_called_once_with('http://127.0.0.1/status')
|
||||
self.assertEqual(result, {
|
||||
'active connections': 7,
|
||||
'accepted': 46756,
|
||||
'handled': 46756,
|
||||
'requests': 89318,
|
||||
'reading': 0,
|
||||
'writing': 7,
|
||||
'waiting': 0,
|
||||
})
|
||||
|
||||
@patch('urllib2.urlopen', Mock(return_value=MockUrllibStatus()))
|
||||
def test_nginx_status_with_arg(self):
|
||||
other_path = 'http://localhost/path'
|
||||
result = nginx.status(other_path)
|
||||
urllib2.urlopen.assert_called_once_with(other_path)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from integration import run_tests
|
||||
run_tests(NginxTestCase, needs_daemon=False)
|
Loading…
Reference in New Issue
Block a user