rest-ftp-daemon 0.250.5 → 0.300.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +19 -14
  3. data/README.md +12 -3
  4. data/bin/rest-ftp-daemon +102 -96
  5. data/config.ru +5 -5
  6. data/defaults.yml +61 -0
  7. data/lib/rest-ftp-daemon.rb +10 -4
  8. data/lib/rest-ftp-daemon/api/config.rb +3 -2
  9. data/lib/rest-ftp-daemon/api/dashboard.rb +1 -4
  10. data/lib/rest-ftp-daemon/api/debug.rb +30 -17
  11. data/lib/rest-ftp-daemon/api/job_presenter.rb +0 -2
  12. data/lib/rest-ftp-daemon/api/jobs.rb +4 -3
  13. data/lib/rest-ftp-daemon/api/root.rb +7 -10
  14. data/lib/rest-ftp-daemon/api/status.rb +7 -13
  15. data/lib/rest-ftp-daemon/constants.rb +27 -45
  16. data/lib/rest-ftp-daemon/counters.rb +0 -4
  17. data/lib/rest-ftp-daemon/helpers.rb +3 -18
  18. data/lib/rest-ftp-daemon/job.rb +16 -21
  19. data/lib/rest-ftp-daemon/job_queue.rb +21 -14
  20. data/lib/rest-ftp-daemon/launcher.rb +26 -0
  21. data/lib/rest-ftp-daemon/logger_pool.rb +9 -19
  22. data/lib/rest-ftp-daemon/metrics.rb +41 -0
  23. data/lib/rest-ftp-daemon/notification.rb +7 -10
  24. data/lib/rest-ftp-daemon/remote.rb +4 -4
  25. data/lib/rest-ftp-daemon/remote_ftp.rb +10 -10
  26. data/lib/rest-ftp-daemon/remote_sftp.rb +13 -24
  27. data/lib/rest-ftp-daemon/views/dashboard.haml +2 -2
  28. data/lib/rest-ftp-daemon/views/dashboard_footer.haml +2 -2
  29. data/lib/rest-ftp-daemon/views/dashboard_header.haml +2 -2
  30. data/lib/rest-ftp-daemon/views/dashboard_workers.haml +2 -2
  31. data/lib/rest-ftp-daemon/worker.rb +43 -12
  32. data/lib/rest-ftp-daemon/worker_conchita.rb +15 -28
  33. data/lib/rest-ftp-daemon/worker_job.rb +30 -21
  34. data/lib/rest-ftp-daemon/worker_pool.rb +59 -50
  35. data/lib/rest-ftp-daemon/worker_reporter.rb +70 -0
  36. data/lib/shared/conf.rb +195 -0
  37. data/lib/shared/logger_formatter.rb +31 -0
  38. data/lib/shared/logger_helper.rb +78 -0
  39. data/rest-ftp-daemon.gemspec +23 -22
  40. data/{rest-ftp-daemon.yml.sample → rest-ftp-daemon.sample.yml} +10 -7
  41. data/spec/spec_helper.rb +1 -1
  42. metadata +30 -12
  43. data/lib/rest-ftp-daemon/logger.rb +0 -57
  44. data/lib/rest-ftp-daemon/logger_helper.rb +0 -36
  45. data/lib/rest-ftp-daemon/settings.rb +0 -57
@@ -9,25 +9,31 @@ require "syslog"
9
9
  require "net/http"
10
10
  require "thread"
11
11
  require "singleton"
12
- require "newrelic_rpm"
13
12
  require "grape"
14
13
  require "grape-entity"
14
+ require "newrelic_rpm"
15
+
16
+
17
+ # Shared libs
18
+ require_relative "shared/logger_formatter"
19
+ require_relative "shared/logger_helper"
20
+ require_relative "shared/conf"
21
+
15
22
 
16
23
  # Project's libs
17
24
  require_relative "rest-ftp-daemon/constants"
18
25
  require_relative "rest-ftp-daemon/array"
19
- require_relative "rest-ftp-daemon/settings"
20
26
  require_relative "rest-ftp-daemon/exceptions"
21
27
  require_relative "rest-ftp-daemon/helpers"
22
- require_relative "rest-ftp-daemon/logger_helper"
23
28
  require_relative "rest-ftp-daemon/logger_pool"
24
- require_relative "rest-ftp-daemon/logger"
29
+ require_relative "rest-ftp-daemon/metrics"
25
30
  require_relative "rest-ftp-daemon/paginate"
26
31
  require_relative "rest-ftp-daemon/uri"
27
32
  require_relative "rest-ftp-daemon/job_queue"
28
33
  require_relative "rest-ftp-daemon/counters"
29
34
  require_relative "rest-ftp-daemon/worker"
30
35
  require_relative "rest-ftp-daemon/worker_conchita"
36
+ require_relative "rest-ftp-daemon/worker_reporter"
31
37
  require_relative "rest-ftp-daemon/worker_job"
32
38
  require_relative "rest-ftp-daemon/worker_pool"
33
39
  require_relative "rest-ftp-daemon/job"
@@ -2,6 +2,7 @@ module RestFtpDaemon
2
2
  module API
3
3
  class Config < Grape::API
4
4
 
5
+ ### ENDPOINTS
5
6
  desc "Show daemon config"
6
7
  get "/" do
7
8
  status 200
@@ -10,8 +11,8 @@ module RestFtpDaemon
10
11
 
11
12
  desc "Reload daemon config"
12
13
  post "/reload" do
13
- if Settings.at(:debug, :allow_reload)==true
14
- Settings.reload!
14
+ if Conf.at(:debug, :allow_reload)==true
15
+ Conf.reload!
15
16
  status 200
16
17
  return Helpers.get_censored_config
17
18
  else
@@ -5,14 +5,12 @@ require "facter"
5
5
 
6
6
  module RestFtpDaemon
7
7
  module API
8
-
9
8
  class Dashbaord < Grape::API
10
9
 
11
10
  ### HELPERS
12
-
13
11
  helpers do
14
12
  def render name, values={}
15
- template = File.read("#{APP_LIBS}/views/#{name}.haml")
13
+ template = File.read("#{Conf.app_libs}/views/#{name}.haml")
16
14
 
17
15
  haml_engine = Haml::Engine.new(template, encoding: Encoding::UTF_8)
18
16
  #:encoding => Encoding::ASCII_8BIT
@@ -56,7 +54,6 @@ module RestFtpDaemon
56
54
 
57
55
  end
58
56
 
59
-
60
57
  ### DASHBOARD
61
58
  desc "Show a global dashboard"
62
59
  get "/" do
@@ -2,33 +2,46 @@ module RestFtpDaemon
2
2
  module API
3
3
  class Debug < Grape::API
4
4
 
5
- desc "Show app routes, params encodings"
6
- get "/" do
7
- # Encodings
8
- encodings = {}
9
- jobs = $queue.jobs
5
+ ### HELPERS
6
+ helpers do
7
+
8
+ def debug_metrics
9
+ Metrics.sample
10
+ end
10
11
 
11
- jobs.each do |job|
12
- # here = out[job.id] = {}
13
- me = encodings[job.id] = {}
12
+ def debug_encodings
13
+ # Encodings
14
+ encodings = {}
15
+ jobs = $queue.jobs
14
16
 
15
- me[:error] = job.error.encoding.to_s unless job.error.nil?
16
- me[:status] = job.status.encoding.to_s unless job.status.nil?
17
+ jobs.each do |job|
18
+ # here = out[job.id] = {}
19
+ me = encodings[job.id] = {}
17
20
 
18
- Job::FIELDS.each do |name|
19
- value = job.send(name)
20
- me[name] = value.encoding.to_s if value.is_a? String
21
- end
21
+ me[:error] = job.error.encoding.to_s unless job.error.nil?
22
+ me[:status] = job.status.encoding.to_s unless job.status.nil?
22
23
 
23
- job.infos.each do |name, value|
24
- me["infos_#{name}"] = value.encoding.to_s if value.is_a? String
24
+ Job::FIELDS.each do |name|
25
+ value = job.send(name)
26
+ me[name] = value.encoding.to_s if value.is_a? String
27
+ end
28
+
29
+ job.infos.each do |name, value|
30
+ me["infos_#{name}"] = value.encoding.to_s if value.is_a? String
31
+ end
25
32
  end
26
33
  end
27
34
 
35
+ end
36
+
37
+ ### ENDPOINTS
38
+ desc "debug"
39
+ get "/" do
28
40
  # Build response
29
41
  return {
42
+ metrics: debug_metrics,
30
43
  routes: RestFtpDaemon::API::Root.routes,
31
- encodings: encodings,
44
+ encodings: debug_encodings,
32
45
  }
33
46
  end
34
47
 
@@ -1,7 +1,6 @@
1
1
  module RestFtpDaemon
2
2
  module API
3
3
  module Entities
4
-
5
4
  class JobPresenter < Grape::Entity
6
5
  # Job ID
7
6
  expose :id
@@ -30,7 +29,6 @@ module RestFtpDaemon
30
29
  expose :infos, unless: :hide_infos
31
30
 
32
31
  end
33
-
34
32
  end
35
33
  end
36
34
  end
@@ -2,6 +2,7 @@ module RestFtpDaemon
2
2
  module API
3
3
  class Jobs < Grape::API
4
4
 
5
+ ### ENDPOINTS
5
6
  desc "Read job with ID"
6
7
  params do
7
8
  requires :id, type: String, desc: "ID of the Job to read"
@@ -56,15 +57,15 @@ module RestFtpDaemon
56
57
  optional :overwrite,
57
58
  type: Boolean,
58
59
  desc: "Overwrites files at target server",
59
- default: Settings.at(:transfer, :overwrite)
60
+ default: Conf.at(:transfer, :overwrite)
60
61
  optional :mkdir,
61
62
  type: Boolean,
62
63
  desc: "Create missing directories on target server",
63
- default: Settings.at(:transfer, :mkdir)
64
+ default: Conf.at(:transfer, :mkdir)
64
65
  optional :tempfile,
65
66
  type: Boolean,
66
67
  desc: "Upload to a temp file before renaming it to the target filename",
67
- default: Settings.at(:transfer, :tempfile)
68
+ default: Conf.at(:transfer, :tempfile)
68
69
  end
69
70
  post "/" do
70
71
  # log_debug params.to_json
@@ -3,8 +3,11 @@ module RestFtpDaemon
3
3
  class Root < Grape::API
4
4
 
5
5
  ### LOGGING & HELPERS
6
-
7
6
  helpers do
7
+ def log_prefix
8
+ ['API', nil, nil]
9
+ end
10
+
8
11
  def logger
9
12
  Root.logger
10
13
  end
@@ -18,7 +21,7 @@ module RestFtpDaemon
18
21
  request_method = env['REQUEST_METHOD']
19
22
  request_path = env['REQUEST_PATH']
20
23
  request_uri = env['REQUEST_URI']
21
- log_info "HTTP #{request_method} #{request_uri}", params
24
+ log_info "HTTP #{request_method} #{request_uri}", params
22
25
  end
23
26
  end
24
27
 
@@ -26,10 +29,8 @@ module RestFtpDaemon
26
29
  log_request
27
30
  end
28
31
 
29
-
30
32
  ### CLASS CONFIG
31
-
32
- helpers RestFtpDaemon::LoggerHelper
33
+ helpers Shared::LoggerHelper
33
34
  logger RestFtpDaemon::LoggerPool.instance.get :api
34
35
  do_not_route_head!
35
36
  do_not_route_options!
@@ -39,7 +40,6 @@ module RestFtpDaemon
39
40
 
40
41
 
41
42
  ### MOUNTPOINTS
42
-
43
43
  mount RestFtpDaemon::API::Status => MOUNT_STATUS
44
44
  mount RestFtpDaemon::API::Jobs => MOUNT_JOBS
45
45
  mount RestFtpDaemon::API::Dashbaord => MOUNT_BOARD
@@ -48,9 +48,7 @@ module RestFtpDaemon
48
48
 
49
49
 
50
50
  ### INITIALIZATION
51
-
52
51
  def initialize
53
- # Call daddy
54
52
  super
55
53
 
56
54
  # Check that Queue and Pool are available
@@ -59,8 +57,7 @@ module RestFtpDaemon
59
57
  end
60
58
 
61
59
 
62
- ### ROOT URL ACCESS
63
-
60
+ ### ENDPOINTS
64
61
  get "/" do
65
62
  redirect Helpers.dashboard_filter_url()
66
63
  end
@@ -4,9 +4,9 @@ module RestFtpDaemon
4
4
  module API
5
5
  class Status < Grape::API
6
6
 
7
+ ### ENDPOINTS
7
8
  desc "Show daemon status"
8
9
  get "/" do
9
- mem = GetProcessMem.new
10
10
  status 200
11
11
 
12
12
  # Get counters
@@ -23,24 +23,18 @@ module RestFtpDaemon
23
23
 
24
24
  # Generate sutrcture
25
25
  return {
26
+ name: Conf.app_name,
27
+ version: Conf.app_ver,
28
+ started: Conf.app_started,
26
29
  hostname: `hostname`.to_s.chomp,
27
- version: APP_VER,
28
-
29
- started: APP_STARTED,
30
- uptime: (Time.now - APP_STARTED).round(1),
31
-
32
- memory_bytes: mem.bytes.to_i,
33
- memory_mb: mem.mb.round(0),
34
-
35
- status: $queue.jobs_by_status,
36
30
  jobs_count: $queue.jobs_count,
37
31
 
38
- counters: counters,
32
+ metrics: Metrics.sample,
39
33
 
40
- rate_by_pool: $queue.rate_by(:pool),
41
- rate_by_targethost: $queue.rate_by(:targethost),
34
+ counters: counters,
42
35
 
43
36
  workers: $pool.worker_variables,
37
+
44
38
  }
45
39
  end
46
40
 
@@ -1,31 +1,11 @@
1
- # Terrific constants
2
- APP_NAME = "rest-ftp-daemon"
3
- APP_NICK = "rftpd"
4
- APP_VER = "0.250.5"
5
-
6
- # Provide default config file information
7
- APP_LIB = File.expand_path(File.dirname(__FILE__))
8
- APP_ROOT = File.expand_path(File.dirname(__FILE__) + "/../../")
9
-
10
- DEFAULT_CONFIG_PATH = File.expand_path "/etc/#{APP_NAME}.yml"
11
- SAMPLE_CONFIG_FILE = File.expand_path(File.join File.dirname(__FILE__), "/../../rest-ftp-daemon.yml.sample")
12
-
13
- TAIL_MESSAGE = <<EOD
14
-
15
- A default configuration is available here: #{SAMPLE_CONFIG_FILE}.
16
- You should copy it to the expected location #{DEFAULT_CONFIG_PATH}:
17
-
18
- sudo cp #{SAMPLE_CONFIG_FILE} #{DEFAULT_CONFIG_PATH}
19
- EOD
1
+ # Misc constants
20
2
 
21
3
 
22
4
  # Configuration defaults
23
- # DEFAULT_WORKERS = 2
24
5
  DEFAULT_POOL = "default"
25
- DEFAULT_WORKER_TIMEOUT = 1800 # 1h
26
6
  DEFAULT_SFTP_TIMEOUT = 600 # 10mn
27
7
  DEFAULT_FTP_CHUNK = 1024 # 1 MB
28
- DEFAULT_PAGE_SIZE = 80 # 50 lines
8
+ DEFAULT_PAGE_SIZE = 50 # 50 lines
29
9
  DEFAULT_RETRY_DELAY = 10 # 10s
30
10
 
31
11
 
@@ -36,6 +16,29 @@ JOB_TEMPFILE_LEN = 8
36
16
  JOB_UPDATE_INTERVAL = 1
37
17
 
38
18
 
19
+ # Constants: logger
20
+ LOG_ROTATION = "daily"
21
+ LOG_FORMAT_PROGNAME = "%d\t%s"
22
+
23
+ LOG_HEADER_TIME = "%Y-%m-%d %H:%M:%S"
24
+ LOG_HEADER_FORMAT = "%s \t%d\t%-8s %-15s "
25
+ LOG_MESSAGE_TRIM = 200
26
+ LOG_MESSAGE_TEXT = "%s%s"
27
+ LOG_MESSAGE_ARRAY = "%s - %s"
28
+ LOG_MESSAGE_HASH = "%s * %-20s %s"
29
+
30
+ # Constants: logger app-specific prefix
31
+ LOG_PREFIX_WID = 8
32
+ LOG_PREFIX_JID = JOB_IDENT_LEN + 3 + 2
33
+ LOG_PREFIX_ID = 6
34
+ LOG_PREFIX_FORMAT = "%#{-LOG_PREFIX_WID.to_i}s %#{-LOG_PREFIX_JID.to_i}s %#{-LOG_PREFIX_ID.to_i}s"
35
+
36
+
37
+ # Constants: logger to be cleaned up
38
+ LOG_PIPE_LEN = 10
39
+ LOG_INDENT = "\t"
40
+
41
+
39
42
  # Jobs statuses
40
43
  JOB_STATUS_PREPARING = "preparing"
41
44
  JOB_STATUS_RUNNING = "running"
@@ -73,6 +76,7 @@ WORKER_STATUS_FINISHED = "finished"
73
76
  WORKER_STATUS_TIMEOUT = "timeout"
74
77
  WORKER_STATUS_CRASHED = "crashed"
75
78
  WORKER_STATUS_CLEANING = "cleaning"
79
+ WORKER_STATUS_REPORTING = "reporting"
76
80
  WORKER_STYLES = {
77
81
  WORKER_STATUS_WAITING => nil,
78
82
  WORKER_STATUS_RUNNING => :info,
@@ -81,23 +85,7 @@ WORKER_STYLES = {
81
85
  }
82
86
 
83
87
 
84
- # Logging and startup
85
- LOG_PIPE_LEN = 10
86
- LOG_COL_WID = 8
87
- LOG_COL_JID = JOB_IDENT_LEN + 3 + 2
88
- LOG_COL_ID = 6
89
- LOG_TRIM_LINE = 200
90
- LOG_DUMPS = File.dirname(__FILE__) + "/../../log/"
91
- LOG_ROTATION = "daily"
92
- LOG_FORMAT_TIME = "%Y-%m-%d %H:%M:%S"
93
- LOG_FORMAT_PREFIX = "%s %s\t%-#{LOG_PIPE_LEN.to_i}s\t"
94
- LOG_FORMAT_MESSAGE = "%#{-LOG_COL_WID.to_i}s\t%#{-LOG_COL_JID.to_i}s\t%#{-LOG_COL_ID.to_i}s"
95
- LOG_NEWLINE = "\n"
96
- LOG_INDENT = "\t"
97
- BIND_PORT_TIMEOUT = 3
98
- BIND_PORT_LOCALHOST = "127.0.0.1"
99
-
100
- ENV_PRODUCTION = "production"
88
+ # API mountpoints
101
89
  MOUNT_JOBS = "/jobs"
102
90
  MOUNT_BOARD = "/board"
103
91
  MOUNT_STATUS = "/status"
@@ -107,10 +95,4 @@ MOUNT_CONFIG = "/config"
107
95
 
108
96
  # Notifications
109
97
  NOTIFY_PREFIX = "rftpd"
110
- NOTIFY_USERAGENT = "#{APP_NAME}/v#{APP_VER}"
111
98
  NOTIFY_IDENTIFIER_LEN = 4
112
-
113
-
114
- # Initialize defaults
115
- APP_STARTED = Time.now
116
- APP_LIBS = File.dirname(__FILE__)
@@ -4,10 +4,6 @@ module RestFtpDaemon
4
4
  class Counters
5
5
  attr_reader :stats
6
6
 
7
- if Settings.newrelic_enabled?
8
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
9
- end
10
-
11
7
  def initialize
12
8
  @stats = {}
13
9
  @mutex_stats = Mutex.new
@@ -2,9 +2,9 @@ module RestFtpDaemon
2
2
  class Helpers
3
3
 
4
4
  def self.get_censored_config
5
- config = Settings.to_hash
6
- config[:users] = Settings.users.keys if Settings.users
7
- config[:endpoints] = Settings.endpoints.keys if Settings.endpoints
5
+ config = Conf.to_hash
6
+ config[:users] = Conf[:users].keys if Conf[:users]
7
+ config[:endpoints] = Conf[:endpoints].keys if Conf[:endpoints]
8
8
  config
9
9
  end
10
10
 
@@ -60,21 +60,6 @@ module RestFtpDaemon
60
60
  return m[1], m[2] unless m.nil?
61
61
  end
62
62
 
63
- def self.local_port_used? port
64
- Timeout.timeout(BIND_PORT_TIMEOUT) do
65
- begin
66
- TCPSocket.new(BIND_PORT_LOCALHOST, port).close
67
- true
68
- rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
69
- false
70
- rescue Errno::EADDRNOTAVAIL
71
- "Settings.local_port_used: Errno::EADDRNOTAVAIL"
72
- end
73
- end
74
- rescue Timeout::Error
75
- false
76
- end
77
-
78
63
  def self.job_method_label method
79
64
  return if method.nil?
80
65
  klass = case method
@@ -4,13 +4,9 @@ module RestFtpDaemon
4
4
 
5
5
  # Reprensents work to be done along with parameters to process it
6
6
  class Job
7
- include LoggerHelper
7
+ include Shared::LoggerHelper
8
8
  attr_reader :logger
9
9
 
10
- if Settings.newrelic_enabled?
11
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
12
- end
13
-
14
10
  FIELDS = [:source, :target, :label, :priority, :pool, :notify, :overwrite, :mkdir, :tempfile]
15
11
 
16
12
  attr_accessor :wid
@@ -59,7 +55,7 @@ module RestFtpDaemon
59
55
  end
60
56
 
61
57
  # Set pool
62
- pools = (Settings.pools || {})
58
+ pools = (Conf[:pools] || {})
63
59
  # Check if pool name exists
64
60
  if (pools.keys.include? params[:pool])
65
61
  @pool = params[:pool].to_s
@@ -71,7 +67,7 @@ module RestFtpDaemon
71
67
  reset
72
68
 
73
69
  # Read source file size and parameters
74
- @notify_after_sec = Settings.at(:transfer, :notify_after_sec) rescue nil
70
+ @notify_after_sec = Conf.at(:transfer, :notify_after_sec) rescue nil
75
71
  end
76
72
 
77
73
  def reset
@@ -277,8 +273,8 @@ module RestFtpDaemon
277
273
 
278
274
  def replace_tokens path
279
275
  # Ensure endpoints are not a nil value
280
- return path unless Settings.endpoints.is_a? Enumerable
281
- vectors = Settings.endpoints.clone
276
+ return path unless Conf[:endpoints].is_a? Enumerable
277
+ vectors = Conf[:endpoints].clone
282
278
 
283
279
  # Stack RANDOM into tokens
284
280
  vectors["RANDOM"] = SecureRandom.hex(JOB_RANDOM_LEN)
@@ -328,21 +324,21 @@ module RestFtpDaemon
328
324
  # set_info :target, :method, :ftp
329
325
  set_info :target, :method, JOB_METHOD_FTP
330
326
  #@target_method = :ftp
331
- @remote = RemoteFTP.new target_uri, log_context
327
+ @remote = RemoteFTP.new target_uri, log_prefix
332
328
 
333
329
  elsif (target_uri.is_a? URI::FTPES) || (target_uri.is_a? URI::FTPS)
334
330
  log_info "Job.prepare target_method FTPES"
335
331
  # set_info :target, :method, :ftpes
336
332
  set_info :target, :method, JOB_METHOD_FTPS
337
333
  # @target_method = :ftpes
338
- @remote = RemoteFTP.new target_uri, log_context, ftpes: true
334
+ @remote = RemoteFTP.new target_uri, log_prefix, ftpes: true
339
335
 
340
336
  elsif target_uri.is_a? URI::SFTP
341
337
  log_info "Job.prepare target_method SFTP"
342
338
  # set_info :target, :method, :sftp
343
339
  set_info :target, :method, JOB_METHOD_SFTP
344
340
  # @target_method = :sftp
345
- @remote = RemoteSFTP.new target_uri, log_context
341
+ @remote = RemoteSFTP.new target_uri, log_prefix
346
342
 
347
343
  else
348
344
  log_info "Job.prepare unknown scheme [#{target_uri.scheme}]"
@@ -413,11 +409,8 @@ module RestFtpDaemon
413
409
 
414
410
  private
415
411
 
416
- def log_context
417
- {
418
- wid: @wid,
419
- jid: @id,
420
- }
412
+ def log_prefix
413
+ [@wid, @id, nil]
421
414
  end
422
415
 
423
416
  def find_local path
@@ -509,14 +502,14 @@ module RestFtpDaemon
509
502
  tempname = nil
510
503
  if @tempfile
511
504
  tempname = "#{target.name}.temp-#{Helpers.identifier(JOB_TEMPFILE_LEN)}"
512
- #log_info "Job.remote_push tempname [#{tempname}]"
505
+ log_debug "Job.remote_push tempname [#{tempname}]"
513
506
  end
514
507
 
515
508
  # Remove any existing version if expected, or test its presence
516
509
  if @overwrite
517
510
  @remote.remove! target
518
511
  elsif size = @remote.present?(target)
519
- log_info "Job.remote_push existing (#{Helpers.format_bytes size, 'B'})"
512
+ log_debug "Job.remote_push existing (#{Helpers.format_bytes size, 'B'})"
520
513
  raise RestFtpDaemon::JobTargetFileExists
521
514
  end
522
515
 
@@ -568,7 +561,7 @@ module RestFtpDaemon
568
561
  stack << (Helpers.format_bytes @transfer_total, "B")
569
562
  stack << (Helpers.format_bytes @current_bitrate.round(0), "bps")
570
563
  stack2 = stack.map { |txt| ("%#{LOG_PIPE_LEN.to_i}s" % txt) }.join("\t")
571
- log_info "#{LOG_INDENT}progress #{stack2} \t#{name}"
564
+ log_debug "Job.progress #{stack2} \t#{name}"
572
565
 
573
566
  # Remember when we last did it
574
567
  @progress_at = now
@@ -665,7 +658,9 @@ module RestFtpDaemon
665
658
  client_notify event, error: error, status: notif_status, message: "#{exception.class} | #{exception.message}"
666
659
  end
667
660
 
668
- if Settings.newrelic_enabled?
661
+ # NewRelic instrumentation
662
+ if Conf.newrelic_enabled?
663
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
669
664
  add_transaction_tracer :prepare, category: :task
670
665
  add_transaction_tracer :run, category: :task
671
666
  add_transaction_tracer :client_notify, category: :task