class GoodData::LCM2::MigrateGdcDateDimension

Constants

DATE_DIMENSION_CUSTOM_V2
DATE_DIMENSION_OLD
DESCRIPTION
PARAMS
RESULT_HEADER

Public Class Methods

call(params) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 39
def call(params)
  results = []
  params.synchronize.map do |segment_info|
    next if sync_failed_segment(segment_info[:segment_id], params)

    result = migrate_date_dimension(params, segment_info)
    results.concat(result)
  end

  {
    results: results
  }
end
contain_v2?(blueprint) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 127
def contain_v2?(blueprint)
  get_date_dimensions(blueprint).any? { |e| e[:urn] == DATE_DIMENSION_CUSTOM_V2 }
end
get_date_dimension(blueprint, id) click to toggle source

Get date dimension from blue print. Return nil if date dimension not existing

# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 132
def get_date_dimension(blueprint, id)
  date_dimensions = get_date_dimensions(blueprint)
  date_dimensions.find { |d| d[:id] == id }
end
get_date_dimensions(blueprint) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 137
def get_date_dimensions(blueprint)
  GoodData::Model::ProjectBlueprint.date_dimensions(blueprint)
end
get_upgrade_dates(src_blueprint, dest_blueprint) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 95
def get_upgrade_dates(src_blueprint, dest_blueprint)
  dest_dates = get_date_dimensions(dest_blueprint) if dest_blueprint
  src_dates = get_date_dimensions(src_blueprint) if src_blueprint

  upgrade_datasets = []
  return upgrade_datasets if dest_dates.empty? || src_dates.empty?

  dest_dates.each do |dest|
    src_dim = get_date_dimension(src_blueprint, dest[:id])
    next unless src_dim

    upgrade_datasets << src_dim[:identifier] if upgrade?(src_dim, dest) && src_dim[:identifier]
  end

  upgrade_datasets
end
get_upgrade_message(upgrade_datasets) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 112
def get_upgrade_message(upgrade_datasets)
  {
    upgrade: {
      dateDatasets: {
        upgrade: "exact",
        datasets: upgrade_datasets
      }
    }
  }
end
migrate_date_dimension(params, segment_info) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 53
def migrate_date_dimension(params, segment_info)
  results = []
  client = params.gdc_gd_client
  latest_blueprint = segment_info[:from_blueprint]
  # don't migrate when latest master doesn't contain custom v2 date.
  return results unless contain_v2?(latest_blueprint)

  previous_blueprint = segment_info[:previous_master]&.blueprint
  # check latest master and previous master
  master_upgrade_datasets = get_upgrade_dates(latest_blueprint, previous_blueprint) if params[:synchronize_ldm].downcase == 'diff_against_master' && previous_blueprint
  unless master_upgrade_datasets&.empty?
    collect_synced_status = collect_synced_status(params)
    failed_projects = ThreadSafe::Array.new

    segment_info[:to].pmap do |entry|
      pid = entry[:pid]
      next if sync_failed_project(pid, params)

      to_project = client.projects(pid) || fail("Invalid 'to' project specified - '#{pid}'")
      GoodData.logger.info "Migrating date dimension, project: '#{to_project.title}', PID: #{pid}"
      to_blueprint = to_project.blueprint
      upgrade_datasets = get_upgrade_dates(latest_blueprint, to_blueprint)
      next if upgrade_datasets.empty?

      message = get_upgrade_message(upgrade_datasets)
      failed_message = "Failed to migrate date dimension for project #{pid}"
      update_status = to_project.upgrade_custom_v2(message)
      process_failed_project(pid, failed_message, failed_projects, collect_synced_status) if collect_synced_status && update_status != 'OK'

      results << {
        from: segment_info[:from],
        to: pid,
        status: update_status
      }
    end

    process_failed_projects(failed_projects, short_name, params) if collect_synced_status
  end

  results
end
upgrade?(src_dim, dest_dim) click to toggle source
# File lib/gooddata/lcm/actions/migrate_gdc_date_dimension.rb, line 123
def upgrade?(src_dim, dest_dim)
  src_dim[:urn] == DATE_DIMENSION_CUSTOM_V2 && DATE_DIMENSION_OLD.any? { |e| dest_dim[:urn] == e }
end