39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'app/workers/add_ons/ai_translation_worker.rb', line 39
def perform(translation_id, add_on_id, source_language, target_languages, target_fields, only_blank_languages, only_blank_fields)
BUSINESS_LOGGER.set_business_context({ add_on_id: add_on_id, translation_id: translation_id })
BUSINESS_LOGGER.info('Starting add-on AI translation', {
source_language: source_language,
target_languages: target_languages,
target_fields: target_fields,
only_blank_languages: only_blank_languages,
only_blank_fields: only_blank_fields,
})
add_on = AddOns::AddOn.find_by(id: add_on_id)
unless add_on
error_message = 'Add-on not found'
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Add-on translation failed', { error: error_message })
return
end
service = AddOns::AiTranslationService.new(
add_on,
source_language: source_language,
target_languages: target_languages,
target_fields: target_fields,
only_blank_languages: only_blank_languages,
only_blank_fields: only_blank_fields,
)
result = service.call
if result[:success]
store_translation_result(translation_id, result[:translations], result[:message])
BUSINESS_LOGGER.info('Add-on translation completed successfully', {
translation_id: translation_id,
message: result[:message],
})
else
store_translation_error(translation_id, result[:message])
BUSINESS_LOGGER.error('Add-on translation failed', {
translation_id: translation_id,
error: result[:message],
})
end
rescue StandardError => e
APMErrorHandler.report(e, context: {
translation_id: translation_id,
add_on_id: add_on_id,
source_language: source_language,
target_languages: target_languages,
})
error_message = "Unexpected error: #{e.message}"
store_translation_error(translation_id, error_message)
BUSINESS_LOGGER.error('Add-on translation encountered error', {
translation_id: translation_id,
error: error_message,
backtrace: e.backtrace.first(5),
})
end
|