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
FCM
mid_back_office_name
mbo_country_code
GB

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
Dynamics
mbo_country_code
SPAIN

Metadata:
user_id
Succeeded

Processed 1 out of 1 item (100%).

Ran for less than 10 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 10 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code

Metadata:
user_id
Errored

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

ActiveRecord::RecordNotUnique

PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "active_storage_blobs_pkey" DETAIL: Key (id)=(68) already exists.

app/tasks/maintenance/export_custom_fields_task.rb:34:in 'Maintenance::ExportCustomFieldsTask#upload_to_storage'
app/tasks/maintenance/export_custom_fields_task.rb:26:in 'block in Maintenance::ExportCustomFieldsTask#process'
app/services/csv_generator.rb:9:in 'CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:16:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
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
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
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
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 10 seconds, finished .

Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
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
mbo_country_code

Metadata:
user_id
Errored

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

NameError

uninitialized constant Maintenance::ExportCustomFieldsTask::Azure

app/tasks/maintenance/export_custom_fields_task.rb:61:in 'Maintenance::ExportCustomFieldsTask#generate_file_url'
app/tasks/maintenance/export_custom_fields_task.rb:47:in 'Maintenance::ExportCustomFieldsTask#send_report_email'
app/tasks/maintenance/export_custom_fields_task.rb:22:in 'block in Maintenance::ExportCustomFieldsTask#process'
app/services/csv_generator.rb:9:in 'CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:18:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
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
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
mbo_country_code

Metadata:
user_id
Errored

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

ArgumentError

missing keyword: :content_type

app/tasks/maintenance/export_custom_fields_task.rb:56:in 'Maintenance::ExportCustomFieldsTask#generate_file_url'
app/tasks/maintenance/export_custom_fields_task.rb:47:in 'Maintenance::ExportCustomFieldsTask#send_report_email'
app/tasks/maintenance/export_custom_fields_task.rb:22:in 'block in Maintenance::ExportCustomFieldsTask#process'
app/services/csv_generator.rb:9:in 'CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:18:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
mbo_country_code

Metadata:
user_id
Errored

Processed 0 out of 1 item (0%).

Ran for less than 5 seconds until an error happened .

NoMethodError

undefined method 'service_url' for an instance of ActiveStorage::Blob

app/tasks/maintenance/export_custom_fields_task.rb:56:in 'Maintenance::ExportCustomFieldsTask#generate_file_url'
app/tasks/maintenance/export_custom_fields_task.rb:47:in 'Maintenance::ExportCustomFieldsTask#send_report_email'
app/tasks/maintenance/export_custom_fields_task.rb:22:in 'block in Maintenance::ExportCustomFieldsTask#process'
app/services/csv_generator.rb:9:in 'CsvGenerator#call'
app/tasks/maintenance/export_custom_fields_task.rb:18:in 'Maintenance::ExportCustomFieldsTask#process'
Arguments:
emails
[FILTERED]
brand_name
mid_back_office_name
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
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
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
mbo_country_code

Metadata:
user_id
Next page