From 456b8c6f0daf3b2c0d5149c9be50ff213782bdd9 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 4 May 2013 09:05:17 +0200 Subject: Added fully rewrited RestartFailed plugin, originally by bambie --- module/plugins/hooks/RestartFailed.py | 69 +++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 module/plugins/hooks/RestartFailed.py (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py new file mode 100644 index 000000000..5c3a4fbe0 --- /dev/null +++ b/module/plugins/hooks/RestartFailed.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- + +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . + + @author: vuolter +""" + +from module.plugins.Hook import Hook +import time + +class RestartFailed(Hook): + __name__ = "RestartFailed" + __version__ = "0.3" + __description__ = "Restart failed packages according to defined rules" + __config__ = [ ("activated", "bool", "Activated" , "True"), + ("on_downloadFailed", "bool", "Restart if downloads fails" , "True"), + ("downloadFailed_number", "int", "Only restart when failed downloads are more than", "5"), + ("downloadFailed_interval", "int", "Only restart when elapsed time since last one is (min)", "10"), + ("on_packageFinished", "bool", "Restart when package finished" , "True") + ("on_reconnect", "bool", "Restart after reconnected" , "True") ] + __author_name__ = ("vuolter") + __author_mail__ = ("vuolter@gmail.com") + + failed = 0 + lastime = 0 + + def checkInterval(self, interval): + interval *= 60 + if now = time() >= lastime + interval : + lastime = now + return True + else + return False + + def downloadFailed(self, pyfile): + if not self.getConfig("on_downloadFailed"): + failed = 0 + return + if failed > number = self.getConfig("downloadFailed_number") + and checkInterval(interval = self.getConfig("downloadFailed_interval")) : + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after " + failed + " downloads failed") + failed = 0 + else + ++failed + + def packageFinished(self, pypack): + if not self.getConfig("on_packageFinished"): + return + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after one package finished") + + def afterReconnecting(self, ip): + if not self.getConfig("on_reconnect"): + return + self.core.api.restartFailed() + self.logDebug(self.__name__ + ": executed after reconnecting") -- cgit v1.2.3 From b99de39af5a5f5201c516d4435414c6d05dd86f3 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 4 May 2013 13:18:06 +0200 Subject: Version 0.4: fixes --- module/plugins/hooks/RestartFailed.py | 119 ++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 57 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 5c3a4fbe0..24bbe85c4 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -1,69 +1,74 @@ -# -*- coding: utf-8 -*- + # -*- coding: utf-8 -*- """ - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, - or (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, see . + You should have received a copy of the GNU General Public License + along with this program; if not, see . - @author: vuolter + @author: vuolter """ from module.plugins.Hook import Hook import time + class RestartFailed(Hook): - __name__ = "RestartFailed" - __version__ = "0.3" - __description__ = "Restart failed packages according to defined rules" - __config__ = [ ("activated", "bool", "Activated" , "True"), - ("on_downloadFailed", "bool", "Restart if downloads fails" , "True"), - ("downloadFailed_number", "int", "Only restart when failed downloads are more than", "5"), - ("downloadFailed_interval", "int", "Only restart when elapsed time since last one is (min)", "10"), - ("on_packageFinished", "bool", "Restart when package finished" , "True") - ("on_reconnect", "bool", "Restart after reconnected" , "True") ] - __author_name__ = ("vuolter") - __author_mail__ = ("vuolter@gmail.com") + __name__ = "RestartFailed" + __version__ = "0.4" + __description__ = "Restart failed packages according to defined rules" + __config__ = [ + ("activated", "bool", "Activated", "True"), + ("dlFailed", "bool", "Restart if downloads fails", "True"), + ("dlFailed_n", "int", "Only when failed downloads are more than", "5"), + ("dlFailed_i", "int", "Only when elapsed time since last restart is (min)", "10"), + ("packFinished", "bool", "Restart when package finished", "True") + ("recnt", "bool", "Restart after reconnected", "True") + ] + __author_name__ = ("vuolter") + __author_mail__ = ("vuolter@gmail.com") + + failed = 0 + lastime = 0 + + def checkInterval(self, interval): + now = time() + interval *= 60 + if now >= lastime + interval: + lastime = now + return True + else: + return False + + def downloadFailed(self, pyfile): + if not self.getConfig("dlFailed"): + failed = 0 + return + number = self.getConfig("dlFailed_n") + interval = self.getConfig("dlFailed_i") + if failed > number and checkInterval(interval): + self.core.api.restartFailed() + self.logDebug("executed after " + failed + " downloads failed") + failed = 0 + else: + failed + 1 + + def packageFinished(self, pypack): + if not self.getConfig("packFinished"): + return + self.core.api.restartFailed() + self.logDebug("executed after one package finished") - failed = 0 - lastime = 0 - - def checkInterval(self, interval): - interval *= 60 - if now = time() >= lastime + interval : - lastime = now - return True - else - return False - - def downloadFailed(self, pyfile): - if not self.getConfig("on_downloadFailed"): - failed = 0 - return - if failed > number = self.getConfig("downloadFailed_number") - and checkInterval(interval = self.getConfig("downloadFailed_interval")) : - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after " + failed + " downloads failed") - failed = 0 - else - ++failed - - def packageFinished(self, pypack): - if not self.getConfig("on_packageFinished"): - return - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after one package finished") - - def afterReconnecting(self, ip): - if not self.getConfig("on_reconnect"): - return - self.core.api.restartFailed() - self.logDebug(self.__name__ + ": executed after reconnecting") + def afterReconnecting(self, ip): + if not self.getConfig("recnt"): + return + self.core.api.restartFailed() + self.logDebug("executed after reconnecting") -- cgit v1.2.3 From be8e019964119e4a074ecef417f0cd38292d0eee Mon Sep 17 00:00:00 2001 From: Vuolter Date: Tue, 7 May 2013 08:17:31 +0200 Subject: Version 0.5: fixes again --- module/plugins/hooks/RestartFailed.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 24bbe85c4..11308c963 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.4" + __version__ = "0.5" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -42,24 +42,24 @@ class RestartFailed(Hook): def checkInterval(self, interval): now = time() interval *= 60 - if now >= lastime + interval: - lastime = now + if now >= self.lastime + interval: + self.lastime = now return True else: return False def downloadFailed(self, pyfile): if not self.getConfig("dlFailed"): - failed = 0 + self.failed = 0 return number = self.getConfig("dlFailed_n") interval = self.getConfig("dlFailed_i") - if failed > number and checkInterval(interval): + if self.failed > number and checkInterval(interval): self.core.api.restartFailed() - self.logDebug("executed after " + failed + " downloads failed") - failed = 0 + self.logDebug("executed after " + self.failed + " failed downloads") + self.failed = 0 else: - failed + 1 + self.failed += 1 def packageFinished(self, pypack): if not self.getConfig("packFinished"): -- cgit v1.2.3 From f8ba94db046ac76a94d52ffa56a4c2f7173ffbdd Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:13:20 +0200 Subject: Version 0.6: improved code + several bugfixes --- module/plugins/hooks/RestartFailed.py | 95 ++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 35 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 11308c963..bc9ca699d 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,52 +23,77 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.5" + __version__ = "0.6" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), - ("dlFailed", "bool", "Restart if downloads fails", "True"), - ("dlFailed_n", "int", "Only when failed downloads are more than", "5"), - ("dlFailed_i", "int", "Only when elapsed time since last restart is (min)", "10"), - ("packFinished", "bool", "Restart when package finished", "True") - ("recnt", "bool", "Restart after reconnected", "True") + ("dlFail", "bool", "Restart if download fail", "True"), + ("dlFail_n", "int", "Only when failed downloads are at least", "5"), + ("dlFail_i", "int", "Only when elapsed time since last restart is (min)", "10"), + ("pkFinish", "bool", "Restart when a package is finished", "True") + ("recnt", "bool", "Restart after reconnecting", "True") ] __author_name__ = ("vuolter") __author_mail__ = ("vuolter@gmail.com") - failed = 0 - lastime = 0 + event_map = {"pluginConfigChanged": "configEvents"} - def checkInterval(self, interval): + def restart(self): + self.core.api.restartFailed() + self.logDebug("called self.core.api.restartFailed()") + + def setTimer(self, timer): + self.info["timer"] = timer + if timer: + self.manager.addEvent("periodical", doRestart) + else: + self.manager.removeEvent("periodical", doRestart) + + def doRestart(self): now = time() - interval *= 60 - if now >= self.lastime + interval: - self.lastime = now - return True + lastrstime = self.getInfo("lastrstime") + interval = self.getConfig("dlFail_i") * 60 + timer = self.getInfo("timer") + newtimer = 0 + value = False + if now >= lastrstime + interval: + self.info["lastrstime"] = now + value = True + self.restart() else: - return False + newtimer = 1 + if newtimer != timer: + setTimer(newtimer) + return value - def downloadFailed(self, pyfile): - if not self.getConfig("dlFailed"): - self.failed = 0 - return - number = self.getConfig("dlFailed_n") - interval = self.getConfig("dlFailed_i") - if self.failed > number and checkInterval(interval): - self.core.api.restartFailed() - self.logDebug("executed after " + self.failed + " failed downloads") - self.failed = 0 + def checkFailed(self, pyfile): + curr = self.getInfo("dlfailed") + max = self.getConfig("dlFail_n") + if curr >= max and doRestart(): + self.info["dlfailed"] = 0 else: - self.failed += 1 + self.info["dlfailed"] = curr + 1 - def packageFinished(self, pypack): - if not self.getConfig("packFinished"): - return - self.core.api.restartFailed() - self.logDebug("executed after one package finished") + def arrangeChecks(self): + self.info["dlfailed"] = 1000 + if self.getInfo("timer"): + setTimer(0) - def afterReconnecting(self, ip): - if not self.getConfig("recnt"): - return - self.core.api.restartFailed() - self.logDebug("executed after reconnecting") + def configEvents(self): + if self.getConfig("dlFail"): + self.manager.addEvent("downloadFailed", checkFailed) + else: + self.manager.removeEvent("downloadFailed", checkFailed) + self.arrangeChecks() + if self.getConfig("pkFinish"): + self.manager.addEvent("packageFinished", restart) + else: + self.manager.removeEvent("packageFinished", restart) + if self.getConfig("recnt"): + self.manager.addEvent("afterReconnecting", restart) + else: + self.manager.removeEvent("afterReconnecting", restart) + + def setup(self): + self.info = {"dlfailed": 0, "lastrstime": 0, "timer": 0} + self.configEvents() -- cgit v1.2.3 From 5e9aa852a7be4685642f18679fd615748e4ec028 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:20:01 +0200 Subject: Version 0.7: bugfix --- module/plugins/hooks/RestartFailed.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index bc9ca699d..67dae19e7 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.6" + __version__ = "0.7" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -40,6 +40,7 @@ class RestartFailed(Hook): def restart(self): self.core.api.restartFailed() + self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") def setTimer(self, timer): @@ -57,9 +58,9 @@ class RestartFailed(Hook): newtimer = 0 value = False if now >= lastrstime + interval: + self.restart() self.info["lastrstime"] = now value = True - self.restart() else: newtimer = 1 if newtimer != timer: @@ -69,8 +70,8 @@ class RestartFailed(Hook): def checkFailed(self, pyfile): curr = self.getInfo("dlfailed") max = self.getConfig("dlFail_n") - if curr >= max and doRestart(): - self.info["dlfailed"] = 0 + if curr >= max: + doRestart() else: self.info["dlfailed"] = curr + 1 -- cgit v1.2.3 From 0d9f1d9907cf5611cc6122d11798677bd0bd9f0a Mon Sep 17 00:00:00 2001 From: Vuolter Date: Thu, 9 May 2013 18:40:44 +0200 Subject: Version 0.8: improved timing --- module/plugins/hooks/RestartFailed.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 67dae19e7..c2834e424 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.7" + __version__ = "0.8" __description__ = "Restart failed packages according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -43,8 +43,9 @@ class RestartFailed(Hook): self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") - def setTimer(self, timer): + def setTimer(self, timer, interval): self.info["timer"] = timer + self.interval = interval if timer: self.manager.addEvent("periodical", doRestart) else: @@ -64,7 +65,7 @@ class RestartFailed(Hook): else: newtimer = 1 if newtimer != timer: - setTimer(newtimer) + setTimer(newtimer, interval) return value def checkFailed(self, pyfile): @@ -78,7 +79,7 @@ class RestartFailed(Hook): def arrangeChecks(self): self.info["dlfailed"] = 1000 if self.getInfo("timer"): - setTimer(0) + setTimer(0, 60) def configEvents(self): if self.getConfig("dlFail"): -- cgit v1.2.3 From 2eba1031b8e34cee3f5189a6e727d3ee43ecbf9b Mon Sep 17 00:00:00 2001 From: Vuolter Date: Fri, 10 May 2013 21:32:56 +0200 Subject: Version 1.0: improved code + added feature "Restart on plugin activation" + many bugfixes + tested code a bit --- module/plugins/hooks/RestartFailed.py | 124 +++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 46 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index c2834e424..273bb2910 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, see . - @author: vuolter + @author: Walter Purcaro """ from module.plugins.Hook import Hook @@ -23,79 +23,111 @@ import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "0.8" - __description__ = "Restart failed packages according to defined rules" + __version__ = "1.0" + __description__ = "Automatically restart failed/aborted downloads according to defined rules" __config__ = [ ("activated", "bool", "Activated", "True"), - ("dlFail", "bool", "Restart if download fail", "True"), - ("dlFail_n", "int", "Only when failed downloads are at least", "5"), + ("dlFail", "bool", "Restart when download fail", "True"), + ("dlFail_n", "int", "Only when failed/aborted downloads are at least", "5"), ("dlFail_i", "int", "Only when elapsed time since last restart is (min)", "10"), - ("pkFinish", "bool", "Restart when a package is finished", "True") - ("recnt", "bool", "Restart after reconnecting", "True") + ("dlPrcs", "bool", "Restart after all downloads are processed", "True"), + ("recnt", "bool", "Restart after reconnecting", "True"), + ("rsLoad", "bool", "Restart on plugin activation", "False") ] - __author_name__ = ("vuolter") + __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") event_map = {"pluginConfigChanged": "configEvents"} + def resetCounters(self): + self.info["dlfailed"] = 0 + if self.info["timerflag"]: + self.setTimer(False, None) + def restart(self): + now = time.time() + self.resetCounters() self.core.api.restartFailed() - self.info["dlfailed"] = 0 self.logDebug("called self.core.api.restartFailed()") + self.info["lastrstime"] = now - def setTimer(self, timer, interval): - self.info["timer"] = timer - self.interval = interval - if timer: - self.manager.addEvent("periodical", doRestart) + def setTimer(self, timerflag, interval): + self.info["timerflag"] = timerflag + if interval and interval != self.interval: + self.interval = interval + if timerflag: + self.addEvent("periodical", self.restart) else: - self.manager.removeEvent("periodical", doRestart) + self.removeEvent("periodical", self.restart) - def doRestart(self): - now = time() - lastrstime = self.getInfo("lastrstime") + def checkFailed_i(self): + now = time.time() + lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 - timer = self.getInfo("timer") - newtimer = 0 - value = False + timerflag = self.info["timerflag"] if now >= lastrstime + interval: self.restart() - self.info["lastrstime"] = now - value = True - else: - newtimer = 1 - if newtimer != timer: - setTimer(newtimer, interval) - return value + elif not timerflag: + self.setTimer(True, interval) - def checkFailed(self, pyfile): - curr = self.getInfo("dlfailed") + def checkFailed_n(self): + curr = self.info["dlfailed"] max = self.getConfig("dlFail_n") if curr >= max: - doRestart() + self.checkFailed_i() else: self.info["dlfailed"] = curr + 1 - def arrangeChecks(self): - self.info["dlfailed"] = 1000 - if self.getInfo("timer"): - setTimer(0, 60) + def checkFailed(self, pyfile): + status = pygile.getStatusName() + if status == "failed" or status == "aborted": + self.checkFailed_n() + + def addEvent(self, event, handler): + self.manager.addEvent(event, handler) + return True - def configEvents(self): + def removeEvent(self, event, handler): + if event in self.manager.events and handler in self.manager.events[event]: + self.manager.events[event].remove(handler) + return True + else: + return False + + def on_allDownloadsProcessed(self): + self.restart() + + def on_downloadStart(self, pyfile): + self.removeEvent("downloadStarts", self.on_downloadStart) + self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + + def on_allDownloadsFinished(self): + self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + self.addEvent("downloadStarts", self.on_downloadStart) + + def on_afterReconnecting(self, ip): + self.restart() + + def configEvents(self, plugin, name, value): if self.getConfig("dlFail"): - self.manager.addEvent("downloadFailed", checkFailed) + self.addEvent("downloadFinished", self.checkFailed) else: - self.manager.removeEvent("downloadFailed", checkFailed) - self.arrangeChecks() - if self.getConfig("pkFinish"): - self.manager.addEvent("packageFinished", restart) + self.removeEvent("downloadFinished", self.checkFailed) + self.resetCounters() + if self.getConfig("dlPrcs"): + self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) + self.addEvent("allDownloadsFinished", self.on_allDownloadsFinished) else: - self.manager.removeEvent("packageFinished", restart) + if not self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed): + self.removeEvent("downloadStarts", self.on_downloadStart) + self.removeEvent("allDownloadsFinished", self.on_allDownloadsFinished) if self.getConfig("recnt"): - self.manager.addEvent("afterReconnecting", restart) + self.addEvent("afterReconnecting", self.on_afterReconnecting) else: - self.manager.removeEvent("afterReconnecting", restart) + self.removeEvent("afterReconnecting", self.on_afterReconnecting) def setup(self): - self.info = {"dlfailed": 0, "lastrstime": 0, "timer": 0} - self.configEvents() + self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} + if self.getConfig("rsLoad"): + self.restart() + self.configEvents(None, None, None) -- cgit v1.2.3 From 953de446a67e91ff44434df78f92297ca7091328 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sat, 11 May 2013 01:12:36 +0200 Subject: Version 1.1: fixes --- module/plugins/hooks/RestartFailed.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 273bb2910..3a69ae8c2 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -18,13 +18,13 @@ """ from module.plugins.Hook import Hook -import time +from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.0" - __description__ = "Automatically restart failed/aborted downloads according to defined rules" + __version__ = "1.1" + __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), ("dlFail", "bool", "Restart when download fail", "True"), @@ -79,7 +79,7 @@ class RestartFailed(Hook): self.info["dlfailed"] = curr + 1 def checkFailed(self, pyfile): - status = pygile.getStatusName() + status = pyfile.getStatusName() if status == "failed" or status == "aborted": self.checkFailed_n() @@ -130,4 +130,3 @@ class RestartFailed(Hook): self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} if self.getConfig("rsLoad"): self.restart() - self.configEvents(None, None, None) -- cgit v1.2.3 From f581c00bd7848cf9f6c07373f61e105099fa1515 Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 12:45:18 +0200 Subject: Version 1.2: all issues fixed + improved code --- module/plugins/hooks/RestartFailed.py | 82 ++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 36 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index 3a69ae8c2..b4987bc06 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,12 +23,12 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.1" + __version__ = "1.2" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), ("dlFail", "bool", "Restart when download fail", "True"), - ("dlFail_n", "int", "Only when failed/aborted downloads are at least", "5"), + ("dlFail_n", "int", "Only when failed downloads are at least", "5"), ("dlFail_i", "int", "Only when elapsed time since last restart is (min)", "10"), ("dlPrcs", "bool", "Restart after all downloads are processed", "True"), ("recnt", "bool", "Restart after reconnecting", "True"), @@ -37,21 +37,21 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - event_map = {"pluginConfigChanged": "configEvents"} - def resetCounters(self): + # self.logDebug("self.resetCounters") self.info["dlfailed"] = 0 if self.info["timerflag"]: self.setTimer(False, None) def restart(self): - now = time.time() + now = time() self.resetCounters() self.core.api.restartFailed() - self.logDebug("called self.core.api.restartFailed()") + self.logDebug("self.restart: self.core.api.restartFailed") self.info["lastrstime"] = now def setTimer(self, timerflag, interval): + # self.logDebug("self.setTimer") self.info["timerflag"] = timerflag if interval and interval != self.interval: self.interval = interval @@ -61,7 +61,8 @@ class RestartFailed(Hook): self.removeEvent("periodical", self.restart) def checkFailed_i(self): - now = time.time() + #self.logDebug("self.checkFailed_i") + now = time() lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 timerflag = self.info["timerflag"] @@ -71,62 +72,71 @@ class RestartFailed(Hook): self.setTimer(True, interval) def checkFailed_n(self): + # self.logDebug("self.checkFailed_n") curr = self.info["dlfailed"] max = self.getConfig("dlFail_n") if curr >= max: self.checkFailed_i() - else: - self.info["dlfailed"] = curr + 1 def checkFailed(self, pyfile): - status = pyfile.getStatusName() - if status == "failed" or status == "aborted": - self.checkFailed_n() + # self.logDebug("self.checkFailed") + self.info["dlfailed"] += 1 + self.checkFailed_n() def addEvent(self, event, handler): - self.manager.addEvent(event, handler) + if event in self.manager.events: + if handler not in self.manager.events[event]: + self.manager.events[event].append(handler) + # self.logDebug("self.addEvent: " + event + " event: added handler") + else: + # self.logDebug("self.addEvent: " + event + " event: NOT added handler") + return False + else: + self.manager.events[event] = [handler] + # self.logDebug("self.addEvent: " + event + " event: added event and handler") return True def removeEvent(self, event, handler): if event in self.manager.events and handler in self.manager.events[event]: self.manager.events[event].remove(handler) + # self.logDebug("self.removeEvent: " + event + " event: removed handler") return True else: + # self.logDebug("self.removeEvent: " + event + " event: NOT removed handler") return False - def on_allDownloadsProcessed(self): - self.restart() - - def on_downloadStart(self, pyfile): - self.removeEvent("downloadStarts", self.on_downloadStart) - self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - - def on_allDownloadsFinished(self): - self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - self.addEvent("downloadStarts", self.on_downloadStart) - - def on_afterReconnecting(self, ip): + def onAfterReconnecting(self, ip): + # self.logDebug("self.onAfterReconnecting") self.restart() def configEvents(self, plugin, name, value): + # self.logDebug("self.configEvents") if self.getConfig("dlFail"): - self.addEvent("downloadFinished", self.checkFailed) + self.addEvent("downloadFailed", self.checkFailed) else: - self.removeEvent("downloadFinished", self.checkFailed) + self.removeEvent("downloadFailed", self.checkFailed) self.resetCounters() if self.getConfig("dlPrcs"): - self.addEvent("allDownloadsProcessed", self.on_allDownloadsProcessed) - self.addEvent("allDownloadsFinished", self.on_allDownloadsFinished) + self.addEvent("allDownloadsProcessed", self.restart) else: - if not self.removeEvent("allDownloadsProcessed", self.on_allDownloadsProcessed): - self.removeEvent("downloadStarts", self.on_downloadStart) - self.removeEvent("allDownloadsFinished", self.on_allDownloadsFinished) + self.removeEvent("allDownloadsProcessed", self.restart) if self.getConfig("recnt"): - self.addEvent("afterReconnecting", self.on_afterReconnecting) + self.addEvent("afterReconnecting", self.onAfterReconnecting) else: - self.removeEvent("afterReconnecting", self.on_afterReconnecting) - - def setup(self): + self.removeEvent("afterReconnecting", self.onAfterReconnecting) + + def unload(self): + # self.logDebug("self.unload") + self.removeEvent("pluginConfigChanged", self.configEvents) + self.removeEvent("periodical", self.restart) + self.removeEvent("downloadFailed", self.checkFailed) + self.removeEvent("allDownloadsProcessed", self.restart) + self.removeEvent("afterReconnecting", self.onAfterReconnecting) + + def coreReady(self): + # self.logDebug("self.coreReady") self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} if self.getConfig("rsLoad"): self.restart() + self.addEvent("pluginConfigChanged", self.configEvents) + self.configEvents(None, None, None) -- cgit v1.2.3 From 128ff392cd10550d592a54f6c8d60896dd598bde Mon Sep 17 00:00:00 2001 From: Vuolter Date: Sun, 12 May 2013 14:53:42 +0200 Subject: Version 1.3: improved code --- module/plugins/hooks/RestartFailed.py | 54 ++++++++++++++++------------------- 1 file changed, 24 insertions(+), 30 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index b4987bc06..fba1c5889 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.2" + __version__ = "1.3" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -37,39 +37,33 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - def resetCounters(self): - # self.logDebug("self.resetCounters") - self.info["dlfailed"] = 0 - if self.info["timerflag"]: - self.setTimer(False, None) + def setInterval(self, interval): + # self.logDebug("self.setInterval") + if interval != self.interval: + self.interval = interval def restart(self): - now = time() - self.resetCounters() + # self.logDebug("self.restart") + self.setInterval(0) + self.info["dlfailed"] = 0 self.core.api.restartFailed() self.logDebug("self.restart: self.core.api.restartFailed") + now = time() self.info["lastrstime"] = now - def setTimer(self, timerflag, interval): - # self.logDebug("self.setTimer") - self.info["timerflag"] = timerflag - if interval and interval != self.interval: - self.interval = interval - if timerflag: - self.addEvent("periodical", self.restart) - else: - self.removeEvent("periodical", self.restart) + def periodical(self): + # self.logDebug("self.periodical") + self.restart() def checkFailed_i(self): - #self.logDebug("self.checkFailed_i") + # self.logDebug("self.checkFailed_i") now = time() lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 - timerflag = self.info["timerflag"] - if now >= lastrstime + interval: + if now < lastrstime + interval: + self.setInterval(interval) + else: self.restart() - elif not timerflag: - self.setTimer(True, interval) def checkFailed_n(self): # self.logDebug("self.checkFailed_n") @@ -87,22 +81,22 @@ class RestartFailed(Hook): if event in self.manager.events: if handler not in self.manager.events[event]: self.manager.events[event].append(handler) - # self.logDebug("self.addEvent: " + event + " event: added handler") + # self.logDebug("self.addEvent: " + event + ": added handler") else: - # self.logDebug("self.addEvent: " + event + " event: NOT added handler") + # self.logDebug("self.addEvent: " + event + ": NOT added handler") return False else: self.manager.events[event] = [handler] - # self.logDebug("self.addEvent: " + event + " event: added event and handler") + # self.logDebug("self.addEvent: " + event + ": added event and handler") return True def removeEvent(self, event, handler): if event in self.manager.events and handler in self.manager.events[event]: self.manager.events[event].remove(handler) - # self.logDebug("self.removeEvent: " + event + " event: removed handler") + # self.logDebug("self.removeEvent: " + event + ": removed handler") return True else: - # self.logDebug("self.removeEvent: " + event + " event: NOT removed handler") + # self.logDebug("self.removeEvent: " + event + ": NOT removed handler") return False def onAfterReconnecting(self, ip): @@ -115,7 +109,7 @@ class RestartFailed(Hook): self.addEvent("downloadFailed", self.checkFailed) else: self.removeEvent("downloadFailed", self.checkFailed) - self.resetCounters() + self.setInterval(0) if self.getConfig("dlPrcs"): self.addEvent("allDownloadsProcessed", self.restart) else: @@ -128,14 +122,14 @@ class RestartFailed(Hook): def unload(self): # self.logDebug("self.unload") self.removeEvent("pluginConfigChanged", self.configEvents) - self.removeEvent("periodical", self.restart) + self.setInterval(0) self.removeEvent("downloadFailed", self.checkFailed) self.removeEvent("allDownloadsProcessed", self.restart) self.removeEvent("afterReconnecting", self.onAfterReconnecting) def coreReady(self): # self.logDebug("self.coreReady") - self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} + self.info = {"dlfailed": 0, "lastrstime": 0} if self.getConfig("rsLoad"): self.restart() self.addEvent("pluginConfigChanged", self.configEvents) -- cgit v1.2.3 From fd97c96e2070bb96cdef8058564e739bc68eebae Mon Sep 17 00:00:00 2001 From: Vuolter Date: Mon, 13 May 2013 00:06:17 +0200 Subject: Version 1.5: first really stable release --- module/plugins/hooks/RestartFailed.py | 74 +++++++++++++++-------------------- 1 file changed, 31 insertions(+), 43 deletions(-) (limited to 'module/plugins') diff --git a/module/plugins/hooks/RestartFailed.py b/module/plugins/hooks/RestartFailed.py index fba1c5889..7ee53deb9 100644 --- a/module/plugins/hooks/RestartFailed.py +++ b/module/plugins/hooks/RestartFailed.py @@ -23,7 +23,7 @@ from time import time class RestartFailed(Hook): __name__ = "RestartFailed" - __version__ = "1.3" + __version__ = "1.5" __description__ = "Automatically restart failed/aborted downloads" __config__ = [ ("activated", "bool", "Activated", "True"), @@ -37,45 +37,36 @@ class RestartFailed(Hook): __author_name__ = ("Walter Purcaro") __author_mail__ = ("vuolter@gmail.com") - def setInterval(self, interval): - # self.logDebug("self.setInterval") - if interval != self.interval: - self.interval = interval - - def restart(self): + def restart(self, arg=None): # self.logDebug("self.restart") - self.setInterval(0) + self.info["timerflag"] = False self.info["dlfailed"] = 0 self.core.api.restartFailed() self.logDebug("self.restart: self.core.api.restartFailed") - now = time() - self.info["lastrstime"] = now + self.info["lastrstime"] = time() def periodical(self): # self.logDebug("self.periodical") - self.restart() + if self.info["timerflag"]: + self.restart() - def checkFailed_i(self): - # self.logDebug("self.checkFailed_i") + def checkInterval(self, arg=None): + # self.logDebug("self.checkInterval") now = time() lastrstime = self.info["lastrstime"] interval = self.getConfig("dlFail_i") * 60 if now < lastrstime + interval: - self.setInterval(interval) + self.info["timerflag"] = True else: self.restart() - def checkFailed_n(self): - # self.logDebug("self.checkFailed_n") - curr = self.info["dlfailed"] - max = self.getConfig("dlFail_n") - if curr >= max: - self.checkFailed_i() - def checkFailed(self, pyfile): # self.logDebug("self.checkFailed") self.info["dlfailed"] += 1 - self.checkFailed_n() + curr = self.info["dlfailed"] + max = self.getConfig("dlFail_n") + if curr >= max: + self.checkInterval() def addEvent(self, event, handler): if event in self.manager.events: @@ -99,38 +90,35 @@ class RestartFailed(Hook): # self.logDebug("self.removeEvent: " + event + ": NOT removed handler") return False - def onAfterReconnecting(self, ip): - # self.logDebug("self.onAfterReconnecting") - self.restart() - - def configEvents(self, plugin, name, value): + def configEvents(self, plugin=None, name=None, value=None): # self.logDebug("self.configEvents") - if self.getConfig("dlFail"): - self.addEvent("downloadFailed", self.checkFailed) - else: - self.removeEvent("downloadFailed", self.checkFailed) - self.setInterval(0) - if self.getConfig("dlPrcs"): - self.addEvent("allDownloadsProcessed", self.restart) + self.interval = self.getConfig("dlFail_i") * 60 + dlFail = self.getConfig("dlFail") + dlPrcs = self.getConfig("dlPrcs") + recnt = self.getConfig("recnt") + if dlPrcs: + self.addEvent("allDownloadsProcessed", self.checkInterval) else: - self.removeEvent("allDownloadsProcessed", self.restart) - if self.getConfig("recnt"): - self.addEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("allDownloadsProcessed", self.checkInterval) + if not dlFail: + self.info["timerflag"] = False + if recnt: + self.addEvent("afterReconnecting", self.restart) else: - self.removeEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("afterReconnecting", self.restart) def unload(self): # self.logDebug("self.unload") self.removeEvent("pluginConfigChanged", self.configEvents) - self.setInterval(0) self.removeEvent("downloadFailed", self.checkFailed) - self.removeEvent("allDownloadsProcessed", self.restart) - self.removeEvent("afterReconnecting", self.onAfterReconnecting) + self.removeEvent("allDownloadsProcessed", self.checkInterval) + self.removeEvent("afterReconnecting", self.restart) def coreReady(self): # self.logDebug("self.coreReady") - self.info = {"dlfailed": 0, "lastrstime": 0} + self.info = {"dlfailed": 0, "lastrstime": 0, "timerflag": False} if self.getConfig("rsLoad"): self.restart() + self.addEvent("downloadFailed", self.checkFailed) self.addEvent("pluginConfigChanged", self.configEvents) - self.configEvents(None, None, None) + self.configEvents() -- cgit v1.2.3