Sfoglia il codice sorgente

Don't report negative uptime for a process if system time changes
Refs #281
Refs #458
Refs #533
Refs #552
Refs #618

Mike Naberezny 9 anni fa
parent
commit
1c2ea9026a
2 ha cambiato i file con 14 aggiunte e 0 eliminazioni
  1. 2 0
      supervisor/rpcinterface.py
  2. 12 0
      supervisor/tests/test_rpcinterfaces.py

+ 2 - 0
supervisor/rpcinterface.py

@@ -588,6 +588,8 @@ class SupervisorNamespaceRPCInterface:
             start_dt = datetime.datetime(*time.gmtime(start)[:6])
             now_dt = datetime.datetime(*time.gmtime(now)[:6])
             uptime = now_dt - start_dt
+            if uptime.total_seconds() < 0: # system time set back
+                uptime = datetime.timedelta(0)
             desc = 'pid %s, uptime %s' % (info['pid'], uptime)
 
         elif state in (ProcessStates.FATAL, ProcessStates.BACKOFF):

+ 12 - 0
supervisor/tests/test_rpcinterfaces.py

@@ -1224,6 +1224,18 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         description = interface._interpretProcessInfo(stopped2)
         self.assertEqual(description, 'Not started')
 
+    def test__interpretProcessInfo_doesnt_report_negative_uptime(self):
+        supervisord = DummySupervisor()
+        interface = self._makeOne(supervisord)
+        from supervisor.process import ProcessStates
+        running = {'name': 'running',
+                   'pid': 42,
+                   'state': ProcessStates.RUNNING,
+                   'start': _NOW + 10, # started in the future
+                   'stop': None,
+                   'now': _NOW}
+        description = interface._interpretProcessInfo(running)
+        self.assertEqual(description, 'pid 42, uptime 0:00:00')
 
     def test_getProcessInfo(self):
         from supervisor.process import ProcessStates