rest-ftp-daemon 0.250.5 → 0.300.1

Sign up to get free protection for your applications and to get access to all the features.
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