55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/scccp/scp.rb', line 55
def proceed
attrs_ok?
opt = {}
opt[:port] = remote_port
if remote_user_password
opt[:password] = remote_user_password
end
if timeout
opt[:timeout] = timeout
end
if logger2ssh
opt[:logger] = logger
end
files = Dir::entries(queue_folder).map{|o|"#{queue_folder}/#{o}"}
files = files.select do |o|
File::ftype(o) == "file" &&
!(o =~ /\.(tmp|ok)$/)
end
unless @__not_first_time_to_proceed
logger.info("queue_folder is #{queue_folder}")
logger.info("target is #{remote_user_name}@#{remote_host}:#{remote_port}:#{remote_path}")
@__not_first_time_to_proceed = true
end
uploaded_count = 0
return 0 if files.size == 0
begin
scp = Net::SCP.start(remote_host, remote_user_name, opt)
files.each do |file|
break if @killing
ok_file = file + '.ok'
begin
logger.info "uploading_start:#{file}"
scp.upload! file, remote_path
logger.info "uploading_finish:#{file}"
FileUtils.touch ok_file
logger.info "uploading_start:#{ok_file}"
scp.upload! ok_file, remote_path
logger.info "uploading_finish:#{ok_file}"
FileUtils.mv(file,ok_folder)
FileUtils.mv(ok_file,ok_folder)
uploaded_count += 1
true
rescue => e
logger.error e
File.delete(ok_file) if File.exists?(ok_file)
FileUtils.mv(file,ng_folder)
begin
scp.session.close if scp
rescue
end
scp = Net::SCP.start(remote_host, remote_user_name, opt)
false
end
end
rescue SocketError => socket_error
logger.error socket_error
ensure
if scp
scp.session.close
end
end
uploaded_count
end
|