Add dinstall function, telling when the next dinstall run will be
authorJoerg Jaspert <joerg@debian.org>
Mon, 29 Dec 2008 13:39:06 +0000 (14:39 +0100)
committerJoerg Jaspert <joerg@debian.org>
Mon, 29 Dec 2008 13:39:06 +0000 (14:39 +0100)
Dak/plugin.py

index b44ca42..6172dea 100644 (file)
@@ -27,7 +27,7 @@ class Dak(callbacks.Plugin):
         self.__parent.__init__(irc)
         self.irc = irc
         self.fname = "dinstallcheck"
-        self.dinstallhour = set([1, 7, 13, 19])
+        self.dinstallhour = [1, 7, 13, 19]
         self.dinstallmin = self.registryValue('dinstallminute')
         warntime=10
         self.warnframe = [i%60 for i in range(self.dinstallmin-warntime, self.dinstallmin+warntime+1, 1)]
@@ -105,6 +105,51 @@ class Dak(callbacks.Plugin):
         except KeyError:
             pass
 
+
+    def dinstall(self, irc, msg, args):
+        """takes no arguments
+
+        Returns the time until next dinstall
+        """
+
+        def deltatime(start, stop):
+            def toSeconds(timeString):
+                hour, min, sec = map(int, timeString.split(':'))
+                return (hour * 60 + min) * 60 + sec
+            d_time_min, d_time_sec = divmod(toSeconds(stop) - toSeconds(start), 60)
+            d_time_hr, d_time_min = divmod(d_time_min, 60)
+            return '%dhr %dmin %ssec' % (d_time_hr % 24, d_time_min, d_time_sec)
+
+        (year, month, day, hour, minute, second, undef, undef, undef) = time.gmtime()
+
+        log.debug("The latest run is at %s:%s" % (self.dinstallhour[-1], self.dinstallmin))
+        log.debug("I think we now have %s:%s" % (hour, minute))
+
+        newhour = hour
+        if minute >= self.dinstallmin and newhour in self.dinstallhour:
+            # If we already passed dinstallminute, we are running and want the next runtime.
+            log.debug("We are past this hours dinstall already")
+            newhour+=1
+
+        if newhour > self.dinstallhour[-1]:
+            log.debug("We are also past the last dinstall run for today")
+            # We are past the last dinstall today, so next one must be the first tomorrow, start searching at midnight
+            newhour = self.dinstallhour[0]
+        else:
+            while newhour not in self.dinstallhour:
+                newhour+=1
+                log.debug("Looking at possible hour %s" % (newhour))
+                if newhour > 23:
+                    newhour=0
+
+        log.debug("I found that next dinstall will be at %s:%s" % (newhour, self.dinstallmin))
+
+        start="%s:%s:%s" % (hour, minute, second)
+        stop="%s:%s:00" % (newhour, 52)
+        difference=deltatime(start, stop)
+        irc.reply("I guess the next dinstall will be in %s" % (difference))
+    dinstall = wrap(dinstall)
+
     def locked(self, irc, msg, args):
         """takes no arguments