Class: Stax::Cmd::Dms

Inherits:
SubCommand show all
Defined in:
lib/stax/mixin/dms.rb

Constant Summary collapse

COLORS =
{
  active:     :green,
  available:  :green,
  successful: :green,
  failed:     :red,
  stopped:    :red,
  ready:      :green,
}

Instance Method Summary collapse

Methods inherited from SubCommand

#info, stax_info, stax_info_tasks

Instance Method Details

#connectionsObject



103
104
105
106
107
108
# File 'lib/stax/mixin/dms.rb', line 103

def connections
  debug("Test connection results for #{my.stack_name}")
  print_table Aws::Dms.connections(filters: [{name: 'endpoint-arn', values: dms_endpoint_arns}]).map { |c|
    [c.endpoint_identifier, c.replication_instance_identifier, color(c.status, COLORS), c.last_failure_message]
  }
end

#endpointsObject



51
52
53
54
55
56
# File 'lib/stax/mixin/dms.rb', line 51

def endpoints
  debug("DMS endpoints for #{my.stack_name}")
  print_table Aws::Dms.endpoints(filters: [{name: 'endpoint-arn', values: dms_endpoint_arns}]).map { |e|
    [e.endpoint_identifier, e.endpoint_type, color(e.status, COLORS), e.engine_name, e.server_name]
  }
end

#instancesObject



59
60
61
62
63
64
65
66
67
68
# File 'lib/stax/mixin/dms.rb', line 59

def instances
  debug("DMS replication instances for #{my.stack_name}")
  print_table Aws::Dms.instances(filters: [{name: 'replication-instance-arn', values: dms_instance_arns}]).map { |i|
    [
      i.replication_instance_identifier, color(i.replication_instance_status, COLORS),
      i.replication_subnet_group&.vpc_id, i.replication_instance_class, i.engine_version,
      i.availability_zone, i.replication_instance_private_ip_address,
    ]
  }
end

#start(*tasks) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/stax/mixin/dms.rb', line 114

def start(*tasks)
  type = (options[:resume] && 'resume-processing') || (options[:reload] && 'reload-target') || 'start-replication'
  options.fetch(:tasks, dms_task_arns).each do |task|
    Aws::Dms.start(replication_task_arn: task, start_replication_task_type: type).tap do |r|
      puts [r.replication_task_identifier, r.status, r.replication_task_start_date].join('  ')
    end
  end
rescue ::Aws::DatabaseMigrationService::Errors::InvalidParameterCombinationException => e
  fail_task(e.message)
rescue ::Aws::DatabaseMigrationService::Errors::InvalidResourceStateFault => e
  fail_task(e.message)
end

#tasksObject



71
72
73
74
75
76
77
78
79
80
# File 'lib/stax/mixin/dms.rb', line 71

def tasks
  debug("DMS replication tasks for #{my.stack_name}")
  print_table Aws::Dms.tasks(filters: [{name: 'replication-task-arn', values: dms_task_arns}]).map { |t|
    [
      t.replication_task_identifier, color(t.status, COLORS), t.migration_type,
      "#{t.replication_task_stats&.full_load_progress_percent}%", "#{(t.replication_task_stats&.elapsed_time_millis/1000).to_i}s",
      "#{t.replication_task_stats&.tables_loaded} loaded", "#{t.replication_task_stats&.tables_errored} errors",
    ]
  }
end

#testObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/stax/mixin/dms.rb', line 83

def test
  instance = dms_instance_arns.first # FIXME: handle multiple instances
  dms_endpoint_arns.each do |endpoint|
    debug("Testing connection for #{endpoint}")
    conn = Aws::Dms.test(replication_instance_arn: instance, endpoint_arn: endpoint)
    loop do
      sleep 3
      c = Aws::Dms.connections(
        filters: [
          { name: 'endpoint-arn',             values: [conn.endpoint_arn] },
          { name: 'replication-instance-arn', values: [conn.replication_instance_arn] },
        ]
      ).first
      puts [c.endpoint_identifier, c.replication_instance_identifier, color(c.status, COLORS), c.last_failure_message].join('  ')
      break unless c.status == 'testing'
    end
  end
end