cfg-checker ceph bench debug part 3

 - cleanup procedure
 - agent json loading updates
 - bool argument detection updates

 Related-PROD: PROD-36669

Change-Id: I9e2417a2bfc03883d9a6ef69f60f000cb5bacf54
diff --git a/cfg_checker/agent/webserver.py b/cfg_checker/agent/webserver.py
index eacce8f..235ba1a 100644
--- a/cfg_checker/agent/webserver.py
+++ b/cfg_checker/agent/webserver.py
@@ -100,8 +100,9 @@
         # Handle actions
         logger.info("Getting media")
         try:
-            _m = req.get_media(default_when_empty={})
-        except falcon.MediaMalformedError:
+            _m = req.stream.read()
+            _m = json.loads(_m)
+        except json.JSONDecodeError:
             _msg = "Incorrect input data"
             logger.error(_msg)
             _resp(resp, falcon.HTTP_400, _msg)
diff --git a/cfg_checker/common/kube_utils.py b/cfg_checker/common/kube_utils.py
index af22aa3..22eee30 100644
--- a/cfg_checker/common/kube_utils.py
+++ b/cfg_checker/common/kube_utils.py
@@ -893,8 +893,8 @@
             pod_yaml['metadata']['namespace']
         )
         if _existing is not None:
-            logger_cli.warn(
-                "WARNING: Found pod '{}/{}'. Reusing.".format(
+            logger_cli.info(
+                "-> Found pod '{}/{}'. Reusing.".format(
                     pod_yaml['metadata']['namespace'],
                     pod_yaml['metadata']['name']
                 )
diff --git a/cfg_checker/helpers/args_utils.py b/cfg_checker/helpers/args_utils.py
index 84bd6f1..0804617 100644
--- a/cfg_checker/helpers/args_utils.py
+++ b/cfg_checker/helpers/args_utils.py
@@ -27,9 +27,8 @@
 
 
 def get_arg(args, str_arg, nofail=False):
-    _attr = getattr(args, str_arg)
-    if _attr:
-        return _attr
+    if hasattr(args, str_arg):
+        return getattr(args, str_arg)
     else:
         if nofail:
             return None
diff --git a/cfg_checker/modules/ceph/__init__.py b/cfg_checker/modules/ceph/__init__.py
index d3f9581..62941d5 100644
--- a/cfg_checker/modules/ceph/__init__.py
+++ b/cfg_checker/modules/ceph/__init__.py
@@ -185,9 +185,14 @@
     ceph_bench.prepare_agents(_opts)
     if not ceph_bench.run_benchmark(_opts):
         # No cleaning and/or report if benchmark was not finished
+        logger_cli.info("# Abnormal benchmark run, no cleaning performed")
         return
     if not config.no_cleaning_after_benchmark:
         ceph_bench.cleanup()
+    else:
+        logger_cli.info(
+            "# '--no-cleaning' option set. Cleaning not conducted."
+        )
 
     # Create report
     ceph_bench.create_report(_filename)
diff --git a/cfg_checker/modules/ceph/bench.py b/cfg_checker/modules/ceph/bench.py
index dd96a69..5fa4cfd 100644
--- a/cfg_checker/modules/ceph/bench.py
+++ b/cfg_checker/modules/ceph/bench.py
@@ -6,6 +6,7 @@
 from time import sleep
 
 from cfg_checker.common import logger_cli
+from cfg_checker.helpers.console_utils import Progress
 # from cfg_checker.common.exception import InvalidReturnException
 # from cfg_checker.common.exception import ConfigException
 # from cfg_checker.common.exception import KubeException
@@ -108,8 +109,8 @@
     def _poke_agent(self, url, body, action="GET"):
         _datafile = "/tmp/data"
         _data = [
-            "--data-binary",
-            "@" + _datafile,
+            "-d",
+            "@" + _datafile
         ]
         _cmd = [
             "curl",
@@ -161,7 +162,7 @@
             _h = _s["healthcheck"]["hostname"]
             _t = _s['status']
             _r = _s["healthcheck"]["ready"]
-            if _t != "idle":
+            if _t not in ["idle", "finished"]:
                 logger_cli.error("Agent status invalid {}:{}".format(_h, _t))
                 _tt += [False]
             else:
@@ -228,11 +229,11 @@
                 )
             # recalc how much is left
             diff = (_end - datetime.now()).total_seconds()
-            logger_cli.debug("... [{}s]: {}".format(diff, _str))
+            logger_cli.debug("... [{:.2f}s]: {}".format(diff, _str))
             # In case end_datetime was in past to begin with
             if diff < 0:
                 break
-            logger_cli.info("-> Sleeping for {}s".format(diff/2))
+            logger_cli.info("-> Sleeping for {:.2f}s".format(diff/2))
             sleep(diff/2)
             if diff <= 0.1:
                 break
@@ -245,7 +246,30 @@
 
         for _res in self.cleanup_list:
             self.master.cleanup_resource_by_name(_res[0], _res[2], ns=_res[1])
-        logger_cli.info("# Done cleaning up")
+
+        # Wait for resource to be cleaned
+        _timeout = 120
+        _total = len(self.cleanup_list)
+        logger_cli.info("-> Wait until {} resources cleaned".format(_total))
+        _p = Progress(_total)
+        while True:
+            _g = self.master.get_resource_phase_by_name
+            _l = [_g(r[0], r[2], ns=r[1]) for r in self.cleanup_list]
+            _l = [item for item in _l if item]
+            _idx = _total - len(_l)
+            if len(_l) > 0:
+                _p.write_progress(_idx)
+            else:
+                _p.end()
+                logger_cli.info("# Done cleaning up")
+                break
+            if _timeout > 0:
+                _timeout -= 1
+            else:
+                _p.end()
+                logger_cli.info("# Timed out waiting after 120s.")
+                break
+
         return
 
     # Create report
diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index c1b3d4c..49284ca 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -1357,3 +1357,21 @@
                 self.kube.wait_for_phase(res_type, name, None, ["Terminated"])
 
         return True
+
+    def get_resource_phase_by_name(self, typ, name, ns="qa-space"):
+        if typ == "pod":
+            _t = self.kube.get_pod_by_name_and_ns(name, ns)
+        elif typ == "svc":
+            _t = self.kube.get_svc_by_name_and_ns(name, ns)
+        elif typ == "pvc":
+            _t = self.kube.get_pvc_by_name_and_ns(name, ns)
+        elif typ == "pv":
+            _t = self.kube.get_pv_by_name(name)
+        else:
+            logger_cli.error("ERROR: '{}' is not supported yet".format(typ))
+            return None
+
+        if _t:
+            return _t.status.phase
+        else:
+            return None
diff --git a/setup.py b/setup.py
index 5c1e6b0..c27fcf4 100644
--- a/setup.py
+++ b/setup.py
@@ -38,7 +38,7 @@
 
 setup(
     name="mcp-checker",
-    version="0.62",
+    version="0.63",
     author="Alex Savatieiev",
     author_email="osavatieiev@mirantis.com",
     classifiers=[
diff --git a/templates/cfgagent-template.yaml b/templates/cfgagent-template.yaml
index c6b305e..fe1065d 100644
--- a/templates/cfgagent-template.yaml
+++ b/templates/cfgagent-template.yaml
@@ -11,7 +11,7 @@
     - checker-agent
     imagePullPolicy: IfNotPresent
     name: cfgagent-pod
-    image: savex13/cfg-checker-agent:0.61
+    image: savex13/cfg-checker-agent:0.63
     volumeMounts:
     - mountPath: /cephvol
       name: cfgagent-pv-placeholder