From a0377a7993688e9ffb21fe73a3a2786cdc2ba43a Mon Sep 17 00:00:00 2001 From: Christian Dresen <c.dresen@fh-muenster.de> Date: Tue, 11 Oct 2016 22:09:55 +0200 Subject: [PATCH] [WarpInfra] Added Mattermost incomming Webhook --- www/Dockerfile | 1 + www/conf/config.example.ini | 3 +++ www/web/warpfood/views.py | 5 ++++- www/web/warpzone/settings.py | 21 +++++++++++++++++++++ www/web/warpzone/util.py | 15 +++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/www/Dockerfile b/www/Dockerfile index 4a487dd..931f8d8 100644 --- a/www/Dockerfile +++ b/www/Dockerfile @@ -30,6 +30,7 @@ RUN pip3 install \ ldap3 \ uwsgi \ django-two-factor-auth \ + matterhook \ --upgrade RUN pip3 install git+https://github.com/nkunihiko/django-bootstrap3-datetimepicker.git diff --git a/www/conf/config.example.ini b/www/conf/config.example.ini index cf6b569..48e8fad 100644 --- a/www/conf/config.example.ini +++ b/www/conf/config.example.ini @@ -5,6 +5,9 @@ DEBUG = true SECRET_KEY = '4m4c(_$ubwued9p-insp!950g&r0yu851bp287$2a3ydj^y=0=' PW_RESET_TOKEN_LIFETIME = 5 +[mattermost] +API_KEY = bohtwe6zy7y43p5n36skph7ejy + [ldap] LDAP_HOST = ldap LDAP_BIND_DN = cn=admin,dc=warpzone,dc=ms diff --git a/www/web/warpfood/views.py b/www/web/warpfood/views.py index 890692d..7d6dadf 100644 --- a/www/web/warpfood/views.py +++ b/www/web/warpfood/views.py @@ -3,6 +3,8 @@ from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAll from django.shortcuts import redirect from django.contrib.auth.decorators import login_required from warpfood.util import * +from warpzone.util import send_to_mattermost +from django.utils.translation import ugettext as _ from warpfood.models import * from reportlab.pdfgen import canvas from django.http import HttpResponse @@ -21,7 +23,8 @@ def index(request): if request.method == 'POST': form = FoodSheetForm(request.POST) if form.is_valid(): - form.save() + sheet = form.save() + send_to_mattermost("PizzaSheet", "town-square", _("pizza_sheet_opened_for_%(est_order_time)s_at_%(pizza_service)s") % ({'est_order_time': sheet.estimated_order_time, 'pizza_service':sheet.food_service})) time_threshold = datetime.now() - timedelta(days=1) FoodSheet.objects.filter(order_time__lte=time_threshold).delete() diff --git a/www/web/warpzone/settings.py b/www/web/warpzone/settings.py index f22beb6..78d88d7 100644 --- a/www/web/warpzone/settings.py +++ b/www/web/warpzone/settings.py @@ -39,6 +39,9 @@ EMAIL_SUBJECT_PREFIX = config.get('email','SUBJECT_PREFIX') PW_RESET_TOKEN_LIFETIME = config.get('security','PW_RESET_TOKEN_LIFETIME') SECRET_KEY = config.get('security','SECRET_KEY') +# MATTERMOST +API_KEY = config.get('mattermost','API_KEY') + # DEBUG DEBUG = config.getboolean('debug','DEBUG') @@ -185,6 +188,24 @@ AUTH_LDAP_FIND_GROUP_PERMS = True AUTH_LDAP_CACHE_GROUPS = True AUTH_LDAP_GROUP_CACHE_TIMEOUT = 10 +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + 'file': { + 'level': 'ERROR', + 'class': 'logging.FileHandler', + 'filename': '/opt/log/error.log', + }, + }, + 'loggers': { + 'django': { + 'handlers': ['file'], + 'level': 'ERROR', + 'propagate': True, + }, + }, +} logger = logging.getLogger('django_auth_ldap') logger.addHandler(logging.StreamHandler()) hdlr = logging.FileHandler('/tmp/ldap.log') diff --git a/www/web/warpzone/util.py b/www/web/warpzone/util.py index f56b797..ee10da2 100644 --- a/www/web/warpzone/util.py +++ b/www/web/warpzone/util.py @@ -1,12 +1,27 @@ from django.core.mail import send_mail from django.conf import settings from django.utils.translation import ugettext as _ +from matterhook import Webhook +import logging page_context = {'pages': [ {"link": "pizza", "name": _("pizza_sheet")}, {"link": "about", "name": _("about")}, ], 'debug': settings.DEBUG} + + +def send_to_mattermost(username, channel, message): + try: + if settings.API_KEY: + hook = Webhook("https://mattermost.warpzone.ms", settings.API_KEY) + if settings.DEBUG: + username = "["+channel+"] "+username + channel = "warpinfradebug" + hook.send(message, channel=channel, username=username) + except Exception as e: + logging.getLogger("django").error(e) + def send_email(to_address, subject, content): try: send_mail( -- GitLab