Skip to content
Snippets Groups Projects
Commit 0f8e5ba9 authored by Brian Moe's avatar Brian Moe
Browse files

Added VOEvent creation and SkyAlert notification button

parent 1e1208cb
No related branches found
No related tags found
No related merge requests found
# Taken from VOEventLib example code, which is:
# Copyright 2010 Roy D. Williams # Copyright 2010 Roy D. Williams
# then modified
""" """
buildVOEvent: Creates a complex VOEvent with tables buildVOEvent: Creates a complex VOEvent with tables
See the VOEvent specification for details See the VOEvent specification for details
...@@ -17,7 +20,7 @@ def buildVOEvent(gevent): ...@@ -17,7 +20,7 @@ def buildVOEvent(gevent):
############ VOEvent header ############################ ############ VOEvent header ############################
v = VOEvent.VOEvent(version="2.0") v = VOEvent.VOEvent(version="2.0")
v.set_ivorn("ivo://ligo.org/gracedb#%s" % objid) v.set_ivorn("ivo://ligo.org/gracedb#%s-dev" % objid)
v.set_role("test") v.set_role("test")
v.set_Description("LIGO / Virgo trigger") v.set_Description("LIGO / Virgo trigger")
...@@ -101,11 +104,7 @@ def submitToSkyalert(gevent, validate_only=False): ...@@ -101,11 +104,7 @@ def submitToSkyalert(gevent, validate_only=False):
# Should alerts be run once the event is ingested? # Should alerts be run once the event is ingested?
dict['doRules'] = 'on' dict['doRules'] = 'on'
# open a file for the XML
#dict['xmlText'] = open('sample.xml').read()
dict['xmlText'] = buildVOEvent(gevent) dict['xmlText'] = buildVOEvent(gevent)
# Now send it off and print the result
params = urllib.urlencode(dict) params = urllib.urlencode(dict)
f = urllib.urlopen(url, params) f = urllib.urlopen(url, params)
result = f.read() result = f.read()
......
...@@ -18,6 +18,9 @@ from translator import handle_uploaded_data ...@@ -18,6 +18,9 @@ from translator import handle_uploaded_data
import urllib import urllib
import os import os
import re
from django.core.mail import mail_admins
from django.conf import settings
from buildVOEvent import buildVOEvent, submitToSkyalert from buildVOEvent import buildVOEvent, submitToSkyalert
...@@ -33,13 +36,105 @@ def index(request): ...@@ -33,13 +36,105 @@ def index(request):
{}, {},
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def skyalert_authorized(request):
try:
return request.ligouser.name in settings.SKYALERT_SUBMITTERS
except:
return False
def voevent(request, graceid): def voevent(request, graceid):
event = Event.getByGraceid(graceid) event = Event.getByGraceid(graceid)
return HttpResponse(buildVOEvent(event), content_type="application/xml") return HttpResponse(buildVOEvent(event), content_type="application/xml")
def skyalert(request, graceid): def skyalert(request, graceid):
event = Event.getByGraceid(graceid) event = Event.getByGraceid(graceid)
return HttpResponse(submitToSkyalert(event), content_type="text/plain") createLogEntry = True
if not event.gpstime:
request.session['flash_msg'] = "No GPS time. Event not suitable for submission to SkyAlert"
return HttpResponseRedirect(reverse(view, args=[graceid]))
if not skyalert_authorized(request):
request.session['flash_msg'] = "You are not authorized for SkyAlert submission"
return HttpResponseRedirect(reverse(view, args=[graceid]))
try:
skyalert_response = submitToSkyalert(event)
except Exception, e:
message = "SkyAlert Submission Error"
skyalert_response = ""
mail_admins("SkyAlert Submission Error",
"Event: %s\nExcption: %s\n" % (graceid, e),
fail_silently=True)
if skyalert_response.find("Success") >= 0:
urlpat = re.compile('https://[^ ]*')
match = urlpat.search(skyalert_response)
if match:
message = "Submitted to Skyalert: %s" % match.group()
else:
message = "SkyAlert submission problem. Cannot parse SkyAlert response."
mail_admins("SkyAlert response parsing problem",
"Event: %s\nSkyAlert Response: %s\n" % (graceid, skyalert_response),
fail_silently=True)
elif skyalert_response.find('already') >= 0:
message = "Event already submitted to SkyAlert"
createLogEntry = False
elif skyalert_response:
message = "Skyalert Submission Failed."
mail_admins("SkyAlert submission failed",
"Event: %s\nSkyAlert Response: %s\n" % (graceid, skyalert_response),
fail_silently=True)
request.session['flash_msg'] = message
if createLogEntry:
logentry = EventLog(event=event, issuer=request.ligouser, comment=message)
logentry.save()
return HttpResponseRedirect(reverse(view, args=[graceid]))
def badskyalert(request, graceid):
event = Event.getByGraceid(graceid)
if not event.gpstime:
request.session['flash_msg'] = "No GPS time. Event not suitable for submission to SkyAlert"
return HttpResponse("Ugh no gpstime")
return HttpResponseRedirect(reverse(view, args=[graceid]))
logentry = EventLog(event=event, issuer=request.ligouser, comment="TRYING TO SUMIT TO SKYALERT")
logentry.save()
skyalert_response = submitToSkyalert(event, validate_only="False")
if skyalert_response.find("Success") >= 0:
urlpat = re.compile('https://[^ ]*')
match = urlpat.search(skyalert_response)
if match:
try:
skyalert_url = match.group()
except:
skyalert_url = "fail match"
comment = "Submitted to SkyALert: %s" % skyalert_url
logentry = EventLog(event=event, issuer=request.ligouser, comment=comment)
logentry.save()
request.session['flash_msg'] = comment
return HttpResponse("OK " + skyalert_response + skyalert_url + logentry.comment)
else:
request.session['flash_msg'] = "Problem parsing skyalert response"
return HttpResponse('problem ' + skyalert_response)
elif skyalert_response.find('already found') >= 0:
request.session['flash_msg'] = "Event already submitted to SkyAlert " + skyalert_response
return HttpResponse('already done ' + skyalert_response)
else:
return HttpResponse('problem2 ' + skyalert_response)
request.session['flash_msg'] = "Unknown problem submitting to SkyAlert -- %s" % skyalert_response
#return HttpResponseRedirect(reverse(view, args=[graceid]))
return HttpResponse('how did we get here? ' + skyalert_response)
return view(request, graceid)
def create(request): def create(request):
d = _create(request) d = _create(request)
...@@ -393,6 +488,7 @@ def view(request, graceid): ...@@ -393,6 +488,7 @@ def view(request, graceid):
context['userdesc'] = get_file(graceid, "user.log") context['userdesc'] = get_file(graceid, "user.log")
context['nearby'] = [(event.gpstime - a.gpstime, event) context['nearby'] = [(event.gpstime - a.gpstime, event)
for event in a.neighbors()] for event in a.neighbors()]
context['skyalert_authorized'] = skyalert_authorized(request)
return render_to_response( return render_to_response(
'gracedb/event_detail.html', 'gracedb/event_detail.html',
context, context,
......
...@@ -8,11 +8,13 @@ EMAIL_HOST = 'gravity.phys.uwm.edu' ...@@ -8,11 +8,13 @@ EMAIL_HOST = 'gravity.phys.uwm.edu'
ADMINS = ( ADMINS = (
('Brian Moe', 'bmoe@gravity.phys.uwm.edu'), ('Brian Moe', 'bmoe@gravity.phys.uwm.edu'),
('Larry Price', 'larry@gravity.phys.uwm.edu'), # ('Larry Price', 'larry@gravity.phys.uwm.edu'),
) )
MANAGERS = ADMINS MANAGERS = ADMINS
SKYALERT_SUBMITTERS = ['Patrick Brady', 'Brian Moe']
ALERT_EMAIL_FROM = "GraCEDb <gracedb@archie.phys.uwm.edu>" ALERT_EMAIL_FROM = "GraCEDb <gracedb@archie.phys.uwm.edu>"
ALERT_EMAIL_TO = [ ALERT_EMAIL_TO = [
"gracedb@listserv.ligo.org", "gracedb@listserv.ligo.org",
......
...@@ -9,6 +9,8 @@ ADMINS = ( ...@@ -9,6 +9,8 @@ ADMINS = (
MANAGERS = ADMINS MANAGERS = ADMINS
SKYALERT_SUBMITTERS = ['Patrick Brady', 'Brian Moe']
ALERT_EMAIL_FROM = "Dev Alert <root@moe.phys.uwm.edu>" ALERT_EMAIL_FROM = "Dev Alert <root@moe.phys.uwm.edu>"
ALERT_EMAIL_TO = [ ALERT_EMAIL_TO = [
"Brian Moe <bmoe@gravity.phys.uwm.edu>", "Brian Moe <bmoe@gravity.phys.uwm.edu>",
......
...@@ -11,6 +11,12 @@ ...@@ -11,6 +11,12 @@
<tr><td valign="top"> <tr><td valign="top">
<table class="event"> <table class="event">
{% if skyalert_authorized %}
<tr><td colspan="4">
<a href="{% url skyalert object.graceid %}"><button type="button">Submit to Skyalert</button></a>
</td></tr>
{% endif %}
<tr> <tr>
<th valign="top">UID</th> <th valign="top">UID</th>
<th>Labels</th> <th>Labels</th>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment