mirror of https://github.com/docker/docker-py.git
added initial support for stats retrieval
This commit is contained in:
parent
d0512028be
commit
f402af551d
|
@ -966,11 +966,35 @@ class Client(requests.Session):
|
|||
res = self._post_json(url, data=start_config)
|
||||
self._raise_for_status(res)
|
||||
|
||||
def stats(self, container, aggregate=0):
|
||||
if isinstance(container, dict):
|
||||
container = container.get('Id')
|
||||
url = self._url("/containers/{0}/stats".format(container))
|
||||
res = self._get(url, stream=True)
|
||||
self._raise_for_status(res)
|
||||
|
||||
stats_stream = res.iter_lines()
|
||||
stats_array = []
|
||||
stats_aggregated = 0
|
||||
|
||||
if aggregate:
|
||||
for stat_obj in stats_stream:
|
||||
if stats_aggregated >= aggregate:
|
||||
stats_aggregated = 0
|
||||
yield stats_array
|
||||
stats_array = []
|
||||
stats_array.append(stat_obj)
|
||||
stats_aggregated += 1
|
||||
else:
|
||||
for stat_obj in stats_stream:
|
||||
yield stat_obj
|
||||
|
||||
def stop(self, container, timeout=10):
|
||||
if isinstance(container, dict):
|
||||
container = container.get('Id')
|
||||
params = {'t': timeout}
|
||||
url = self._url("/containers/{0}/stop".format(container))
|
||||
|
||||
res = self._post(url, params=params,
|
||||
timeout=(timeout + self.timeout))
|
||||
self._raise_for_status(res)
|
||||
|
|
26
docs/api.md
26
docs/api.md
|
@ -664,6 +664,32 @@ from. Optionally a single string joining container id's with commas
|
|||
None
|
||||
```
|
||||
|
||||
## stats
|
||||
|
||||
The Docker API parallel to the `docker stats` command.
|
||||
This will stream statistics for a specific container.
|
||||
|
||||
`aggregate`, if 0 will return an iterable stream object of messages.
|
||||
If aggregate is above 0, an iterable stream object of a list of messages in the size of `aggregate` will be returned.
|
||||
|
||||
**Params**:
|
||||
|
||||
* container (str): The container to start
|
||||
* aggregate (int): The number of messages to aggregate before returning a stream object.
|
||||
|
||||
```python
|
||||
>>> from docker import Client
|
||||
>>> aggregate = 10
|
||||
>>> cli = Client(base_url='tcp://127.0.0.1:2375')
|
||||
>>> stats_obj = cli.stats('elasticsearch', aggregate=aggregate)
|
||||
>>> for stat in stats:
|
||||
>>> print(stat)
|
||||
['{"read":"2015-02-11T21:47:30.49388286+02:00","network":{"rx_bytes":666052,"rx_packets":4409 ...
|
||||
...
|
||||
...
|
||||
...
|
||||
```
|
||||
|
||||
## stop
|
||||
|
||||
Stops a container. Similar to the `docker stop` command.
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
Change Log
|
||||
==========
|
||||
|
||||
0.7.3
|
||||
-----
|
||||
|
||||
### Features
|
||||
|
||||
* Added support for `stats` API.
|
||||
|
||||
|
||||
0.7.2
|
||||
-----
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import six
|
|||
from test import Cleanup
|
||||
|
||||
# FIXME: missing tests for
|
||||
# export; history; import_image; insert; port; push; tag; get; load
|
||||
# export; history; import_image; insert; port; push; tag; get; load; stats;
|
||||
|
||||
DEFAULT_BASE_URL = os.environ.get('DOCKER_HOST')
|
||||
|
||||
|
|
Loading…
Reference in New Issue