rest-ftp-daemon 0.221.2 → 0.222.0

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.
@@ -47,12 +47,13 @@ module RestFtpDaemon
47
47
  private
48
48
 
49
49
  def link p
50
- klass = (p == @page)? ' btn-info' : ''
51
- return "<a class='page btn btn-default%s' href='?only=%s&page=%d'>%p</a>" % [
50
+ klass = (p == @page)? " btn-info" : ""
51
+
52
+ "<a class='page btn btn-default%s' href='?only=%s&page=%d'>%p</a>" % [
52
53
  klass,
53
54
  @only,
54
55
  p,
55
- p,
56
+ p
56
57
  ]
57
58
  end
58
59
 
@@ -7,21 +7,22 @@ class Settings < Settingslogic
7
7
 
8
8
  # Compute my PID filename
9
9
  def pidfile
10
- self["pidfile"] || "/tmp/#{APP_NAME}.port#{self['port'].to_s}.pid"
10
+ port = self["port"]
11
+ self["pidfile"] || "/tmp/#{APP_NAME}.port#{port}.pid"
11
12
  end
12
13
 
13
14
  # Direct access to any depth
14
15
  def at *path
15
- path.reduce(Settings) {|m,key| m && m[key.to_s] }
16
+ path.reduce(Settings) { |m, key| m && m[key.to_s] }
16
17
  end
17
18
 
18
19
  # Dump whole settings set to readable YAML
19
20
  def dump
20
- self.to_hash.to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => false )
21
+ to_hash.to_yaml(indent: 4, useheader: true, useversion: false )
21
22
  end
22
23
 
23
24
  def init_defaults
24
- Settings['host'] ||= `hostname`.chomp.split('.').first
25
+ Settings["host"] ||= `hostname`.chomp.split(".").first
25
26
  end
26
27
 
27
28
  def newrelic_enabled?
@@ -30,21 +31,20 @@ class Settings < Settingslogic
30
31
 
31
32
  def init_newrelic
32
33
  # Skip if not enabled
33
- return ENV['NEWRELIC_AGENT_ENABLED'] = 'false' unless Settings.newrelic_enabled?
34
+ return ENV["NEWRELIC_AGENT_ENABLED"] = "false" unless Settings.newrelic_enabled?
34
35
 
35
36
  # Enable module
36
- ENV['NEWRELIC_AGENT_ENABLED'] = 'true'
37
- ENV['NEW_RELIC_MONITOR_MODE'] = 'true'
38
- #Settings['newrelic']['enabled'] = true
37
+ ENV["NEWRELIC_AGENT_ENABLED"] = "true"
38
+ ENV["NEW_RELIC_MONITOR_MODE"] = "true"
39
39
 
40
40
  # License
41
- ENV['NEW_RELIC_LICENSE_KEY'] = Settings.at(:debug, :newrelic)
41
+ ENV["NEW_RELIC_LICENSE_KEY"] = Settings.at(:debug, :newrelic)
42
42
 
43
43
  # Appname
44
- ENV['NEW_RELIC_APP_NAME'] = "#{APP_NICK}-#{Settings.host}-#{APP_ENV}"
44
+ ENV["NEW_RELIC_APP_NAME"] = "#{APP_NICK}-#{Settings.host}-#{APP_ENV}"
45
45
 
46
46
  # Logfile
47
- ENV['NEW_RELIC_LOG'] = Settings.at(:logs, :newrelic)
47
+ ENV["NEW_RELIC_LOG"] = Settings.at(:logs, :newrelic)
48
48
  end
49
49
 
50
50
  end
@@ -2,11 +2,11 @@ module URI
2
2
  class FTPS < Generic
3
3
  DEFAULT_PORT = 21
4
4
  end
5
- @@schemes['FTPS'] = FTPS
5
+ @@schemes["FTPS"] = FTPS
6
6
  end
7
7
  module URI
8
8
  class FTPES < Generic
9
9
  DEFAULT_PORT = 990
10
10
  end
11
- @@schemes['FTPES'] = FTPES
11
+ @@schemes["FTPES"] = FTPES
12
12
  end
@@ -3,7 +3,7 @@
3
3
  - source_count = job.get(:source_count) || 0
4
4
  - source_processed = job.get(:source_processed) || 0
5
5
  - source_current = job.get(:source_current)
6
- - presented = present job, :with => RestFtpDaemon::API::Entities::JobPresenter, hide_params: true
6
+ - presented = present job, with: RestFtpDaemon::API::Entities::JobPresenter, hide_params: true
7
7
  - bitrate = job.get :transfer_bitrate
8
8
 
9
9
  - trclass = JOB_STYLES[job.status]
@@ -33,7 +33,7 @@ module RestFtpDaemon
33
33
  loop do
34
34
  begin
35
35
  work
36
- rescue Exception => e
36
+ rescue StandardError => e
37
37
  log_error "WORKER EXCEPTION: #{e.inspect}"
38
38
  sleep 1
39
39
  end
@@ -32,7 +32,7 @@ module RestFtpDaemon
32
32
  worker_status :collecting
33
33
  GC.start if @conchita["garbage_collector"]
34
34
 
35
- rescue Exception => e
35
+ rescue StandardError => e
36
36
  log_error "EXCEPTION: #{e.inspect}"
37
37
  sleep 1
38
38
  else
@@ -42,12 +42,12 @@ module RestFtpDaemon
42
42
  end
43
43
 
44
44
  def maxage status
45
- @conchita["clean_#{status.to_s}"] || 0
45
+ @conchita["clean_#{status}"] || 0
46
46
  end
47
47
 
48
48
 
49
49
  if Settings.newrelic_enabled?
50
- add_transaction_tracer :work, :category => :task
50
+ add_transaction_tracer :work, category: :task
51
51
  end
52
52
 
53
53
  end
@@ -28,7 +28,7 @@ module RestFtpDaemon
28
28
  job.wid = Thread.current.thread_variable_get :wid
29
29
 
30
30
  # Processs this job protected by a timeout
31
- Timeout::timeout(@timeout, RestFtpDaemon::JobTimeout) do
31
+ Timeout.timeout(@timeout, RestFtpDaemon::JobTimeout) do
32
32
  job.process
33
33
  end
34
34
 
@@ -50,7 +50,7 @@ module RestFtpDaemon
50
50
  job.oops_you_stop_now ex unless job.nil?
51
51
  sleep 1
52
52
 
53
- rescue Exception => ex
53
+ rescue StandardError => ex
54
54
  log_error "JOB UNHDNALED EXCEPTION: #{ex.message}", lines: ex.backtrace
55
55
  worker_status :crashed
56
56
  job.oops_after_crash ex unless job.nil?
@@ -65,7 +65,7 @@ module RestFtpDaemon
65
65
 
66
66
 
67
67
  if Settings.newrelic_enabled?
68
- add_transaction_tracer :work, :category => :task
68
+ add_transaction_tracer :work, category: :task
69
69
  end
70
70
 
71
71
  end
@@ -12,9 +12,6 @@ module RestFtpDaemon
12
12
  def initialize
13
13
  # Logger
14
14
  @logger = RestFtpDaemon::LoggerPool.instance.get :workers
15
- # log_info "WorkerPool: log_info"
16
- # log_error "WorkerPool: log_error"
17
- # log_error "WorkerPool: log_error + lines", ['line1', 'line2']
18
15
 
19
16
  # Prepare status hash and vars
20
17
  @statuses = {}
@@ -30,7 +27,7 @@ module RestFtpDaemon
30
27
  end
31
28
 
32
29
  def worker_variables
33
- @workers.collect do |wid, worker|
30
+ @workers.collect do |_wid, worker|
34
31
  vars = {}
35
32
  worker.thread_variables.each do |var|
36
33
  vars[var] = worker.thread_variable_get var
@@ -73,7 +70,7 @@ module RestFtpDaemon
73
70
  # Start conchita thread
74
71
  @conchita = create_conchita_thread
75
72
 
76
- rescue Exception => ex
73
+ rescue StandardError => ex
77
74
  log_error "UNHDNALED EXCEPTION: #{ex.message}", ex.backtrace
78
75
 
79
76
  end
@@ -83,7 +80,7 @@ module RestFtpDaemon
83
80
  begin
84
81
  worker = JobWorker.new wid
85
82
  log_info "JobWorker [#{wid}]: #{worker}"
86
- rescue Exception => ex
83
+ rescue StandardError => ex
87
84
  log_error "EXCEPTION: #{ex.message}"
88
85
  end
89
86
  end
@@ -94,7 +91,7 @@ module RestFtpDaemon
94
91
  begin
95
92
  worker = ConchitaWorker.new :conchita
96
93
  log_info "ConchitaWorker: #{worker}"
97
- rescue Exception => ex
94
+ rescue StandardError => ex
98
95
  log_error "EXCEPTION: #{ex.message}"
99
96
  end
100
97
  end
@@ -103,8 +100,8 @@ module RestFtpDaemon
103
100
  protected
104
101
 
105
102
  if Settings.newrelic_enabled?
106
- add_transaction_tracer :create_conchita_thread, :category => :task
107
- add_transaction_tracer :create_worker_thread, :category => :task
103
+ add_transaction_tracer :create_conchita_thread, category: :task
104
+ add_transaction_tracer :create_worker_thread, category: :task
108
105
  end
109
106
 
110
107
  end
@@ -22,10 +22,12 @@ Gem::Specification.new do |spec|
22
22
  spec.version = APP_VER
23
23
 
24
24
  #spec.required_ruby_version = '>= 1.9.3'
25
- spec.required_ruby_version = '>= 2.1'
25
+ spec.required_ruby_version = ">= 2.1"
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 1.6"
28
28
  spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec", "~> 3.1"
30
+ spec.add_development_dependency "http", "~> 0.8"
29
31
 
30
32
  spec.add_runtime_dependency "thin", "~> 1.6"
31
33
  spec.add_runtime_dependency "grape"
@@ -2,21 +2,20 @@ defaults: &defaults
2
2
  daemonize: true
3
3
  port: 3000
4
4
  workers: 2
5
- #adminpwd: "admin"
6
5
  user: rftpd
7
6
  group: rftpd
8
- host: <%= `hostname`.chomp.split('.').first %>
7
+ host: "myhost"
9
8
 
10
9
  transfer:
11
- update_every_kb: 1024
12
- notify_after_sec: 5
13
- mkdir: true
14
- tempfile: true
15
- overwrite: false
16
- timeout: 1800
10
+ update_every_kb: 1024 # block size to transfer between counter updates
11
+ notify_after_sec: 5 # wait at least X seconds between HTTP notifications
12
+ mkdir: true # build directory tree if missing
13
+ tempfile: true # transfer to temporary file, rename after sucessful transfer
14
+ overwrite: false # overwrite any target file with the same name
15
+ timeout: 1800 # jobs running for longer than X seconds will be killed
17
16
 
18
17
  conchita:
19
- timer: 60
18
+ # timer: 60
20
19
  # garbage_collector: true
21
20
  # clean_failed: 3600
22
21
  # clean_finished: 3600
@@ -24,7 +23,7 @@ defaults: &defaults
24
23
 
25
24
  debug:
26
25
  ftp: false
27
- # license: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
26
+ # newrelic: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
28
27
 
29
28
  logs:
30
29
  thin: "/var/log/rftpd-environment-thin.log"
@@ -35,8 +34,10 @@ defaults: &defaults
35
34
  notify: "/var/log/rftpd-environment-work.log"
36
35
  newrelic:"/var/log/rftpd-environment-newrelic.log"
37
36
 
38
- preprod:
37
+
38
+ development:
39
39
  <<: *defaults
40
+ port: 3400
40
41
 
41
42
  production:
42
43
  <<: *defaults
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe 'Dashboard', feature: true do
4
+
5
+ describe "GET /" do
6
+ context 'without a password' do
7
+ it 'is forbidden' do
8
+ expect(HTTP.accept(:json).get("http://localhost:5678").status).to eq 401
9
+ end
10
+ end
11
+
12
+ context 'with a password' do
13
+ it 'can be accessed' do
14
+ expect(
15
+ HTTP.accept(:json).
16
+ basic_auth(user: 'admin', pass: 'admin').
17
+ get("http://localhost:5678").status
18
+ ).to eq 200
19
+ end
20
+ end
21
+ end # GET /
22
+
23
+ end
@@ -0,0 +1,62 @@
1
+ require "pathname"
2
+ require "http"
3
+
4
+ RSpec.configure do |config|
5
+ # rspec-expectations config goes here. You can use an alternate
6
+ # assertion/expectation library such as wrong or the stdlib/minitest
7
+ # assertions if you prefer.
8
+ config.expect_with :rspec do |expectations|
9
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
10
+ end
11
+
12
+ # rspec-mocks config goes here. You can use an alternate test double
13
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
14
+ config.mock_with :rspec do |mocks|
15
+ # Prevents you from mocking or stubbing a method that does not exist on
16
+ # a real object. This is generally recommended, and will default to
17
+ # `true` in RSpec 4.
18
+ mocks.verify_partial_doubles = true
19
+ end
20
+
21
+ # The settings below are suggested to provide a good initial experience
22
+ # with RSpec, but feel free to customize to your heart's content.
23
+ # These two settings work together to allow you to limit a spec run
24
+ # to individual examples or groups you care about by tagging them with
25
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
26
+ # get run.
27
+ config.filter_run :focus
28
+ config.run_all_when_everything_filtered = true
29
+
30
+ config.warnings = true
31
+
32
+ # Many RSpec users commonly either run the entire suite or an individual
33
+ # file, and it's useful to allow more verbose output when running an
34
+ # individual spec file.
35
+ if config.files_to_run.one?
36
+ # Use the documentation formatter for detailed output,
37
+ # unless a formatter has already been configured
38
+ # (e.g. via a command-line flag).
39
+ config.default_formatter = 'doc'
40
+ end
41
+
42
+ # Print the 10 slowest examples and example groups at the
43
+ # end of the spec run, to help surface which specs are running
44
+ # particularly slow.
45
+ config.profile_examples = 10
46
+
47
+ config.order = :random
48
+ Kernel.srand config.seed
49
+
50
+ def call_server(command, config = Pathname(__dir__).join("support/config.yml"))
51
+ system(Pathname(__dir__).join("../bin/rest-ftp-daemon -e test -c #{config} #{command}").to_s, chdir: __dir__) or fail "Could not #{command} server"
52
+ end
53
+
54
+ config.before :suite do
55
+ call_server(:start)
56
+ sleep 2
57
+ end
58
+
59
+ config.after :suite do
60
+ call_server(:stop)
61
+ end
62
+ end
@@ -0,0 +1,26 @@
1
+ test:
2
+ daemonize: true
3
+ port: 5678
4
+ workers: 2
5
+ adminpwd: "admin"
6
+ host: 127.0.0.1
7
+
8
+ transfer:
9
+ update_every_kb: 1024
10
+ notify_after_sec: 5
11
+ mkdir: true
12
+ tempfile: true
13
+ overwrite: false
14
+ timeout: 1800
15
+
16
+ debug:
17
+ ftp: false
18
+
19
+ logs:
20
+ thin: "./tmp/log/rftpd-environment-thin.log"
21
+ queue: "./tmp/log/rftpd-environment-core.log"
22
+ api: "./tmp/log/rftpd-environment-core.log"
23
+ workers: "./tmp/log/rftpd-environment-work.log"
24
+ jobs: "./tmp/log/rftpd-environment-work.log"
25
+ notify: "./tmp/log/rftpd-environment-work.log"
26
+ newrelic: "/var/log/rftpd-environment-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.221.2
4
+ version: 0.222.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-05-28 00:00:00.000000000 Z
11
+ date: 2015-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: http
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: thin
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -215,6 +243,8 @@ extensions: []
215
243
  extra_rdoc_files: []
216
244
  files:
217
245
  - ".gitignore"
246
+ - ".rspec"
247
+ - ".rubocop.yml"
218
248
  - ".ruby-version"
219
249
  - Gemfile
220
250
  - Gemfile.lock
@@ -225,11 +255,9 @@ files:
225
255
  - config.ru
226
256
  - lib/rest-ftp-daemon.rb
227
257
  - lib/rest-ftp-daemon/api/dashboard.rb
228
- - lib/rest-ftp-daemon/api/debug.rb
229
258
  - lib/rest-ftp-daemon/api/job_presenter.rb
230
259
  - lib/rest-ftp-daemon/api/jobs.rb
231
260
  - lib/rest-ftp-daemon/api/root.rb
232
- - lib/rest-ftp-daemon/api/status.rb
233
261
  - lib/rest-ftp-daemon/constants.rb
234
262
  - lib/rest-ftp-daemon/exceptions.rb
235
263
  - lib/rest-ftp-daemon/helpers.rb
@@ -258,6 +286,9 @@ files:
258
286
  - lib/rest-ftp-daemon/worker_pool.rb
259
287
  - rest-ftp-daemon.gemspec
260
288
  - rest-ftp-daemon.yml.sample
289
+ - spec/rest-ftp-daemon/features/dashboard_spec.rb
290
+ - spec/spec_helper.rb
291
+ - spec/support/config.yml
261
292
  homepage: http://github.com/bmedici/rest-ftp-daemon
262
293
  licenses:
263
294
  - MIT