Additional Canvas Reporting

cesbrandt
Community Champion

Please, know that this is not going up as an idea or question because I want to spark a discussion on this and that it would not be something for Instructure to do, unless someone really wants to ask them to do it.

I know there have been ideas posted to request additional and more intuitive reporting within the Canvas LMS. However, I have found most of these are geared towards things like surrounding recording keeping of activities and actions taken within the LMS. I find that more often than not, I'm tasked with requests to find everywhere an LTI is used (this was a major one recently when the LMS was updated to support only one [1] external tool configuration per tool URL [https://community.canvaslms.com/docs/DOC-6092#jive_content_id_Assignments]) or where a particular URL is linked at. These are not exactly the easiest things to accomplish due to a complete lack of content searching functionality.

Now, don't get me wrong, Moodle, which we came from, lacked this, also. However, we could use querying plugins to run custom reports with little-to-no effort or time lost.

Obviously, this is entirely out of the question with Canvas, especially for the vast number of institutions that use an Instructure-hosted installation, so the recourse is to either use the API or manually search through every activity looking for what you need (albeit, using the API is basically the same thing, just automated).

Over the last year, I've written several scripts to accomplish these tasks, allowing them to be easily performed by anyone with sufficient permissions to access the scripts. Well, it just struck me as inefficient to have all the stand-alone scripts scattered about (they're actually in one nicely organized directory) doing much the same things in different orders to produce desired results. So, I have decided to consolidate them into a simple and expandable interface that makes all the tools available.

I've got much of the coding done to allow for uniform API GET calls, with fairly more consideration for error identification than the API currently supplies ("The specified resource does not exist." What resource? The course_id? The module_id? The module_item_id?), to most of the major points of the Course, Account, and User areas of the LMS. I even put in consideration for potentially expanding it for PUT, POST, and DELETE calls, but I'm giving focus to GET for reporting, as mentioned.

It's also expandable in that, if I did half as well as I think I did, a developer should be able to create a new report fairly easily. The most difficult part should be figuring out the logic to get the report. All the cURL calls can be ran through the uniform function to get either an error of the API response.

There's even a report generator (you have to format the data you want reported into a multidimensional array) and PHPExcel integration for easy exporting of a report to Excel.

Now, before I put any code out, I want to get feedback on this concept and ideas for reports that you feel would be helpful as developers/administrators. Most of the reports I've created are unique to how we deploy Canvas, having done a not insignificant amount of customization to our templating. As such, I only have three (3) reports currently written for use with this interface I've created:

  • Generate Account Tree: As the title suggests, it will take a supplied account_id and build a complete tree of it's sub-accounts. The output is a multidimensional unordered list.
  • Content Searcher: Also as the title suggest, it will search all the major content areas (assignments, discussions, quizzes, and pages) for a given search term. This function accommodates the searching of an entire account or a single course. When searching an account, the use of a Course Name Filter can help to cut down of the length of time needed to generate the report by searching only courses with a title containing the filter term. Further, this can be used as a URL Locator, also, as it has been written to search the content with and without HTML tags. To accommodate searching for URLs, the Module list is also searched for External Links that match to search term. The output is the generated table with basic information, each row acting as a direct link to the corresponding activity, and the PHPExcel exportable option.
  • External Tool Locator: Similar to the Content Searcher, this searches an entire account or asingle course for the designated External Tool. Unlike the Content Searcher, it does not currently have the ability to filter the account searches with a Course Name Filter (all queries I've needed to ran have been global for where I've searched and I don't see the justification for add that option in). However, this a little more dynamic in that it will allow the selection of searching for Configurations (where an External Tool is configured), Links (where an External Tool is linked into a course), or Both. Further, the search term will dynamically accept either a (partial) External Tool URL (if you supply anything other than just a number, it will assume you're looking by this) or the external_tool_id (if you supply just a number, it will assume you're looking by this). The output is the generated table with basic information, each row acting as a direct link to the corresponding activity (Links) or configuration location (Configurations), and the PHPExcel exportable option.

Bare in mind, there is no "easy" way to get a complete list of all assignments in an account, so it will take time to generate these reports. The more content being sifted through, the longer it will take. Just to run the Content Searcher for a URL we needed to replace in a bunch of courses required me to increase the script execution time to four (4) hours. It is, mostly, just ​API​ call after API call after API call. When you have the occasional 504 Timeout, this adds up.

So, what do you all think? Is this something you would be interested in as developers/admins? If so, what would you like to see as premade reports?

Labels (1)