Class: Multiwoven::Integrations::Destination::Sftp::Client

Inherits:
DestinationConnector
  • Object
show all
Includes:
Core::Fullrefresher, Core::RateLimiter
Defined in:
lib/multiwoven/integrations/destination/sftp/client.rb

Instance Method Summary collapse

Instance Method Details

#check_connection(connection_config) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/multiwoven/integrations/destination/sftp/client.rb', line 10

def check_connection(connection_config)
  connection_config = connection_config.with_indifferent_access
  with_sftp_client(connection_config) do |sftp|
    stream = SecureRandom.uuid
    test_path = "/path/to/test/#{stream}"
    test_file_operations(sftp, test_path)
    return success_status
  end
rescue StandardError => e
  handle_exception("SFTP:CHECK_CONNECTION:EXCEPTION", "error", e)
  failure_status(e)
end

#clear_all_records(sync_config) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/multiwoven/integrations/destination/sftp/client.rb', line 60

def clear_all_records(sync_config)
  connection_specification = sync_config.destination.connection_specification.with_indifferent_access
  with_sftp_client(connection_specification) do |sftp|
    files = sftp.dir.glob(connection_specification[:destination_path], "*")

    files.each do |file|
      sftp.remove!(File.join(connection_specification[:destination_path], file.name))
    end
    if sftp.dir.entries(connection_specification[:destination_path]).size == 2
      control_message("Successfully cleared data.", "succeeded")
    else
      control_message("Failed to clear data.", "failed")
    end
  end
rescue StandardError => e
  control_message(e.message, "failed")
end

#discover(_connection_config = nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/multiwoven/integrations/destination/sftp/client.rb', line 23

def discover(_connection_config = nil)
  catalog_json = read_json(CATALOG_SPEC_PATH)

  catalog = build_catalog(catalog_json)

  catalog.to_multiwoven_message
rescue StandardError => e
  handle_exception(
    "SFTP:DISCOVER:EXCEPTION",
    "error",
    e
  )
end

#write(sync_config, records, _action = "insert") ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/multiwoven/integrations/destination/sftp/client.rb', line 37

def write(sync_config, records, _action = "insert")
  connection_config = sync_config.destination.connection_specification.with_indifferent_access
  file_path = generate_file_path(sync_config)
  csv_content = generate_csv_content(records)
  write_success = 0
  write_failure = 0
  # 10000 records in single
  with_sftp_client(connection_config) do |sftp|
    sftp.file.open(file_path, "w") { |file| file.puts(csv_content) }
    write_success += records.size
  rescue StandardError => e
    handle_exception("SFTP:RECORD:WRITE:EXCEPTION", "error", e)
    write_failure += records.size
  end
  tracking_message(write_success, write_failure)
rescue StandardError => e
  handle_exception(
    "SFTP:WRITE:EXCEPTION",
    "error",
    e
  )
end