Maintenance::ExportCustomFieldsTask

Source code
# frozen_string_literal: true

class Maintenance::ExportCustomFieldsTask < MaintenanceTasks::Task
  include ArrayHelper

  no_collection

  attribute :emails, :string
  attribute :brand_name, :string
  attribute :mid_back_office_name, :string
  attribute :mbo_country_code, :string

  validates :emails, presence: true, fcm_email_format: true

  def process
    CsvGenerator.new.call do |file|
      CustomFields::RawDataExtractor.new(
        brand_name: brand_name,
        mid_back_office_name: mid_back_office_name,
        mbo_country_code: mbo_country_code
      ).call do |line|
        file.puts(line)
      end

      file.rewind
      blob = upload_to_storage(file)
      send_email_with_url(blob)
    end
  end

  private

  def upload_to_storage(file)
    ActiveStorage::Blob.create_and_upload!(
      io: file,
      filename: "custom_fields_export_#{Time.zone.now.strftime('%Y%m%d_%H%M%S')}.csv",
      content_type: 'text/csv'
    )
  end

  def send_email_with_url(blob)
    file_url = Rails.application.routes.url_helpers.rails_blob_url(
      blob,
      host: application_host,
      protocol: 'https'
    )

    ReportingFieldCsvMailer.send_url(
      recipients: emails_array(emails),
      file_url: file_url
    ).deliver_now
  end

  def application_host
    ENV.fetch('VIRTUAL_HOST').split(',').first.strip
  end
end

Previous Runs

Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
protas, travelogix
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code
CA

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code
US

Metadata:
user_id
Errored

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

Encoding::UndefinedConversionError

"\x83" to UTF-8 in conversion from Windows-1250 to UTF-8

app/services/encoding_normalizer.rb:26:in 'String#encode'
app/services/encoding_normalizer.rb:26:in 'block in EncodingNormalizer#safe_encode'
app/services/encoding_normalizer.rb:23:in 'Array#each'
app/services/encoding_normalizer.rb:23:in 'EncodingNormalizer#safe_encode'
app/services/encoding_normalizer.rb:17:in 'EncodingNormalizer#normalize'
app/services/custom_fields/raw_data_extractor.rb:16:in 'block in CustomFields::RawDataExtractor#call'
app/services/custom_fields/raw_data_extractor.rb:14:in 'CustomFields::RawDataExtractor#call'
app/tasks/maintenance/export_custom_fields_task.rb:20:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
protas
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
travelogix
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 10 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
protas
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 10 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
protas
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
fcm
mid_back_office_name
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
fcm
mid_back_office_name
mbo_country_code

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
FCM
mid_back_office_name
Travelogix
mbo_country_code
AE

Metadata:
user_id
Succeeded
#99

Processed 1 out of 1 item (100%).

Ran for less than 5 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
FCM
mid_back_office_name
Travelogix
mbo_country_code
AE

Metadata:
user_id
Errored
#98

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

Encoding::UndefinedConversionError

"\xE2" from ASCII-8BIT to UTF-8

app/services/reporting_fields/csv_generator.rb:17:in 'block in ReportingFields::CsvGenerator#call'
app/services/reporting_fields/csv_generator.rb:15:in 'ReportingFields::CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:23:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code

Metadata:
user_id
Errored
#97

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

Encoding::UndefinedConversionError

"\xE2" from ASCII-8BIT to UTF-8

app/services/reporting_fields/csv_generator.rb:17:in 'block in ReportingFields::CsvGenerator#call'
app/services/reporting_fields/csv_generator.rb:15:in 'ReportingFields::CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:23:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code

Metadata:
user_id