stringify global ids for live events

fixes CNVS-29727

test plan:
- enable live events
- ensure that all global ids come through as strings

Change-Id: I54d1105d442dc92b0d973777fd745864bea1f232
Reviewed-on: https://gerrit.instructure.com/81428
Reviewed-by: Cody Cutrer <cody@instructure.com>
Tested-by: Jenkins
QA-Review: Benjamin Christian Nelson <bcnelson@instructure.com>
Product-Review: Simon Williams <simon@instructure.com>
This commit is contained in:
Simon Williams 2016-06-02 21:47:31 -06:00
parent 70d525fc6d
commit 98ffdcf6ad
5 changed files with 52 additions and 44 deletions

View File

@ -2089,6 +2089,7 @@ class ApplicationController < ActionController::Base
ctx[:session_id] = tctx[:session_id]
end
StringifyIds.recursively_stringify_ids(ctx)
LiveEvents.set_context(ctx)
end

View File

@ -50,11 +50,13 @@ Delayed::Worker.lifecycle.around(:perform) do |worker, job, &block|
:session_id => worker.name,
}
LiveEvents.set_context({
live_events_ctx = {
:root_account_id => job.respond_to?(:global_account_id) ? job.global_account_id : nil,
:job_id => job.global_id,
:job_tag => job.tag
})
}
StringifyIds.recursively_stringify_ids(live_events_ctx)
LiveEvents.set_context(live_events_ctx)
starting_mem = Canvas.sample_memory()
starting_cpu = Process.times()

View File

@ -35,14 +35,14 @@ event originated as part of a web request:
| Name | Type | Description |
| ---- | ---- | ----------- |
| `user_id` | Number | The Canvas id of the currently logged in user. |
| `real_user_id` | Number | If the current user is being masqueraded, this is the Canvas id of the masquerading user. |
| `user_id` | String | The Canvas id of the currently logged in user. |
| `real_user_id` | String | If the current user is being masqueraded, this is the Canvas id of the masquerading user. |
| `user_login` | String | The login of the current user. |
| `user_agent` | String | The User-Agent sent by the browser making the request. |
| `root_account_id` | Number | The Canvas id of the root account associated with the current user. |
| `root_account_id` | String | The Canvas id of the root account associated with the current user. |
| `root_account_lti_guid` | String | The Canvas lti_guid of the root account associated with the current user. |
| `context_type` | String | The type of context where the event happened. |
| `context_id` | Number | The Canvas id of the current context. Always use the `context_type` when using this id to lookup the object. |
| `context_id` | String | The Canvas id of the current context. Always use the `context_type` when using this id to lookup the object. |
| `role` | String | The role of the current user in the current context. |
| `hostname` | String | The hostname of the current request |
| `request_id` | String | The identifier for this request. |
@ -53,7 +53,7 @@ fields may be set:
| Name | Type | Description |
| ---- | ---- | ----------- |
| `job_id` | Number | The identifier for the asynchronous job. |
| `job_id` | String | The identifier for the asynchronous job. |
| `job_tag` | String | A string identifying the type of job being performed. |
@ -62,7 +62,7 @@ fields may be set:
The `body` object will have key/value pairs with information specific to
each event, as described below.
Note: All Canvas ids are "global" identifiers.
Note: All Canvas ids are "global" identifiers, returned as strings.
### Supported Events

View File

@ -1,6 +1,11 @@
module Canvas::LiveEvents
def self.post_event_stringified(event_name, payload)
StringifyIds.recursively_stringify_ids(payload)
LiveEvents.post_event(event_name, payload)
end
def self.course_syllabus_updated(course, old_syllabus_body)
LiveEvents.post_event('syllabus_updated', {
post_event_stringified('syllabus_updated', {
course_id: course.global_id,
syllabus_body: LiveEvents.truncate(course.syllabus_body),
old_syllabus_body: LiveEvents.truncate(old_syllabus_body)
@ -20,11 +25,11 @@ module Canvas::LiveEvents
})
end
LiveEvents.post_event('discussion_entry_created', payload)
post_event_stringified('discussion_entry_created', payload)
end
def self.discussion_topic_created(topic)
LiveEvents.post_event('discussion_topic_created', {
post_event_stringified('discussion_topic_created', {
discussion_topic_id: topic.global_id,
is_announcement: topic.is_announcement,
title: LiveEvents.truncate(topic.title),
@ -33,7 +38,7 @@ module Canvas::LiveEvents
end
def self.group_membership_created(membership)
LiveEvents.post_event('group_membership_created', {
post_event_stringified('group_membership_created', {
group_membership_id: membership.global_id,
user_id: membership.global_user_id,
group_id: membership.global_group_id,
@ -44,14 +49,14 @@ module Canvas::LiveEvents
end
def self.group_category_created(group_category)
LiveEvents.post_event('group_category_created', {
post_event_stringified('group_category_created', {
group_category_id: group_category.global_id,
group_category_name: group_category.name
})
end
def self.group_created(group)
LiveEvents.post_event('group_created', {
post_event_stringified('group_created', {
group_category_id: group.global_group_category_id,
group_category_name: group.group_category.try(:name),
group_id: group.global_id,
@ -89,41 +94,41 @@ module Canvas::LiveEvents
end
def self.assignment_created(assignment)
LiveEvents.post_event('assignment_created', get_assignment_data(assignment))
post_event_stringified('assignment_created', get_assignment_data(assignment))
end
def self.submission_created(submission)
LiveEvents.post_event('submission_created', get_submission_data(submission))
post_event_stringified('submission_created', get_submission_data(submission))
end
def self.assignment_updated(assignment)
LiveEvents.post_event('assignment_updated', get_assignment_data(assignment))
post_event_stringified('assignment_updated', get_assignment_data(assignment))
end
def self.submission_updated(submission)
LiveEvents.post_event('submission_updated', get_submission_data(submission))
post_event_stringified('submission_updated', get_submission_data(submission))
end
def self.logged_in(session)
LiveEvents.post_event('logged_in', {
post_event_stringified('logged_in', {
redirect_url: session[:return_to]
})
end
def self.logged_out
LiveEvents.post_event('logged_out', {})
post_event_stringified('logged_out', {})
end
def self.quiz_submitted(submission)
# TODO: include score, for automatically graded portions?
LiveEvents.post_event('quiz_submitted', {
post_event_stringified('quiz_submitted', {
submission_id: submission.global_id,
quiz_id: submission.global_quiz_id
})
end
def self.wiki_page_created(page)
LiveEvents.post_event('wiki_page_created', {
post_event_stringified('wiki_page_created', {
wiki_page_id: page.global_id,
title: LiveEvents.truncate(page.title),
body: LiveEvents.truncate(page.body)
@ -145,11 +150,11 @@ module Canvas::LiveEvents
payload[:old_body] = old_body
end
LiveEvents.post_event('wiki_page_updated', payload)
post_event_stringified('wiki_page_updated', payload)
end
def self.wiki_page_deleted(page)
LiveEvents.post_event('wiki_page_deleted', {
post_event_stringified('wiki_page_deleted', {
wiki_page_id: page.global_id,
title: LiveEvents.truncate(page.title)
})
@ -161,7 +166,7 @@ module Canvas::LiveEvents
grader_id = submission.global_grader_id
end
LiveEvents.post_event('grade_change', {
post_event_stringified('grade_change', {
submission_id: submission.global_id,
assignment_id: submission.global_assignment_id,
grade: submission.grade,
@ -181,7 +186,7 @@ module Canvas::LiveEvents
asset_obj = asset
end
LiveEvents.post_event('asset_accessed', {
post_event_stringified('asset_accessed', {
asset_type: asset_obj.class.reflection_type_name,
asset_id: asset_obj.global_id,
asset_subtype: asset_subtype,

View File

@ -33,7 +33,7 @@ describe Canvas::LiveEvents do
it "should not set old_title or old_body if they don't change" do
LiveEvents.expects(:post_event).with('wiki_page_updated', {
wiki_page_id: @page.global_id,
wiki_page_id: @page.global_id.to_s,
title: "old title",
body: "old body"
})
@ -45,7 +45,7 @@ describe Canvas::LiveEvents do
@page.title = "new title"
LiveEvents.expects(:post_event).with('wiki_page_updated', {
wiki_page_id: @page.global_id,
wiki_page_id: @page.global_id.to_s,
title: "new title",
old_title: "old title",
body: "old body"
@ -58,7 +58,7 @@ describe Canvas::LiveEvents do
@page.body = "new body"
LiveEvents.expects(:post_event).with('wiki_page_updated', {
wiki_page_id: @page.global_id,
wiki_page_id: @page.global_id.to_s,
title: "old title",
body: "new body",
old_body: "old body"
@ -73,13 +73,13 @@ describe Canvas::LiveEvents do
quiz_with_graded_submission([])
LiveEvents.expects(:post_event).with('grade_change', {
submission_id: @quiz_submission.submission.global_id,
assignment_id: @quiz_submission.submission.global_assignment_id,
submission_id: @quiz_submission.submission.global_id.to_s,
assignment_id: @quiz_submission.submission.global_assignment_id.to_s,
grade: @quiz_submission.submission.grade,
old_grade: 0,
grader_id: nil,
student_id: @quiz_submission.user.global_id,
user_id: @quiz_submission.user.global_id
student_id: @quiz_submission.user.global_id.to_s,
user_id: @quiz_submission.user.global_id.to_s
})
Canvas::LiveEvents.grade_changed(@quiz_submission.submission, 0)
@ -90,13 +90,13 @@ describe Canvas::LiveEvents do
submission = @course.assignments.first.submissions.first
LiveEvents.expects(:post_event).with('grade_change', {
submission_id: submission.global_id,
assignment_id: submission.global_assignment_id,
submission_id: submission.global_id.to_s,
assignment_id: submission.global_assignment_id.to_s,
grade: '10',
old_grade: 0,
grader_id: @teacher.global_id,
student_id: @student.global_id,
user_id: @student.global_id
grader_id: @teacher.global_id.to_s,
student_id: @student.global_id.to_s,
user_id: @student.global_id.to_s
})
submission.grader = @teacher
@ -110,8 +110,8 @@ describe Canvas::LiveEvents do
LiveEvents.expects(:post_event).with('grade_change',
has_entries(
assignment_id: submission.global_assignment_id,
user_id: @student.global_id
assignment_id: submission.global_assignment_id.to_s,
user_id: @student.global_id.to_s
))
Canvas::LiveEvents.grade_changed(submission, 0)
end
@ -124,8 +124,8 @@ describe Canvas::LiveEvents do
LiveEvents.expects(:post_event).with('submission_updated',
has_entries(
user_id: @student.global_id,
assignment_id: submission.global_assignment_id
user_id: @student.global_id.to_s,
assignment_id: submission.global_assignment_id.to_s
))
Canvas::LiveEvents.submission_updated(submission)
end
@ -137,7 +137,7 @@ describe Canvas::LiveEvents do
LiveEvents.expects(:post_event).with('asset_accessed', {
asset_type: 'course',
asset_id: @course.global_id,
asset_id: @course.global_id.to_s,
asset_subtype: nil,
category: 'category',
role: 'role',
@ -152,7 +152,7 @@ describe Canvas::LiveEvents do
LiveEvents.expects(:post_event).with('asset_accessed', {
asset_type: 'course',
asset_id: @course.global_id,
asset_id: @course.global_id.to_s,
asset_subtype: 'assignments',
category: 'category',
role: 'role',