From 3f79d6713aaa8a1f089c376496d1ab7c6f9cbe9a Mon Sep 17 00:00:00 2001 From: jabertwo <wz@jabertwo.de> Date: Wed, 10 May 2023 09:44:30 +0200 Subject: [PATCH] =?UTF-8?q?Healtchecks=20f=C3=BCr=20sendmail=5Fplenum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/docker_traefik/tasks/main.yml | 2 +- site.yml | 4 +- webserver/docker_dokuwiki/tasks/main.yml | 24 +++- .../templates/sendmail_plenum.py | 131 +++++++++--------- 4 files changed, 89 insertions(+), 72 deletions(-) diff --git a/common/docker_traefik/tasks/main.yml b/common/docker_traefik/tasks/main.yml index a13407e7..7367fe7e 100644 --- a/common/docker_traefik/tasks/main.yml +++ b/common/docker_traefik/tasks/main.yml @@ -52,4 +52,4 @@ docker_compose: project_src: "{{ basedir }}" state: present - \ No newline at end of file + diff --git a/site.yml b/site.yml index 0a33384b..58b6b656 100644 --- a/site.yml +++ b/site.yml @@ -173,7 +173,9 @@ - { role: webserver/docker_dokuwiki, tags: dokuwiki, servicename: "dokuwiki", - domain: "wiki.warpzone.ms" + domain: "wiki.warpzone.ms", + basedir: /srv/dokuwiki, + healthchecks_url: "https://hc-ping.com/038adcfe-05bf-45b4-919b-88b69aab8844" } - { role: webserver/docker_gitlab, tags: gitlab, diff --git a/webserver/docker_dokuwiki/tasks/main.yml b/webserver/docker_dokuwiki/tasks/main.yml index 2cf69039..060c0394 100644 --- a/webserver/docker_dokuwiki/tasks/main.yml +++ b/webserver/docker_dokuwiki/tasks/main.yml @@ -9,22 +9,23 @@ path: "{{item}}" state: "directory" with_items: - - /srv/dokuwiki/ - - /srv/dokuwiki/data - - /srv/dokuwiki/pdftemplate + - {{ basedir }}/ + - {{ basedir }}/data + - {{ basedir }}/pdftemplate - name: Docker Compose Konfig-Datei erstellen template: src: "{{item}}" - dest: "/srv/dokuwiki/{{item}}" + dest: "{{ basedir }}/{{item}}" with_items: - docker-compose.yml - Dockerfile - sendmail_plenum.py + register: config - name: start dokuwiki docker docker_compose: - project_src: /srv/dokuwiki/ + project_src: {{ basedir }} state: present - name: Cronjob für Mailversand Plenumsmail @@ -33,5 +34,16 @@ weekday: "0" hour: "20" minute: "0" - job: "/usr/bin/python3 /srv/dokuwiki/sendmail_plenum.py" + job: "/usr/bin/python3 {{ basedir }}/sendmail_plenum.py" disabled: false + +- name: "stop {{ servicename}} docker" + docker_compose: + project_src: "{{ basedir }}" + state: absent + when: config.changed + +- name: "start {{ servicename}} docker" + docker_compose: + project_src: "{{ basedir }}" + state: present diff --git a/webserver/docker_dokuwiki/templates/sendmail_plenum.py b/webserver/docker_dokuwiki/templates/sendmail_plenum.py index d673b261..98c8f4e4 100644 --- a/webserver/docker_dokuwiki/templates/sendmail_plenum.py +++ b/webserver/docker_dokuwiki/templates/sendmail_plenum.py @@ -2,73 +2,76 @@ import smtplib import datetime from email.message import EmailMessage from email.utils import formatdate - -with open("/srv/dokuwiki/data/data/pages/intern/diskussionsthemen.txt") as fp: - raw = fp.read().split('\n') - - # Extract Themen - firstline = 0 - lastline = 0 - for index, line in enumerate(raw): - # Start marker - if "====== 1." in line: - firstline = index + 1 - continue +import requests + +def do_work(): + with open("/srv/dokuwiki/data/data/pages/intern/diskussionsthemen.txt") as fp: + raw = fp.read().split('\n') + + # Extract Themen + firstline = 0 + lastline = 0 + for index, line in enumerate(raw): + # Start marker + if "====== 1." in line: + firstline = index + 1 + continue + + # End marker + if "====== 2." in line: + lastline = index + break - # End marker - if "====== 2." in line: - lastline = index - break - - # Remove empty lines from topics - topics = [] - for extracted in raw[firstline:lastline-1]: - if extracted != '': - topics.append(extracted) - - # There are no topics - just exit - if (len(topics) == 0): - exit() - - # calculate date of next tuesday - d = datetime.date.today() - while d.strftime('%a') != 'Tue': - d += datetime.timedelta(1) - - # mail template - mail = f""" -Liebe Zonies, - -es gibt wieder Themen die im Plenum besprochen werden sollen. Der nächste -Reguläre Termin ist am nächsten Dienstag ({str(d)}) um 20:00. -Im Wiki (https://wiki.warpzone.ms/intern:diskussionsthemen#diskussionsthemen_naechstes_plenum_automatische_einladung) -stehen folgende Themen: - -{chr(10).join(topics)} - -Die Teilnahme ist natürlich auch remote möglich unter -https://jitsi.dorf-post.de/warpzone-plenum möglich. - -Viele Grüße und bis Dienstag, - -sendmail_plenum.py -""" - - msg = EmailMessage() - msg['Subject'] = f'Aktuelle Plenumsthemen für Dienstag ({str(d)} 20:00)' - msg['From'] = '{{noreply_email_user}}' - msg['To'] = 'intern@warpzone.ms' - msg['Date'] = formatdate(localtime=True) - msg.set_content(mail) - - server = smtplib.SMTP('{{smtp_host}}', {{smtp_port}}) - server.starttls() - server.login("{{noreply_email_user}}", "{{noreply_email_pass}}") - server.send_message(msg) - server.quit() - + # Remove empty lines from topics + topics = [] + for extracted in raw[firstline:lastline-1]: + if extracted != '': + topics.append(extracted) + + # There are no topics - just exit + if (len(topics) == 0): + exit() + + # calculate date of next tuesday + d = datetime.date.today() + while d.strftime('%a') != 'Tue': + d += datetime.timedelta(1) + + # mail template + mail = f""" + Liebe Zonies, + + es gibt wieder Themen die im Plenum besprochen werden sollen. Der nächste + Reguläre Termin ist am nächsten Dienstag ({str(d)}) um 20:00. + Im Wiki (https://wiki.warpzone.ms/intern:diskussionsthemen#diskussionsthemen_naechstes_plenum_automatische_einladung) + stehen folgende Themen: + {chr(10).join(topics)} + Die Teilnahme ist natürlich auch remote möglich unter + https://jitsi.dorf-post.de/warpzone-plenum möglich. + Viele Grüße und bis Dienstag, + sendmail_plenum.py + """ + msg = EmailMessage() + msg['Subject'] = f'Aktuelle Plenumsthemen für Dienstag ({str(d)} 20:00)' + msg['From'] = '{{noreply_email_user}}' + msg['To'] = 'intern@warpzone.ms' + msg['Date'] = formatdate(localtime=True) + msg.set_content(mail) + + server = smtplib.SMTP('{{smtp_host}}', {{smtp_port}}) + server.starttls() + server.login("{{noreply_email_user}}", "{{noreply_email_pass}}") + server.send_message(msg) + server.quit() + return True + +success = False +try: + success = do_work() +finally: + requests.get"{{ healthchecks_url }}" if success else "{{ healthchecks_url }}" + "/fail") \ No newline at end of file -- GitLab