Merged in [17864] from housley@vigilsec.com:

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: 17876
Note: SVN reference [17864] has been migrated to Git commit 5dc4931f87
This commit is contained in:
Henrik Levkowetz 2020-05-21 22:36:24 +00:00
commit 40f38a343b
3 changed files with 34 additions and 11 deletions

View file

@ -129,12 +129,19 @@ def get_meeting(num=None,type_in=['ietf',]):
else:
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):
if num:
meetings = Meeting.objects.filter(number=num)
meeting = Meeting.objects.filter(number=num).first()
else:
meetings = Meeting.objects.filter(type='ietf',date__gte=datetime.datetime.today()-datetime.timedelta(days=31)).order_by('date')
return meetings.first()
meeting = get_current_ietf_meeting()
return meeting
def get_schedule(meeting, name=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.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
from django.views.generic import RedirectView
from django.core.cache import caches
from ietf.doc.fields import SearchableDocumentsField
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_modified_from_assignments
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 convert_draft_to_pdf, get_earliest_session_date
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:
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:
schedule = get_schedule(meeting, name)
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)
return render(request, "meeting/"+base+ext, {
rendered_page = render(request, "meeting/"+base+ext, {
"schedule": schedule,
"filtered_assignments": filtered_assignments,
"updated": updated,
"group_parents": group_parents,
"now": datetime.datetime.now(),
"is_current_meeting": bool(num == get_current_ietf_meeting_num()),
}, 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):
response = HttpResponse(content_type="text/csv; charset=%s"%settings.DEFAULT_CHARSET)
writer = csv.writer(response, delimiter=str(','), quoting=csv.QUOTE_ALL)

View file

@ -44,15 +44,13 @@
</div>
<div class="row">
<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>
{% if is_current_meeting %}
<p class="alert alert-info">
<b>Note:</b> IETF agendas are subject to change, up to and during a meeting.
</p>
{% endif %}
{% if schedule.meeting.agenda_info_note %}
<p class="alert alert-info">
@ -353,7 +351,6 @@
</div>
</div>
{% endcache %}
{% endblock %}
{% block js %}