Skip to content
Snippets Groups Projects
Commit 5acca599 authored by Tanner Prestegard's avatar Tanner Prestegard Committed by GraceDB
Browse files

Adding new 'latest' page for events/superevents

New /latest/ page includes events and superevents. We also
move the old events 'latest' page to /events/latest/, changed the
view name, and fixed reverses to that page appropriately.
parent 42bb3693
No related branches found
No related tags found
1 merge request!8Superevents
...@@ -25,6 +25,9 @@ DEBUG = False ...@@ -25,6 +25,9 @@ DEBUG = False
# Set to off by default # Set to off by default
MAINTENANCE_MODE = False MAINTENANCE_MODE = False
# Number of results to show on latest page
LATEST_RESULTS_NUMBER = 50
# Used for running unit tests # Used for running unit tests
TEST_RUNNER = 'django.test.runner.DiscoverRunner' TEST_RUNNER = 'django.test.runner.DiscoverRunner'
......
...@@ -36,7 +36,7 @@ urlpatterns = [ ...@@ -36,7 +36,7 @@ urlpatterns = [
url(r'^reports/$', events.reports.histo, name="reports"), url(r'^reports/$', events.reports.histo, name="reports"),
url(r'^reports/cbc_report/(?P<format>(json|flex))?$', url(r'^reports/cbc_report/(?P<format>(json|flex))?$',
events.reports.cbc_report, name="cbc_report"), events.reports.cbc_report, name="cbc_report"),
url(r'^latest', events.views.latest, name="latest"), url(r'^latest/$', search.views.latest, name="latest"),
#(r'^reports/(?P<path>.+)$', 'django.views.static.serve', #(r'^reports/(?P<path>.+)$', 'django.views.static.serve',
# {'document_root': settings.LATENCY_REPORT_DEST_DIR}), # {'document_root': settings.LATENCY_REPORT_DEST_DIR}),
url(r'^search/$', search.views.search, name="mainsearch"), url(r'^search/$', search.views.search, name="mainsearch"),
......
...@@ -10,7 +10,6 @@ from . import views ...@@ -10,7 +10,6 @@ from . import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.index, name="home-events"), url(r'^$', views.index, name="home-events"),
url(r'^create/$', views.create, name="create"), url(r'^create/$', views.create, name="create"),
url(r'^search/(?P<format>(json|flex))?$', views.search, name="search"),
url(r'^(?P<graceid>[GEHMT]\d+)/view/$', views.view, name="view"), url(r'^(?P<graceid>[GEHMT]\d+)/view/$', views.view, name="view"),
url(r'^(?P<graceid>[GEHMT]\d+)/voevent/$', views.voevent, name="voevent"), url(r'^(?P<graceid>[GEHMT]\d+)/voevent/$', views.voevent, name="voevent"),
#url (r'^skyalert/(?P<graceid>[GEHMT]\d+)', 'skyalert', name="skyalert"), #url (r'^skyalert/(?P<graceid>[GEHMT]\d+)', 'skyalert', name="skyalert"),
...@@ -35,6 +34,11 @@ urlpatterns = [ ...@@ -35,6 +34,11 @@ urlpatterns = [
url(r'^(?P<graceid>[GEHMT]\d+)/log/(?P<num>\d+)/tag/(?P<tagname>.*)$', url(r'^(?P<graceid>[GEHMT]\d+)/log/(?P<num>\d+)/tag/(?P<tagname>.*)$',
views.taglogentry, name="taglogentry"), views.taglogentry, name="taglogentry"),
# old event-only searches
url(r'^latest/$', views.latest, name="eventlatest"),
url(r'^search/(?P<format>(json|flex))?$', views.search,
name="eventsearch"),
# Legacy URLs # Legacy URLs
url(r'^view/(?P<graceid>[GEHMT]\d+)', views.view, name="legacyview"), url(r'^view/(?P<graceid>[GEHMT]\d+)', views.view, name="legacyview"),
url(r'^(?P<graceid>[GEHMT]\d+)$', views.view, name="legacyview2"), url(r'^(?P<graceid>[GEHMT]\d+)$', views.view, name="legacyview2"),
......
from django import forms
from django.conf import settings
from django.http import HttpResponse, HttpResponseRedirect from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse from django.urls import reverse
...@@ -8,9 +10,12 @@ from .forms import MainSearchForm ...@@ -8,9 +10,12 @@ from .forms import MainSearchForm
from .utils import get_search_results_as_ligolw from .utils import get_search_results_as_ligolw
from core.http import check_and_serve_file from core.http import check_and_serve_file
from events.models import Event
from events.view_utils import flexigridResponse as events_flex from events.view_utils import flexigridResponse as events_flex
from superevents.models import Superevent
from superevents.search_flex import flexigridResponse as superevents_flex from superevents.search_flex import flexigridResponse as superevents_flex
import os import os
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -64,3 +69,46 @@ def search(request): ...@@ -64,3 +69,46 @@ def search(request):
context['form'] = form context['form'] = form
return render(request, 'search/query.html', context=context) return render(request, 'search/query.html', context=context)
@require_GET
def latest(request):
# Set up context
context = {}
if "query" in request.GET:
form = MainSearchForm(request.GET)
else:
form = MainSearchForm({'query': "", 'query_type': 'E'})
# Hide get_neighbors widget
form.fields['get_neighbors'].widget = forms.HiddenInput()
if form.is_valid():
objects = form.cleaned_data.get('query')
query_type = form.cleaned_data.get('query_type')
get_neighbors = form.cleaned_data.get('get_neighbors')
# TODO
# Add some select_related stuff here!!
# TODO:
# Filter objects for user
context['title'] = "Query results"
context['raw_query'] = request.GET.get('query')
context['get_neighbors'] = get_neighbors
# Determine object type and order by id (equivalent to
# ordering by creation time and might be faster)
if query_type == 'E':
objects_key = 'events'
elif query_type == 'S':
objects_key = 'superevents'
context[objects_key] = \
objects.order_by('-id')[:settings.LATEST_RESULTS_NUMBER]
# Update form to have query and errors (if they exist)
context['form'] = form
return render(request, 'search/latest.html', context=context)
...@@ -50,9 +50,9 @@ ...@@ -50,9 +50,9 @@
{ {
sortable: true, sortable: true,
{% if get_neighbors %} {% if get_neighbors %}
url: '{% url "search" %}flex?query={{rawquery|urlencode}}&get_neighbors=true', url: '{% url "eventsearch" %}flex?query={{rawquery|urlencode}}&get_neighbors=true',
{% else %} {% else %}
url: '{% url "search" %}flex?query={{rawquery|urlencode}}', url: '{% url "eventsearch" %}flex?query={{rawquery|urlencode}}',
{% endif %} {% endif %}
datatype: 'json', datatype: 'json',
mtype: "GET", mtype: "GET",
...@@ -121,8 +121,8 @@ ...@@ -121,8 +121,8 @@
<td> <td>
<a onClick="toggle_visibility('hints');">Hints on querying</a> <a onClick="toggle_visibility('hints');">Hints on querying</a>
{% if rawquery %} {% if rawquery %}
| <a href="{% url "search" %}?query={{rawquery|urlencode}}">Link to current query</a> | <a href="{% url "eventsearch" %}?query={{rawquery|urlencode}}">Link to current query</a>
| <a href="{% url "search" %}?query={{rawquery|urlencode}}&ligolw">Download LIGOLW File</a> | <a href="{% url "eventsearch" %}?query={{rawquery|urlencode}}&ligolw">Download LIGOLW File</a>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
{% block jscript %} {% block jscript %}
{% if not error %} {% if not error %}
<meta http-equiv="refresh" content="300;url={% url "latest" %}/?query={{rawquery|urlencode}}"> <meta http-equiv="refresh" content="300;url={% url "eventlatest" %}/?query={{rawquery|urlencode}}">
{% endif %} {% endif %}
{# http/https depending on this pages' protocol #} {# http/https depending on this pages' protocol #}
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
{% block jscript %} {% block jscript %}
{% if not error %} {% if not error %}
<meta http-equiv="refresh" content="300;url={% url "latest" %}/?query={{rawquery|urlencode}}"> <meta http-equiv="refresh" content="300;url={% url "eventlatest" %}/?query={{rawquery|urlencode}}">
{% endif %} {% endif %}
{# http/https depending on this pages' protocol #} {# http/https depending on this pages' protocol #}
......
{% extends "base.html" %}
{% load timeutil %}
{% load scientific %}
{% block title %}Latest{% endblock %}
{% block heading %}Latest &mdash; as of {% now "j F Y H:i:s T" %}{% endblock %}
{% block pageid %}latest{% endblock %}
{% block headcontents %}
{{ block.super }}
{% if not form.errors %}
<meta http-equiv="refresh" content="300;url={{ request.build_absolute_uri }}">
{% endif %}
{% endblock %}
{% block content %}
<!-- Search form -->
<form method="GET" name="search_form">
<table>
{{ form.as_table }}
<tr><td></td><td><input type="Submit" value="Search" class="searchButtonClass"></td></tr>
</table>
</form>
{% if events %}
<!-- Event listing -->
<table class="event">
<tr>
<th valign="top">UID</th>
<th>Labels</th>
<th>Group</th>
<th>Pipeline</th>
<th>Search</th>
<th>
{{ "gps"|timeselect:"gps" }}
Event Time
</th>
<th>Instruments</th>
<th>FAR (Hz)</th>
<th>Latency (sec)</th>
<th>
{{"created"|timeselect:"utc" }}
Created
</th>
</tr>
{% for ev in events %}
<tr class={% cycle 'odd' 'even' %}>
<td><a href="{% url "view" ev.graceid %}">{{ ev.graceid }}</a></td>
<td>
{% for labelling in ev.labelling_set.all %}
<span title="{{labelling.creator.name}} {{labelling.created|utc}}" style="color: {{labelling.label.defaultColor}}">{{ labelling.label.name }}</span>
{% endfor %}
</td>
<td>{{ ev.group.name }} </td>
<td>{{ ev.pipeline.name }} </td>
<td>{{ ev.search.name }} </td>
<td>{% if ev.gpstime%}
<!-- <span title="{{ ev.gpstime|gpsdate }}">{{ ev.gpstime }}</span> -->
{{ ev.gpstime|multiTimeMicroSeconds:"gps" }}
{% endif %}</td>
<!-- this is a bug. The far should be floored for display purposes. -->
<td>{{ ev.instruments }}</td>
{% if user_is_external %}
{% if ev.far and ev.far < far_floor %}
<td>&lt; {{ far_floor|scientific }}</td>
{% else %}
<td>{{ ev.far|scientific }}</td>
{% endif %}
{% else %}
<td>{{ ev.far|scientific }}</td>
{% endif %}
<td style="text-align:center">{{ ev.reportingLatency }}</td>
<td>{{ ev.created|multiTime:"created" }}</td>
</tr>
{% endfor %}
</table>
{% elif superevents %}
<!-- Superevent listing -->
<table class="event">
<tr>
<th valign="top">UID</th>
<th>Labels</th>
<th>Preferred Event</th>
<th>GW Events</th>
<th>t_start</th>
<th>t_0</th>
<th>t_end</th>
<th>Preferred event's FAR (Hz)</th>
<th>
{{"created"|timeselect:"utc" }}
Created
</th>
</tr>
{% for s in superevents %}
<tr class={% cycle 'odd' 'even' %}>
<td><a href="{% url "superevents:view" s.superevent_id %}">{{ s.superevent_id }}</a></td>
<td>
{% for labelling in s.labelling_set.all %}
<span title="{{labelling.creator.name}} {{labelling.created|utc}}" style="color: {{labelling.label.defaultColor}}">{{ labelling.label.name }}</span>
{% endfor %}
</td>
<td><a href="{% url "view" s.preferred_event.graceid %}">{{ s.preferred_event.graceid }}</a></td>
<td>
{% for ev in s.get_internal_events %}
{% if forloop.last %}
<a href="{% url "view" ev.graceid %}">{{ ev.graceid }}</a>
{% else %}
<a href="{% url "view" ev.graceid %}">{{ ev.graceid }}</a>,
{% endif %}
{% endfor %}
</td>
<td>{{ s.t_start }} </td>
<td>{{ s.t_0 }} </td>
<td>{{ s.t_end }} </td>
{% if user_is_external %}
{% if s.preferred_event.far and s.preferred_event.far < far_floor %}
<td>&lt; {{ far_floor|scientific }}</td>
{% else %}
<td>{{ s.preferred_event.far|scientific }}</td>
{% endif %}
{% else %}
<td>{{ s.preferred_event.far|scientific }}</td>
{% endif %}
<td>{{ s.created|multiTime:"created" }}</td>
</tr>
{% endfor %}
</table>
{% else %} <!-- !events -->
<h1>No results.</h1>
{% endif %} <!-- if eventss -->
{% endblock %}
...@@ -144,7 +144,7 @@ onload="document.search_form.query.focus();" ...@@ -144,7 +144,7 @@ onload="document.search_form.query.focus();"
{{ form.as_table }} {{ form.as_table }}
<tr><td></td><td><input type="Submit" value="Search" class="searchButtonClass"></td></tr> <tr><td></td><td><input type="Submit" value="Search" class="searchButtonClass"></td></tr>
<tr><td></td><td><a onClick="toggle_visibility('hints');">Query help</a> <tr><td></td><td><a onClick="toggle_visibility('hints');">Query help</a>
| <a href="{% url "search" %}">Link to old search page</a> | <a href="{% url "eventsearch" %}">Link to old search page</a>
{% if raw_query %} {% if raw_query %}
| <a href="{{ request.build_absolute_uri }}">Link to current query</a> | <a href="{{ request.build_absolute_uri }}">Link to current query</a>
{% if query_type == 'E' %} {% if query_type == 'E' %}
......
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