Commit 85f5c932 by Greg Price

Add newrelic instrumentation to forum views

parent 60306f24
...@@ -6,6 +6,7 @@ from django.contrib.auth.decorators import login_required ...@@ -6,6 +6,7 @@ from django.contrib.auth.decorators import login_required
from django.http import Http404 from django.http import Http404
from django.core.context_processors import csrf from django.core.context_processors import csrf
from django.contrib.auth.models import User from django.contrib.auth.models import User
import newrelic.agent
from mitxmako.shortcuts import render_to_response from mitxmako.shortcuts import render_to_response
from courseware.courses import get_course_with_access from courseware.courses import get_course_with_access
...@@ -25,6 +26,7 @@ escapedict = {'"': '"'} ...@@ -25,6 +26,7 @@ escapedict = {'"': '"'}
log = logging.getLogger("edx.discussions") log = logging.getLogger("edx.discussions")
@newrelic.agent.function_trace()
def get_threads(request, course_id, discussion_id=None, per_page=THREADS_PER_PAGE): def get_threads(request, course_id, discussion_id=None, per_page=THREADS_PER_PAGE):
""" """
This may raise cc.utils.CommentClientError or This may raise cc.utils.CommentClientError or
...@@ -107,6 +109,8 @@ def inline_discussion(request, course_id, discussion_id): ...@@ -107,6 +109,8 @@ def inline_discussion(request, course_id, discussion_id):
""" """
Renders JSON for DiscussionModules Renders JSON for DiscussionModules
""" """
nr_transaction = newrelic.agent.current_transaction()
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
try: try:
...@@ -120,6 +124,7 @@ def inline_discussion(request, course_id, discussion_id): ...@@ -120,6 +124,7 @@ def inline_discussion(request, course_id, discussion_id):
log.error("Error loading inline discussion threads.") log.error("Error loading inline discussion threads.")
raise Http404 raise Http404
with newrelic.agent.FunctionTrace(nr_transaction, "get_metadata_for_threads"):
annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info)
allow_anonymous = course.allow_anonymous allow_anonymous = course.allow_anonymous
...@@ -167,8 +172,10 @@ def forum_form_discussion(request, course_id): ...@@ -167,8 +172,10 @@ def forum_form_discussion(request, course_id):
""" """
Renders the main Discussion page, potentially filtered by a search query Renders the main Discussion page, potentially filtered by a search query
""" """
nr_transaction = newrelic.agent.current_transaction()
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
with newrelic.agent.FunctionTrace(nr_transaction, "get_discussion_category_map"):
category_map = utils.get_discussion_category_map(course) category_map = utils.get_discussion_category_map(course)
try: try:
...@@ -184,12 +191,15 @@ def forum_form_discussion(request, course_id): ...@@ -184,12 +191,15 @@ def forum_form_discussion(request, course_id):
user = cc.User.from_django_user(request.user) user = cc.User.from_django_user(request.user)
user_info = user.to_dict() user_info = user.to_dict()
with newrelic.agent.FunctionTrace(nr_transaction, "get_metadata_for_threads"):
annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info)
with newrelic.agent.FunctionTrace(nr_transaction, "add_courseware_context_to_threads"):
for thread in threads: for thread in threads:
courseware_context = get_courseware_context(thread, course) courseware_context = get_courseware_context(thread, course)
if courseware_context: if courseware_context:
thread.update(courseware_context) thread.update(courseware_context)
if request.is_ajax(): if request.is_ajax():
return utils.JsonResponse({ return utils.JsonResponse({
'discussion_data': threads, # TODO: Standardize on 'discussion_data' vs 'threads' 'discussion_data': threads, # TODO: Standardize on 'discussion_data' vs 'threads'
...@@ -207,6 +217,7 @@ def forum_form_discussion(request, course_id): ...@@ -207,6 +217,7 @@ def forum_form_discussion(request, course_id):
#trending_tags = cc.search_trending_tags( #trending_tags = cc.search_trending_tags(
# course_id, # course_id,
#) #)
with newrelic.agent.FunctionTrace(nr_transaction, "get_cohort_info"):
cohorts = get_course_cohorts(course_id) cohorts = get_course_cohorts(course_id)
cohorted_commentables = get_cohorted_commentables(course_id) cohorted_commentables = get_cohorted_commentables(course_id)
...@@ -238,6 +249,8 @@ def forum_form_discussion(request, course_id): ...@@ -238,6 +249,8 @@ def forum_form_discussion(request, course_id):
@login_required @login_required
def single_thread(request, course_id, discussion_id, thread_id): def single_thread(request, course_id, discussion_id, thread_id):
nr_transaction = newrelic.agent.current_transaction()
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
cc_user = cc.User.from_django_user(request.user) cc_user = cc.User.from_django_user(request.user)
user_info = cc_user.to_dict() user_info = cc_user.to_dict()
...@@ -249,7 +262,9 @@ def single_thread(request, course_id, discussion_id, thread_id): ...@@ -249,7 +262,9 @@ def single_thread(request, course_id, discussion_id, thread_id):
raise Http404 raise Http404
if request.is_ajax(): if request.is_ajax():
with newrelic.agent.FunctionTrace(nr_transaction, "get_courseware_context"):
courseware_context = get_courseware_context(thread, course) courseware_context = get_courseware_context(thread, course)
with newrelic.agent.FunctionTrace(nr_transaction, "get_annotated_content_infos"):
annotated_content_info = utils.get_annotated_content_infos(course_id, thread, request.user, user_info=user_info) annotated_content_info = utils.get_annotated_content_infos(course_id, thread, request.user, user_info=user_info)
context = {'thread': thread.to_dict(), 'course_id': course_id} context = {'thread': thread.to_dict(), 'course_id': course_id}
# TODO: Remove completely or switch back to server side rendering # TODO: Remove completely or switch back to server side rendering
...@@ -264,6 +279,7 @@ def single_thread(request, course_id, discussion_id, thread_id): ...@@ -264,6 +279,7 @@ def single_thread(request, course_id, discussion_id, thread_id):
}) })
else: else:
with newrelic.agent.FunctionTrace(nr_transaction, "get_discussion_category_map"):
category_map = utils.get_discussion_category_map(course) category_map = utils.get_discussion_category_map(course)
try: try:
...@@ -275,6 +291,7 @@ def single_thread(request, course_id, discussion_id, thread_id): ...@@ -275,6 +291,7 @@ def single_thread(request, course_id, discussion_id, thread_id):
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
with newrelic.agent.FunctionTrace(nr_transaction, "add_courseware_context_to_threads"):
for thread in threads: for thread in threads:
courseware_context = get_courseware_context(thread, course) courseware_context = get_courseware_context(thread, course)
if courseware_context: if courseware_context:
...@@ -298,8 +315,10 @@ def single_thread(request, course_id, discussion_id, thread_id): ...@@ -298,8 +315,10 @@ def single_thread(request, course_id, discussion_id, thread_id):
# course_id, # course_id,
#) #)
with newrelic.agent.FunctionTrace(nr_transaction, "get_metadata_for_threads"):
annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info)
with newrelic.agent.FunctionTrace(nr_transaction, "get_cohort_info"):
cohorts = get_course_cohorts(course_id) cohorts = get_course_cohorts(course_id)
cohorted_commentables = get_cohorted_commentables(course_id) cohorted_commentables = get_cohorted_commentables(course_id)
user_cohort = get_cohort_id(request.user, course_id) user_cohort = get_cohort_id(request.user, course_id)
...@@ -332,6 +351,8 @@ def single_thread(request, course_id, discussion_id, thread_id): ...@@ -332,6 +351,8 @@ def single_thread(request, course_id, discussion_id, thread_id):
@login_required @login_required
def user_profile(request, course_id, user_id): def user_profile(request, course_id, user_id):
nr_transaction = newrelic.agent.current_transaction()
#TODO: Allow sorting? #TODO: Allow sorting?
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
try: try:
...@@ -347,6 +368,7 @@ def user_profile(request, course_id, user_id): ...@@ -347,6 +368,7 @@ def user_profile(request, course_id, user_id):
query_params['num_pages'] = num_pages query_params['num_pages'] = num_pages
user_info = cc.User.from_django_user(request.user).to_dict() user_info = cc.User.from_django_user(request.user).to_dict()
with newrelic.agent.FunctionTrace(nr_transaction, "get_metadata_for_threads"):
annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info)
if request.is_ajax(): if request.is_ajax():
...@@ -374,6 +396,8 @@ def user_profile(request, course_id, user_id): ...@@ -374,6 +396,8 @@ def user_profile(request, course_id, user_id):
def followed_threads(request, course_id, user_id): def followed_threads(request, course_id, user_id):
nr_transaction = newrelic.agent.current_transaction()
course = get_course_with_access(request.user, course_id, 'load_forum') course = get_course_with_access(request.user, course_id, 'load_forum')
try: try:
profiled_user = cc.User(id=user_id, course_id=course_id) profiled_user = cc.User(id=user_id, course_id=course_id)
...@@ -390,6 +414,7 @@ def followed_threads(request, course_id, user_id): ...@@ -390,6 +414,7 @@ def followed_threads(request, course_id, user_id):
query_params['num_pages'] = num_pages query_params['num_pages'] = num_pages
user_info = cc.User.from_django_user(request.user).to_dict() user_info = cc.User.from_django_user(request.user).to_dict()
with newrelic.agent.FunctionTrace(nr_transaction, "get_metadata_for_threads"):
annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info) annotated_content_info = utils.get_metadata_for_threads(course_id, threads, request.user, user_info)
if request.is_ajax(): if request.is_ajax():
return utils.JsonResponse({ return utils.JsonResponse({
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment