From fa580707d2b18b2765a5ddc3c834fc5441779b9a Mon Sep 17 00:00:00 2001 From: b0ink <40929320+b0ink@users.noreply.github.com> Date: Wed, 3 Dec 2025 10:29:27 +1100 Subject: [PATCH 1/2] feat: aggregate unit analytics to single json --- app/models/unit.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/models/unit.rb b/app/models/unit.rb index 3e7fddadb..d54049594 100644 --- a/app/models/unit.rb +++ b/app/models/unit.rb @@ -1832,6 +1832,30 @@ def task_completion_csv end end + def aggregate_task_complete_stats + result = {} + + task_definitions.each do |td| + result[td.abbreviation] = {} + end + + active_projects.each do |project| + task_definitions.each do |td| + task = project.task_for_task_definition(td) + status = task.task_status.id.to_s + result[task.task_definition.abbreviation][status] ||= 0 + result[task.task_definition.abbreviation][status] += 1 + end + end + + result.inspect + + file_server = Doubtfire::Application.config.student_work_dir + analytics_dir = File.join(file_server, "analytics") + + File.write("#{analytics_dir}/#{unit.code}-#{id}-stats.json", result.to_json) + end + def get_portfolio_zip_filename(current_user) filename = FileHelper.sanitized_filename("portfolios-#{code}-#{current_user.username}") "#{FileHelper.tmp_file(filename)}.zip" From b5d92d114029b43ea1bc096433594adb7032a36a Mon Sep 17 00:00:00 2001 From: b0ink <40929320+b0ink@users.noreply.github.com> Date: Wed, 3 Dec 2025 11:21:59 +1100 Subject: [PATCH 2/2] feat: split analytics by campus --- app/models/unit.rb | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/models/unit.rb b/app/models/unit.rb index d54049594..3233babc4 100644 --- a/app/models/unit.rb +++ b/app/models/unit.rb @@ -1840,11 +1840,18 @@ def aggregate_task_complete_stats end active_projects.each do |project| + campus_name = project.campus.name + result[campus_name] ||= {} + task_definitions.each do |td| - task = project.task_for_task_definition(td) - status = task.task_status.id.to_s - result[task.task_definition.abbreviation][status] ||= 0 - result[task.task_definition.abbreviation][status] += 1 + result[campus_name][td.abbreviation] ||= {} + + task = project.task_for_task_definition(td) + next unless task + + status = task.task_status.id.to_s + result[campus_name][td.abbreviation][status] ||= 0 + result[campus_name][td.abbreviation][status] += 1 end end @@ -1852,8 +1859,10 @@ def aggregate_task_complete_stats file_server = Doubtfire::Application.config.student_work_dir analytics_dir = File.join(file_server, "analytics") + FileUtils.mkdir_p(analytics_dir) + - File.write("#{analytics_dir}/#{unit.code}-#{id}-stats.json", result.to_json) + File.write("#{analytics_dir}/#{code}-#{id}-stats.json", result.to_json) end def get_portfolio_zip_filename(current_user)