diff options
author | Yang Xu <yang.xu3@huawei.com> | 2018-03-24 05:33:19 +0000 |
---|---|---|
committer | Yang Xu <yang.xu3@huawei.com> | 2018-03-24 05:39:28 +0000 |
commit | 3faaa3d54204746f12ff9973cbaf6b98b9dce7cc (patch) | |
tree | da832a7dd96af82e2ab4ee025ef9747816919a3a | |
parent | adf46bf9000bd169273b9c1ce9381c988c42ce79 (diff) |
Util lib to collect container resource utilization
Change-Id: Id69bcfa9dccf2b468c7ffbbdf5e5346331b1f6d7
Issue-ID: INT-452
Signed-off-by: Yang Xu <yang.xu3@huawei.com>
-rw-r--r-- | test/s3p/util/docker_util.py | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/test/s3p/util/docker_util.py b/test/s3p/util/docker_util.py new file mode 100644 index 000000000..a0e688199 --- /dev/null +++ b/test/s3p/util/docker_util.py @@ -0,0 +1,126 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import subprocess +import json +import re +from decimal import Decimal + + +def get_container_list(ip): + """ + Get the list of containers running on the host + Args: + param1 (str): host ip + + Returns: + list of containers in string + """ + + cmd = ['ssh', '-i', 'onap_dev'] + cmd.append('ubuntu@' + ip) + cmd.append("sudo docker ps --format '{{.Names}}'") + ssh = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + result = ssh.stdout.readlines() + containers = [] + if result == []: + error = ssh.stderr.readlines() + print error + else: + for line in result: + token = line.decode('ascii').strip() + containers.append(token) + + return containers + + +def get_container_volume_size(ip, container): + """ + Get container total volume usage + Args: + param1 (str): host ip + param2 (str): container name + + Returns: + float number in GB if the container has volume(s), None otherwise + """ + + cmd = ['ssh', '-i', 'onap_dev'] + cmd.append('ubuntu@' + ip) + cmd.append("sudo docker inspect -f '{{ json .Mounts }}'") + cmd.append(container) + ssh = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + result = ssh.stdout.readlines() + total = None + if result == []: + error = ssh.stderr.readlines() + print error + else: + data = json.loads(result[0]) + for entry in data: + if entry['Type'] == 'volume': + name = entry['Name'] + size = get_volume_size(ip, name) + if total is None: + total = size + else: + total = total + size + + return total + + +def get_volume_size(ip, volume): + """ + Get a volume size + Args: + param1 (str): host ip + param2 (str): volume name + + Returns: + float number in GB + """ + + cmd = ['ssh', '-i', 'onap_dev'] + cmd.append('ubuntu@' + ip) + cmd.append('sudo docker system df -v') + p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE) + p2 = subprocess.Popen(['grep', volume], stdin=p1.stdout, + stdout=subprocess.PIPE) + p1.stdout.close() + (output, err) = p2.communicate() + size = output.split()[2] + return convert_to_GB(size) + + +def convert_to_GB(s): + """ + Convert volume size to GB + Args: + param1 (str): volume size with unit + + Returns: + float number representing volume size in GB + """ + + if s.endswith('GB'): + d = float(re.sub('[^0-9\\.]', '', s)) + if s.endswith('MB'): + d = round(Decimal(float(re.sub('[^0-9\\.]', '', s)) / 1000.0), + 1) + if s.endswith('kB'): + d = round(Decimal(float(re.sub('[^0-9\\.]', '', s)) + / 1000000.0), 1) + return d + + |