diff --git a/requirements.txt b/requirements.txt
index 11eb791..1744c4f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,4 +12,3 @@
 cord-robot==2.1.1
 virtualenv
 matplotlib==3.0.3
-requests==2.24.0
diff --git a/tests/scale/sizing.py b/tests/scale/sizing.py
index 7a7893d..389bb1c 100644
--- a/tests/scale/sizing.py
+++ b/tests/scale/sizing.py
@@ -17,13 +17,6 @@
 # NOTE
 # Collecting the info for all containers in the same chart can be confusing,
 # we may want to create subcharts for the different groups, eg: infra, ONOS, core, adapters
-import csv
-from sys import platform as sys_pf
-
-if sys_pf == 'darwin':
-    import matplotlib
-
-    matplotlib.use("TkAgg")
 
 import argparse
 import requests
@@ -35,7 +28,7 @@
 EXCLUDED_POD_NAMES = [
     "kube", "coredns", "kind", "grafana",
     "prometheus", "tiller", "control-plane",
-    "calico", "nginx", "registry", "local-path"
+    "calico", "nginx", "registry"
 ]
 
 DATE_FORMATTER_FN = mdates.DateFormatter('%Y-%m-%d %H:%M:%S')
@@ -63,35 +56,18 @@
     r = requests.get("http://%s/api/v1/query_range" % address, cpu_params)
     print("Downloading CPU info from: %s" % r.url)
     container_cpu = r.json()["data"]["result"]
-    containers = remove_unwanted_containers(container_cpu)
-    plot_cpu_consumption(containers, output="%s/cpu.pdf" % out_folder)
-    data_to_csv(containers, output="%s/cpu.csv" % out_folder)
+    plot_cpu_consumption(remove_unwanted_containers(container_cpu),
+                         output="%s/cpu.pdf" % out_folder)
 
     r = requests.get("http://%s/api/v1/query" % address, {"query": container_mem_query})
     print("Downloading Memory info from: %s" % r.url)
     container_mem = r.json()["data"]["result"]
-    containers = remove_unwanted_containers(container_mem)
-    plot_memory_consumption(containers, output="%s/memory.pdf" % out_folder)
-    data_to_csv(containers, output="%s/memory.csv" % out_folder)
-
-
-def data_to_csv(containers, output=None):
-    csv_file = open(output, "w+")
-    csv_writer = csv.writer(csv_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
-
-    # we assume all the containers have the same timestamps
-    dates = [datetime.fromtimestamp(x[0]) for x in containers[0]["values"]]
-    csv_writer.writerow([''] + dates)
-
-    for c in containers:
-        name = c["metric"]["pod"]
-        data = c["values"]
-
-        values = [float(x[1]) for x in data]
-        csv_writer.writerow([name] + values)
+    plot_memory_consumption(remove_unwanted_containers(container_mem),
+                            output="%s/memory.pdf" % out_folder)
 
 
 def plot_cpu_consumption(containers, output=None):
+
     plt.figure('cpu')
     fig, ax = plt.subplots()
     ax.xaxis.set_major_formatter(DATE_FORMATTER_FN)
@@ -103,7 +79,7 @@
     plt.ylabel("% used")
 
     for c in containers:
-        name = c["metric"]["pod"]
+        name = c["metric"]["pod_name"]
         data = c["values"]
 
         dates = [datetime.fromtimestamp(x[0]) for x in data]
@@ -132,7 +108,7 @@
     plt.ylabel("MB")
 
     for c in containers:
-        name = c["metric"]["pod"]
+        name = c["metric"]["pod_name"]
         data = c["values"]
 
         dates = [datetime.fromtimestamp(x[0]) for x in data]
@@ -150,28 +126,17 @@
 
 def remove_unwanted_containers(cpus):
     res = []
-    missed = []
     for c in cpus:
-        if "pod" in c["metric"]:
+        if "pod_name" in c["metric"]:
 
-            if c["metric"]["id"].startswith("kubepods", 1):
-                missed.append(c)
-                continue
-
-            if "container" not in c["metric"]:
-                missed.append(c)
-                continue
-
-            pod_name = c["metric"]["pod"]
+            pod_name = c["metric"]["pod_name"]
             container_name = c["metric"]["name"]
 
             if any(x in pod_name for x in EXCLUDED_POD_NAMES):
-                missed.append(c)
                 continue
 
             if "k8s_POD" in container_name:
                 # this is the kubernetes POD controller, we don't care about it
-                missed.append(c)
                 continue
 
             # if "_0" not in container_name:
@@ -181,8 +146,7 @@
             res.append(c)
         else:
             continue
-    # print("Found containers: %s" % [c["metric"]["pod"] for c in res])
-    # print("Missed containers: %s" % [c["metric"]["pod"] for c in missed])
+
     return res
 
 
