rest-ftp-daemon 0.103.1 → 0.104.5

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: c059a568b0a22503a734c966807a19c8ff426333
4
- data.tar.gz: a3d2443af653af100e642e86ba7144a2b9985495
3
+ metadata.gz: 3f80c711efa90f45d67c8b2c7648b4a951b8da6b
4
+ data.tar.gz: 9dbda28ce22feaff2becdc4d0f211963569134f7
5
5
  SHA512:
6
- metadata.gz: 07afa716bc8b3b701377cfe1a9452e22238cc8e82af287f544e499cc2a4d263bd266e3d83f8a2aa53ca37381653d1fff961bdbff6bf9446167cf1276fb8bddf8
7
- data.tar.gz: 31fb4ea27d1e64278563eb3e2e93375c24d1f9794e632acd7afbeb897dc0a6d88024fe2dd3c4393648fa151b1f54c35432323f45cd90b4f9d368feeb208078a1
6
+ metadata.gz: 4bca8882c3ad0b481f7ce99e9588d6ceba5a6ab009b60f74bfbaea0bc40536e8789753527a3cfb89515bf53de4e8314c8b57bea65a8caafef38c3b116e867855
7
+ data.tar.gz: 3971446df3aa2b11007997dd9a78a094787c6ecf55e5f86102c1914c0eb48d72643ff9d3e1074a7a13fff39fa3ef70d76ccf2b8854c086d7d8ca484840438af9
data/bin/rest-ftp-daemon CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Try to load libs and constants
3
+ # Try to load external libs
4
4
  app_root = File.dirname(__FILE__) + '/../'
5
5
  begin
6
6
  require "thin"
@@ -10,14 +10,19 @@ begin
10
10
  rescue LoadError
11
11
  raise "EXITING: some of basic libs were not found: thin, optparse, socket, timeout"
12
12
  end
13
- require File.expand_path("#{app_root}/lib/rest-ftp-daemon/constants")
13
+
14
+ # Load helpers and constants
15
+ [:constants, :helpers].each do |lib|
16
+ require File.expand_path("#{app_root}/lib/rest-ftp-daemon/#{lib.to_s}")
17
+ end
18
+
14
19
  puts
15
20
  #puts "--- #{APP_NAME} #{APP_VER}"
16
21
 
17
22
  # Detect options from ARGV
18
23
  options = {}
19
24
  parser = OptionParser.new do |opts|
20
- opts.banner = "Usage: #{File.basename $0} [options] start|stop|restart"
25
+ opts.banner = "Usage: #{File.basename $0} [options] start|stop"
21
26
  opts.on("-c", "--config CONFIGFILE") { |config| APP_CONF = config }
22
27
  opts.on("-e", "--environment ENV") { |env| APP_ENV = env }
23
28
  opts.on("", "--dev") { APP_ENV = "development" }
@@ -34,7 +39,7 @@ end
34
39
  begin
35
40
  parser.order!(ARGV)
36
41
  command = ARGV.shift
37
- unless ["start", "stop", "restart"].include? command
42
+ unless ["start", "stop"].include? command
38
43
  puts parser
39
44
  exit 11
40
45
  end
@@ -51,10 +56,14 @@ unless File.exists? APP_CONF
51
56
  end
52
57
 
53
58
  # Load helpers and config, and merge options from ARGV into settings
54
- [:helpers, :config].each do |lib|
55
- require File.expand_path("#{app_root}/lib/rest-ftp-daemon/#{lib.to_s}")
59
+ begin
60
+ require File.expand_path("#{app_root}/lib/rest-ftp-daemon/config")
61
+ Settings.merge!(options)
62
+ rescue Psych::SyntaxError => e
63
+ puts "EXITING: config file syntax error: #{e.message}"
64
+ exit 16
56
65
  end
57
- Settings.merge!(options)
66
+
58
67
 
59
68
  # Display compiled configuration
60
69
  puts "--- #{APP_NAME} #{APP_VER}"
@@ -46,7 +46,7 @@ module RestFtpDaemon
46
46
  @count_all = $queue.all_size
47
47
 
48
48
  # Get workers status
49
- @gworker_statuses = $pool.get_worker_statuses
49
+ @worker_vars = $pool.worker_vars
50
50
 
51
51
  # Compile haml template
52
52
  output = render :dashboard
@@ -17,6 +17,7 @@ module RestFtpDaemon
17
17
  uptime: (Time.now - APP_STARTED).round(1),
18
18
  counters: $queue.counters,
19
19
  status: $queue.counts_by_status,
20
+ vars: $pool.worker_vars,
20
21
  jobs_count: $queue.all_size,
21
22
  jobs_queued: $queue.queued.collect(&:id),
22
23
  jobs_popped: $queue.popped.collect(&:id),
@@ -1,13 +1,13 @@
1
1
  # Terrific constants
2
2
  APP_NAME = "rest-ftp-daemon"
3
- APP_VER = "0.103.1"
3
+ APP_VER = "0.104.5"
4
4
 
5
5
  # Some global constants
6
6
  IDENT_JOB_LEN = 4
7
7
  IDENT_NOTIF_LEN = 4
8
8
  IDENT_RANDOM_LEN = 8
9
9
  IDENT_TEMPFILE_LEN = 8
10
- DEFAULT_LOGS_PIPE_LEN = 15
10
+ DEFAULT_LOGS_PIPE_LEN = 12
11
11
  DEFAULT_LOGS_ID_LEN = 8
12
12
 
13
13
  # Some defaults
@@ -83,26 +83,31 @@ module RestFtpDaemon
83
83
  when :file
84
84
  'label-primary'
85
85
  when :ftp
86
- 'label-danger'
87
- when :ftps
88
- 'label-warning'
89
- when :ftpes
90
86
  'label-warning'
87
+ when :ftps, :ftpes
88
+ 'label-success'
91
89
  else
92
- 'label-default'
90
+ 'label-default'
93
91
  end
94
92
  "<div class=\"transfer-method label #{klass}\">#{method.upcase}</div>"
95
93
  end
96
94
 
97
95
  # Dates and times: date with time generator
98
- def self.datetime_full param
99
- return "-" if param.nil?
100
- return param.to_datetime.strftime("%d.%m.%Y %H:%M")
96
+ def self.datetime_full datetime
97
+ return "-" if datetime.nil?
98
+ return datetime.to_datetime.strftime("%d.%m.%Y %H:%M")
99
+ end
100
+
101
+ def self.datetime_short datetime
102
+ # return param.class
103
+ return "-" if datetime.nil?
104
+ return "?" unless datetime.respond_to? :to_date
105
+ return datetime.to_datetime.strftime("%H:%M") if datetime.to_date == Time.now.to_date
106
+ return datetime.to_datetime.strftime("%d/%m %H:%M")
101
107
  end
102
108
 
103
- def self.datetime_short param
104
- return "-" if param.nil?
105
- return param.to_datetime.strftime("%d/%m %H:%M")
109
+ def self.hide_credentials_from_url url
110
+ url.sub(/([a-z]+:\/\/[^\/]+):[^\/]+\@/, '\1@' )
106
111
  end
107
112
 
108
113
  end
@@ -78,9 +78,6 @@ module RestFtpDaemon
78
78
  rescue RestFtpDaemon::JobMissingAttribute => exception
79
79
  return oops "rftpd.started", exception, :missing_attribute
80
80
 
81
- # rescue RestFtpDaemon::JobSourceNotFound => exception
82
- # return oops "rftpd.started", exception, :job_source_not_found
83
-
84
81
  rescue RestFtpDaemon::JobUnresolvedTokens => exception
85
82
  return oops "rftpd.started", exception, :unresolved_tokens
86
83
 
@@ -97,7 +94,7 @@ module RestFtpDaemon
97
94
  return oops "rftpd.started", exception, :assertion_failed
98
95
 
99
96
  rescue RestFtpDaemon::RestFtpDaemonException => exception
100
- return oops "rftpd.started", exception, :prepare_failed
97
+ return oops "rftpd.started", exception, :prepare_failed, true
101
98
 
102
99
  rescue Exception => exception
103
100
  return oops "rftpd.started", exception, :prepare_unhandled, true
@@ -134,7 +131,10 @@ module RestFtpDaemon
134
131
  return oops "rftpd.ended", exception, :conn_openssl_error
135
132
 
136
133
  rescue Net::FTPPermError => exception
137
- return oops "rftpd.ended", exception, :perm_error
134
+ return oops "rftpd.ended", exception, :ftp_perm_error
135
+
136
+ rescue Net::FTPTempError => exception
137
+ return oops "rftpd.ended", exception, :ftp_temp_error
138
138
 
139
139
  rescue Errno::EMFILE => exception
140
140
  return oops "rftpd.ended", exception, :too_many_open_files
@@ -152,7 +152,7 @@ module RestFtpDaemon
152
152
  return oops "rftpd.started", exception, :assertion_failed
153
153
 
154
154
  rescue RestFtpDaemon::RestFtpDaemonException => exception
155
- return oops "rftpd.ended", exception, :transfer_failed
155
+ return oops "rftpd.ended", exception, :transfer_failed, true
156
156
 
157
157
  rescue Exception => exception
158
158
  return oops "rftpd.ended", exception, :transfer_unhandled, true
@@ -192,7 +192,6 @@ module RestFtpDaemon
192
192
  def set attribute, value
193
193
  @mutex.synchronize do
194
194
  @params || {}
195
- # return unless @params.is_a? Enumerable
196
195
  @updated_at = Time.now
197
196
  @params[attribute] = value
198
197
  end
@@ -271,7 +270,8 @@ module RestFtpDaemon
271
270
 
272
271
  # Method assertions and init
273
272
  @status = :checking_source
274
- raise RestFtpDaemon::JobAssertionFailed unless @source_path && @target_url
273
+ raise RestFtpDaemon::JobAssertionFailed, "transfer/1" unless @source_path
274
+ raise RestFtpDaemon::JobAssertionFailed, "transfer/2" unless @target_url
275
275
  @transfer_sent = 0
276
276
  set :source_processed, 0
277
277
 
@@ -337,7 +337,7 @@ module RestFtpDaemon
337
337
  info "Job.oops si[#{signal_name}] er[#{error_name.to_s}] ex[#{exception.class}] #{exception.message}"
338
338
 
339
339
  # Close ftp connexion if open
340
- @ftp.close unless @ftp.welcome.nil?
340
+ @ftp.close unless @ftp.nil? || @ftp.welcome.nil?
341
341
 
342
342
  # Update job's internal status
343
343
  @status = :failed
@@ -379,7 +379,8 @@ module RestFtpDaemon
379
379
  # Method assertions
380
380
  info "Job.ftp_init asserts"
381
381
  @status = :ftp_init
382
- raise RestFtpDaemon::JobAssertionFailed if @target_method.nil? || @target_url.nil?
382
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_init/1" if @target_method.nil?
383
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_init/2" if @target_url.nil?
383
384
 
384
385
  info "Job.ftp_init target_method [#{@target_method}]"
385
386
  case @target_method
@@ -403,23 +404,27 @@ module RestFtpDaemon
403
404
  @status = :ftp_connect
404
405
  host = @target_url.host
405
406
  info "Job.ftp_connect [#{host}]"
406
- raise RestFtpDaemon::JobAssertionFailed if @ftp.nil? || @target_url.nil?
407
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_connect/1" if @ftp.nil?
408
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_connect/2" if @target_url.nil?
407
409
 
408
410
  @ftp.connect(host)
409
411
  end
410
412
 
411
413
  def ftp_login
412
414
  @status = :ftp_login
413
- info "Job.ftp_login [#{@target_url.user}]"
414
- raise RestFtpDaemon::JobAssertionFailed if @ftp.nil? || @target_url.user.nil? || @target_url.password.nil?
415
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_login/1" if @ftp.nil?
416
+
417
+ # use "anonymous" if user is empty
418
+ login = @target_url.user || "anonymous"
419
+ info "Job.ftp_login [#{login}]"
415
420
 
416
- @ftp.login @target_url.user, @target_url.password
421
+ @ftp.login login, @target_url.password
417
422
  end
418
423
 
419
424
  def ftp_chdir_or_buildpath path
420
425
  # Method assertions
421
426
  info "Job.ftp_chdir [#{path}] mkdir: #{@mkdir}"
422
- raise RestFtpDaemon::JobAssertionFailed if path.nil?
427
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_chdir_or_buildpath/1" if path.nil?
423
428
  @status = :ftp_chdir
424
429
 
425
430
  # Extract directory from path
@@ -473,7 +478,8 @@ module RestFtpDaemon
473
478
 
474
479
  # Method assertions
475
480
  @status = :ftp_presence
476
- raise RestFtpDaemon::JobAssertionFailed if @ftp.nil? || @target_url.nil?
481
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_presence/1" if @ftp.nil?
482
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_presence/2" if @target_url.nil?
477
483
 
478
484
  # Get file list, sometimes the response can be an empty value
479
485
  results = @ftp.list(target_name) rescue nil
@@ -487,8 +493,8 @@ module RestFtpDaemon
487
493
  def ftp_transfer source_match, target_name = nil
488
494
  # Method assertions
489
495
  info "Job.ftp_transfer source_match [#{source_match}]"
490
- raise RestFtpDaemon::JobAssertionFailed if @ftp.nil?
491
- raise RestFtpDaemon::JobAssertionFailed if source_match.nil?
496
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_transfer/1" if @ftp.nil?
497
+ raise RestFtpDaemon::JobAssertionFailed, "ftp_transfer/2" if source_match.nil?
492
498
 
493
499
  # Use source filename if target path provided none (typically with multiple sources)
494
500
  target_name ||= Helpers.extract_filename source_match
@@ -552,8 +558,6 @@ module RestFtpDaemon
552
558
  t0 = Time.now
553
559
 
554
560
  # Notify if requested
555
- @status = :uploaded
556
- info "Job.ftp_transfer uploaded"
557
561
  unless notify_after_sec.nil? || (notified_at + notify_after_sec > Time.now)
558
562
  notif_status = {
559
563
  progress: percent1,
@@ -168,7 +168,8 @@ module RestFtpDaemon
168
168
 
169
169
  def ordered_popped
170
170
  @mutex_counters.synchronize do
171
- @popped.sort_by { |item| [item.updated_at] }
171
+ @popped.sort_by { |item| [ item.wid.to_s, item.updated_at] }
172
+ # @popped.sort_by { |item| [item.status.to_s, item.wid.to_s, item.updated_at, - item.id.to_i] }
172
173
  end
173
174
  end
174
175
 
@@ -3,11 +3,11 @@
3
3
  }
4
4
 
5
5
  .transfer-method {
6
- width: 35px;
6
+ /*width: 35px;*/
7
7
  }
8
8
 
9
9
  .worker-label {
10
- width: 25px;
10
+ /*width: 25px;*/
11
11
  }
12
12
 
13
13
  .nobr {
@@ -27,8 +27,9 @@ table tr td, .fixed {
27
27
  }
28
28
 
29
29
  .label {
30
- font-size: 90%;
31
- padding: 2px 4px;
30
+ font-size: 1em;
31
+ padding: 3px 3px 1px 3px;
32
+ margin-bottom: 1px ;
32
33
  font-weight: normal;
33
34
  display: inline-block;
34
35
  font-family: sans-serif;
@@ -10,7 +10,7 @@
10
10
  %body
11
11
 
12
12
  .navbar.navbar-default.navbar-fixed
13
- .container
13
+ .container-fluid
14
14
 
15
15
  .navbar-header
16
16
  %h1
@@ -20,7 +20,7 @@
20
20
  = "[#{Settings.namespace}]"
21
21
 
22
22
 
23
- .container
23
+ .container-fluid
24
24
 
25
25
  = render :dashboard_headers
26
26
 
@@ -43,22 +43,22 @@
43
43
  %table.table.table-striped.table-hover.table-condensed
44
44
  %tr
45
45
  %th ID
46
- %th P
47
- %th W
48
46
  %th label
49
47
  %th source
48
+ %th <=>
50
49
  %th target
51
- %th queued
50
+ %th date
52
51
  %th status
53
52
  %th progress
54
53
  %th error
55
54
  %th.text-right size
56
- %th.text-right bitrate
55
+ %th.text-right rate
56
+ %th
57
57
 
58
58
  - if @only.nil? && !@jobs_queued.empty?
59
59
  = render :dashboard_jobs, {jobs: @jobs_queued, counts: @counts}
60
60
  %tr
61
- %th{colspan: 10}
61
+ %th{colspan: 12}
62
62
 
63
63
  = render :dashboard_jobs, {jobs: @jobs_current, counts: @counts}
64
64
 
@@ -3,7 +3,7 @@
3
3
  %table.table.table-striped.table-hover.table-condensed
4
4
 
5
5
  %tr
6
- %th counter
6
+ %th name
7
7
  %th.text-right value
8
8
 
9
9
  - $queue.counters.each do |name, value|
@@ -6,6 +6,7 @@
6
6
  - source_processing = job.get(:source_processing)
7
7
  - presented = present job, :with => RestFtpDaemon::API::Entities::JobPresenter, hide_params: true
8
8
  - errmsg = job.get :error_message
9
+ - method = job.get(:target_method)
9
10
 
10
11
  - if !job.error.nil?
11
12
  - trclass = "danger"
@@ -13,30 +14,25 @@
13
14
  - trclass = "info"
14
15
  - elsif job.status == :finished
15
16
  - trclass = "success"
17
+ - elsif job.status == :queued
18
+ - trclass = "active"
16
19
  - else
17
20
  - trclass = "warning"
18
21
 
19
22
  %tr{class: trclass}
20
23
 
21
- %td{title: presented.to_json}= job.id
22
-
23
- %td
24
- - unless job.priority.nil?
25
- = job.priority
26
-
27
- %td
28
- - unless job.wid.nil?
29
- .label.label-default.flag.worker-label= job.wid
24
+ %td{title: presented.to_json}
25
+ %b= job.id
30
26
 
31
27
  %td= job.label
32
28
 
33
29
  %td{title: job.get(:source_path)}
34
- =# Helpers.job_method_label job.get(:source_method)
35
30
  = Helpers.highlight_tokens job.source
36
31
 
32
+ %td
33
+ = Helpers.job_method_label method
34
+
37
35
  %td{title: job.get(:target_url)}
38
- = Helpers.job_method_label job.get(:target_method)
39
- =# job.target
40
36
  = Helpers.highlight_tokens job.target
41
37
 
42
38
  %td
@@ -44,8 +40,14 @@
44
40
 
45
41
  %td
46
42
  = job.status
47
- - if (source_count > 1) && (source_processed < source_count)
48
- %small= " #{source_processed}/#{source_count}"
43
+
44
+ -# if (source_count > 1) && (source_processed < source_count)
45
+ - if (source_processed < source_count)
46
+ %small= " (#{source_processed}/#{source_count})"
47
+
48
+ - unless source_processing.nil?
49
+ %br
50
+ %b= " #{source_processing}"
49
51
 
50
52
  %td
51
53
  - unless progress.nil?
@@ -57,8 +59,6 @@
57
59
  - unless job.error || job.status == :finished
58
60
  - unless progress.nil?
59
61
  = "#{progress}%"
60
- - unless source_processing.nil?
61
- %small= " (#{source_processing})"
62
62
  - else
63
63
  .error{title: errmsg}
64
64
  = Helpers.text_or_empty(job.error)
@@ -71,3 +71,10 @@
71
71
  - if (bitrate = job.get :transfer_bitrate)
72
72
  = Helpers.format_bytes(bitrate, "bps")
73
73
 
74
+ %td
75
+ - unless job.priority.nil?
76
+ .label.label-info.flag.worker-label= job.priority
77
+
78
+ - unless job.wid.nil?
79
+ %br
80
+ .label.label-warning.flag.worker-label= job.wid
@@ -8,7 +8,5 @@
8
8
 
9
9
  - tokens.each do |token, value|
10
10
  %tr
11
- %td
12
- = Helpers.tokenize(token)
13
- %td
14
- = value
11
+ %td= Helpers.tokenize token
12
+ %td= Helpers.hide_credentials_from_url value
@@ -8,21 +8,21 @@
8
8
  %th ID
9
9
  %th status
10
10
  %th job
11
- %th.text-right idle
11
+ %th.text-right updated
12
12
 
13
- - @gworker_statuses.each do |wid, infos|
14
- - status = infos[:status]
13
+ - @worker_vars.each do |wid, vars|
14
+ -# status = vars[:status]
15
15
  - style = styles[status] || ""
16
16
 
17
- - if infos[:active_at].is_a? Time
18
- - no_news_for = (Time.now - infos[:active_at]).round(0)
17
+ - if vars[:updted_at].is_a? Time
18
+ - no_news_for = (Time.now - vars[:updted_at]).round(0)
19
19
  - else
20
20
  - no_news_for = "?"
21
21
 
22
22
  %tr{class: style.to_s}
23
23
  %td= wid
24
- %td= infos[:status]
25
- %td= infos[:jobid]
24
+ %td= vars[:status]
25
+ %td= vars[:jobid]
26
26
  %td.text-right
27
27
  = no_news_for
28
28
  s
@@ -12,84 +12,106 @@ module RestFtpDaemon
12
12
 
13
13
  # Prepare status hash
14
14
  @statuses = {}
15
+ @workers = {}
15
16
 
16
17
  # Create worker threads
17
18
  info "WorkerPool initializing with #{number_threads} workers"
18
19
  @mutex = Mutex.new
19
20
  @counter = 0
20
21
 
21
- for wid in 1..number_threads
22
- Thread.new() do
23
- @mutex.synchronize do
24
- @counter +=1
25
- end
26
- work("w#{@counter}")
22
+ number_threads.times do
23
+ # Increment counter
24
+ @mutex.synchronize do
25
+ @counter +=1
26
+ end
27
+ name = "w#{@counter}"
28
+
29
+ th = Thread.new name do
30
+
31
+ # Set thread context
32
+ Thread.current[:name] = name
33
+ Thread.current[:vars] = {
34
+ started_at: Time.now,
35
+ }
36
+
37
+ # Start working
38
+ work
27
39
  end
40
+
41
+ # Add this worker to the ThreadGroup
42
+ @workers[name] = th
28
43
  end
29
44
 
30
45
  end
31
46
 
32
- def work wid
33
- worker_status wid, "starting"
47
+ def work
48
+ worker_status :starting
49
+
34
50
  loop do
35
51
 
36
52
  begin
37
- info "worker [#{wid}] waiting for a job"
53
+ info "waiting for a job"
38
54
 
39
55
  # Wait for a job to come into the queue
40
- worker_status wid, :waiting
56
+ worker_status :waiting
41
57
  job = $queue.pop
42
58
 
43
59
  # Do the job
44
- info "worker [#{wid}] processing [#{job.id}]"
45
- worker_status wid, :processing, job.id
46
- job.wid = wid
60
+ info "processing [#{job.id}]"
61
+
62
+ worker_status :processing, job.id
63
+ job.wid = Thread.current[:name]
47
64
  job.process
48
- info "worker [#{wid}] processed [#{job.id}]"
49
- # job.close
50
- worker_status wid, :done
65
+ info "processed [#{job.id}]"
66
+ job.wid = nil
67
+ worker_status :done
51
68
 
52
69
  # Increment total processed jobs count
53
70
  $queue.counter_inc :jobs_processed
54
71
 
55
72
  rescue Exception => ex
56
- worker_status wid, :crashed
73
+ worker_status :crashed
57
74
  info "UNHANDLED EXCEPTION: #{ex.message}"
58
75
  ex.backtrace.each do |line|
59
76
  info line, 1
60
77
  end
61
78
  sleep 1
79
+
62
80
  else
81
+ # Clean job status
82
+ worker_status :free
83
+ job.wid = nil
63
84
 
64
- # Clean job status
65
- worker_status wid, :ready
66
- job.wid = nil
67
85
  end
68
86
 
69
87
  end
70
88
  end
71
89
 
72
- def get_worker_statuses
73
- @mutex.synchronize do
74
- @statuses
90
+ def worker_vars
91
+ vars = {}
92
+
93
+ @workers.each do |name, thread|
94
+ #currents[thread.id] = thread.current
95
+ vars[thread[:name]] = thread[:vars]
75
96
  end
97
+
98
+ vars
76
99
  end
77
100
 
78
101
  protected
79
102
 
103
+ def ping
104
+ end
105
+
80
106
  def info message
81
107
  return if @logger.nil?
82
- @logger.info_with_id message
108
+ @logger.info_with_id message, id: Thread.current[:name]
83
109
  end
84
110
 
85
- def worker_status wid, status, jobid = nil
86
- @mutex.synchronize do
87
- @statuses[wid] ||= {}
88
- @statuses[wid][:status] = status
89
- @statuses[wid][:jobid] = jobid
90
- @statuses[wid][:active_at] = Time.now
91
- end
92
-
111
+ def worker_status status, jobid = nil
112
+ Thread.current[:vars][:status] = status
113
+ Thread.current[:vars][:jobid] = jobid
114
+ Thread.current[:vars][:updted_at] = Time.now
93
115
  end
94
116
 
95
117
  end
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.103.1
4
+ version: 0.104.5
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-02-03 00:00:00.000000000 Z
11
+ date: 2015-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler