Util lib to collect container resource utilization
Change-Id: Id69bcfa9dccf2b468c7ffbbdf5e5346331b1f6d7
Issue-ID: INT-452
Signed-off-by: Yang Xu <yang.xu3@huawei.com>
diff --git a/test/s3p/util/docker_util.py b/test/s3p/util/docker_util.py
new file mode 100644
index 0000000..a0e6881
--- /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
+
+