cfg-checker ceph bench module part 4

 - benchmark code refactoring/cleaning
 - using UTC timezone for scheduling
 - 'tasks' mode first version
 - updated agent poking response structure

 Related-PROD: PROD-36669

Change-Id: I8bf9d9b4d54a41cc04f7765e17efb675028c6262
diff --git a/cfg_checker/agent/fio_runner.py b/cfg_checker/agent/fio_runner.py
index 50afeca..c8488af 100644
--- a/cfg_checker/agent/fio_runner.py
+++ b/cfg_checker/agent/fio_runner.py
@@ -6,7 +6,7 @@
 
 
 from copy import deepcopy
-from datetime import datetime, timedelta
+from datetime import datetime, timezone
 from platform import system, release, node
 from threading import Thread
 import threading
@@ -18,7 +18,7 @@
 from cfg_checker.common.log import logger
 
 
-_datetime_fmt = "%m/%d/%Y, %H:%M:%S"
+_datetime_fmt = "%m/%d/%Y, %H:%M:%S%z"
 fio_options_common = {
     "name": "agent_run",
     "filename": "/cephvol/testfile",
@@ -64,7 +64,7 @@
 
 def get_time(timestamp=None):
     if not timestamp:
-        _t = datetime.now()
+        _t = datetime.now(timezone.utc)
     else:
         _t = datetime.fromtimestamp(timestamp)
     return _t.strftime(_datetime_fmt)
@@ -85,7 +85,7 @@
 
 def wait_until(end_datetime):
     while True:
-        diff = (end_datetime - datetime.now()).total_seconds()
+        diff = (end_datetime - datetime.now(timezone.utc)).total_seconds()
         # In case end_datetime was in past to begin with
         if diff < 0:
             return
@@ -297,11 +297,12 @@
         self.fiorun = ShellThread(_cmd, _q)
         # Check if schedule is set
         if self.scheduled_datetime:
+            _now = datetime.now(timezone.utc)
             logger.debug(
                 "waiting for '{}', now is '{}', total of {} sec left".format(
                     self.scheduled_datetime.strftime(_datetime_fmt),
-                    datetime.now().strftime(_datetime_fmt),
-                    (self.scheduled_datetime - datetime.now()).total_seconds()
+                    _now.strftime(_datetime_fmt),
+                    (self.scheduled_datetime - _now).total_seconds()
                 )
             )
             wait_until(self.scheduled_datetime)
@@ -392,7 +393,8 @@
         _scheduled = False
         _diff = -1
         if self.scheduled_datetime:
-            _diff = (self.scheduled_datetime - datetime.now()).total_seconds()
+            _now = datetime.now(timezone.utc)
+            _diff = (self.scheduled_datetime - _now).total_seconds()
             if _diff > 0:
                 _scheduled = True
         _s = "running" if _running else "idle"
@@ -575,10 +577,11 @@
             _s = self.fio.status()
             if _s["status"] == "scheduled":
                 _t = self.fio.scheduled_datetime
-                _n = datetime.now()
+                _n = datetime.now(timezone.utc)
                 _delta = (_t - _n).total_seconds()
                 print(
-                    "waiting for '{}'; now '{}'; {} sec left".format(
+                    "{}: waiting for '{}'; now '{}'; {} sec left".format(
+                        _s["status"],
                         _t.strftime(_datetime_fmt),
                         _n.strftime(_datetime_fmt),
                         _delta
@@ -609,7 +612,8 @@
     _opts["readwrite"] = "read"
     _opts["ramp_time"] = "1s"
     _opts["runtime"] = "5s"
-    _shell.do_singlerun(_opts)
+    _opts["scheduled_to"] = "11/13/2021, 23:03:30+0000"
+    _shell.do_scheduledrun(_opts)
     _shell()
     _times = _shell.get_resultlist()
     print("# results:\n{}".format("\n".join(_times)))
@@ -623,9 +627,7 @@
     _opts["readwrite"] = "read"
     _opts["ramp_time"] = "1s"
     _opts["runtime"] = "10s"
-    _opts["scheduled_to"] = (datetime.now() + timedelta(seconds=12)).strftime(
-        _datetime_fmt
-    )
+    _opts["scheduled_to"] = "11/13/2021, 23:04:20+0000"
     _shell.do_scheduledrun(_opts)
     _shell()
     _times = _shell.get_resultlist()