config: Make max_retry_wait configurable.
This commit is contained in:
parent
74cdc1e4a8
commit
96df7f89b2
3 changed files with 21 additions and 2 deletions
|
@ -21,11 +21,14 @@ Settings for the entire bot are configured in a ``[Bot]`` section::
|
||||||
password = ExamplePassword
|
password = ExamplePassword
|
||||||
nickname = FowardBot
|
nickname = FowardBot
|
||||||
loglevel = warning
|
loglevel = warning
|
||||||
|
max_retry_wait = 300
|
||||||
|
|
||||||
``jid`` and ``password`` are the required details for the bot's connection. The bot will use ``nickname`` when it joins MUCs and sends message, if specified.
|
``jid`` and ``password`` are the required details for the bot's connection. The bot will use ``nickname`` when it joins MUCs and sends message, if specified.
|
||||||
|
|
||||||
Logs are written to standard error. The ``loglevel`` setting controls how much is logged. You can specify ``debug``, ``info``, ``warning``, ``error``, or ``critical``.
|
Logs are written to standard error. The ``loglevel`` setting controls how much is logged. You can specify ``debug``, ``info``, ``warning``, ``error``, or ``critical``.
|
||||||
|
|
||||||
|
``max_retry_wait`` specifies the longest amount of time to wait before retrying operations, in seconds. You can specify any floating-point value >= 5. The default is 300.
|
||||||
|
|
||||||
Forwarding rules
|
Forwarding rules
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -15,12 +15,12 @@ class XEP(enum.Enum):
|
||||||
|
|
||||||
|
|
||||||
class ForwardBot(slixmpp.ClientXMPP):
|
class ForwardBot(slixmpp.ClientXMPP):
|
||||||
MAX_QUERY_WAIT = 300
|
|
||||||
MUC_FEATURE = 'http://jabber.org/protocol/muc'
|
MUC_FEATURE = 'http://jabber.org/protocol/muc'
|
||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
super().__init__(config.bot_jid().full, config.bot_password())
|
super().__init__(config.bot_jid().full, config.bot_password())
|
||||||
self.nick = config.bot_nick()
|
self.nick = config.bot_nick()
|
||||||
|
self.max_retry_wait = config.get_max_retry_wait(300)
|
||||||
self.forwards = dict(config.forwards())
|
self.forwards = dict(config.forwards())
|
||||||
self.jid_mtype_map = {}
|
self.jid_mtype_map = {}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ class ForwardBot(slixmpp.ClientXMPP):
|
||||||
query['host'], error.iq['error']['condition'])
|
query['host'], error.iq['error']['condition'])
|
||||||
except IqTimeout:
|
except IqTimeout:
|
||||||
try:
|
try:
|
||||||
wait_secs = min(query['wait_secs'] * 2, self.MAX_QUERY_WAIT)
|
wait_secs = min(query['wait_secs'] * 2, self.max_retry_wait)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
wait_secs = 10
|
wait_secs = 10
|
||||||
logger.warning("queryhost: timeout querying %r: will retry in %s seconds",
|
logger.warning("queryhost: timeout querying %r: will retry in %s seconds",
|
||||||
|
|
|
@ -14,6 +14,7 @@ class Config(configparser.ConfigParser):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
bot_section = self.setdefault('Bot', {})
|
bot_section = self.setdefault('Bot', {})
|
||||||
bot_section.setdefault('loglevel', 'warning')
|
bot_section.setdefault('loglevel', 'warning')
|
||||||
|
bot_section.setdefault('max_retry_wait', '300')
|
||||||
|
|
||||||
def read_paths(self, paths_seq, encoding=None):
|
def read_paths(self, paths_seq, encoding=None):
|
||||||
for path in paths_seq:
|
for path in paths_seq:
|
||||||
|
@ -39,6 +40,9 @@ class Config(configparser.ConfigParser):
|
||||||
if self.get_loglevel(-1) == -1:
|
if self.get_loglevel(-1) == -1:
|
||||||
logger.error("invalid loglevel setting %r", self['Bot']['loglevel'])
|
logger.error("invalid loglevel setting %r", self['Bot']['loglevel'])
|
||||||
retval = False
|
retval = False
|
||||||
|
if self.get_max_retry_wait(-1) == -1:
|
||||||
|
logger.error("invalid max_retry_wait setting %r", self['Bot']['max_retry_wait'])
|
||||||
|
retval = False
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
def bot_jid(self):
|
def bot_jid(self):
|
||||||
|
@ -87,3 +91,15 @@ class Config(configparser.ConfigParser):
|
||||||
return fallback
|
return fallback
|
||||||
else:
|
else:
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
def get_max_retry_wait(self, fallback=None):
|
||||||
|
try:
|
||||||
|
retval = float(self['Bot'].get('max_retry_wait', 300))
|
||||||
|
if retval < 5:
|
||||||
|
raise ValueError("max_retry_wait {} too low".format(retval))
|
||||||
|
except ValueError:
|
||||||
|
if fallback is None:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
retval = fallback
|
||||||
|
return retval
|
||||||
|
|
Loading…
Reference in a new issue