Add logging

This commit is contained in:
Justin Edmund 2025-01-18 11:46:00 -08:00
parent 5355f57a64
commit e642d382b8
3 changed files with 57 additions and 19 deletions

View file

@ -12,9 +12,7 @@ class GeneratePartyPreviewJob < ApplicationJob
around_perform :track_timing
def perform(party_id)
# Log start of job processing
Rails.logger.info("Starting preview generation for party #{party_id}")
party = Party.find(party_id)
if party.preview_state == 'generated' &&
@ -26,7 +24,10 @@ class GeneratePartyPreviewJob < ApplicationJob
begin
service = PreviewService::Coordinator.new(party)
Rails.logger.info("Created PreviewService::Coordinator")
result = service.generate_preview
Rails.logger.info("Generate preview result: #{result}")
if result
Rails.logger.info("Successfully generated preview for party #{party_id}")
@ -36,9 +37,10 @@ class GeneratePartyPreviewJob < ApplicationJob
end
rescue => e
Rails.logger.error("Error generating preview for party #{party_id}: #{e.message}")
Rails.logger.error(e.backtrace.join("\n"))
Rails.logger.error("Full error details:")
Rails.logger.error(e.full_message) # This will include the stack trace
notify_failure(party, e)
raise # Allow retry mechanism to handle the error
raise
end
end

View file

@ -15,12 +15,24 @@ module PreviewService
end
def create_blank_canvas(width: PREVIEW_WIDTH, height: PREVIEW_HEIGHT, color: DEFAULT_BACKGROUND_COLOR)
temp_file = Tempfile.new(%w[canvas .png])
Rails.logger.info("Checking ImageMagick installation...")
version = `convert -version`
Rails.logger.info("ImageMagick version: #{version}")
MiniMagick::Tool::Convert.new do |convert|
convert.size "#{width}x#{height}"
convert << "xc:#{color}"
convert << temp_file.path
temp_file = Tempfile.new(%w[canvas .png])
Rails.logger.info("Created temp file: #{temp_file.path}")
begin
MiniMagick::Tool::Convert.new do |convert|
convert.size "#{width}x#{height}"
convert << "xc:#{color}"
convert << temp_file.path
end
Rails.logger.info("Canvas created successfully")
rescue => e
Rails.logger.error("Failed to create canvas: #{e.message}")
Rails.logger.error(e.backtrace.join("\n"))
raise
end
temp_file

View file

@ -41,22 +41,33 @@ module PreviewService
Rails.logger.info("Starting preview generation for party #{@party.id}")
set_generation_in_progress
# Generate the preview image
Rails.logger.info("Creating preview image...")
image = create_preview_image
save_preview(image)
Rails.logger.info("Preview image created successfully")
# Update party state
Rails.logger.info("Saving preview...")
save_preview(image)
Rails.logger.info("Preview saved successfully")
Rails.logger.info("Updating party state...")
@party.update!(
preview_state: :generated,
preview_generated_at: Time.current
)
Rails.logger.info("Party state updated successfully")
true
rescue => e
Rails.logger.error("Failed to generate preview: #{e.class} - #{e.message}")
Rails.logger.error("Stack trace:")
Rails.logger.error(e.backtrace.join("\n"))
handle_preview_generation_error(e)
false
ensure
Rails.logger.info("Cleaning up resources...")
@image_fetcher.cleanup
clear_generation_in_progress
Rails.logger.info("Cleanup completed")
end
end
@ -99,28 +110,34 @@ module PreviewService
#
# @return [MiniMagick::Image] The generated preview image
def create_preview_image
# Create blank canvas
Rails.logger.info("Creating blank canvas...")
canvas = @canvas_service.create_blank_canvas
image = MiniMagick::Image.new(canvas.path)
Rails.logger.info("Blank canvas created")
# Fetch job icon
Rails.logger.info("Processing job icon...")
job_icon = nil
if @party.job.present?
Rails.logger.info("Fetching job icon for job ID: #{@party.job.granblue_id}")
job_icon = @image_fetcher.fetch_job_icon(@party.job.granblue_id)
Rails.logger.info("Job icon fetched successfully") if job_icon
end
# Add party name with job icon
Rails.logger.info("Adding party name and job icon...")
text_result = @canvas_service.add_text(image, @party.name, job_icon: job_icon, user: @party.user)
image = text_result[:image]
Rails.logger.info("Party name and job icon added")
# Calculate grid layout
Rails.logger.info("Calculating grid layout...")
grid_layout = @grid_service.calculate_layout(
canvas_height: Canvas::PREVIEW_HEIGHT,
title_bottom_y: text_result[:text_bottom_y]
)
Rails.logger.info("Grid layout calculated")
# Organize and draw weapons
Rails.logger.info("Drawing weapons...")
image = organize_and_draw_weapons(image, grid_layout)
Rails.logger.info("Weapons drawn successfully")
image
end
@ -196,15 +213,22 @@ module PreviewService
begin
image.write(temp_file.path)
# Use timestamped filename similar to local storage
timestamp = Time.current.strftime('%Y%m%d%H%M%S')
key = "#{PREVIEW_FOLDER}/#{@party.shortcode}_#{timestamp}.png"
File.open(temp_file.path, 'rb') do |file|
@aws_service.s3_client.put_object(
bucket: S3_BUCKET,
key: preview_key,
bucket: @aws_service.bucket,
key: key,
body: file,
content_type: 'image/png',
acl: 'private'
)
end
# Optionally, store this key on the party record if needed for retrieval
@party.update!(preview_s3_key: key)
ensure
temp_file.close
temp_file.unlink