rest-ftp-daemon 0.245 → 0.245.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c9be0d61a767998e3daba2c1006ba9c8b184e303
4
- data.tar.gz: 46b7e9173008c7f5e4cb015ae84b1d20ac788cd7
3
+ metadata.gz: 543ad77656660d81d07cf854694e58db9c31fb3b
4
+ data.tar.gz: 8562831e868f6215c41d58096f593d49265887d9
5
5
  SHA512:
6
- metadata.gz: fec8c694546fc1d7b2991f2d0d8e1fa2bf35669a7e6cd56dffd459b787db66ab9a608205635dce427720022b7c3b94aaade650c110674042d2cb302d0def058f
7
- data.tar.gz: 45621e4a9a99a535c5448a5172986d391f76f396feab220efb89979ee1f0be63499b5edd1ca8012b8cae275ae7b9dff7c5997ee67c638b8d7db541219a29b528
6
+ metadata.gz: 06381f06990e68bfe3a1c4091291c91bb0fed0f3e98e12b60123b11e3b529c2406c301c4a3f450d5121447a7bde0d6a2a7763338323a453eff23d0396f50fd0c
7
+ data.tar.gz: 962fba554f02dcb527fbfe9d27cf369bcd196feb374a27a4df872063a3f93bc5517bf81d6caedc2dd0cf7c20d00ca702392e480fb6ba8aa45be9075d3adaad02
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rest-ftp-daemon (0.245)
4
+ rest-ftp-daemon (0.245.1)
5
5
  double-bag-ftps
6
6
  facter
7
7
  get_process_mem
data/README.md CHANGED
@@ -21,7 +21,7 @@ Features
21
21
  * environment-aware configuration in a YAML file
22
22
  * daemon process is tagged with its name and environment in process lists
23
23
  * global dashboard directly served within the daemon HTTP interface
24
-
24
+ * support pooling of worker to separate capacity among jobs
25
25
 
26
26
  * File management ans transferts
27
27
  * allow authentication in FTP target in a standard URI-format
@@ -97,7 +97,6 @@ Launcher options :
97
97
  | -p | --port | (automatic) | Port to listen for API requests |
98
98
  | -e | | production | Environment name |
99
99
  | | --dev | | Equivalent to -e development |
100
- | -w | --workers | 1 | Number of workers spawned at launch |
101
100
  | -d | --daemonize | false | Wether to send the daemon to background |
102
101
  | -f | --foreground | false | Wether to keep the daemon running in the shell |
103
102
  | -P | --pid | (automatic) | Path of the file containing the PID |
@@ -140,6 +139,15 @@ curl -H "Content-Type: application/json" -X POST -D /dev/stdout -d \
140
139
  ```
141
140
 
142
141
 
142
+ #### Start a job with a specific pool name
143
+
144
+ ```
145
+ curl -H "Content-Type: application/json" -X POST -D /dev/stdout -d \
146
+ '{"pool": "maxxxxx",source":"~/file.iso",target":"ftp://anonymous@localhost/incoming/dest2.iso"}' "http://localhost:3000/jobs"
147
+ ```
148
+ This job will be handled by the "maxxxxx" workers only, or by the default worker is this pool is not declared.
149
+
150
+
143
151
  #### Get info about a job with ID="q89j.1"
144
152
 
145
153
  Both parameters `q89j.1` and `1` will be accepted as ID in the API. Requests below are equivalent:
data/bin/rest-ftp-daemon CHANGED
@@ -28,7 +28,6 @@ parser = OptionParser.new do |opts|
28
28
  opts.on("-e", "--environment ENV") { |env| APP_ENV = env }
29
29
  opts.on("", "--dev") { APP_ENV = "development" }
30
30
  opts.on("-p", "--port PORT", "use PORT") { |port| options["port"] = port.to_i }
31
- opts.on("-w", "--workers COUNT", "Use COUNT worker threads") { |count| options["workers"] = count.to_i }
32
31
  opts.on("-d", "--daemonize", "Run daemonized in the background") { options["daemonize"] = true }
33
32
  opts.on("-f", "--foreground", "Run in the foreground") { options["daemonize"] = false }
34
33
  opts.on("-P", "--pid FILE", "File to store PID") { |file| options["pidfile"] = file }
@@ -1,7 +1,7 @@
1
1
  # Terrific constants
2
2
  APP_NAME = "rest-ftp-daemon"
3
3
  APP_NICK = "rftpd"
4
- APP_VER = "0.245"
4
+ APP_VER = "0.245.1"
5
5
 
6
6
  # Provide default config file information
7
7
  APP_LIB = File.expand_path File.dirname(__FILE__)
@@ -22,7 +22,7 @@ EOD
22
22
  # Configuration defaults
23
23
  # DEFAULT_WORKERS = 2
24
24
  DEFAULT_POOL = "default"
25
- DEFAULT_WORKER_TIMEOUT = 3600 # 1h
25
+ DEFAULT_WORKER_TIMEOUT = 1800 # 1h
26
26
  DEFAULT_SFTP_TIMEOUT = 600 # 10mn
27
27
  DEFAULT_FTP_CHUNK = 1024 # 1 MB
28
28
  DEFAULT_PAGE_SIZE = 50 # 50 lines
@@ -37,26 +37,26 @@ JOB_UPDATE_INTERVAL = 1
37
37
 
38
38
 
39
39
  # Jobs and workers statuses
40
- JOB_STATUS_PREPARING = :preparing
41
- JOB_STATUS_RUNNING = :running
42
- JOB_STATUS_CHECKING_SRC = :checking_source
43
- JOB_STATUS_CONNECTING = :remote_connect
44
- JOB_STATUS_CHDIR = :remote_chdir
45
- JOB_STATUS_UPLOADING = :uploading
46
- JOB_STATUS_RENAMING = :renaming
47
- JOB_STATUS_PREPARED = :prepared
48
- JOB_STATUS_DISCONNECTING= :remote_disconnect
49
- JOB_STATUS_FINISHED = :finished
50
- JOB_STATUS_FAILED = :failed
51
- JOB_STATUS_QUEUED = :queued
52
-
53
- WORKER_STATUS_STARTING = :starting
54
- WORKER_STATUS_WAITING = :waiting
55
- WORKER_STATUS_RUNNING = :running
56
- WORKER_STATUS_FINISHED = :finished
57
- WORKER_STATUS_TIMEOUT = :timeout
58
- WORKER_STATUS_CRASHED = :crashed
59
- WORKER_STATUS_CLEANING = :cleaning
40
+ JOB_STATUS_PREPARING = "preparing"
41
+ JOB_STATUS_RUNNING = "running"
42
+ JOB_STATUS_CHECKING_SRC = "checking_source"
43
+ JOB_STATUS_CONNECTING = "remote_connect"
44
+ JOB_STATUS_CHDIR = "remote_chdir"
45
+ JOB_STATUS_UPLOADING = "uploading"
46
+ JOB_STATUS_RENAMING = "renaming"
47
+ JOB_STATUS_PREPARED = "prepared"
48
+ JOB_STATUS_DISCONNECTING= "remote_disconnect"
49
+ JOB_STATUS_FINISHED = "finished"
50
+ JOB_STATUS_FAILED = "failed"
51
+ JOB_STATUS_QUEUED = "queued"
52
+
53
+ WORKER_STATUS_STARTING = "starting"
54
+ WORKER_STATUS_WAITING = "waiting"
55
+ WORKER_STATUS_RUNNING = "running"
56
+ WORKER_STATUS_FINISHED = "finished"
57
+ WORKER_STATUS_TIMEOUT = "timeout"
58
+ WORKER_STATUS_CRASHED = "crashed"
59
+ WORKER_STATUS_CLEANING = "cleaning"
60
60
 
61
61
 
62
62
  # Logging and startup
@@ -84,18 +84,17 @@ NOTIFY_IDENTIFIER_LEN = 4
84
84
 
85
85
  # Dashboard row styles
86
86
  DASHBOARD_JOB_STYLES = {
87
- JOB_STATUS_QUEUED => :active,
88
- JOB_STATUS_FAILED => :warning,
89
- JOB_STATUS_FINISHED => :success,
90
- JOB_STATUS_UPLOADING => :info,
91
- JOB_STATUS_RENAMING => :info,
87
+ JOB_STATUS_QUEUED => :active,
88
+ JOB_STATUS_FAILED => :warning,
89
+ JOB_STATUS_FINISHED => :success,
90
+ JOB_STATUS_UPLOADING => :info,
91
+ JOB_STATUS_RENAMING => :info,
92
92
  }
93
93
  DASHBOARD_WORKER_STYLES = {
94
- waiting: :success,
95
- running: :info,
96
- crashed: :danger,
97
- done: :success,
98
- dead: :danger,
94
+ WORKER_STATUS_WAITING => :success,
95
+ WORKER_STATUS_RUNNING => :info,
96
+ WORKER_STATUS_CRASHED => :danger,
97
+ WORKER_STATUS_FINISHED => :success,
99
98
  }
100
99
 
101
100
 
@@ -104,22 +104,22 @@ module RestFtpDaemon
104
104
  prepare
105
105
 
106
106
  rescue RestFtpDaemon::JobMissingAttribute => exception
107
- return oops :started, exception, :missing_attribute
107
+ return oops :started, exception, "missing_attribute"
108
108
 
109
109
  rescue RestFtpDaemon::JobUnresolvedTokens => exception
110
- return oops :started, exception, :unresolved_tokens
110
+ return oops :started, exception, "unresolved_tokens"
111
111
 
112
112
  rescue RestFtpDaemon::JobTargetUnparseable => exception
113
- return oops :started, exception, :target_unparseable
113
+ return oops :started, exception, "target_unparseable"
114
114
 
115
115
  rescue RestFtpDaemon::JobTargetUnsupported => exception
116
- return oops :started, exception, :target_unsupported
116
+ return oops :started, exception, "target_unsupported"
117
117
 
118
118
  rescue RestFtpDaemon::JobAssertionFailed => exception
119
- return oops :started, exception, :assertion_failed
119
+ return oops :started, exception, "assertion_failed"
120
120
 
121
121
  rescue URI::InvalidURIError => exception
122
- return oops :started, exception, :target_invalid
122
+ return oops :started, exception, "target_invalid"
123
123
 
124
124
  else
125
125
  # Prepare done !
@@ -130,77 +130,77 @@ module RestFtpDaemon
130
130
 
131
131
  # Process job
132
132
  begin
133
- #raise Net::FTPTempError, '451 Téléchargement avorté. Input/output error'.force_encoding("ASCII-8BIT")
133
+ #return oops :ended, Exception.new, "ftp_perm_error"
134
134
  run
135
135
 
136
136
  rescue SocketError => exception
137
- return oops :ended, exception, :conn_socket_error
137
+ return oops :ended, exception, "conn_socket_error"
138
138
 
139
139
  rescue EOFError => exception
140
- return oops :ended, exception, :conn_eof
140
+ return oops :ended, exception, "conn_eof"
141
141
 
142
142
  rescue Errno::EHOSTDOWN => exception
143
- return oops :ended, exception, :conn_host_is_down
143
+ return oops :ended, exception, "conn_host_is_down"
144
144
 
145
145
  rescue Errno::ENETUNREACH => exception
146
- return oops :ended, exception, :conn_unreachable
146
+ return oops :ended, exception, "conn_unreachable"
147
147
 
148
148
  rescue Errno::ECONNRESET => exception
149
- return oops :ended, exception, :conn_reset_by_peer
149
+ return oops :ended, exception, "conn_reset_by_peer"
150
150
 
151
151
  rescue Errno::ENOTCONN => exception
152
- return oops :ended, exception, :conn_failed
152
+ return oops :ended, exception, "conn_failed"
153
153
 
154
154
  rescue Errno::ECONNREFUSED => exception
155
- return oops :ended, exception, :conn_refused
155
+ return oops :ended, exception, "conn_refused"
156
156
 
157
157
  rescue Timeout::Error, Errno::ETIMEDOUT, Net::ReadTimeout => exception
158
- return oops :ended, exception, :conn_timed_out
158
+ return oops :ended, exception, "conn_timed_out"
159
159
 
160
160
  rescue OpenSSL::SSL::SSLError => exception
161
- return oops :ended, exception, :conn_openssl_error
161
+ return oops :ended, exception, "conn_openssl_error"
162
162
 
163
163
  rescue Net::FTPPermError => exception
164
- return oops :ended, exception, :ftp_perm_error
164
+ return oops :ended, exception, "ftp_perm_error"
165
165
 
166
166
  rescue Net::FTPTempError => exception
167
- return oops :ended, exception, :net_temp_error
167
+ return oops :ended, exception, "net_temp_error"
168
168
 
169
169
  rescue Net::SFTP::StatusException => exception
170
- return oops :ended, exception, :sftp_exception
170
+ return oops :ended, exception, "sftp_exception"
171
171
 
172
172
  rescue Net::SSH::HostKeyMismatch => exception
173
- return oops :ended, exception, :sftp_key_mismatch
173
+ return oops :ended, exception, "sftp_key_mismatch"
174
174
 
175
175
  rescue Net::SSH::AuthenticationFailed => exception
176
- return oops :ended, exception, :sftp_auth_failed
176
+ return oops :ended, exception, "sftp_auth_failed"
177
177
 
178
178
  rescue Errno::EMFILE => exception
179
- return oops :ended, exception, :too_many_open_files
179
+ return oops :ended, exception, "too_many_open_files"
180
180
 
181
181
  rescue Errno::EINVAL => exception
182
- return oops :ended, exception, :invalid_argument, true
182
+ return oops :ended, exception, "invalid_argument", true
183
183
 
184
184
  rescue Encoding::UndefinedConversionError => exception
185
- return oops :ended, exception, :encoding_error, true
185
+ return oops :ended, exception, "encoding_error", true
186
186
 
187
187
  rescue RestFtpDaemon::JobSourceNotFound => exception
188
- return oops :ended, exception, :source_not_found
188
+ return oops :ended, exception, "source_not_found"
189
189
 
190
190
  rescue RestFtpDaemon::JobSourceNotReadable => exception
191
- return oops :ended, exception, :source_not_readable
191
+ return oops :ended, exception, "source_not_readable"
192
192
 
193
193
  rescue RestFtpDaemon::JobTargetFileExists => exception
194
- return oops :ended, exception, :target_file_exists
194
+ return oops :ended, exception, "target_file_exists"
195
195
 
196
196
  rescue RestFtpDaemon::JobTargetDirectoryError => exception
197
- return oops :ended, exception, :target_directory_missing
197
+ return oops :ended, exception, "target_directory_missing"
198
198
 
199
199
  rescue RestFtpDaemon::JobTargetPermissionError => exception
200
- return oops :ended, exception, :target_permission_error
200
+ return oops :ended, exception, "target_permission_error"
201
201
 
202
202
  rescue RestFtpDaemon::JobAssertionFailed => exception
203
- return oops :ended, exception, :assertion_failed
203
+ return oops :ended, exception, "assertion_failed"
204
204
 
205
205
  else
206
206
  # All done !
@@ -231,11 +231,11 @@ module RestFtpDaemon
231
231
  end
232
232
 
233
233
  def oops_after_crash exception
234
- oops :ended, exception, :crashed
234
+ oops :ended, exception, "crashed"
235
235
  end
236
236
 
237
237
  def oops_you_stop_now exception
238
- oops :ended, exception, :timeout
238
+ oops :ended, exception, "timeout"
239
239
  end
240
240
 
241
241
  def age
@@ -35,6 +35,8 @@ module RestFtpDaemon
35
35
  max_age = Settings.at(:retry, :max_age)
36
36
  max_runs = Settings.at(:retry, :max_runs)
37
37
  delay = Settings.at(:retry, :delay)
38
+ # log_error "on_errors: #{on_errors.inspect} (#{on_errors.first.class})"
39
+ # log_error "job.error: #{job.error} (#{job.error.class})"
38
40
 
39
41
  if !job.error
40
42
  #log_info "job succeeded"
@@ -1,11 +1,13 @@
1
1
  defaults: &defaults
2
2
  daemonize: true
3
3
  port: 3000
4
- workers: 2
5
4
  user: rftpd
6
5
  group: rftpd
7
6
  #host: "myhost"
8
7
 
8
+ pools:
9
+ default: 2
10
+
9
11
  transfer:
10
12
  # notify_after_sec: 5 # wait at least X seconds between HTTP notifications
11
13
  # mkdir: true # build directory tree if missing
@@ -14,7 +16,17 @@ defaults: &defaults
14
16
  # timeout: 1800 # jobs running for longer than X seconds will be killed
15
17
 
16
18
  retry:
17
- # on_errors: ["net_temp_error", "conn_reset_by_peer", "conn_timed_out", "conn_refused", "sftp_auth_failed", "conn_host_is_down", "conn_unreachable", "conn_failed", "conn_openssl_error"]
19
+ # on_errors:
20
+ # - ftp_perm_error
21
+ # - net_temp_error
22
+ # - conn_reset_by_peer
23
+ # - conn_timed_out
24
+ # - conn_refused
25
+ # - sftp_auth_failed
26
+ # - conn_host_is_down
27
+ # - conn_unreachable
28
+ # - conn_failed
29
+ # - conn_openssl_error
18
30
  # max_runs: 5
19
31
  # max_age: 1800
20
32
  # delay: 10
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-ftp-daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.245'
4
+ version: 0.245.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno MEDICI