rest-ftp-daemon 0.231.1 → 0.240.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -2
- data/bin/rest-ftp-daemon +3 -2
- data/lib/rest-ftp-daemon/api/root.rb +15 -2
- data/lib/rest-ftp-daemon/constants.rb +1 -1
- data/lib/rest-ftp-daemon/job.rb +13 -3
- data/lib/rest-ftp-daemon/job_queue.rb +8 -10
- data/lib/rest-ftp-daemon/notification.rb +1 -1
- data/lib/rest-ftp-daemon/paginate.rb +1 -1
- data/lib/rest-ftp-daemon/remote_sftp.rb +7 -1
- data/lib/rest-ftp-daemon/settings.rb +2 -2
- data/lib/rest-ftp-daemon/static/css/main.css +8 -5
- data/lib/rest-ftp-daemon/views/dashboard_jobs.haml +5 -3
- data/lib/rest-ftp-daemon/views/dashboard_table.haml +12 -3
- data/lib/rest-ftp-daemon/worker.rb +7 -3
- data/lib/rest-ftp-daemon/worker_conchita.rb +1 -1
- data/lib/rest-ftp-daemon/worker_job.rb +46 -17
- data/lib/rest-ftp-daemon/worker_pool.rb +3 -5
- data/rest-ftp-daemon.gemspec +1 -0
- data/rest-ftp-daemon.yml.sample +14 -8
- data/spec/spec_helper.rb +7 -1
- data/spec/support/config.yml +8 -8
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d93647c6c82dc619334ae8f906604f0b3472def0
|
4
|
+
data.tar.gz: 00175925d0ffe1d63c3f8b6f21a79985f02ebbb5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08ec5e3fe94b08fd1caa9cae780e32a5ddff96736ce8dcee10d0da70356b36adc3b60bee52c825eac97f3a1704c4aab450c7d778b710eb42477ac2c74ef5defc
|
7
|
+
data.tar.gz: 3479a4a57c9396f39bf8cb5a50b061a1887b5bd2e565621f856976dc7b55b4a51a0c4b078cde8e216c41e81aa91f40cae6b0ee10091f550a725281530012c43f
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rest-ftp-daemon (0.
|
4
|
+
rest-ftp-daemon (0.240.0)
|
5
5
|
double-bag-ftps
|
6
6
|
facter
|
7
7
|
get_process_mem
|
@@ -10,6 +10,7 @@ PATH
|
|
10
10
|
haml
|
11
11
|
json
|
12
12
|
net-sftp
|
13
|
+
net-ssh (~> 2.10.1.rc1)
|
13
14
|
newrelic_rpm
|
14
15
|
settingslogic
|
15
16
|
sys-cpu
|
@@ -84,7 +85,7 @@ GEM
|
|
84
85
|
multi_xml (0.5.5)
|
85
86
|
net-sftp (2.1.2)
|
86
87
|
net-ssh (>= 2.6.5)
|
87
|
-
net-ssh (2.
|
88
|
+
net-ssh (2.10.1.rc1)
|
88
89
|
newrelic_rpm (3.13.0.299)
|
89
90
|
parser (2.2.2.6)
|
90
91
|
ast (>= 1.1, < 3.0)
|
data/bin/rest-ftp-daemon
CHANGED
@@ -45,7 +45,6 @@ parser = OptionParser.new do |opts|
|
|
45
45
|
end
|
46
46
|
|
47
47
|
|
48
|
-
|
49
48
|
# Parse options and check compliance
|
50
49
|
begin
|
51
50
|
parser.order!(ARGV)
|
@@ -60,6 +59,7 @@ end
|
|
60
59
|
# Load config, and merge options from ARGV into settings
|
61
60
|
# FIXME: file configuration detection could reside in settings.rb
|
62
61
|
APP_CONF ||= DEFAULT_CONFIG_PATH
|
62
|
+
APP_ENV ||= "production"
|
63
63
|
abort "EXITING: cannot read configuration file: #{APP_CONF}" unless File.exist? APP_CONF
|
64
64
|
begin
|
65
65
|
# Import settings
|
@@ -92,12 +92,13 @@ end
|
|
92
92
|
|
93
93
|
|
94
94
|
# ARGV: build final
|
95
|
+
thin_logs = Settings.at(:logs, :thin)
|
95
96
|
argv = []
|
96
97
|
argv << ["-e", Settings.namespace]
|
97
98
|
argv << ["-p", Settings.port.to_s] if Settings.port
|
98
99
|
argv << ["--pid", Settings.pidfile]
|
99
100
|
argv << ["--tag", "'#{APP_NAME}/#{Settings.namespace}'"]
|
100
|
-
argv << ["--log",
|
101
|
+
argv << ["--log", thin_logs] unless !thin_logs
|
101
102
|
argv << ["--daemonize"] if [1, true].include? Settings.daemonize
|
102
103
|
|
103
104
|
|
@@ -29,7 +29,7 @@ module RestFtpDaemon
|
|
29
29
|
|
30
30
|
# Check that Queue and Pool are available
|
31
31
|
raise RestFtpDaemon::MissingQueue unless defined? $queue
|
32
|
-
raise RestFtpDaemon::
|
32
|
+
raise RestFtpDaemon::MissingPool unless defined? $pool
|
33
33
|
end
|
34
34
|
|
35
35
|
|
@@ -63,7 +63,7 @@ module RestFtpDaemon
|
|
63
63
|
|
64
64
|
status 200
|
65
65
|
return {
|
66
|
-
hostname: `hostname`.chomp,
|
66
|
+
hostname: `hostname`.to_s.chomp,
|
67
67
|
version: APP_VER,
|
68
68
|
started: APP_STARTED,
|
69
69
|
uptime: (Time.now - APP_STARTED).round(1),
|
@@ -88,6 +88,19 @@ module RestFtpDaemon
|
|
88
88
|
return Helpers.get_censored_config
|
89
89
|
end
|
90
90
|
|
91
|
+
# Server config
|
92
|
+
post "/config/reload" do
|
93
|
+
log_info "POST /config/reload"
|
94
|
+
|
95
|
+
if Settings.at(:debug, :allow_reload)==true
|
96
|
+
Settings.reload!
|
97
|
+
status 200
|
98
|
+
return Helpers.get_censored_config
|
99
|
+
else
|
100
|
+
status 403
|
101
|
+
return "Config reload not permitted"
|
102
|
+
end
|
103
|
+
end
|
91
104
|
|
92
105
|
end
|
93
106
|
end
|
data/lib/rest-ftp-daemon/job.rb
CHANGED
@@ -16,6 +16,7 @@ module RestFtpDaemon
|
|
16
16
|
attr_reader :id
|
17
17
|
attr_reader :error
|
18
18
|
attr_reader :status
|
19
|
+
attr_reader :runs
|
19
20
|
|
20
21
|
attr_reader :queued_at
|
21
22
|
attr_reader :updated_at
|
@@ -40,6 +41,7 @@ module RestFtpDaemon
|
|
40
41
|
@finished_at = nil
|
41
42
|
@error = nil
|
42
43
|
@status = nil
|
44
|
+
@runs = 0
|
43
45
|
@wid = nil
|
44
46
|
|
45
47
|
# Logger
|
@@ -146,6 +148,9 @@ module RestFtpDaemon
|
|
146
148
|
rescue Net::SFTP::StatusException => exception
|
147
149
|
return oops :ended, exception, :sftp_exception
|
148
150
|
|
151
|
+
rescue Net::SSH::AuthenticationFailed => exception
|
152
|
+
return oops :ended, exception, :sftp_auth_failed
|
153
|
+
|
149
154
|
rescue Errno::EMFILE => exception
|
150
155
|
return oops :ended, exception, :too_many_open_files
|
151
156
|
|
@@ -186,7 +191,11 @@ module RestFtpDaemon
|
|
186
191
|
end
|
187
192
|
|
188
193
|
def weight
|
189
|
-
@weight = [
|
194
|
+
@weight = [
|
195
|
+
- @runs.to_i,
|
196
|
+
+ @priority.to_i,
|
197
|
+
- @queued_at.to_i
|
198
|
+
]
|
190
199
|
end
|
191
200
|
|
192
201
|
def exectime
|
@@ -207,13 +216,13 @@ module RestFtpDaemon
|
|
207
216
|
oops :ended, exception, :timeout
|
208
217
|
end
|
209
218
|
|
210
|
-
protected
|
211
|
-
|
212
219
|
def age
|
213
220
|
return nil if @queued_at.nil?
|
214
221
|
(Time.now - @queued_at).round(2)
|
215
222
|
end
|
216
223
|
|
224
|
+
protected
|
225
|
+
|
217
226
|
def set attribute, value
|
218
227
|
@mutex.synchronize do
|
219
228
|
@params || {}
|
@@ -259,6 +268,7 @@ module RestFtpDaemon
|
|
259
268
|
def prepare
|
260
269
|
# Update job status
|
261
270
|
newstatus :prepare
|
271
|
+
@runs += 1
|
262
272
|
|
263
273
|
# Init
|
264
274
|
@source_method = :file
|
@@ -81,10 +81,6 @@ module RestFtpDaemon
|
|
81
81
|
statuses
|
82
82
|
end
|
83
83
|
|
84
|
-
def jobs # change for accessor
|
85
|
-
@jobs
|
86
|
-
end
|
87
|
-
|
88
84
|
def jobs_count
|
89
85
|
@jobs.length
|
90
86
|
end
|
@@ -106,17 +102,18 @@ module RestFtpDaemon
|
|
106
102
|
@jobs.reverse.find { |item| item.id == id }
|
107
103
|
end
|
108
104
|
|
105
|
+
|
109
106
|
def push job
|
110
107
|
# Check that item responds to "priorty" method
|
111
108
|
raise "JobQueue.push: job should respond to priority method" unless job.respond_to? :priority
|
112
109
|
raise "JobQueue.push: job should respond to id method" unless job.respond_to? :id
|
113
110
|
|
114
111
|
@mutex.synchronize do
|
115
|
-
#
|
116
|
-
@
|
112
|
+
# Store the job into the global jobs list, if not already inside
|
113
|
+
@jobs.push(job) unless @jobs.include?(job)
|
117
114
|
|
118
|
-
#
|
119
|
-
@
|
115
|
+
# Push job into the queue, if not already inside
|
116
|
+
@queue.push(job) unless @queue.include?(job)
|
120
117
|
|
121
118
|
# Inform the job that it's been queued
|
122
119
|
job.set_queued if job.respond_to? :set_queued
|
@@ -133,8 +130,9 @@ module RestFtpDaemon
|
|
133
130
|
end
|
134
131
|
end
|
135
132
|
end
|
136
|
-
alias <<
|
137
|
-
alias enq
|
133
|
+
alias << push
|
134
|
+
alias enq push
|
135
|
+
alias requeue push
|
138
136
|
|
139
137
|
def pop non_block=false
|
140
138
|
@mutex.synchronize do
|
@@ -24,7 +24,13 @@ module RestFtpDaemon
|
|
24
24
|
verbosity = @debug ? Logger::INFO : false
|
25
25
|
|
26
26
|
# Connect remote server
|
27
|
-
@sftp = Net::SFTP.start(@url.host, @url.user
|
27
|
+
@sftp = Net::SFTP.start(@url.host.to_s, @url.user.to_s,
|
28
|
+
password: @url.password.to_s,
|
29
|
+
verbose: verbosity,
|
30
|
+
port: @url.port,
|
31
|
+
non_interactive: true,
|
32
|
+
#timeout: 3
|
33
|
+
)
|
28
34
|
end
|
29
35
|
|
30
36
|
def present? target
|
@@ -3,7 +3,7 @@ require "settingslogic"
|
|
3
3
|
# Configuration class
|
4
4
|
class Settings < Settingslogic
|
5
5
|
# Read configuration
|
6
|
-
namespace
|
6
|
+
namespace APP_ENV
|
7
7
|
source File.exist?(APP_CONF) ? APP_CONF : Hash.new
|
8
8
|
suppress_errors true
|
9
9
|
|
@@ -23,7 +23,7 @@ class Settings < Settingslogic
|
|
23
23
|
|
24
24
|
def init_defaults
|
25
25
|
# Init host if missing
|
26
|
-
Settings["host"] ||= `hostname`.chomp.split(".").first
|
26
|
+
Settings["host"] ||= `hostname`.to_s.chomp.split(".").first
|
27
27
|
|
28
28
|
# Init PID file name if missing
|
29
29
|
Settings["pidfile"] ||= "/tmp/#{APP_NICK}-#{Settings['host']}-#{Settings['port']}.pid"
|
@@ -21,8 +21,8 @@ body, table tr td, .fixed {
|
|
21
21
|
|
22
22
|
.label {
|
23
23
|
font-size: 1em;
|
24
|
-
padding:
|
25
|
-
margin-bottom: 1px
|
24
|
+
padding: 2px 3px 2px 3px;
|
25
|
+
margin-bottom: 1px;
|
26
26
|
font-weight: normal;
|
27
27
|
display: inline-block;
|
28
28
|
font-family: sans-serif;
|
@@ -68,9 +68,6 @@ a.class {
|
|
68
68
|
}
|
69
69
|
|
70
70
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
71
|
/* Header styles
|
75
72
|
-------------------------------------------------- */
|
76
73
|
.header-indicators {
|
@@ -80,6 +77,12 @@ a.class {
|
|
80
77
|
}
|
81
78
|
|
82
79
|
|
80
|
+
.paginate {
|
81
|
+
padding-left: 7px !important;
|
82
|
+
padding-right: 7px !important;
|
83
|
+
}
|
84
|
+
|
85
|
+
|
83
86
|
/* Footer styles
|
84
87
|
-------------------------------------------------- */
|
85
88
|
html {
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
.row
|
6
6
|
|
7
|
-
.col-md-
|
7
|
+
.col-md-4
|
8
8
|
.btn-group.btn-group-sm
|
9
9
|
- klass = @only.empty? ? "btn-info" : ""
|
10
10
|
%a.btn.btn-default{href: "?only=", class: klass}
|
@@ -15,7 +15,7 @@
|
|
15
15
|
%a.btn.btn-default{href: "?only=#{status}", class: klass}
|
16
16
|
#{status} (#{count})
|
17
17
|
|
18
|
-
.col-md-
|
18
|
+
.col-md-8
|
19
19
|
.btn-group.btn-group-sm
|
20
20
|
= @paginate.browser
|
21
21
|
|
@@ -38,7 +38,9 @@
|
|
38
38
|
%th{"min-width" => 120} error
|
39
39
|
%th.text-right size
|
40
40
|
%th.text-right bitrate
|
41
|
-
%th
|
41
|
+
%th W
|
42
|
+
%th P
|
43
|
+
%th R
|
42
44
|
|
43
45
|
- unless @queue.empty?
|
44
46
|
%tbody.jobs
|
@@ -63,13 +63,22 @@
|
|
63
63
|
= Helpers.format_bytes(bitrate, "bps")
|
64
64
|
|
65
65
|
%td
|
66
|
-
- unless job.priority.nil?
|
67
|
-
.label.label-default.flag.worker-label= job.priority
|
68
|
-
|
69
66
|
- unless job.wid.nil?
|
70
67
|
.label.label-warning.flag.worker-label= job.wid
|
71
68
|
|
69
|
+
%td
|
70
|
+
- unless job.priority.nil?
|
71
|
+
.label.label-default.flag.worker-label= job.priority
|
72
|
+
|
73
|
+
%td
|
74
|
+
- unless job.runs.nil? || job.runs.zero?
|
75
|
+
.label.label-info.flag.worker-label= job.runs
|
72
76
|
|
77
|
+
-#%td
|
78
|
+
- unless job.priority.nil?
|
79
|
+
.label.label-default.flag.worker-label= job.priority
|
73
80
|
|
81
|
+
- unless job.wid.nil?
|
82
|
+
.label.label-warning.flag.worker-label= job.wid
|
74
83
|
|
75
84
|
|
@@ -26,7 +26,7 @@ module RestFtpDaemon
|
|
26
26
|
def log_context
|
27
27
|
{
|
28
28
|
wid: @wid,
|
29
|
-
|
29
|
+
jid: Thread.current.thread_variable_get(:jid),
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
@@ -41,7 +41,7 @@ module RestFtpDaemon
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def worker_status status,
|
44
|
+
def worker_status status, job = nil
|
45
45
|
# Update thread variables
|
46
46
|
Thread.current.thread_variable_set :status, status
|
47
47
|
Thread.current.thread_variable_set :updted_at, Time.now
|
@@ -50,7 +50,11 @@ module RestFtpDaemon
|
|
50
50
|
return unless @log_worker_status_changes
|
51
51
|
|
52
52
|
# Log this status change
|
53
|
-
|
53
|
+
if job.is_a?(Job)
|
54
|
+
log_info "#{status} - job[#{job.id}] status[#{job.status}] error[#{job.error}]"
|
55
|
+
else
|
56
|
+
log_info "#{status}"
|
57
|
+
end
|
54
58
|
end
|
55
59
|
|
56
60
|
def worker_jid jid
|
@@ -16,13 +16,50 @@ module RestFtpDaemon
|
|
16
16
|
protected
|
17
17
|
|
18
18
|
def work
|
19
|
-
# Wait for a job to
|
19
|
+
# Wait for a job to be available in the queue
|
20
20
|
worker_status WORKER_STATUS_WAITING
|
21
|
-
#log_info "waiting"
|
22
21
|
job = $queue.pop
|
23
22
|
|
24
|
-
#
|
25
|
-
|
23
|
+
# Work on this job
|
24
|
+
work_on_job(job)
|
25
|
+
|
26
|
+
# Clean job status and sleep for 1s
|
27
|
+
job.wid = nil
|
28
|
+
sleep 1
|
29
|
+
|
30
|
+
# If job status requires a retry, just restack it
|
31
|
+
on_errors = Settings.at(:retry, :on_errors)
|
32
|
+
max_age = Settings.at(:retry, :max_age)
|
33
|
+
max_runs = Settings.at(:retry, :max_runs)
|
34
|
+
|
35
|
+
if !job.error
|
36
|
+
#log_info "job succeeded"
|
37
|
+
|
38
|
+
elsif !(on_errors.is_a?(Enumerable) && on_errors.include?(job.error.to_s))
|
39
|
+
log_error "not retrying: error not eligible"
|
40
|
+
|
41
|
+
elsif max_age && (job.age >= max_age)
|
42
|
+
log_error "not retrying: too old (max_age: #{max_age})"
|
43
|
+
|
44
|
+
elsif max_runs && (job.runs >= max_runs)
|
45
|
+
log_error "not retrying: too many runs (max_runs: #{max_runs})"
|
46
|
+
|
47
|
+
else
|
48
|
+
log_info "retrying job: requeued"
|
49
|
+
$queue.requeue job
|
50
|
+
end
|
51
|
+
|
52
|
+
# Clean worker status
|
53
|
+
worker_jid nil
|
54
|
+
|
55
|
+
rescue StandardError => ex
|
56
|
+
log_error "WORKER UNHANDLED EXCEPTION: #{ex.message}", ex.backtrace
|
57
|
+
worker_status WORKER_STATUS_CRASHED
|
58
|
+
end
|
59
|
+
|
60
|
+
def work_on_job job
|
61
|
+
# Prepare job and worker for processing
|
62
|
+
worker_status WORKER_STATUS_RUNNING, job
|
26
63
|
worker_jid job.id
|
27
64
|
job.wid = Thread.current.thread_variable_get :wid
|
28
65
|
|
@@ -32,9 +69,7 @@ module RestFtpDaemon
|
|
32
69
|
end
|
33
70
|
|
34
71
|
# Processing done
|
35
|
-
worker_status WORKER_STATUS_FINISHED,
|
36
|
-
worker_jid nil
|
37
|
-
job.wid = nil
|
72
|
+
worker_status WORKER_STATUS_FINISHED, job
|
38
73
|
|
39
74
|
# Increment total processed jobs count
|
40
75
|
$queue.counter_inc :jobs_processed
|
@@ -42,24 +77,18 @@ module RestFtpDaemon
|
|
42
77
|
rescue RestFtpDaemon::JobTimeout => ex
|
43
78
|
log_error "JOB TIMED OUT", ex.backtrace
|
44
79
|
worker_status WORKER_STATUS_TIMEOUT
|
45
|
-
worker_jid nil
|
46
|
-
job.wid = nil
|
47
80
|
|
81
|
+
# Inform the job
|
48
82
|
job.oops_you_stop_now ex unless job.nil?
|
49
|
-
sleep 1
|
50
83
|
|
51
84
|
rescue StandardError => ex
|
52
|
-
log_error "JOB
|
85
|
+
log_error "JOB UNHANDLED EXCEPTION: #{ex.message}", ex.backtrace
|
53
86
|
worker_status WORKER_STATUS_CRASHED
|
54
|
-
job.oops_after_crash ex unless job.nil?
|
55
|
-
sleep 1
|
56
87
|
|
57
|
-
|
58
|
-
|
59
|
-
job.wid = nil
|
88
|
+
# Inform the job
|
89
|
+
job.oops_after_crash ex unless job.nil?
|
60
90
|
end
|
61
91
|
|
62
|
-
|
63
92
|
if Settings.newrelic_enabled?
|
64
93
|
add_transaction_tracer :work, category: :task
|
65
94
|
end
|
@@ -71,7 +71,7 @@ module RestFtpDaemon
|
|
71
71
|
@conchita = create_conchita_thread
|
72
72
|
|
73
73
|
rescue StandardError => ex
|
74
|
-
log_error "
|
74
|
+
log_error "UNHANDLED EXCEPTION: #{ex.message}", ex.backtrace
|
75
75
|
end
|
76
76
|
|
77
77
|
def create_worker_thread wid
|
@@ -80,7 +80,7 @@ module RestFtpDaemon
|
|
80
80
|
worker = JobWorker.new wid
|
81
81
|
log_info "JobWorker [#{wid}]: #{worker}"
|
82
82
|
rescue StandardError => ex
|
83
|
-
log_error "EXCEPTION: #{ex.message}"
|
83
|
+
log_error "JobWorker EXCEPTION: #{ex.message}"
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
@@ -91,13 +91,11 @@ module RestFtpDaemon
|
|
91
91
|
worker = ConchitaWorker.new :conchita
|
92
92
|
log_info "ConchitaWorker: #{worker}"
|
93
93
|
rescue StandardError => ex
|
94
|
-
log_error "EXCEPTION: #{ex.message}"
|
94
|
+
log_error "ConchitaWorker EXCEPTION: #{ex.message}"
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
101
99
|
if Settings.newrelic_enabled?
|
102
100
|
add_transaction_tracer :create_conchita_thread, category: :task
|
103
101
|
add_transaction_tracer :create_worker_thread, category: :task
|
data/rest-ftp-daemon.gemspec
CHANGED
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
|
|
39
39
|
spec.add_runtime_dependency "settingslogic"
|
40
40
|
spec.add_runtime_dependency "haml"
|
41
41
|
spec.add_runtime_dependency "json"
|
42
|
+
spec.add_runtime_dependency "net-ssh", "~> 2.10.1.rc1"
|
42
43
|
spec.add_runtime_dependency "net-sftp"
|
43
44
|
spec.add_runtime_dependency "double-bag-ftps"
|
44
45
|
spec.add_runtime_dependency "facter"
|
data/rest-ftp-daemon.yml.sample
CHANGED
@@ -7,11 +7,16 @@ defaults: &defaults
|
|
7
7
|
#host: "myhost"
|
8
8
|
|
9
9
|
transfer:
|
10
|
-
notify_after_sec: 5 # wait at least X seconds between HTTP notifications
|
11
|
-
mkdir: true # build directory tree if missing
|
12
|
-
tempfile: true # transfer to temporary file, rename after sucessful transfer
|
13
|
-
overwrite: false # overwrite any target file with the same name
|
14
|
-
timeout: 1800 # jobs running for longer than X seconds will be killed
|
10
|
+
# notify_after_sec: 5 # wait at least X seconds between HTTP notifications
|
11
|
+
# mkdir: true # build directory tree if missing
|
12
|
+
# tempfile: true # transfer to temporary file, rename after sucessful transfer
|
13
|
+
# overwrite: false # overwrite any target file with the same name
|
14
|
+
# timeout: 1800 # jobs running for longer than X seconds will be killed
|
15
|
+
|
16
|
+
retry:
|
17
|
+
# on_errors: ["net_temp_error", "conn_reset_by_peer", "conn_timed_out", "conn_refused"]
|
18
|
+
# max_runs: 5
|
19
|
+
# max_age: 1800
|
15
20
|
|
16
21
|
conchita:
|
17
22
|
# timer: 60
|
@@ -26,9 +31,10 @@ defaults: &defaults
|
|
26
31
|
app_name: "rftpd-bigbusiness-dev" # nickname used for naming app
|
27
32
|
|
28
33
|
debug:
|
29
|
-
ftp: false
|
30
|
-
sftp: false
|
31
|
-
conchita: false
|
34
|
+
# ftp: false
|
35
|
+
# sftp: false
|
36
|
+
# conchita: false
|
37
|
+
# allow_reload: false
|
32
38
|
|
33
39
|
logs:
|
34
40
|
thin: "/var/log/rftpd-environment-thin.log"
|
data/spec/spec_helper.rb
CHANGED
@@ -57,10 +57,16 @@ RSpec.configure do |config|
|
|
57
57
|
|
58
58
|
config.before :suite do
|
59
59
|
call_server(:start)
|
60
|
-
|
60
|
+
puts
|
61
|
+
puts ">> waiting for server to bootup"
|
62
|
+
puts
|
63
|
+
sleep 5
|
61
64
|
end
|
62
65
|
|
63
66
|
config.after :suite do
|
67
|
+
puts
|
68
|
+
puts ">> shutting sown server"
|
69
|
+
puts
|
64
70
|
call_server(:stop)
|
65
71
|
end
|
66
72
|
end
|
data/spec/support/config.yml
CHANGED
@@ -3,7 +3,7 @@ test:
|
|
3
3
|
port: 5678
|
4
4
|
workers: 2
|
5
5
|
adminpwd: "admin"
|
6
|
-
host:
|
6
|
+
host: local
|
7
7
|
|
8
8
|
transfer:
|
9
9
|
notify_after_sec: 5
|
@@ -16,10 +16,10 @@ test:
|
|
16
16
|
ftp: false
|
17
17
|
|
18
18
|
logs:
|
19
|
-
thin: "
|
20
|
-
queue: "
|
21
|
-
api: "
|
22
|
-
workers: "
|
23
|
-
jobs: "
|
24
|
-
notify: "
|
25
|
-
newrelic: "/
|
19
|
+
thin: "/tmp/rftpd-tests-thin.log"
|
20
|
+
queue: "/tmp/rftpd-tests-core.log"
|
21
|
+
api: "/tmp/rftpd-tests-core.log"
|
22
|
+
workers: "/tmp/rftpd-tests-work.log"
|
23
|
+
jobs: "/tmp/rftpd-tests-work.log"
|
24
|
+
notify: "/tmp/rftpd-tests-work.log"
|
25
|
+
newrelic: "/tmp/rftpd-tests-newrelic.log"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-ftp-daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.240.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno MEDICI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: net-ssh
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 2.10.1.rc1
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 2.10.1.rc1
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: net-sftp
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|