canvasapp/student_activity_report.html

1129 lines
28 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Course Activity Report</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body {
font-family: sans-serif;
margin: 2em;
}
.course {
margin-bottom: 4em;
border-bottom: 1px solid #ccc;
padding-bottom: 2em;
}
canvas {
max-width: 100%;
}
</style>
</head>
<body>
<h1>Course Activity Report</h1>
<div id="reports"></div>
<script>
function getAllDates(start, end, maxMonths = 7) {
const dates = [];
const current = new Date(start);
const endLimit = new Date(start);
endLimit.setMonth(endLimit.getMonth() + maxMonths);
const last = new Date(end);
const endDate = last < endLimit ? last : endLimit;
while (current <= endDate) {
dates.push(current.toISOString().slice(0, 10));
current.setDate(current.getDate() + 1);
}
return dates;
}
async function loadData() {
//const response = await fetch('cache/users/logs/12345_summary.json');
//const data = await response.json();
const data = {
"courses": {
"770": {
"course_code": "GUID999 SP17 41059",
"first_seen": "2021-06-16",
"last_seen": "2021-06-16",
"daily_hits": {
"2021-06-16": 1
},
"participated_count": 0
},
"6731": {
"course_code": "GUID6 SP19 40416",
"first_seen": "2023-06-17",
"last_seen": "2023-06-17",
"daily_hits": {
"2023-06-17": 1
},
"participated_count": 0
},
"10262": {
"course_code": "ENGL1C FA20 10658/60",
"first_seen": "2022-06-14",
"last_seen": "2022-06-20",
"daily_hits": {
"2022-06-14": 12,
"2022-06-17": 6,
"2022-06-19": 12,
"2022-06-20": 6
},
"participated_count": 0
},
"11015": {
"course_code": "STEM",
"first_seen": "2021-06-15",
"last_seen": "2023-06-09",
"daily_hits": {
"2021-06-15": 3,
"2021-07-01": 1,
"2022-03-01": 6,
"2022-03-21": 4,
"2022-04-23": 1,
"2022-05-04": 3,
"2022-06-17": 1,
"2023-06-09": 3
},
"participated_count": 0
},
"11866": {
"course_code": "SOC1A SP21 40475/83",
"first_seen": "2021-02-01",
"last_seen": "2021-04-24",
"daily_hits": {
"2021-02-01": 22,
"2021-02-02": 5,
"2021-02-05": 9,
"2021-02-06": 12,
"2021-02-09": 35,
"2021-02-19": 24,
"2021-02-20": 5,
"2021-02-22": 32,
"2021-02-27": 4,
"2021-03-06": 1,
"2021-03-08": 3,
"2021-03-10": 87,
"2021-03-13": 4,
"2021-03-20": 4,
"2021-04-03": 2,
"2021-04-13": 3,
"2021-04-17": 5,
"2021-04-21": 2,
"2021-04-22": 69,
"2021-04-24": 2
},
"participated_count": 11
},
"12102": {
"course_code": "CMUN1A SP21 40747",
"first_seen": "2021-02-01",
"last_seen": "2021-05-19",
"daily_hits": {
"2021-02-01": 25,
"2021-02-02": 1,
"2021-02-03": 57,
"2021-02-04": 6,
"2021-02-05": 3,
"2021-02-06": 16,
"2021-02-08": 48,
"2021-02-10": 36,
"2021-02-11": 160,
"2021-02-19": 6,
"2021-02-21": 1,
"2021-02-22": 11,
"2021-02-25": 3,
"2021-03-01": 8,
"2021-03-03": 6,
"2021-03-06": 24,
"2021-03-07": 30,
"2021-03-08": 11,
"2021-03-10": 9,
"2021-03-11": 8,
"2021-03-12": 9,
"2021-03-14": 5,
"2021-03-15": 28,
"2021-03-17": 8,
"2021-03-18": 21,
"2021-03-20": 17,
"2021-03-22": 5,
"2021-03-24": 7,
"2021-03-29": 34,
"2021-03-31": 1,
"2021-04-12": 12,
"2021-04-13": 6,
"2021-04-14": 10,
"2021-04-17": 2,
"2021-04-19": 19,
"2021-04-21": 5,
"2021-04-22": 1,
"2021-04-24": 2,
"2021-04-28": 1,
"2021-05-01": 1,
"2021-05-03": 12,
"2021-05-19": 90
},
"participated_count": 22
},
"12112": {
"course_code": "CD/PSYC3 SP21 40146",
"first_seen": "2021-01-24",
"last_seen": "2021-04-28",
"daily_hits": {
"2021-01-24": 9,
"2021-02-01": 7,
"2021-02-02": 12,
"2021-02-04": 42,
"2021-02-08": 16,
"2021-02-22": 2,
"2021-03-01": 75,
"2021-03-02": 3,
"2021-03-06": 4,
"2021-03-08": 17,
"2021-03-11": 2,
"2021-03-12": 3,
"2021-03-15": 3,
"2021-03-29": 6,
"2021-04-12": 68,
"2021-04-20": 2,
"2021-04-28": 118
},
"participated_count": 7
},
"12321": {
"course_code": "HIST1 SP21 40389",
"first_seen": "2021-02-01",
"last_seen": "2021-05-01",
"daily_hits": {
"2021-02-01": 56,
"2021-02-02": 11,
"2021-02-05": 5,
"2021-02-06": 65,
"2021-02-07": 16,
"2021-02-20": 14,
"2021-02-21": 24,
"2021-02-27": 8,
"2021-03-06": 3,
"2021-03-13": 3,
"2021-03-17": 1,
"2021-03-20": 4,
"2021-03-29": 6,
"2021-04-03": 3,
"2021-04-17": 5,
"2021-04-24": 3,
"2021-05-01": 3
},
"participated_count": 11
},
"12337": {
"course_code": "ART6 SP21 40529",
"first_seen": "2021-01-28",
"last_seen": "2021-04-17",
"daily_hits": {
"2021-01-28": 5,
"2021-02-01": 32,
"2021-02-02": 22,
"2021-02-05": 8,
"2021-02-06": 49,
"2021-02-08": 27,
"2021-02-09": 3,
"2021-02-19": 45,
"2021-02-20": 20,
"2021-02-21": 39,
"2021-02-27": 12,
"2021-03-06": 18,
"2021-03-13": 48,
"2021-03-20": 45,
"2021-03-29": 3,
"2021-04-03": 3,
"2021-04-17": 5
},
"participated_count": 17
},
"12664": {
"course_code": "PSYC11 SU21 80397",
"first_seen": "2021-06-14",
"last_seen": "2022-01-04",
"daily_hits": {
"2021-06-14": 28,
"2021-06-15": 9,
"2021-06-16": 10,
"2021-06-17": 24,
"2021-06-18": 8,
"2021-06-20": 7,
"2021-06-21": 16,
"2021-06-26": 13,
"2021-06-27": 1,
"2021-06-28": 26,
"2021-07-01": 19,
"2021-07-05": 1,
"2021-07-07": 2,
"2021-07-12": 4,
"2021-07-19": 1,
"2021-07-20": 1,
"2021-07-24": 2,
"2021-07-26": 3,
"2021-07-27": 1,
"2021-07-28": 10,
"2021-08-03": 2,
"2021-08-05": 2,
"2022-01-04": 1
},
"participated_count": 5
},
"12717": {
"course_code": "ENGL1A SU21 80210",
"first_seen": "2021-06-06",
"last_seen": "2021-08-11",
"daily_hits": {
"2021-06-06": 2,
"2021-06-09": 1,
"2021-06-14": 41,
"2021-06-15": 13,
"2021-06-16": 30,
"2021-06-17": 72,
"2021-06-18": 33,
"2021-06-19": 75,
"2021-06-21": 27,
"2021-06-22": 1,
"2021-06-23": 28,
"2021-06-25": 30,
"2021-06-26": 69,
"2021-06-29": 26,
"2021-06-30": 63,
"2021-07-02": 8,
"2021-07-03": 11,
"2021-07-06": 44,
"2021-07-07": 4,
"2021-07-09": 6,
"2021-07-10": 4,
"2021-07-14": 4,
"2021-07-16": 6,
"2021-07-17": 19,
"2021-07-18": 3,
"2021-07-21": 39,
"2021-07-22": 1,
"2021-07-23": 5,
"2021-07-24": 16,
"2021-07-26": 4,
"2021-07-28": 14,
"2021-07-31": 19,
"2021-08-03": 10,
"2021-08-05": 15,
"2021-08-06": 13,
"2021-08-07": 18,
"2021-08-08": 16,
"2021-08-09": 5,
"2021-08-11": 15
},
"participated_count": 20
},
"12730": {
"course_code": "MATH5 SU21 80021",
"first_seen": "2021-06-09",
"last_seen": "2021-07-19",
"daily_hits": {
"2021-06-09": 20,
"2021-06-14": 120,
"2021-06-15": 12,
"2021-06-16": 58,
"2021-06-17": 3,
"2021-06-19": 1,
"2021-06-20": 1,
"2021-06-21": 88,
"2021-06-24": 11,
"2021-06-26": 10,
"2021-06-27": 19,
"2021-06-28": 101,
"2021-07-05": 16,
"2021-07-11": 1,
"2021-07-12": 21,
"2021-07-19": 1
},
"participated_count": 14
},
"12756": {
"course_code": "MATH240 SU21 80013",
"first_seen": "2021-06-15",
"last_seen": "2021-06-15",
"daily_hits": {
"2021-06-15": 1
},
"participated_count": 0
},
"12837": {
"course_code": "El Centro SU & FA 2021",
"first_seen": "2021-09-21",
"last_seen": "2022-04-01",
"daily_hits": {
"2021-09-21": 31,
"2021-10-04": 2,
"2022-01-31": 2,
"2022-04-01": 5
},
"participated_count": 0
},
"13102": {
"course_code": "POLS1 FA21 10194",
"first_seen": "2021-08-23",
"last_seen": "2022-01-04",
"daily_hits": {
"2021-08-23": 3,
"2021-08-24": 24,
"2021-08-25": 7,
"2021-08-26": 1,
"2021-09-01": 1,
"2021-09-02": 13,
"2021-09-03": 9,
"2021-09-06": 32,
"2021-09-10": 1,
"2021-09-11": 6,
"2021-09-12": 8,
"2021-09-13": 5,
"2021-09-19": 14,
"2021-09-20": 3,
"2021-09-21": 12,
"2021-09-22": 1,
"2021-09-23": 1,
"2021-09-26": 22,
"2021-09-27": 11,
"2021-10-04": 36,
"2021-10-05": 23,
"2021-10-06": 4,
"2021-10-09": 2,
"2021-10-11": 7,
"2021-10-14": 1,
"2021-10-17": 7,
"2021-10-19": 2,
"2021-10-24": 4,
"2021-10-25": 10,
"2021-10-28": 24,
"2021-10-31": 11,
"2021-11-01": 24,
"2021-11-05": 1,
"2021-11-07": 7,
"2021-11-08": 3,
"2021-11-12": 1,
"2021-11-13": 5,
"2021-11-15": 7,
"2021-11-16": 18,
"2021-11-21": 3,
"2021-11-22": 15,
"2021-11-25": 3,
"2021-11-30": 28,
"2021-12-01": 2,
"2021-12-03": 1,
"2021-12-04": 3,
"2021-12-06": 75,
"2021-12-07": 4,
"2021-12-08": 36,
"2021-12-09": 20,
"2021-12-11": 39,
"2021-12-12": 30,
"2021-12-14": 13,
"2022-01-04": 5
},
"participated_count": 40
},
"13108": {
"course_code": "SOC21 FA21 10291",
"first_seen": "2021-08-23",
"last_seen": "2021-12-13",
"daily_hits": {
"2021-08-23": 23,
"2021-08-24": 9,
"2021-08-25": 4,
"2021-08-26": 2,
"2021-08-28": 10,
"2021-08-30": 18,
"2021-08-31": 10,
"2021-09-03": 2,
"2021-09-04": 4,
"2021-09-06": 13,
"2021-09-11": 12,
"2021-09-12": 5,
"2021-09-14": 8,
"2021-09-17": 1,
"2021-09-18": 3,
"2021-09-20": 4,
"2021-09-25": 6,
"2021-09-27": 4,
"2021-09-30": 7,
"2021-10-02": 4,
"2021-10-03": 1,
"2021-10-04": 9,
"2021-10-08": 9,
"2021-10-09": 7,
"2021-10-10": 1,
"2021-10-11": 11,
"2021-10-12": 1,
"2021-10-13": 29,
"2021-10-14": 19,
"2021-10-15": 18,
"2021-10-16": 1,
"2021-10-18": 7,
"2021-10-19": 4,
"2021-10-23": 8,
"2021-10-28": 2,
"2021-10-30": 13,
"2021-10-31": 10,
"2021-11-01": 4,
"2021-11-04": 3,
"2021-11-05": 3,
"2021-11-06": 2,
"2021-11-08": 4,
"2021-11-12": 4,
"2021-11-15": 4,
"2021-11-16": 2,
"2021-11-20": 10,
"2021-11-21": 11,
"2021-11-22": 5,
"2021-11-24": 25,
"2021-11-25": 1,
"2021-11-26": 6,
"2021-11-27": 13,
"2021-11-28": 56,
"2021-11-29": 3,
"2021-11-30": 11,
"2021-12-01": 3,
"2021-12-02": 1,
"2021-12-03": 13,
"2021-12-04": 27,
"2021-12-05": 38,
"2021-12-07": 14,
"2021-12-08": 23,
"2021-12-09": 40,
"2021-12-12": 6,
"2021-12-13": 6
},
"participated_count": 45
},
"13153": {
"course_code": "ANTH/POLS/PSYC32 FA21 11584",
"first_seen": "2021-08-23",
"last_seen": "2021-08-24",
"daily_hits": {
"2021-08-23": 31,
"2021-08-24": 3
},
"participated_count": 3
},
"13486": {
"course_code": "ART2A FA21 10327",
"first_seen": "2021-08-23",
"last_seen": "2022-01-04",
"daily_hits": {
"2021-08-23": 42,
"2021-08-24": 14,
"2021-08-25": 8,
"2021-08-26": 4,
"2021-08-28": 2,
"2021-08-30": 45,
"2021-08-31": 50,
"2021-09-02": 22,
"2021-09-04": 7,
"2021-09-06": 39,
"2021-09-07": 3,
"2021-09-08": 13,
"2021-09-09": 7,
"2021-09-11": 26,
"2021-09-12": 2,
"2021-09-13": 33,
"2021-09-14": 8,
"2021-09-16": 17,
"2021-09-17": 2,
"2021-09-18": 5,
"2021-09-20": 8,
"2021-09-21": 4,
"2021-09-23": 20,
"2021-09-26": 1,
"2021-09-27": 5,
"2021-09-28": 5,
"2021-09-30": 11,
"2021-10-04": 25,
"2021-10-05": 10,
"2021-10-06": 19,
"2021-10-07": 5,
"2021-10-08": 8,
"2021-10-09": 5,
"2021-10-11": 4,
"2021-10-12": 4,
"2021-10-14": 8,
"2021-10-19": 11,
"2021-10-23": 2,
"2021-10-28": 1,
"2021-10-30": 1,
"2021-10-31": 1,
"2021-11-01": 1,
"2021-11-03": 6,
"2021-11-04": 21,
"2021-11-05": 20,
"2021-11-06": 4,
"2021-11-08": 33,
"2021-11-09": 2,
"2021-11-10": 26,
"2021-11-11": 6,
"2021-11-16": 38,
"2021-11-20": 10,
"2021-11-21": 1,
"2021-11-22": 4,
"2021-11-23": 1,
"2021-11-24": 6,
"2021-11-25": 55,
"2021-11-26": 8,
"2021-11-27": 6,
"2021-11-28": 13,
"2021-11-29": 4,
"2021-11-30": 9,
"2021-12-03": 16,
"2021-12-04": 6,
"2021-12-06": 16,
"2021-12-07": 23,
"2021-12-08": 238,
"2021-12-09": 3,
"2022-01-04": 5
},
"participated_count": 38
},
"14030": {
"course_code": "ENGL1A SP22 40093",
"first_seen": "2022-01-30",
"last_seen": "2023-07-22",
"daily_hits": {
"2022-01-30": 31,
"2022-01-31": 99,
"2022-02-01": 33,
"2022-02-02": 4,
"2022-02-03": 4,
"2022-02-05": 2,
"2022-02-06": 18,
"2022-02-07": 13,
"2022-02-08": 8,
"2022-02-10": 1,
"2022-02-12": 16,
"2022-02-13": 8,
"2022-02-14": 49,
"2022-02-15": 27,
"2022-02-16": 4,
"2022-02-17": 22,
"2022-02-18": 21,
"2022-02-19": 16,
"2022-02-20": 40,
"2022-02-21": 20,
"2022-02-22": 7,
"2022-02-25": 29,
"2022-02-26": 28,
"2022-02-27": 12,
"2022-02-28": 16,
"2022-03-03": 20,
"2022-03-04": 9,
"2022-03-05": 17,
"2022-03-06": 3,
"2022-03-07": 60,
"2022-03-08": 6,
"2022-03-09": 20,
"2022-03-10": 26,
"2022-03-11": 10,
"2022-03-12": 13,
"2022-03-13": 32,
"2022-03-14": 25,
"2022-03-15": 9,
"2022-03-16": 26,
"2022-03-17": 10,
"2022-03-20": 36,
"2022-03-21": 21,
"2022-03-22": 12,
"2022-03-23": 3,
"2022-03-26": 21,
"2022-03-27": 1,
"2022-03-28": 10,
"2022-03-31": 24,
"2022-04-01": 31,
"2022-04-02": 30,
"2022-04-04": 45,
"2022-04-09": 13,
"2022-04-16": 20,
"2022-04-17": 10,
"2022-04-18": 35,
"2022-04-19": 18,
"2022-04-20": 22,
"2022-04-21": 1,
"2022-04-23": 4,
"2022-04-25": 7,
"2022-04-26": 22,
"2022-04-27": 1,
"2022-05-01": 6,
"2022-05-02": 12,
"2022-05-03": 11,
"2022-05-04": 25,
"2022-05-05": 3,
"2022-05-08": 20,
"2022-05-09": 35,
"2022-05-11": 17,
"2022-05-12": 34,
"2022-05-15": 18,
"2022-05-16": 11,
"2022-05-19": 9,
"2022-05-20": 25,
"2022-05-21": 1,
"2022-05-22": 4,
"2022-05-23": 24,
"2022-05-25": 16,
"2022-05-29": 10,
"2022-05-30": 42,
"2022-06-01": 47,
"2022-06-06": 19,
"2023-06-22": 2,
"2023-06-25": 10,
"2023-06-26": 2,
"2023-07-01": 2,
"2023-07-02": 3,
"2023-07-03": 2,
"2023-07-09": 3,
"2023-07-16": 3,
"2023-07-17": 1,
"2023-07-22": 2
},
"participated_count": 45
},
"14459": {
"course_code": "ASTR1 SP22 41082",
"first_seen": "2022-01-31",
"last_seen": "2022-06-02",
"daily_hits": {
"2022-01-31": 64,
"2022-02-01": 24,
"2022-02-05": 5,
"2022-02-10": 12,
"2022-02-12": 11,
"2022-02-13": 8,
"2022-02-14": 23,
"2022-02-15": 3,
"2022-02-17": 8,
"2022-02-21": 1,
"2022-02-23": 12,
"2022-02-26": 1,
"2022-02-27": 3,
"2022-02-28": 81,
"2022-03-01": 11,
"2022-03-03": 11,
"2022-03-04": 41,
"2022-03-05": 2,
"2022-03-06": 10,
"2022-03-07": 20,
"2022-03-08": 10,
"2022-03-11": 21,
"2022-03-12": 55,
"2022-03-16": 30,
"2022-03-18": 11,
"2022-03-20": 1,
"2022-03-21": 36,
"2022-03-27": 9,
"2022-03-29": 9,
"2022-04-04": 4,
"2022-04-16": 12,
"2022-04-17": 25,
"2022-04-18": 31,
"2022-04-20": 2,
"2022-04-23": 2,
"2022-04-25": 18,
"2022-05-02": 4,
"2022-05-04": 1,
"2022-05-05": 2,
"2022-05-07": 5,
"2022-05-08": 4,
"2022-05-21": 4,
"2022-05-29": 4,
"2022-06-02": 2
},
"participated_count": 18
},
"14506": {
"course_code": "ENGL1A SP22 40055",
"first_seen": "2022-03-09",
"last_seen": "2022-03-09",
"daily_hits": {
"2022-03-09": 6
},
"participated_count": 0
},
"14631": {
"course_code": "El Centro SP & SU 2022",
"first_seen": "2022-02-01",
"last_seen": "2022-06-07",
"daily_hits": {
"2022-02-01": 1,
"2022-02-15": 3,
"2022-03-30": 1,
"2022-06-07": 4
},
"participated_count": 0
},
"14787": {
"course_code": "ENGL1C SU22 80214",
"first_seen": "2022-06-14",
"last_seen": "2022-06-29",
"daily_hits": {
"2022-06-14": 5,
"2022-06-17": 2,
"2022-06-19": 13,
"2022-06-20": 27,
"2022-06-21": 31,
"2022-06-27": 4,
"2022-06-28": 8,
"2022-06-29": 34
},
"participated_count": 3
},
"14922": {
"course_code": "HIST1 SU22 80036",
"first_seen": "2022-06-13",
"last_seen": "2022-07-23",
"daily_hits": {
"2022-06-13": 5,
"2022-06-14": 12,
"2022-06-16": 10,
"2022-06-17": 2,
"2022-06-19": 90,
"2022-06-20": 31,
"2022-06-21": 56,
"2022-06-22": 13,
"2022-06-27": 71,
"2022-06-28": 24,
"2022-06-29": 18,
"2022-07-03": 5,
"2022-07-04": 136,
"2022-07-12": 130,
"2022-07-19": 127,
"2022-07-22": 10,
"2022-07-23": 149
},
"participated_count": 46
},
"14938": {
"course_code": "CSIS42 SU22 80108",
"first_seen": "2022-05-09",
"last_seen": "2022-07-03",
"daily_hits": {
"2022-05-09": 6,
"2022-06-02": 15,
"2022-06-08": 5,
"2022-06-13": 5,
"2022-06-14": 4,
"2022-06-15": 32,
"2022-06-16": 136,
"2022-06-17": 27,
"2022-06-21": 1,
"2022-06-22": 20,
"2022-06-24": 25,
"2022-06-25": 28,
"2022-06-28": 23,
"2022-06-29": 37,
"2022-06-30": 5,
"2022-07-01": 29,
"2022-07-02": 15,
"2022-07-03": 19
},
"participated_count": 9
},
"15696": {
"course_code": "CMUN10 FA22 11477",
"first_seen": "2022-08-20",
"last_seen": "2022-08-20",
"daily_hits": {
"2022-08-20": 11
},
"participated_count": 0
},
"17031": {
"course_code": "ANTH/PSYC32 11584/11586",
"first_seen": "2023-08-28",
"last_seen": "2025-07-29",
"daily_hits": {
"2023-08-28": 45,
"2023-08-29": 2,
"2023-09-01": 10,
"2023-09-02": 2,
"2023-09-08": 31,
"2023-09-09": 3,
"2023-09-12": 1,
"2023-09-14": 6,
"2023-09-15": 10,
"2023-09-16": 4,
"2023-09-21": 20,
"2023-09-22": 1,
"2023-09-23": 31,
"2023-09-25": 10,
"2023-10-02": 95,
"2023-10-03": 3,
"2023-10-04": 29,
"2023-10-07": 17,
"2023-10-08": 27,
"2023-10-11": 4,
"2023-10-15": 12,
"2023-10-18": 1,
"2023-10-19": 33,
"2023-10-20": 9,
"2023-10-27": 7,
"2023-10-28": 4,
"2023-10-29": 10,
"2023-11-04": 5,
"2023-11-05": 12,
"2023-11-10": 6,
"2023-11-11": 13,
"2023-11-12": 4,
"2023-11-15": 11,
"2023-11-17": 5,
"2023-11-19": 3,
"2023-11-23": 4,
"2023-11-26": 4,
"2023-11-27": 6,
"2023-12-04": 9,
"2023-12-07": 4,
"2023-12-08": 8,
"2023-12-09": 1,
"2023-12-10": 6,
"2023-12-12": 8,
"2023-12-14": 18,
"2023-12-15": 3,
"2023-12-16": 10,
"2023-12-18": 9,
"2023-12-21": 12,
"2025-07-29": 4
},
"participated_count": 38
},
"17443": {
"course_code": "PHIL4 FA23 10629",
"first_seen": "2023-08-29",
"last_seen": "2023-12-21",
"daily_hits": {
"2023-08-29": 12,
"2023-09-01": 14,
"2023-09-02": 18,
"2023-09-08": 1,
"2023-09-09": 6,
"2023-09-12": 28,
"2023-09-16": 7,
"2023-09-21": 1,
"2023-09-22": 14,
"2023-09-25": 14,
"2023-10-02": 35,
"2023-10-04": 5,
"2023-10-05": 11,
"2023-10-07": 30,
"2023-10-08": 16,
"2023-10-10": 8,
"2023-10-15": 10,
"2023-10-18": 7,
"2023-10-19": 9,
"2023-10-20": 6,
"2023-10-21": 2,
"2023-10-22": 21,
"2023-10-28": 21,
"2023-11-15": 4,
"2023-11-16": 3,
"2023-11-17": 10,
"2023-11-18": 2,
"2023-11-22": 15,
"2023-11-23": 1,
"2023-11-27": 6,
"2023-12-04": 37,
"2023-12-07": 5,
"2023-12-08": 8,
"2023-12-09": 6,
"2023-12-12": 17,
"2023-12-21": 10
},
"participated_count": 13
},
"17453": {
"course_code": "ART/HIST21 10312/11561",
"first_seen": "2023-08-28",
"last_seen": "2023-09-09",
"daily_hits": {
"2023-08-28": 14,
"2023-08-29": 12,
"2023-09-01": 11,
"2023-09-02": 5,
"2023-09-09": 8
},
"participated_count": 6
},
"17773": {
"course_code": "GUID1 SU23 80060",
"first_seen": "2023-06-12",
"last_seen": "2023-07-22",
"daily_hits": {
"2023-06-12": 30,
"2023-06-13": 4,
"2023-06-15": 9,
"2023-06-16": 13,
"2023-06-17": 73,
"2023-06-19": 2,
"2023-06-23": 27,
"2023-06-25": 66,
"2023-06-26": 101,
"2023-07-02": 8,
"2023-07-03": 44,
"2023-07-07": 9,
"2023-07-09": 18,
"2023-07-10": 30,
"2023-07-16": 2,
"2023-07-17": 65,
"2023-07-18": 2,
"2023-07-21": 19,
"2023-07-22": 25
},
"participated_count": 49
},
"17815": {
"course_code": "AJ10 SU23 80090",
"first_seen": "2023-06-12",
"last_seen": "2023-09-09",
"daily_hits": {
"2023-06-12": 20,
"2023-06-16": 5,
"2023-06-18": 12,
"2023-06-19": 89,
"2023-06-20": 15,
"2023-06-25": 26,
"2023-06-27": 18,
"2023-07-01": 11,
"2023-07-02": 20,
"2023-07-03": 1,
"2023-07-04": 9,
"2023-07-09": 22,
"2023-07-16": 14,
"2023-07-17": 1,
"2023-07-21": 8,
"2023-07-22": 24,
"2023-07-24": 16,
"2023-08-28": 1,
"2023-09-01": 1,
"2023-09-09": 2
},
"participated_count": 42
},
"17821": {
"course_code": "CD/PSYC2 80137/80138",
"first_seen": "2023-06-09",
"last_seen": "2023-09-08",
"daily_hits": {
"2023-06-09": 3,
"2023-06-12": 59,
"2023-06-13": 3,
"2023-06-15": 12,
"2023-06-16": 31,
"2023-06-17": 4,
"2023-06-18": 113,
"2023-06-19": 103,
"2023-06-20": 42,
"2023-06-22": 40,
"2023-06-23": 6,
"2023-06-25": 25,
"2023-06-26": 16,
"2023-07-02": 46,
"2023-07-03": 35,
"2023-07-04": 25,
"2023-07-05": 14,
"2023-07-07": 3,
"2023-07-09": 59,
"2023-07-10": 10,
"2023-07-12": 10,
"2023-07-16": 21,
"2023-07-17": 37,
"2023-07-18": 59,
"2023-07-22": 59,
"2023-07-23": 13,
"2023-07-24": 46,
"2023-07-25": 3,
"2023-08-29": 2,
"2023-09-02": 1,
"2023-09-08": 1
},
"participated_count": 38
},
"18037": {
"course_code": "El Centro FA23",
"first_seen": "2023-09-02",
"last_seen": "2023-09-02",
"daily_hits": {
"2023-09-02": 2
},
"participated_count": 0
}
},
"app_name_counts": {
"None": 7054,
"Canvas for Android": 4176,
"Canvas for iOS": 1431
}
};
const dataCourses = data.courses;
const container = document.getElementById("reports");
const sortedCourses = Object.entries(dataCourses).sort(([, a], [, b]) => new Date(a.first_seen) - new Date(b.first_seen));
sortedCourses.forEach(([courseId, course], index) => {
const section = document.createElement("div");
section.className = "course";
const title = document.createElement("h2");
title.textContent = `${course.course_code || courseId} (Course ID: ${courseId})`;
const dateRange = document.createElement("p");
dateRange.textContent = `First seen: ${course.first_seen} — Last seen: ${course.last_seen}`;
const participation = document.createElement("p");
participation.textContent = `Participation count: ${course.participated_count}`;
const canvas = document.createElement("canvas");
canvas.id = `chart-${index}`;
section.appendChild(title);
section.appendChild(dateRange);
section.appendChild(participation);
section.appendChild(canvas);
container.appendChild(section);
const fullLabels = getAllDates(course.first_seen, course.last_seen);
const hitsMap = course.daily_hits;
const hits = fullLabels.map(d => hitsMap[d] || 0);
new Chart(canvas.getContext("2d"), {
type: 'bar',
data: {
labels: fullLabels,
datasets: [{
label: 'Daily Hits',
data: hits,
backgroundColor: 'rgba(75, 192, 192, 0.7)',
}]
},
options: {
scales: {
x: {
ticks: {
maxRotation: 90,
minRotation: 45,
autoSkip: true,
maxTicksLimit: 20
}
},
y: {
beginAtZero: true
}
}
}
});
});
}
const data = { /* full object will be injected manually */ };
loadData();
</script>
</body>
</html>