Kaydet (Commit) 7884ab9f authored tarafından Joffrey F's avatar Joffrey F

Merge pull request #789 from PierreF/top_ps_args

Allow to specify ps_args when listing processes
...@@ -328,9 +328,12 @@ class ContainerApiMixin(object): ...@@ -328,9 +328,12 @@ class ContainerApiMixin(object):
self._raise_for_status(res) self._raise_for_status(res)
@utils.check_resource @utils.check_resource
def top(self, container): def top(self, container, ps_args=None):
u = self._url("/containers/{0}/top", container) u = self._url("/containers/{0}/top", container)
return self._result(self._get(u), True) params = {}
if ps_args is not None:
params['ps_args'] = ps_args
return self._result(self._get(u, params=params), True)
@utils.check_resource @utils.check_resource
def unpause(self, container): def unpause(self, container):
......
...@@ -878,6 +878,7 @@ Display the running processes of a container. ...@@ -878,6 +878,7 @@ Display the running processes of a container.
**Params**: **Params**:
* container (str): The container to inspect * container (str): The container to inspect
* ps_args (str): An optional arguments passed to ps (e.g., aux)
**Returns** (str): The output of the top **Returns** (str): The output of the top
......
...@@ -383,6 +383,33 @@ def get_fake_stats(): ...@@ -383,6 +383,33 @@ def get_fake_stats():
return status_code, response return status_code, response
def get_fake_top():
return 200, {
'Processes': [
[
'root',
'26501',
'6907',
'0',
'10:32',
'pts/55',
'00:00:00',
'sleep 60',
],
],
'Titles': [
'UID',
'PID',
'PPID',
'C',
'STIME',
'TTY',
'TIME',
'CMD',
],
}
def get_fake_volume_list(): def get_fake_volume_list():
status_code = 200 status_code = 200
response = { response = {
...@@ -462,6 +489,8 @@ fake_responses = { ...@@ -462,6 +489,8 @@ fake_responses = {
'{1}/{0}/containers/3cc2351ab11b/stats'.format(CURRENT_VERSION, prefix): '{1}/{0}/containers/3cc2351ab11b/stats'.format(CURRENT_VERSION, prefix):
get_fake_stats, get_fake_stats,
'{1}/{0}/containers/3cc2351ab11b/top'.format(CURRENT_VERSION, prefix):
get_fake_top,
'{1}/{0}/containers/3cc2351ab11b/stop'.format(CURRENT_VERSION, prefix): '{1}/{0}/containers/3cc2351ab11b/stop'.format(CURRENT_VERSION, prefix):
post_fake_stop_container, post_fake_stop_container,
'{1}/{0}/containers/3cc2351ab11b/kill'.format(CURRENT_VERSION, prefix): '{1}/{0}/containers/3cc2351ab11b/kill'.format(CURRENT_VERSION, prefix):
......
...@@ -787,6 +787,44 @@ class TestMacAddress(BaseTestCase): ...@@ -787,6 +787,44 @@ class TestMacAddress(BaseTestCase):
self.client.kill(id) self.client.kill(id)
class TestContainerTop(BaseTestCase):
def runTest(self):
container = self.client.create_container(
BUSYBOX, ['sleep', '60'])
id = container['Id']
self.client.start(container)
res = self.client.top(container['Id'])
print(res)
self.assertEqual(
res['Titles'],
['UID', 'PID', 'PPID', 'C', 'STIME', 'TTY', 'TIME', 'CMD']
)
self.assertEqual(len(res['Processes']), 1)
self.assertEqual(res['Processes'][0][7], 'sleep 60')
self.client.kill(id)
class TestContainerTopWithPsArgs(BaseTestCase):
def runTest(self):
container = self.client.create_container(
BUSYBOX, ['sleep', '60'])
id = container['Id']
self.client.start(container)
res = self.client.top(container['Id'], 'waux')
self.assertEqual(
res['Titles'],
['USER', 'PID', '%CPU', '%MEM', 'VSZ', 'RSS',
'TTY', 'STAT', 'START', 'TIME', 'COMMAND'],
)
self.assertEqual(len(res['Processes']), 1)
self.assertEqual(res['Processes'][0][10], 'sleep 60')
self.client.kill(id)
class TestRestart(BaseTestCase): class TestRestart(BaseTestCase):
def runTest(self): def runTest(self):
container = self.client.create_container(BUSYBOX, ['sleep', '9999']) container = self.client.create_container(BUSYBOX, ['sleep', '9999'])
......
...@@ -1737,6 +1737,26 @@ class DockerClientTest(Cleanup, base.BaseTestCase): ...@@ -1737,6 +1737,26 @@ class DockerClientTest(Cleanup, base.BaseTestCase):
stream=True stream=True
) )
def test_container_top(self):
self.client.top(fake_api.FAKE_CONTAINER_ID)
fake_request.assert_called_with(
'GET',
url_prefix + 'containers/3cc2351ab11b/top',
params={},
timeout=DEFAULT_TIMEOUT_SECONDS
)
def test_container_top_with_psargs(self):
self.client.top(fake_api.FAKE_CONTAINER_ID, 'waux')
fake_request.assert_called_with(
'GET',
url_prefix + 'containers/3cc2351ab11b/top',
params={'ps_args': 'waux'},
timeout=DEFAULT_TIMEOUT_SECONDS
)
################## ##################
# IMAGES TESTS # # IMAGES TESTS #
################## ##################
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment