Add /meeting/<num>/agenda pages to the slowpages cache. While I was in the template, I also did a recent ticket. Fixes #2992.

- Legacy-Id: 17864
This commit is contained in:
Russ Housley 2020-05-21 14:42:37 +00:00
parent f7886df212
commit 5dc4931f87
3 changed files with 34 additions and 11 deletions

View file

@ -129,12 +129,19 @@ def get_meeting(num=None,type_in=['ietf',]):
else: else:
raise Http404("No such meeting found: %s" % num) raise Http404("No such meeting found: %s" % num)
def get_current_ietf_meeting():
meetings = Meeting.objects.filter(type='ietf',date__gte=datetime.datetime.today()-datetime.timedelta(days=31)).order_by('date')
return meetings.first()
def get_current_ietf_meeting_num():
return get_current_ietf_meeting().number
def get_ietf_meeting(num=None): def get_ietf_meeting(num=None):
if num: if num:
meetings = Meeting.objects.filter(number=num) meeting = Meeting.objects.filter(number=num).first()
else: else:
meetings = Meeting.objects.filter(type='ietf',date__gte=datetime.datetime.today()-datetime.timedelta(days=31)).order_by('date') meeting = get_current_ietf_meeting()
return meetings.first() return meeting
def get_schedule(meeting, name=None): def get_schedule(meeting, name=None):
if name is None: if name is None:

View file

@ -44,7 +44,7 @@ from django.views.decorators.cache import cache_page
from django.utils.html import format_html from django.utils.html import format_html
from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
from django.views.generic import RedirectView from django.views.generic import RedirectView
from django.core.cache import caches
from ietf.doc.fields import SearchableDocumentsField from ietf.doc.fields import SearchableDocumentsField
from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias
@ -61,7 +61,8 @@ from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
from ietf.meeting.helpers import get_all_assignments_from_schedule from ietf.meeting.helpers import get_all_assignments_from_schedule
from ietf.meeting.helpers import get_modified_from_assignments from ietf.meeting.helpers import get_modified_from_assignments
from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting
from ietf.meeting.helpers import get_meeting, get_schedule, schedule_permissions, get_ietf_meeting from ietf.meeting.helpers import get_meeting, get_ietf_meeting, get_current_ietf_meeting_num
from ietf.meeting.helpers import get_schedule, schedule_permissions
from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file
from ietf.meeting.helpers import convert_draft_to_pdf, get_earliest_session_date from ietf.meeting.helpers import convert_draft_to_pdf, get_earliest_session_date
from ietf.meeting.helpers import can_view_interim_request, can_approve_interim_request from ietf.meeting.helpers import can_view_interim_request, can_approve_interim_request
@ -902,6 +903,12 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc=""
else: else:
raise Http404("No such meeting") raise Http404("No such meeting")
if name == None and owner == None:
cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228]
rendered_page = caches['slowpages'].get(cache_key)
if rendered_page:
return rendered_page
if name is None: if name is None:
schedule = get_schedule(meeting, name) schedule = get_schedule(meeting, name)
else: else:
@ -943,14 +950,26 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc=""
p.group_list.sort(key=lambda g: g.acronym) p.group_list.sort(key=lambda g: g.acronym)
return render(request, "meeting/"+base+ext, { rendered_page = render(request, "meeting/"+base+ext, {
"schedule": schedule, "schedule": schedule,
"filtered_assignments": filtered_assignments, "filtered_assignments": filtered_assignments,
"updated": updated, "updated": updated,
"group_parents": group_parents, "group_parents": group_parents,
"now": datetime.datetime.now(), "now": datetime.datetime.now(),
"is_current_meeting": bool(num == get_current_ietf_meeting_num()),
}, content_type=mimetype[ext]) }, content_type=mimetype[ext])
# If the agenda is for the current meeting, only cache for 2 minutes
if name == None and owner == None:
cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228]
if meeting.number == get_current_ietf_meeting_num():
timeout = 60 * 2
else:
timeout = 60 * 60 * 24
caches['slowpages'].set(cache_key, rendered_page, timeout)
return rendered_page
def agenda_csv(schedule, filtered_assignments): def agenda_csv(schedule, filtered_assignments):
response = HttpResponse(content_type="text/csv; charset=%s"%settings.DEFAULT_CHARSET) response = HttpResponse(content_type="text/csv; charset=%s"%settings.DEFAULT_CHARSET)
writer = csv.writer(response, delimiter=str(','), quoting=csv.QUOTE_ALL) writer = csv.writer(response, delimiter=str(','), quoting=csv.QUOTE_ALL)

View file

@ -44,15 +44,13 @@
</div> </div>
<div class="row"> <div class="row">
<div class="col-md-10"> <div class="col-md-10">
{# cache this part for 5 minutes -- it takes 3-6 seconds to generate #}
{% load cache %}
{% cache 300 ietf_meeting_agenda_utc schedule.meeting.number request.path %}
<h1>Agenda</h1> <h1>Agenda</h1>
{% if is_current_meeting %}
<p class="alert alert-info"> <p class="alert alert-info">
<b>Note:</b> IETF agendas are subject to change, up to and during a meeting. <b>Note:</b> IETF agendas are subject to change, up to and during a meeting.
</p> </p>
{% endif %}
{% if schedule.meeting.agenda_info_note %} {% if schedule.meeting.agenda_info_note %}
<p class="alert alert-info"> <p class="alert alert-info">
@ -353,7 +351,6 @@
</div> </div>
</div> </div>
{% endcache %}
{% endblock %} {% endblock %}
{% block js %} {% block js %}