Add logging
This commit is contained in:
parent
5355f57a64
commit
e642d382b8
3 changed files with 57 additions and 19 deletions
|
|
@ -12,9 +12,7 @@ class GeneratePartyPreviewJob < ApplicationJob
|
||||||
around_perform :track_timing
|
around_perform :track_timing
|
||||||
|
|
||||||
def perform(party_id)
|
def perform(party_id)
|
||||||
# Log start of job processing
|
|
||||||
Rails.logger.info("Starting preview generation for party #{party_id}")
|
Rails.logger.info("Starting preview generation for party #{party_id}")
|
||||||
|
|
||||||
party = Party.find(party_id)
|
party = Party.find(party_id)
|
||||||
|
|
||||||
if party.preview_state == 'generated' &&
|
if party.preview_state == 'generated' &&
|
||||||
|
|
@ -26,7 +24,10 @@ class GeneratePartyPreviewJob < ApplicationJob
|
||||||
|
|
||||||
begin
|
begin
|
||||||
service = PreviewService::Coordinator.new(party)
|
service = PreviewService::Coordinator.new(party)
|
||||||
|
Rails.logger.info("Created PreviewService::Coordinator")
|
||||||
|
|
||||||
result = service.generate_preview
|
result = service.generate_preview
|
||||||
|
Rails.logger.info("Generate preview result: #{result}")
|
||||||
|
|
||||||
if result
|
if result
|
||||||
Rails.logger.info("Successfully generated preview for party #{party_id}")
|
Rails.logger.info("Successfully generated preview for party #{party_id}")
|
||||||
|
|
@ -36,9 +37,10 @@ class GeneratePartyPreviewJob < ApplicationJob
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
Rails.logger.error("Error generating preview for party #{party_id}: #{e.message}")
|
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)
|
notify_failure(party, e)
|
||||||
raise # Allow retry mechanism to handle the error
|
raise
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,24 @@ module PreviewService
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_blank_canvas(width: PREVIEW_WIDTH, height: PREVIEW_HEIGHT, color: DEFAULT_BACKGROUND_COLOR)
|
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|
|
temp_file = Tempfile.new(%w[canvas .png])
|
||||||
convert.size "#{width}x#{height}"
|
Rails.logger.info("Created temp file: #{temp_file.path}")
|
||||||
convert << "xc:#{color}"
|
|
||||||
convert << 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
|
end
|
||||||
|
|
||||||
temp_file
|
temp_file
|
||||||
|
|
|
||||||
|
|
@ -41,22 +41,33 @@ module PreviewService
|
||||||
Rails.logger.info("Starting preview generation for party #{@party.id}")
|
Rails.logger.info("Starting preview generation for party #{@party.id}")
|
||||||
set_generation_in_progress
|
set_generation_in_progress
|
||||||
|
|
||||||
# Generate the preview image
|
Rails.logger.info("Creating preview image...")
|
||||||
image = create_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!(
|
@party.update!(
|
||||||
preview_state: :generated,
|
preview_state: :generated,
|
||||||
preview_generated_at: Time.current
|
preview_generated_at: Time.current
|
||||||
)
|
)
|
||||||
|
Rails.logger.info("Party state updated successfully")
|
||||||
|
|
||||||
true
|
true
|
||||||
rescue => e
|
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)
|
handle_preview_generation_error(e)
|
||||||
false
|
false
|
||||||
ensure
|
ensure
|
||||||
|
Rails.logger.info("Cleaning up resources...")
|
||||||
@image_fetcher.cleanup
|
@image_fetcher.cleanup
|
||||||
clear_generation_in_progress
|
clear_generation_in_progress
|
||||||
|
Rails.logger.info("Cleanup completed")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -99,28 +110,34 @@ module PreviewService
|
||||||
#
|
#
|
||||||
# @return [MiniMagick::Image] The generated preview image
|
# @return [MiniMagick::Image] The generated preview image
|
||||||
def create_preview_image
|
def create_preview_image
|
||||||
# Create blank canvas
|
Rails.logger.info("Creating blank canvas...")
|
||||||
canvas = @canvas_service.create_blank_canvas
|
canvas = @canvas_service.create_blank_canvas
|
||||||
image = MiniMagick::Image.new(canvas.path)
|
image = MiniMagick::Image.new(canvas.path)
|
||||||
|
Rails.logger.info("Blank canvas created")
|
||||||
|
|
||||||
# Fetch job icon
|
Rails.logger.info("Processing job icon...")
|
||||||
job_icon = nil
|
job_icon = nil
|
||||||
if @party.job.present?
|
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)
|
job_icon = @image_fetcher.fetch_job_icon(@party.job.granblue_id)
|
||||||
|
Rails.logger.info("Job icon fetched successfully") if job_icon
|
||||||
end
|
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)
|
text_result = @canvas_service.add_text(image, @party.name, job_icon: job_icon, user: @party.user)
|
||||||
image = text_result[:image]
|
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(
|
grid_layout = @grid_service.calculate_layout(
|
||||||
canvas_height: Canvas::PREVIEW_HEIGHT,
|
canvas_height: Canvas::PREVIEW_HEIGHT,
|
||||||
title_bottom_y: text_result[:text_bottom_y]
|
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)
|
image = organize_and_draw_weapons(image, grid_layout)
|
||||||
|
Rails.logger.info("Weapons drawn successfully")
|
||||||
|
|
||||||
image
|
image
|
||||||
end
|
end
|
||||||
|
|
@ -196,15 +213,22 @@ module PreviewService
|
||||||
begin
|
begin
|
||||||
image.write(temp_file.path)
|
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|
|
File.open(temp_file.path, 'rb') do |file|
|
||||||
@aws_service.s3_client.put_object(
|
@aws_service.s3_client.put_object(
|
||||||
bucket: S3_BUCKET,
|
bucket: @aws_service.bucket,
|
||||||
key: preview_key,
|
key: key,
|
||||||
body: file,
|
body: file,
|
||||||
content_type: 'image/png',
|
content_type: 'image/png',
|
||||||
acl: 'private'
|
acl: 'private'
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Optionally, store this key on the party record if needed for retrieval
|
||||||
|
@party.update!(preview_s3_key: key)
|
||||||
ensure
|
ensure
|
||||||
temp_file.close
|
temp_file.close
|
||||||
temp_file.unlink
|
temp_file.unlink
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue