mirror of
https://github.com/vimagick/dockerfiles.git
synced 2024-12-23 01:39:27 +02:00
update urlwatch
This commit is contained in:
parent
b53ae6ccae
commit
63d9c9f3e2
69
urlwatch/data/reporters.py
Normal file
69
urlwatch/data/reporters.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
class SlackReporter(TextReporter):
|
||||||
|
"""Send a message to a Slack channel"""
|
||||||
|
|
||||||
|
__kind__ = 'slack'
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.max_length = self.config.get('max_message_length', 40000)
|
||||||
|
|
||||||
|
def submit(self):
|
||||||
|
webhook_url = self.config['webhook_url']
|
||||||
|
text = '\n'.join(super().submit())
|
||||||
|
|
||||||
|
if not text:
|
||||||
|
logger.debug('Not calling {} API (no changes)'.format(self.__kind__))
|
||||||
|
return
|
||||||
|
|
||||||
|
result = None
|
||||||
|
for chunk in chunkstring(text, self.max_length, numbering=True):
|
||||||
|
res = self.submit_chunk(webhook_url, chunk)
|
||||||
|
if res.status_code != requests.codes.ok or res is None:
|
||||||
|
result = res
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def submit_chunk(self, webhook_url, text):
|
||||||
|
logger.debug("Sending {} request with text: {}".format(self.__kind__, text))
|
||||||
|
post_data = self.prepare_post_data(text)
|
||||||
|
result = requests.post(webhook_url, json=post_data)
|
||||||
|
try:
|
||||||
|
if result.status_code == requests.codes.ok:
|
||||||
|
logger.info("{} response: ok".format(self.__kind__))
|
||||||
|
else:
|
||||||
|
logger.error("{} error: {}".format(self.__kind__, result.text))
|
||||||
|
except ValueError:
|
||||||
|
logger.error(
|
||||||
|
"Failed to parse {} response. HTTP status code: {}, content: {}".format(self.__kind__,
|
||||||
|
result.status_code,
|
||||||
|
result.content))
|
||||||
|
return result
|
||||||
|
|
||||||
|
def prepare_post_data(self, text):
|
||||||
|
if self.config.get('rich_text', False):
|
||||||
|
return {
|
||||||
|
"blocks": [
|
||||||
|
{
|
||||||
|
"type": "rich_text",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "rich_text_preformatted",
|
||||||
|
"elements": [
|
||||||
|
{"type": "text", "text": text}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
return {"text": text}
|
||||||
|
|
||||||
|
|
||||||
|
class MattermostReporter(SlackReporter):
|
||||||
|
"""Send a message to a Mattermost channel"""
|
||||||
|
|
||||||
|
__kind__ = 'mattermost'
|
||||||
|
|
||||||
|
def prepare_post_data(self, text):
|
||||||
|
return {"text": text}
|
Loading…
Reference in New Issue
Block a user