From 631db79b705d621da87f74311ad46ef629115ff0 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:31:32 +0100 Subject: [PATCH] Add task to just count and surface invalid LettingsLog and SalesLog (#3061) * Add tasks to just count and surface invalid LettingsLog and SalesLog * Refactor InvalidLogsHelper module structure * Refactor InvalidLogsHelper for improved logging and module structure * Update logging level in InvalidLogsHelper from debug to info for better visibility * Reorganise includes in invalid_logs.rake --- app/helpers/invalid_logs_helper.rb | 23 +++++++++++++++++++++++ lib/tasks/invalid_logs.rake | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/helpers/invalid_logs_helper.rb create mode 100644 lib/tasks/invalid_logs.rake diff --git a/app/helpers/invalid_logs_helper.rb b/app/helpers/invalid_logs_helper.rb new file mode 100644 index 000000000..00e8cb786 --- /dev/null +++ b/app/helpers/invalid_logs_helper.rb @@ -0,0 +1,23 @@ +module InvalidLogsHelper + def count_and_display_invalid_logs(model, log_type, year) + invalid_logs = fetch_invalid_logs(model, year) + Rails.logger.info "Number of invalid #{log_type} for year #{year}: #{invalid_logs.size}" + Rails.logger.info "Invalid #{log_type} IDs: #{invalid_logs.map(&:id).join(', ')}" + end + + def surface_invalid_logs(model, log_type, year) + invalid_logs = fetch_invalid_logs(model, year) + if invalid_logs.any? + invalid_logs.each do |log| + Rails.logger.info "#{log_type} ID: #{log.id}" + log.errors.full_messages.each { |message| Rails.logger.info " - #{message}" } + end + else + Rails.logger.info "No invalid #{log_type} found for year #{year}." + end + end + + def fetch_invalid_logs(model, year) + model.filter_by_year(year).reject(&:valid?) + end +end diff --git a/lib/tasks/invalid_logs.rake b/lib/tasks/invalid_logs.rake new file mode 100644 index 000000000..14b8ea44c --- /dev/null +++ b/lib/tasks/invalid_logs.rake @@ -0,0 +1,21 @@ +namespace :logs do + desc "Count the number of invalid LettingsLog and SalesLog for a given year" + task :count_invalid, [:year] => :environment do |_task, args| + include CollectionTimeHelper + include InvalidLogsHelper + + year = args[:year] || current_collection_year + count_and_display_invalid_logs(LettingsLog, "LettingsLog", year) + count_and_display_invalid_logs(SalesLog, "SalesLog", year) + end + + desc "Surface all invalid logs and output their error messages for a given year" + task :surface_invalid, [:year] => :environment do |_task, args| + include CollectionTimeHelper + include InvalidLogsHelper + + year = args[:year] || current_collection_year + surface_invalid_logs(LettingsLog, "LettingsLog", year) + surface_invalid_logs(SalesLog, "SalesLog", year) + end +end