rest-ftp-daemon 0.302.3 → 0.304.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +14 -3
  3. data/README.md +1 -1
  4. data/bin/rest-ftp-daemon +3 -3
  5. data/config.ru +1 -1
  6. data/defaults.yml +2 -2
  7. data/lib/rest-ftp-daemon/api/root.rb +10 -4
  8. data/lib/rest-ftp-daemon/api/status.rb +10 -0
  9. data/lib/rest-ftp-daemon/constants.rb +1 -4
  10. data/lib/rest-ftp-daemon/counters.rb +4 -2
  11. data/lib/rest-ftp-daemon/job.rb +11 -12
  12. data/lib/rest-ftp-daemon/job_queue.rb +10 -12
  13. data/lib/rest-ftp-daemon/launcher.rb +1 -0
  14. data/lib/rest-ftp-daemon/metrics.rb +10 -0
  15. data/lib/rest-ftp-daemon/notification.rb +5 -5
  16. data/lib/rest-ftp-daemon/paginate.rb +1 -0
  17. data/lib/rest-ftp-daemon/path.rb +2 -0
  18. data/lib/rest-ftp-daemon/remote.rb +5 -4
  19. data/lib/rest-ftp-daemon/remote_ftp.rb +3 -1
  20. data/lib/rest-ftp-daemon/remote_sftp.rb +4 -2
  21. data/lib/rest-ftp-daemon/views/dashboard_workers.haml +4 -1
  22. data/lib/rest-ftp-daemon/worker_pool.rb +6 -7
  23. data/lib/rest-ftp-daemon/workers/conchita.rb +8 -7
  24. data/lib/rest-ftp-daemon/workers/reporter.rb +24 -12
  25. data/lib/rest-ftp-daemon/workers/transfer.rb +8 -7
  26. data/lib/rest-ftp-daemon/workers/worker.rb +12 -0
  27. data/lib/rest-ftp-daemon.rb +10 -16
  28. data/lib/{rest-ftp-daemon → shared}/patch_array.rb +0 -0
  29. data/lib/{rest-ftp-daemon → shared}/patch_haml.rb +0 -2
  30. data/rest-ftp-daemon.gemspec +29 -28
  31. metadata +34 -24
  32. data/lib/rest-ftp-daemon/logger_pool.rb +0 -61
  33. data/lib/shared/conf.rb +0 -201
  34. data/lib/shared/logger_formatter.rb +0 -31
  35. data/lib/shared/logger_helper.rb +0 -78
  36. data/lib/shared/worker_base.rb +0 -112
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 404ecae7bf682e2d02aafe69f1a04acfd5792ba6
4
- data.tar.gz: c9b5924aa5387ea7423fd9464c695ffc37a3a424
3
+ metadata.gz: 879a66df142ffdef4e82af5932e0ae6f862382b1
4
+ data.tar.gz: d81bb16f0c971a2b7a07e0902aa5ab40bce438e7
5
5
  SHA512:
6
- metadata.gz: 1e88538745df4eca736c1f9b238e6645a6de0fa412b117d741554d7091c9b4d5eeb741bf2be3bc57f9aad5a399b640a163098700c17700b9e40e146cbf231360
7
- data.tar.gz: 6e2afd3392eddfbfd6cb3a8422e604ac78971f56a3f3ed3b253c96e0f986c67e44fdc916bdb3defce12095ac839841670dd4157e4aebd7e33dcf3546b06630b1
6
+ metadata.gz: e2fb79546eb167872017b0995e7c055fd26ffea32272c17403e4a278e4b13f63a6245c2e5bb277061a90c6eddef6ad72e7bb00cead8a9d312058213db8b3a8f2
7
+ data.tar.gz: 39548d2cfbe17d534a4e03f7060399fbb8e8f06fce93a0190c86fe1360d9064b56bf8cb9c70cfc8e508fe19dd8af8e69107aecfbfab944e323cbd6a935f75471
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rest-ftp-daemon (0.302.3)
4
+ rest-ftp-daemon (0.304.0)
5
5
  api-auth
6
- chamber
6
+ bmc-daemon-lib (~> 0.2)
7
7
  double-bag-ftps
8
8
  facter
9
9
  get_process_mem
@@ -27,6 +27,7 @@ GEM
27
27
  i18n (~> 0.7)
28
28
  minitest (~> 5.1)
29
29
  tzinfo (~> 1.1)
30
+ addressable (2.4.0)
30
31
  api-auth (2.0.0)
31
32
  ast (2.3.0)
32
33
  astrolabe (1.3.1)
@@ -35,6 +36,8 @@ GEM
35
36
  descendants_tracker (~> 0.0.4)
36
37
  ice_nine (~> 0.11.0)
37
38
  thread_safe (~> 0.3, >= 0.3.1)
39
+ bmc-daemon-lib (0.2.0)
40
+ chamber (~> 2.9)
38
41
  builder (3.2.2)
39
42
  chamber (2.9.0)
40
43
  hashie (~> 3.3)
@@ -55,7 +58,7 @@ GEM
55
58
  eventmachine (1.2.0.1)
56
59
  facter (2.4.6)
57
60
  CFPropertyList (~> 2.2.6)
58
- ffi (1.9.13)
61
+ ffi (1.9.14)
59
62
  get_process_mem (0.2.1)
60
63
  grape (0.16.2)
61
64
  activesupport
@@ -73,8 +76,15 @@ GEM
73
76
  haml (4.0.7)
74
77
  tilt
75
78
  hashie (3.4.4)
79
+ http (2.0.2)
80
+ addressable (~> 2.3)
81
+ http-cookie (~> 1.0)
82
+ http-form_data (~> 1.0.1)
83
+ http_parser.rb (~> 0.6.0)
76
84
  http-cookie (1.0.2)
77
85
  domain_name (~> 0.5)
86
+ http-form_data (1.0.1)
87
+ http_parser.rb (0.6.0)
78
88
  i18n (0.7.0)
79
89
  ice_nine (0.11.2)
80
90
  json (1.8.3)
@@ -153,6 +163,7 @@ PLATFORMS
153
163
 
154
164
  DEPENDENCIES
155
165
  bundler (~> 1.6)
166
+ http
156
167
  pry
157
168
  rake
158
169
  rest-ftp-daemon!
data/README.md CHANGED
@@ -253,7 +253,7 @@ transfer:
253
253
 
254
254
  newrelic:
255
255
  debug: false
256
- # licence: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
256
+ # license: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
257
257
  # app_name: "rftpd-bigbusiness-dev" # app_name used for naming app (used as-is if provided)
258
258
  prefix: "rftpd" # app prefix to build app_name
259
259
  # platform: "bigbusiness" # app platform to build app_name
data/bin/rest-ftp-daemon CHANGED
@@ -3,15 +3,15 @@
3
3
  # Try to load external libs, helpers and constants
4
4
  begin
5
5
  require "rubygems"
6
+ require 'bmc-daemon-lib'
6
7
  require "optparse"
7
8
  require "thin"
8
9
  require "socket"
9
10
  require_relative "../lib/rest-ftp-daemon/launcher"
10
- require_relative "../lib/shared/conf"
11
11
  rescue LoadError => e
12
12
  raise "EXITING: some basic libs were not found (#{e.message})"
13
13
  end
14
- include Shared
14
+ include BmcDaemonLib
15
15
  include RestFtpDaemon
16
16
 
17
17
 
@@ -119,7 +119,7 @@ puts
119
119
  puts "Daemonize \t #{Conf[:daemonize]}"
120
120
  puts "Network port \t #{Conf[:port]}"
121
121
  puts "User:group \t #{Conf[:user]}:#{Conf[:group]}" if Conf[:user] && Conf[:group]
122
- puts "Newrelic \t #{Conf.newrelic_enabled? ? Conf.at(:newrelic, :licence) : 'no'}"
122
+ puts "Newrelic \t #{Conf.newrelic_enabled? ? Conf.at(:newrelic, :license) : 'no'}"
123
123
  puts "PID file \t #{Conf[:pidfile]}"
124
124
  puts
125
125
  puts Conf.dump
data/config.ru CHANGED
@@ -10,7 +10,7 @@ $queue = RestFtpDaemon::JobQueue.new
10
10
  # Create global counters
11
11
  $counters = RestFtpDaemon::Counters.new
12
12
 
13
- # Initialize workers and conchita subsystem
13
+ # Initialize workers
14
14
  $pool = RestFtpDaemon::WorkerPool.new
15
15
 
16
16
  # Rack authent
data/defaults.yml CHANGED
@@ -49,13 +49,13 @@ transfer:
49
49
 
50
50
  newrelic:
51
51
  debug: false
52
- # licence: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
52
+ # license: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
53
53
  # app_name: "rftpd-bigbusiness-dev" # app_name used for naming app (used as-is if provided)
54
54
  prefix: "rftpd" # app prefix to build app_name
55
55
  # platform: "bigbusiness" # app platform to build app_name
56
56
 
57
57
  logs:
58
- path: "/var/log/"
58
+ path: "/tmp/"
59
59
 
60
60
  thin: "rftpd-environment-thin.log"
61
61
  newrelic: "rftpd-environment-newrelic.log"
@@ -32,8 +32,8 @@ module RestFtpDaemon
32
32
  end
33
33
 
34
34
  ### CLASS CONFIG
35
- helpers Shared::LoggerHelper
36
- logger RestFtpDaemon::LoggerPool.instance.get :api
35
+ helpers BmcDaemonLib::LoggerHelper
36
+ logger BmcDaemonLib::LoggerPool.instance.get :api
37
37
  do_not_route_head!
38
38
  do_not_route_options!
39
39
  # version 'v1'
@@ -54,8 +54,14 @@ module RestFtpDaemon
54
54
  super
55
55
 
56
56
  # Check that Queue and Pool are available
57
- raise RestFtpDaemon::MissingQueue unless defined? $queue
58
- raise RestFtpDaemon::MissingPool unless defined? $pool
57
+ unless $pool.is_a? RestFtpDaemon::WorkerPool
58
+ log_error "Metrics.sample: invalid WorkerPool"
59
+ raise RestFtpDaemon::MissingPool
60
+ end
61
+ unless $queue.is_a? RestFtpDaemon::JobQueue
62
+ log_error "Metrics.sample: invalid JobQueue"
63
+ raise RestFtpDaemon::MissingQueue
64
+ end
59
65
  end
60
66
 
61
67
 
@@ -10,6 +10,16 @@ module RestFtpDaemon
10
10
  get "/" do
11
11
  status 200
12
12
 
13
+ # Check that Queue and Pool are available
14
+ unless true
15
+ log_error "Status API: invalid WorkerPool"
16
+ return status 501
17
+ end
18
+ unless $queue.is_a? RestFtpDaemon::JobQueue
19
+ log_error "Status API: invalid JobQueue"
20
+ return status 501
21
+ end
22
+
13
23
  # Get counters
14
24
  counters = $counters.stats.dup
15
25
 
@@ -1,6 +1,3 @@
1
- # Misc constants
2
-
3
-
4
1
  # Configuration defaults
5
2
  DEFAULT_POOL = "default"
6
3
  DEFAULT_SFTP_TIMEOUT = 600 # 10mn
@@ -19,7 +16,6 @@ JOB_UPDATE_INTERVAL = 1
19
16
  # Constants: logger
20
17
  LOG_ROTATION = "daily"
21
18
  LOG_FORMAT_PROGNAME = "%d\t%s"
22
-
23
19
  LOG_HEADER_TIME = "%Y-%m-%d %H:%M:%S"
24
20
  LOG_HEADER_FORMAT = "%s \t%d\t%-8s %-10s "
25
21
  LOG_MESSAGE_TRIM = 200
@@ -27,6 +23,7 @@ LOG_MESSAGE_TEXT = "%s%s"
27
23
  LOG_MESSAGE_ARRAY = "%s - %s"
28
24
  LOG_MESSAGE_HASH = "%s * %-20s %s"
29
25
 
26
+
30
27
  # Constants: logger app-specific prefix
31
28
  LOG_PREFIX_WID = 8
32
29
  LOG_PREFIX_JID = JOB_IDENT_LEN + 4
@@ -1,7 +1,9 @@
1
- module RestFtpDaemon
1
+ # Queue that stores all the Jobs waiting to be processed or fully processed
2
2
 
3
- # Queue that stores all the Jobs waiting to be processed or fully processed
3
+ module RestFtpDaemon
4
4
  class Counters
5
+
6
+ # Class options
5
7
  attr_reader :stats
6
8
 
7
9
  def initialize
@@ -1,14 +1,16 @@
1
+ # Reprensents work to be done along with parameters to process it
1
2
  require "securerandom"
2
3
 
3
4
  module RestFtpDaemon
4
-
5
- # Reprensents work to be done along with parameters to process it
6
5
  class Job
7
- include Shared::LoggerHelper
8
- attr_reader :logger
6
+ include BmcDaemonLib::LoggerHelper
7
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
9
8
 
9
+ # Class constants
10
10
  FIELDS = [:source, :target, :label, :priority, :pool, :notify, :overwrite, :mkdir, :tempfile]
11
11
 
12
+ # Class options
13
+ attr_reader :logger
12
14
  attr_accessor :wid
13
15
 
14
16
  attr_reader :id
@@ -51,7 +53,7 @@ module RestFtpDaemon
51
53
  @pools = Conf[:pools] || {}
52
54
 
53
55
  # Logger
54
- @logger = RestFtpDaemon::LoggerPool.instance.get :transfer
56
+ @logger = BmcDaemonLib::LoggerPool.instance.get :transfer
55
57
 
56
58
  # Protect with a mutex
57
59
  @mutex = Mutex.new
@@ -659,13 +661,10 @@ module RestFtpDaemon
659
661
  end
660
662
 
661
663
  # NewRelic instrumentation
662
- if Conf.newrelic_enabled?
663
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
664
- add_transaction_tracer :prepare, category: :task
665
- add_transaction_tracer :run, category: :task
666
- add_transaction_tracer :client_notify, category: :task
667
- add_transaction_tracer :initialize, category: :task
668
- end
664
+ add_transaction_tracer :prepare, category: :task
665
+ add_transaction_tracer :run, category: :task
666
+ add_transaction_tracer :client_notify, category: :task
667
+ add_transaction_tracer :initialize, category: :task
669
668
 
670
669
  end
671
670
  end
@@ -2,7 +2,10 @@ module RestFtpDaemon
2
2
 
3
3
  # Queue that stores all the Jobs waiting to be processed or fully processed
4
4
  class JobQueue
5
- include Shared::LoggerHelper
5
+ include BmcDaemonLib::LoggerHelper
6
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
7
+
8
+ # Class options
6
9
  attr_reader :logger
7
10
  attr_reader :jobs
8
11
 
@@ -20,7 +23,7 @@ module RestFtpDaemon
20
23
  @mutex = Mutex.new
21
24
 
22
25
  # Logger
23
- @logger = RestFtpDaemon::LoggerPool.instance.get :queue
26
+ @logger = BmcDaemonLib::LoggerPool.instance.get :queue
24
27
 
25
28
  # Identifiers generator
26
29
  @last_id = 0
@@ -232,17 +235,12 @@ module RestFtpDaemon
232
235
  "#{@prefix}.#{id}"
233
236
  end
234
237
 
235
- private
236
-
237
238
  # NewRelic instrumentation
238
- if Conf.newrelic_enabled?
239
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
240
- add_transaction_tracer :push, category: :task
241
- add_transaction_tracer :pop, category: :task
242
- add_transaction_tracer :expire, category: :task
243
- add_transaction_tracer :rate_by, category: :task
244
- add_transaction_tracer :jobs_by_status, category: :task
245
- end
239
+ add_transaction_tracer :push, category: :task
240
+ add_transaction_tracer :pop, category: :task
241
+ add_transaction_tracer :expire, category: :task
242
+ add_transaction_tracer :rate_by, category: :task
243
+ add_transaction_tracer :jobs_by_status, category: :task
246
244
 
247
245
  end
248
246
  end
@@ -1,5 +1,6 @@
1
1
  module RestFtpDaemon
2
2
  class Launcher
3
+ # Class constants
3
4
  LAUNCHER_PORT_TIMEOUT = 3
4
5
  LAUNCHER_PORT_LOCALHOST = "127.0.0.1"
5
6
 
@@ -2,6 +2,10 @@ module RestFtpDaemon
2
2
  class Metrics
3
3
 
4
4
  def self.sample
5
+ # Check validity of globals
6
+ return log_error "Metrics.sample: invalid WorkerPool" unless $pool.is_a? RestFtpDaemon::WorkerPool
7
+ return log_error "Metrics.sample: invalid JobQueue" unless $queue.is_a? RestFtpDaemon::JobQueue
8
+
5
9
  # Prepare external deps
6
10
  mem = GetProcessMem.new
7
11
 
@@ -27,6 +31,12 @@ module RestFtpDaemon
27
31
  # Init
28
32
  counts = {}
29
33
 
34
+ # Check validity of globals
35
+ unless $pool.is_a? RestFtpDaemon::WorkerPool
36
+ log_error "Metrics.workers_count_by_status: invalid WorkerPool"
37
+ return counts
38
+ end
39
+
30
40
  $pool.worker_variables.group_by do |wid, vars|
31
41
  vars[:status]
32
42
  end.each do |status, workers|
@@ -1,13 +1,13 @@
1
1
  require 'api_auth'
2
2
  require 'rest_client'
3
3
 
4
+ # Handle a notification POST using a dedicated thread
4
5
  module RestFtpDaemon
5
-
6
- # Handles a notification POST using a dedicated thread
7
6
  class Notification
8
- include Shared::LoggerHelper
9
- attr_reader :logger
7
+ include BmcDaemonLib::LoggerHelper
10
8
 
9
+ # Class options
10
+ attr_reader :logger
11
11
  attr_accessor :job_id
12
12
  attr_accessor :signal
13
13
  attr_accessor :error
@@ -26,7 +26,7 @@ module RestFtpDaemon
26
26
  @jid = nil
27
27
 
28
28
  # Logger
29
- @logger = RestFtpDaemon::LoggerPool.instance.get :notify
29
+ @logger = BmcDaemonLib::LoggerPool.instance.get :notify
30
30
 
31
31
  # Handle the notification
32
32
  log_info "initialized [#{@url}]"
@@ -1,6 +1,7 @@
1
1
  module RestFtpDaemon
2
2
  class Paginate
3
3
 
4
+ # Class options
4
5
  attr_writer :filter
5
6
  attr_accessor :all
6
7
 
@@ -1,5 +1,7 @@
1
1
  module RestFtpDaemon
2
2
  class Path
3
+
4
+ # Class options
3
5
  attr_accessor :name
4
6
  attr_accessor :dir
5
7
 
@@ -1,8 +1,9 @@
1
+ # Handles transfers for Job class
1
2
  module RestFtpDaemon
2
-
3
- # Handles transfers for Job class
4
3
  class Remote
5
- include Shared::LoggerHelper
4
+ include BmcDaemonLib::LoggerHelper
5
+
6
+ # Class options
6
7
  attr_reader :logger
7
8
  attr_reader :log_prefix
8
9
 
@@ -12,7 +13,7 @@ module RestFtpDaemon
12
13
 
13
14
  # Logger
14
15
  @log_prefix = log_prefix || {}
15
- @logger = RestFtpDaemon::LoggerPool.instance.get :transfer
16
+ @logger = BmcDaemonLib::LoggerPool.instance.get :transfer
16
17
 
17
18
  # Extract URL parts
18
19
  @url = url
@@ -1,9 +1,11 @@
1
1
  require "net/ftp"
2
2
  require "double_bag_ftps"
3
3
 
4
+ # Handle FTP and FTPeS transfers for Remote class
4
5
  module RestFtpDaemon
5
- # Handles FTP and FTPeS transfers for Remote class
6
6
  class RemoteFTP < Remote
7
+
8
+ # Class options
7
9
  attr_reader :ftp
8
10
 
9
11
  def initialize url, log_prefix, options = {}
@@ -1,8 +1,10 @@
1
1
  require "net/sftp"
2
2
 
3
+ # Handle sFTP transfers for Remote class
3
4
  module RestFtpDaemon
4
- # Handles sFTP transfers for Remote class
5
5
  class RemoteSFTP < Remote
6
+
7
+ # Class options
6
8
  attr_reader :sftp
7
9
 
8
10
  def initialize url, log_prefix, options = {}
@@ -19,7 +21,7 @@ module RestFtpDaemon
19
21
  log_debug "RemoteSFTP.connect [#{@url.user}]@[#{@url.host}]:[#{@url.port}]"
20
22
 
21
23
  # Debug level
22
- verbosity = @debug ? Logger::INFO : false
24
+ verbosity = @debug ? Logger::DEBUG : false
23
25
 
24
26
  # Connect remote server
25
27
  @sftp = Net::SFTP.start(@url.host.to_s, @url.user.to_s,
@@ -1,5 +1,8 @@
1
1
  -# coding: utf-8
2
- - variables = $pool.worker_variables
2
+
3
+ - unless $pool.is_a? RestFtpDaemon::WorkerPool
4
+ - log_error "Dashboard: invalid WorkerPool"
5
+ - variables = $pool.worker_variables
3
6
 
4
7
  %h2 Workers
5
8
 
@@ -2,13 +2,16 @@ module RestFtpDaemon
2
2
 
3
3
  # Handles a pool of Worker objects
4
4
  class WorkerPool
5
- include Shared::LoggerHelper
5
+ include BmcDaemonLib::LoggerHelper
6
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
7
+
8
+ # Class options
6
9
  attr_reader :logger
7
10
  attr_reader :wid
8
11
 
9
12
  def initialize
10
13
  # Logger
11
- @logger = RestFtpDaemon::LoggerPool.instance.get :workers
14
+ @logger = BmcDaemonLib::LoggerPool.instance.get :workers
12
15
 
13
16
  # Prepare status hash and vars
14
17
  @statuses = {}
@@ -99,11 +102,7 @@ module RestFtpDaemon
99
102
  end
100
103
 
101
104
  # NewRelic instrumentation
102
- if Conf.newrelic_enabled?
103
- include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
104
- # add_transaction_tracer :create_conchita_thread, category: :task
105
- add_transaction_tracer :create_thread, category: :task
106
- end
105
+ add_transaction_tracer :create_thread, category: :task
107
106
 
108
107
  end
109
108
  end
@@ -1,7 +1,7 @@
1
- module RestFtpDaemon
1
+ # Worker used to clean up the queue deleting expired jobs
2
2
 
3
- # Worker used to clean up the queue deleting expired jobs
4
- class ConchitaWorker < Shared::WorkerBase
3
+ module RestFtpDaemon
4
+ class ConchitaWorker < Worker
5
5
 
6
6
  protected
7
7
 
@@ -31,10 +31,6 @@ module RestFtpDaemon
31
31
 
32
32
  # Force garbage collector
33
33
  GC.start if @config["garbage_collector"]
34
-
35
- rescue StandardError => e
36
- log_error "EXCEPTION: #{e.inspect}"
37
- sleep 1
38
34
  end
39
35
 
40
36
  private
@@ -43,5 +39,10 @@ module RestFtpDaemon
43
39
  @config["clean_#{status}"] || 0
44
40
  end
45
41
 
42
+ # NewRelic instrumentation
43
+ add_transaction_tracer :worker_init, category: :task
44
+ add_transaction_tracer :worker_after, category: :task
45
+ add_transaction_tracer :worker_process, category: :task
46
+
46
47
  end
47
48
  end
@@ -1,7 +1,7 @@
1
- module RestFtpDaemon
1
+ # Worker used to report metrics to various services
2
2
 
3
- # Worker used to report metrics to various services
4
- class ReporterWorker < Shared::WorkerBase
3
+ module RestFtpDaemon
4
+ class ReporterWorker < Worker
5
5
 
6
6
  protected
7
7
 
@@ -9,6 +9,9 @@ module RestFtpDaemon
9
9
  # Load corker conf
10
10
  config_section :reporter
11
11
 
12
+ # Other configuration options
13
+ @report_newrelic = Conf.newrelic_enabled?
14
+
12
15
  # Check that everything is OK
13
16
  return "invalid timer" unless @config[:timer].to_i > 0
14
17
  return false
@@ -26,21 +29,21 @@ module RestFtpDaemon
26
29
 
27
30
  # Report metrics
28
31
  do_metrics
29
-
30
- rescue StandardError => e
31
- log_error "EXCEPTION: #{e.inspect}"
32
- sleep 1
33
32
  end
34
33
 
35
34
  private
36
35
 
37
36
  def do_metrics
37
+ # What metrics to report?
38
+ report_newrelic = Conf.newrelic_enabled?
39
+
38
40
  # Get common metrics and dump them to logs
41
+ log_debug "begin metrics sample"
39
42
  metrics = Metrics.sample
40
- log_info "collected metrics", metrics
43
+ log_info "collected metrics (newrelic: #{@report_newrelic})", metrics
41
44
 
42
45
  # Transpose metrics to NewRelic metrics
43
- report_newrelic(metrics) if Conf.newrelic_enabled?
46
+ report_newrelic(metrics) if @report_newrelic
44
47
  end
45
48
 
46
49
  def report_newrelic metrics
@@ -54,10 +57,19 @@ module RestFtpDaemon
54
57
  end
55
58
 
56
59
  # Don't dump metrics unless we're debugging
57
- metrics_newrelic = nil unless @config[:debug]
58
- newrelic_app_name = ENV["NEW_RELIC_APP_NAME"]
59
- log_debug "reported metrics to NewRelic [#{newrelic_app_name}]", metrics_newrelic
60
+ msg_newrelic = "reported metrics to NewRelic [#{ENV['NEW_RELIC_APP_NAME']}]"
61
+ if @config[:debug]
62
+ log_debug msg_newrelic, metrics_newrelic
63
+ else
64
+ log_info msg_newrelic
65
+ end
66
+
60
67
  end
61
68
 
69
+ # NewRelic instrumentation
70
+ add_transaction_tracer :worker_init, category: :task
71
+ add_transaction_tracer :worker_after, category: :task
72
+ add_transaction_tracer :worker_process, category: :task
73
+
62
74
  end
63
75
  end
@@ -1,7 +1,7 @@
1
- module RestFtpDaemon
1
+ # Worker used to process Jobs
2
2
 
3
- # Worker used to process Jobs
4
- class TransferWorker < Shared::WorkerBase
3
+ module RestFtpDaemon
4
+ class TransferWorker < Worker
5
5
 
6
6
  protected
7
7
 
@@ -66,10 +66,6 @@ module RestFtpDaemon
66
66
  # Now, requeue this job
67
67
  $queue.requeue job
68
68
  end
69
-
70
- rescue StandardError => ex
71
- log_error "WORKER UNHANDLED EXCEPTION: #{ex.message}", ex.backtrace
72
- worker_status WORKER_STATUS_CRASHED
73
69
  end
74
70
 
75
71
  def work_on_job job
@@ -104,5 +100,10 @@ module RestFtpDaemon
104
100
  job.oops_after_crash ex unless job.nil?
105
101
  end
106
102
 
103
+ # NewRelic instrumentation
104
+ add_transaction_tracer :worker_init, category: :task
105
+ add_transaction_tracer :worker_after, category: :task
106
+ add_transaction_tracer :worker_process, category: :task
107
+
107
108
  end
108
109
  end
@@ -0,0 +1,12 @@
1
+ # Instrumented WorkerBase
2
+
3
+ module RestFtpDaemon
4
+ class Worker < BmcDaemonLib::WorkerBase
5
+ include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
6
+
7
+ # NewRelic instrumentation
8
+ add_transaction_tracer :worker_init, category: :task
9
+ add_transaction_tracer :worker_after, category: :task
10
+ add_transaction_tracer :worker_process, category: :task
11
+ end
12
+ end