--- /dev/null
+#!/usr/bin/python
+
+import time
+import urllib3
+import json
+from systemd import journal
+
+urllib3.disable_warnings()
+http = urllib3.PoolManager()
+
+webhook_url = "<%= @slack_logger %>"
+webhook_icon = "https://git.immae.eu/releases/logger.png"
+
+def send_to_discord(message):
+ def send_chunk(chunk):
+ data = {
+ "avatar_url": webhook_icon,
+ "username": "Logger",
+ "content": "```\n{}\n```".format(chunk),
+ }
+ encoded = json.dumps(data).encode('utf-8')
+
+ r = http.request("POST", webhook_url,
+ headers={'Content-Type': 'application/json'},
+ body=encoded)
+ if r.status == 429:
+ b = json.loads(r.data)
+ time.sleep(b["retry_after"] / 900)
+ r = http.request("POST", webhook_url,
+ headers={'Content-Type': 'application/json'},
+ body=encoded)
+ assert r.status < 299
+
+ chunk = ""
+ for line in message.split("\n"):
+ if len(line) + len(chunk) > 2000 - 17:
+ send_chunk(chunk)
+ chunk = line
+ else:
+ chunk += "\n" + line
+ send_chunk(chunk)
+
+j = journal.Reader()
+j.add_match(_SYSTEMD_UNIT="cryptoportfolio-app.service")
+j.seek_tail()
+list(j)
+
+while True:
+ lines = [entry["MESSAGE"] for entry in list(j)]
+ if len(lines) > 0:
+ send_to_discord("\n".join(lines))
+ time.sleep(3)