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
+
+