VOL-4560: Add more check in soak-pod jobs to check if memory is increasing over time

Change-Id: If7c101cda7b0595d13be0678a7e76e9a2623bcea
diff --git a/scripts/mem_consumption.py b/scripts/mem_consumption.py
new file mode 100644
index 0000000..a1252ed
--- /dev/null
+++ b/scripts/mem_consumption.py
@@ -0,0 +1,64 @@
+# Copyright 2021-present Open Networking Foundation
+#
+# 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.
+
+# This tool collects instantaneous memory usage for voltha pods
+
+
+import argparse
+import requests
+from datetime import datetime
+
+containers_for_mem_collection = ["voltha", "ofagent", "adapter-open-olt", "adapter-open-onu"]
+
+
+def main(address, out_folder, namespace="default"):
+    """
+    Query Prometheus and generate instantaneous memory consumptions for all the pods under test
+    :param address: string The address of the Prometheus instance to query
+    :param out_folder: string The output folder (where to save the .pdf files)
+    :param namespace: string The pod namespace
+    :return: void
+    """
+    for container in containers_for_mem_collection:
+        container_mem_query = 'container_memory_working_set_bytes{namespace="%s",container="%s"}' % (namespace, container)
+
+        mem_params = {
+            "query": container_mem_query,
+        }
+        print("mem usage query: %s" % mem_params)
+
+        r = requests.get("http://%s/api/v1/query" % address, mem_params)
+        print("Downloading mem info from: %s" % r.url)
+        container_cpu = r.json()["data"]["result"]
+        # print("result for container %s is : " % container, container_cpu)
+        if len(container_cpu) == 1:
+            print(container_cpu[0]["value"][1])
+            fp = open(out_folder+"/"+container+".txt", "a")
+            result_in_csv_fmt = "%s,%s\n" % (datetime.now().strftime("%H:%M:%S.%f - %b %d %Y"), container_cpu[0]["value"][1])
+            fp.write(result_in_csv_fmt)
+        else:
+            print("error fetching memory usage for container: %s", container)
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(prog="mem_consumption")
+    parser.add_argument("-a", "--address", help="The address of the Prometheus instance we're targeting",
+                        default="127.0.0.1:31301")
+    parser.add_argument("-o", "--output", help="Where to output the generated files",
+                        default="voltha-pods-mem-consumption")
+    parser.add_argument("-n", "--namespace", help="Kubernetes namespace for collecting metrics",
+                        default="voltha")
+
+    args = parser.parse_args()
+    main(args.address, args.output, args.namespace)
\ No newline at end of file