]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/progress: fix duration strings 34045/head
authorSage Weil <sage@redhat.com>
Thu, 19 Mar 2020 00:04:14 +0000 (19:04 -0500)
committerSage Weil <sage@redhat.com>
Thu, 19 Mar 2020 00:04:14 +0000 (19:04 -0500)
- simplify the code to just calculate the durations when we need them
(I'm not sure why we had those temporary strings!)
- use a nicer time delta format

Fixes: https://tracker.ceph.com/issues/44672
Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/progress/module.py

index 4cc52a179d93ec26d1512da8127546493cb790a9..c37d7f2ce8fd2f96d1210593a3dd8d306f185aa0 100644 (file)
@@ -5,6 +5,8 @@ except ImportError:
     TYPE_CHECKING = False
 
 from mgr_module import MgrModule, OSDMap
+from mgr_util import to_pretty_timedelta
+from datetime import timedelta
 import os
 import threading
 import datetime
@@ -36,16 +38,12 @@ class Event(object):
         self._refs = refs
         self.started_at = started_at if started_at else time.time()
         self.id = None  # type: Optional[str]
-        self.update_duration_event()
-        self._time_remaining_str = "(time remaining: N/A)"
 
     def _refresh(self):
         global _module
         assert _module
         _module.log.debug('refreshing mgr for %s (%s) at %f' % (self.id, self._message,
                                                                 self.progress))
-        self.update_duration_event()
-        self.update_time_remaining()
         _module.update_progress_event(
             self.id, self.twoline_progress(6), self.progress)
 
@@ -66,7 +64,9 @@ class Event(object):
 
     @property
     def duration_str(self):
-        return self._duration_str
+        duration = time.time() - self.started_at
+        return "(%s)" % (
+            to_pretty_timedelta(timedelta(seconds=duration)))
 
     @property
     def failed(self):
@@ -78,7 +78,8 @@ class Event(object):
 
     def summary(self):
         # type: () -> str
-        return "{0} {1} {2}".format(self.progress, self.message, self.duration_str)
+        return "{0} {1} {2}".format(self.progress, self.message,
+                                    self.duration_str)
 
     def _progress_str(self, width):
         inner_width = width - 2
@@ -94,15 +95,21 @@ class Event(object):
         """
         e.g.
 
-        - Eating my delicious strudel (since: 00h 00m 30s)
-            [===============..............] (time remaining: 00h 03m 57s)
+        - Eating my delicious strudel (since: 30s)
+            [===============..............] (remaining: 04m)
 
         """
+        time_remaining = self.estimated_time_remaining()
+        if time_remaining:
+            remaining = "(remaining: %s)" % (
+                to_pretty_timedelta(timedelta(seconds=time_remaining)))
+        else:
+            remaining = ''
         return "{0} {1}\n{2}{3} {4}".format(self._message,
-                                            self._duration_str,
+                                            self.duration_str,
                                             " " * indent,
                                             self._progress_str(30),
-                                            self._time_remaining_str)
+                                            remaining)
 
     def to_json(self):
         # type: () -> Dict[str, Any]
@@ -116,13 +123,6 @@ class Event(object):
             "time_remaining": self.estimated_time_remaining()
         }
 
-    def update_duration_event(self):
-        # Update duration of event in seconds/minutes/hours
-
-        duration = time.time() - self.started_at
-        self._duration_str = time.strftime("(%Hh %Mm %Ss)", time.gmtime(duration))
-
-
     def estimated_time_remaining(self):
         elapsed = time.time() - self.started_at
         progress = self.progress
@@ -130,14 +130,6 @@ class Event(object):
             return None
         return int(elapsed * (1 - progress) / progress)
 
-    def update_time_remaining(self):
-        time_remaining = self.estimated_time_remaining()
-        if time_remaining:
-            self._time_remaining_str = time.strftime(
-                "(time remaining: %Hh %Mm %Ss)", time.gmtime(time_remaining))
-        else:
-            self._time_remaining_str = "(time remaining: N/A)"
-
 class GhostEvent(Event):
     """
     The ghost of a completed event: these are the fields that we persist