diff --git a/gracedb/view_logic.py b/gracedb/view_logic.py index cc3d4904e4fb372ccec91d26eeb57d942edf95a7..be98f6c81510769f1ce4bac353fa03fd4853ebcd 100644 --- a/gracedb/view_logic.py +++ b/gracedb/view_logic.py @@ -10,7 +10,8 @@ from models import SimInspiralEvent from models import LalInferenceBurstEvent from models import EMBBEventLog, EMGroup from models import EMObservation, EMFootprint -from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate +from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate, \ + issueXMPPAlert from translator import handle_uploaded_data from utils.vfile import VersionedFile @@ -194,7 +195,7 @@ def create_label(event, request, labelName, doAlert=True, doXMPP=True): # and label_created bool return json.dumps(d), label_created -def delete_label(event, request, labelName): +def delete_label(event, request, labelName, doXMPP=True): # This function deletes a label. It starts out a lot like the create # label function. First get user and event info: creator = request.user @@ -228,6 +229,15 @@ def delete_label(event, request, labelName): logger.exception('Problem saving log message (%s)' % str(e)) d['error'] = str(e) + # send an XMPP alert, no email or phone alerts + try: + if doXMPP: + issueXMPPAlert(event, "", alert_type="label", + description="Label {0} removed".format(label.name)) + except Exception as e: + logger.exception('Problem issuing alert (%s)' % str(e)) + d['warning'] = "Problem issuing alert (%s)" % str(e) + # Return the json for some reason. I don't do any alert stuff in here. return json.dumps(d) diff --git a/gracedb/views.py b/gracedb/views.py index edfd0c2d10cb21f2f82340977582d7be9290bd86..15002a02ae9a169acdaf201c859928c6963915e7 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -26,6 +26,12 @@ from view_logic import create_label, delete_label from view_utils import assembleLigoLw, get_file from view_utils import flexigridResponse, jqgridResponse from view_utils import get_recent_events_string +from view_utils import eventLogToDict +from alert import issueAlertForUpdate + +# Set up logging +import logging +log = logging.getLogger(__name__) import os from django.conf import settings @@ -178,6 +184,8 @@ def _create(request): @event_and_auth_required def logentry(request, event, num=None): + """Creates an EventLog from the web interface""" + if request.method == "POST": # create a log entry elog = EventLog(event=event, issuer=request.user) @@ -252,6 +260,22 @@ def logentry(request, event, num=None): except: pass + # Send XMPP alert message + try: + if uploadedFile: + desc = "UPLOAD: '{0}' ".format(uploadedFile.name) + fname = uploadedFile.name + else: + desc = "LOG: " + fname = "" + issueAlertForUpdate(event, desc+elog.comment, doxmpp=True, + filename=fname, + serialized_object=eventLogToDict(elog, request=request)) + except Exception as e: + log.error('Error issuing alert: %s' % str(e)) + return HttpResponse("Failed to send alert for log message: %s" \ + .format(e)) + elif request.method == "GET": if not user_has_perm(request.user, 'view', event): return HttpResponseForbidden("Forbidden")