diff --git a/lib/granblue/downloaders/base_downloader.rb b/lib/granblue/downloaders/base_downloader.rb index a4a85de..021980b 100644 --- a/lib/granblue/downloaders/base_downloader.rb +++ b/lib/granblue/downloaders/base_downloader.rb @@ -36,7 +36,7 @@ module Granblue should_process = should_download?(download_uri, s3_key) return unless should_process - log_info "\tDownloading #{size}\t#{url}..." + log_info "-> #{size}:\t#{url}..." case @storage when :local diff --git a/lib/granblue/post_deployment_manager.rb b/lib/granblue/post_deployment_manager.rb index 52e0443..43626ab 100644 --- a/lib/granblue/post_deployment_manager.rb +++ b/lib/granblue/post_deployment_manager.rb @@ -1,6 +1,10 @@ # frozen_string_literal: true +require_relative '../logging_helper' + class PostDeploymentManager + include LoggingHelper + STORAGE_DESCRIPTIONS = { local: 'to local disk', s3: 'to S3', @@ -26,7 +30,7 @@ class PostDeploymentManager private def import_new_data - log_step 'Importing new data...' + log_header "Importing new data..." importer = Granblue::DataImporter.new( test_mode: @test_mode, verbose: @verbose @@ -47,18 +51,22 @@ class PostDeploymentManager end def rebuild_search_indices - log_step "\nRebuilding search indices..." - + log_header 'Rebuilding search indices...' [Character, Summon, Weapon, Job].each do |model| - log_verbose "Rebuilding search index for #{model.name}..." + log_verbose "• #{model.name}... " PgSearch::Multisearch.rebuild(model) + log_verbose "✅ done!\n" end end def display_import_summary - log_step "\nImport Summary:" - display_record_summary("New", @new_records) - display_record_summary("Updated", @updated_records) + if @new_records.size > 0 || @updated_records.size > 0 + log_step "\nImport Summary:" + display_record_summary("New", @new_records) + display_record_summary("Updated", @updated_records) + else + log_step "\nNo new records imported." + end end def display_record_summary(label, records) @@ -75,7 +83,7 @@ class PostDeploymentManager if @test_mode log_step "\nTEST MODE: Would download images for new and updated records..." else - log_step "\nDownloading images for new and updated records..." + log_header "Downloading images...", "+" end [@new_records, @updated_records].each do |records| @@ -126,12 +134,4 @@ class PostDeploymentManager def all_records_empty? @new_records.values.all?(&:empty?) && @updated_records.values.all?(&:empty?) end - - def log_step(message) - puts message - end - - def log_verbose(message) - puts message if @verbose - end end diff --git a/lib/logging_helper.rb b/lib/logging_helper.rb new file mode 100644 index 0000000..2e4fb10 --- /dev/null +++ b/lib/logging_helper.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module LoggingHelper + def log_step(message) + puts message + end + + def log_verbose(message) + print message if @verbose + end + + def log_divider(character = '+', leading_newline = true, trailing_newlines = 1) + output = "" + output += "\n" if leading_newline + output += character * 35 + output += "\n" * trailing_newlines + log_step output + end + + def log_header(title, character = '+', leading_newline = true) + log_divider(character, leading_newline, 0) + log_step title + log_divider(character, false) + end +end diff --git a/lib/tasks/deploy.rake b/lib/tasks/deploy.rake index fa09d22..74a3aaf 100644 --- a/lib/tasks/deploy.rake +++ b/lib/tasks/deploy.rake @@ -1,12 +1,21 @@ +# frozen_string_literal: true + +require_relative '../granblue/downloaders/base_downloader' +require_relative '../logging_helper' + namespace :deploy do desc 'Post-deployment tasks: Import new data and download related images. Options: TEST=true for test mode, VERBOSE=true for verbose output, STORAGE=local|s3|both' task post_deployment: :environment do - require_relative '../granblue/downloaders/base_downloader' + include LoggingHelper + Dir[Rails.root.join('lib', 'granblue', '**', '*.rb')].each { |file| require file } # Ensure Rails environment is loaded Rails.application.eager_load! - + + log_header('Starting post-deploy script...', '*', false) + print "\n" + # Parse and validate storage option storage = (ENV['STORAGE'] || 'both').to_sym unless [:local, :s3, :both].include?(storage) @@ -20,15 +29,21 @@ namespace :deploy do storage: storage } + print "Test mode:\t" if options[:test_mode] - puts 'Test mode enabled' + print "✅ Enabled\n" + else + print "❌ Disabled\n" end + print "Verbose output:\t" if options[:verbose] - puts 'Verbose output enabled' + print "✅ Enabled\n" + else + print "❌ Disabled\n" end - puts "Storage mode: #{storage}" + puts "Storage mode:\t#{storage}" # Execute the task manager = PostDeploymentManager.new(options)