class GoodData::LCM2::MigrateGdcDateDimension
Constants
- DATE_DIMENSION_CUSTOM_V2
- DATE_DIMENSION_OLD
- DESCRIPTION
- PARAMS
- RESULT_HEADER
Public Class Methods
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
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
Source
# 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 dimension from blue print. Return nil if date dimension not existing
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
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
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
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
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