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