rest-ftp-daemon 0.423.3 → 0.424.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +30 -0
  3. data/Gemfile.lock +9 -8
  4. data/README.md +1 -5
  5. data/bin/rest-ftp-daemon +11 -5
  6. data/defaults.yml +16 -10
  7. data/lib/rest-ftp-daemon.rb +14 -10
  8. data/lib/rest-ftp-daemon/api/jobs.rb +42 -18
  9. data/lib/rest-ftp-daemon/api/root.rb +5 -1
  10. data/lib/rest-ftp-daemon/constants.rb +0 -1
  11. data/lib/rest-ftp-daemon/{api/entities → entities}/job.rb +0 -0
  12. data/lib/rest-ftp-daemon/{api/entities → entities}/location.rb +0 -0
  13. data/lib/rest-ftp-daemon/{api/entities → entities}/options.rb +0 -0
  14. data/lib/rest-ftp-daemon/exceptions.rb +1 -0
  15. data/lib/rest-ftp-daemon/helpers/views.rb +7 -2
  16. data/lib/rest-ftp-daemon/initialize.rb +3 -0
  17. data/lib/rest-ftp-daemon/job.rb +3 -0
  18. data/lib/rest-ftp-daemon/jobs/transfer.rb +4 -4
  19. data/lib/rest-ftp-daemon/location.rb +5 -0
  20. data/lib/rest-ftp-daemon/remote/base.rb +76 -0
  21. data/lib/rest-ftp-daemon/remote/ftp.rb +144 -0
  22. data/lib/rest-ftp-daemon/remote/s3.rb +78 -0
  23. data/lib/rest-ftp-daemon/remote/sftp.rb +147 -0
  24. data/lib/rest-ftp-daemon/static/images/feature_reload.png +0 -0
  25. data/lib/rest-ftp-daemon/static/images/feature_rollbar.png +0 -0
  26. data/lib/rest-ftp-daemon/static/swagger/css/print.css +2 -2
  27. data/lib/rest-ftp-daemon/static/swagger/css/screen.css +2 -2
  28. data/lib/rest-ftp-daemon/views/dashboard_footer.haml +3 -2
  29. data/lib/rest-ftp-daemon/views/dashboard_jobs.haml +3 -3
  30. data/lib/rest-ftp-daemon/views/dashboard_table.haml +5 -4
  31. data/lib/rest-ftp-daemon/workers/reporter.rb +2 -2
  32. data/rest-ftp-daemon.gemspec +4 -7
  33. metadata +28 -25
  34. data/lib/rest-ftp-daemon/remote.rb +0 -74
  35. data/lib/rest-ftp-daemon/remote_ftp.rb +0 -142
  36. data/lib/rest-ftp-daemon/remote_s3.rb +0 -76
  37. data/lib/rest-ftp-daemon/remote_sftp.rb +0 -145
@@ -508,7 +508,7 @@
508
508
  clear: both;
509
509
  }
510
510
  .swagger-section .swagger-ui-wrap .body-textarea {
511
- width: 300px;
511
+ width: 200px;
512
512
  height: 100px;
513
513
  border: 1px solid #aaa;
514
514
  }
@@ -534,7 +534,7 @@
534
534
  font-weight: bold!important;
535
535
  }
536
536
  .swagger-section .swagger-ui-wrap input.parameter {
537
- width: 300px;
537
+ width: 200px;
538
538
  border: 1px solid #aaa;
539
539
  }
540
540
  .swagger-section .swagger-ui-wrap h1 {
@@ -508,7 +508,7 @@
508
508
  clear: both;
509
509
  }
510
510
  .swagger-section .swagger-ui-wrap .body-textarea {
511
- width: 300px;
511
+ width: 200px;
512
512
  height: 100px;
513
513
  border: 1px solid #aaa;
514
514
  }
@@ -534,7 +534,7 @@
534
534
  font-weight: bold!important;
535
535
  }
536
536
  .swagger-section .swagger-ui-wrap input.parameter {
537
- width: 300px;
537
+ width: 200px;
538
538
  border: 1px solid #aaa;
539
539
  }
540
540
  .swagger-section .swagger-ui-wrap h1 {
@@ -25,8 +25,9 @@
25
25
 
26
26
  .btn-group.btn-group-sm
27
27
  .btn.btn-default.btn-info Features
28
- = dashboard_feature :reload, Conf[:allow_reload], "configuration is hot-reloadable", "configuration changes at startup only"
29
- = dashboard_feature :newrelic, Conf.newrelic_enabled?, "active (license found)", "disabled"
28
+ = dashboard_feature :reload, Conf[:allow_reload], "ACTIVE (config is hot-reloadable)", "changes at startup only"
29
+ = dashboard_feature :newrelic, Conf.feature?(:newrelic), "ACTIVE (license found)", "disabled"
30
+ = dashboard_feature :rollbar, Conf.feature?(:rollbar), "ACTIVE (token found)", "disabled"
30
31
 
31
32
  .btn-group.btn-group-sm
32
33
  .btn.btn-default.btn-info IP
@@ -30,18 +30,18 @@
30
30
  %thead
31
31
  %tr
32
32
  %th ID
33
+ %th T
33
34
  %th pool
35
+ %th queued
34
36
  %th label
35
- %th type
36
37
  %th
37
38
  %th source
38
39
  %th
39
40
  %th target
40
- %th queued
41
41
  %th.error status
42
42
  %th{"min-width" => 120} detail
43
43
  %th.text-right size
44
- %th.text-right bitrate
44
+ %th.text-right rate
45
45
  %th{title: "Worker ID"} W
46
46
  %th{title: "Priority"} P
47
47
  %th{title: "Runs count"} R
@@ -19,15 +19,18 @@
19
19
  - trclass = "warning"
20
20
 
21
21
  %tr{class: trclass.to_s}
22
+
22
23
  %td
23
24
  %a{href: dashboard_job_url(job)}
24
25
  %b= job.id
25
26
 
27
+ %td= job_type job
28
+
26
29
  %td= job.pool
27
30
 
28
- %td= job.label
31
+ %td= datetime_short(job.queued_at)
29
32
 
30
- %td= job_type job
33
+ %td= job.label
31
34
 
32
35
  %td.text-right= location_label job.source_uri
33
36
  %td= token_highlight job.source
@@ -35,8 +38,6 @@
35
38
  %td.text-right= location_label job.target_uri
36
39
  %td= token_highlight job.target
37
40
 
38
- %td= datetime_short(job.queued_at)
39
-
40
41
  %td
41
42
  %span.push-status
42
43
  = job.status
@@ -10,7 +10,7 @@ module RestFtpDaemon
10
10
  config_section :reporter
11
11
 
12
12
  # Other configuration options
13
- @report_newrelic = Conf.newrelic_enabled?
13
+ @report_newrelic = Conf.feature?(:newrelic)
14
14
 
15
15
  # Check that everything is OK
16
16
  return "invalid timer" unless @config[:timer].to_i > 0
@@ -35,7 +35,7 @@ module RestFtpDaemon
35
35
 
36
36
  def do_metrics
37
37
  # What metrics to report?
38
- report_newrelic = Conf.newrelic_enabled?
38
+ report_newrelic = Conf.feature?(:newrelic)
39
39
 
40
40
  # Get common metrics and dump them to logs
41
41
  log_debug "begin metrics sample"
@@ -2,7 +2,7 @@
2
2
  Gem::Specification.new do |spec|
3
3
 
4
4
  # Project version
5
- spec.version = "0.423.3"
5
+ spec.version = "0.424.0"
6
6
 
7
7
  # Project description
8
8
  spec.name = "rest-ftp-daemon"
@@ -14,7 +14,6 @@ Gem::Specification.new do |spec|
14
14
  spec.licenses = ["MIT"]
15
15
  spec.date = Time.now.strftime("%Y-%m-%d")
16
16
 
17
-
18
17
  # List files and executables
19
18
  spec.files = `git ls-files -z`.
20
19
  split("\x0").
@@ -23,7 +22,6 @@ Gem::Specification.new do |spec|
23
22
  spec.require_paths = ["lib"]
24
23
  spec.required_ruby_version = ">= 2.2.2"
25
24
 
26
-
27
25
  # Development dependencies
28
26
  spec.add_development_dependency "bundler", "~> 1.6"
29
27
  spec.add_development_dependency "rake"
@@ -33,7 +31,7 @@ Gem::Specification.new do |spec|
33
31
  spec.add_development_dependency "http"
34
32
 
35
33
  # Runtime dependencies
36
- spec.add_runtime_dependency "bmc-daemon-lib", "~> 0.3.4"
34
+ spec.add_runtime_dependency "bmc-daemon-lib", "~> 0.3.8"
37
35
  spec.add_runtime_dependency "json", "~> 1.8"
38
36
  spec.add_runtime_dependency "thin", "~> 1.7"
39
37
  spec.add_runtime_dependency "activesupport", "~> 4.2"
@@ -44,20 +42,19 @@ Gem::Specification.new do |spec|
44
42
  spec.add_runtime_dependency "grape-swagger-entity"
45
43
  spec.add_runtime_dependency "grape-swagger-representable"
46
44
 
47
- spec.add_runtime_dependency "settingslogic"
48
45
  spec.add_runtime_dependency "rest-client", "~> 1.8"
49
46
  spec.add_runtime_dependency "api-auth"
50
47
  spec.add_runtime_dependency "haml"
51
48
  spec.add_runtime_dependency "facter"
52
49
  spec.add_runtime_dependency "sys-cpu"
53
50
  spec.add_runtime_dependency "get_process_mem"
54
- spec.add_runtime_dependency "newrelic_rpm"
55
51
 
52
+ spec.add_runtime_dependency "newrelic_rpm"
53
+ spec.add_runtime_dependency "rollbar"
56
54
 
57
55
  spec.add_runtime_dependency "net-sftp"
58
56
  spec.add_runtime_dependency "double-bag-ftps"
59
57
  spec.add_runtime_dependency "aws-sdk-resources", '~> 2'
60
-
61
58
  spec.add_runtime_dependency "streamio-ffmpeg"
62
59
 
63
60
  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.423.3
4
+ version: 0.424.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: 2016-09-06 00:00:00.000000000 Z
11
+ date: 2016-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.3.4
103
+ version: 0.3.8
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.3.4
110
+ version: 0.3.8
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: json
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -220,20 +220,6 @@ dependencies:
220
220
  - - ">="
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
- - !ruby/object:Gem::Dependency
224
- name: settingslogic
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - ">="
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :runtime
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- version: '0'
237
223
  - !ruby/object:Gem::Dependency
238
224
  name: rest-client
239
225
  requirement: !ruby/object:Gem::Requirement
@@ -332,6 +318,20 @@ dependencies:
332
318
  - - ">="
333
319
  - !ruby/object:Gem::Version
334
320
  version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: rollbar
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
335
  - !ruby/object:Gem::Dependency
336
336
  name: net-sftp
337
337
  requirement: !ruby/object:Gem::Requirement
@@ -396,6 +396,7 @@ executables:
396
396
  extensions: []
397
397
  extra_rdoc_files: []
398
398
  files:
399
+ - ".codeclimate.yml"
399
400
  - ".gitignore"
400
401
  - ".rspec"
401
402
  - ".rubocop.yml"
@@ -412,9 +413,6 @@ files:
412
413
  - lib/rest-ftp-daemon/api/config.rb
413
414
  - lib/rest-ftp-daemon/api/dashboard.rb
414
415
  - lib/rest-ftp-daemon/api/debug.rb
415
- - lib/rest-ftp-daemon/api/entities/job.rb
416
- - lib/rest-ftp-daemon/api/entities/location.rb
417
- - lib/rest-ftp-daemon/api/entities/options.rb
418
416
  - lib/rest-ftp-daemon/api/jobs.rb
419
417
  - lib/rest-ftp-daemon/api/root-real.rb
420
418
  - lib/rest-ftp-daemon/api/root-test.rb
@@ -422,10 +420,14 @@ files:
422
420
  - lib/rest-ftp-daemon/api/status.rb
423
421
  - lib/rest-ftp-daemon/constants.rb
424
422
  - lib/rest-ftp-daemon/counters.rb
423
+ - lib/rest-ftp-daemon/entities/job.rb
424
+ - lib/rest-ftp-daemon/entities/location.rb
425
+ - lib/rest-ftp-daemon/entities/options.rb
425
426
  - lib/rest-ftp-daemon/exceptions.rb
426
427
  - lib/rest-ftp-daemon/helpers/api.rb
427
428
  - lib/rest-ftp-daemon/helpers/common.rb
428
429
  - lib/rest-ftp-daemon/helpers/views.rb
430
+ - lib/rest-ftp-daemon/initialize.rb
429
431
  - lib/rest-ftp-daemon/job.rb
430
432
  - lib/rest-ftp-daemon/job_queue.rb
431
433
  - lib/rest-ftp-daemon/jobs/dummy.rb
@@ -437,10 +439,10 @@ files:
437
439
  - lib/rest-ftp-daemon/metrics.rb
438
440
  - lib/rest-ftp-daemon/notification.rb
439
441
  - lib/rest-ftp-daemon/paginate.rb
440
- - lib/rest-ftp-daemon/remote.rb
441
- - lib/rest-ftp-daemon/remote_ftp.rb
442
- - lib/rest-ftp-daemon/remote_s3.rb
443
- - lib/rest-ftp-daemon/remote_sftp.rb
442
+ - lib/rest-ftp-daemon/remote/base.rb
443
+ - lib/rest-ftp-daemon/remote/ftp.rb
444
+ - lib/rest-ftp-daemon/remote/s3.rb
445
+ - lib/rest-ftp-daemon/remote/sftp.rb
444
446
  - lib/rest-ftp-daemon/static/config.json
445
447
  - lib/rest-ftp-daemon/static/css/bootstrap.min.css
446
448
  - lib/rest-ftp-daemon/static/css/bootstrap.old.css
@@ -452,6 +454,7 @@ files:
452
454
  - lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.woff2
453
455
  - lib/rest-ftp-daemon/static/images/feature_newrelic.png
454
456
  - lib/rest-ftp-daemon/static/images/feature_reload.png
457
+ - lib/rest-ftp-daemon/static/images/feature_rollbar.png
455
458
  - lib/rest-ftp-daemon/static/swagger.html
456
459
  - lib/rest-ftp-daemon/static/swagger/css/print.css
457
460
  - lib/rest-ftp-daemon/static/swagger/css/reset.css
@@ -1,74 +0,0 @@
1
- # Handles transfers for Job class
2
- module RestFtpDaemon
3
- class Remote
4
- include BmcDaemonLib::LoggerHelper
5
-
6
- # Class options
7
- attr_reader :logger
8
- attr_reader :log_prefix
9
- attr_accessor :job
10
-
11
- # Delegate set_info info to Job
12
- delegate :set_info, to: :job
13
-
14
- def initialize target, log_prefix, debug = false, ftpes = false
15
- # Init
16
- @target = target
17
- @ftpes = ftpes
18
- @debug = !!debug
19
-
20
- # Build and empty job to protect set_info delegation
21
- @job = Job.new(nil, {})
22
-
23
- # Logger
24
- @log_prefix = log_prefix || {}
25
- @logger = BmcDaemonLib::LoggerPool.instance.get :transfer
26
-
27
- # Annnounce object
28
- log_info "Remote.initialize debug[#{debug}] target[#{target.path}] "
29
-
30
- # Prepare real object
31
- prepare
32
- end
33
-
34
- def prepare
35
- end
36
-
37
- def connect
38
- # Debug mode ?
39
- return unless @debug
40
- puts
41
- puts "-------------------- SESSION STARTING -------------------------"
42
- puts "class\t #{myname}"
43
- puts "host\t #{@target.host}"
44
- puts "user\t #{@target.user}"
45
- puts "port\t #{@target.port}"
46
- puts "---------------------------------------------------------------"
47
- end
48
-
49
- def chdir_or_create directory, mkdir = false
50
- end
51
-
52
- def remove! target
53
- end
54
-
55
- def close
56
- # Debug mode ?
57
- return unless @debug
58
- puts "-------------------- SESSION CLOSING --------------------------"
59
- end
60
-
61
- private
62
-
63
- def extract_parent path
64
- return unless path.is_a? String
65
- m = path.match(/^(.*)\/([^\/]+)\/?$/)
66
- return m[1], m[2] unless m.nil?
67
- end
68
-
69
- def myname
70
- self.class.to_s
71
- end
72
-
73
- end
74
- end
@@ -1,142 +0,0 @@
1
- require "net/ftp"
2
- require "double_bag_ftps"
3
-
4
- # Handle FTP and FTPeS transfers for Remote class
5
- module RestFtpDaemon
6
- class RemoteFTP < Remote
7
-
8
- # Class options
9
- attr_reader :ftp
10
-
11
- def prepare
12
- # Create FTP object
13
- if @ftpes
14
- prepare_ftpes
15
- else
16
- prepare_ftp
17
- end
18
- @ftp.passive = true
19
- @ftp.debug_mode = @debug
20
-
21
- # Config
22
- @chunk_size = DEFAULT_FTP_CHUNK.to_i * 1024
23
-
24
- # Announce object
25
- log_debug "RemoteFTP.prepare chunk_size:#{@chunk_size}"
26
- end
27
-
28
- def connect
29
- super
30
-
31
- # Connect remote server
32
- @ftp.connect @target.host, @target.port
33
- @ftp.login @target.user, @target.password
34
- end
35
-
36
- def present? target
37
- size = @ftp.size target.path
38
- log_debug "RemoteFTP.present? [#{target.name}]"
39
-
40
- rescue Net::FTPPermError
41
- return false
42
- else
43
- return size
44
- end
45
-
46
- def remove! target
47
- @ftp.delete target.path
48
- rescue Net::FTPPermError
49
- log_debug "RemoteFTP.remove! [#{target.name}] not found"
50
- else
51
- log_debug "RemoteFTP.remove! [#{target.name}] removed"
52
- end
53
-
54
- def mkdir directory
55
- log_debug "RemoteFTP.mkdir [#{directory}]"
56
- @ftp.mkdir directory
57
-
58
- rescue StandardError => ex
59
- raise TargetPermissionError, ex.message
60
- end
61
-
62
- def chdir_or_create directory, mkdir = false
63
- # Init, extract my parent name and my own name
64
- log_debug "RemoteFTP.chdir_or_create mkdir[#{mkdir}] dir[#{directory}]"
65
- parent, current = extract_parent(directory)
66
-
67
- #dirname, _current = extract_parent(directory)
68
-
69
-
70
- # Access this directory
71
- begin
72
- @ftp.chdir "/#{directory}"
73
-
74
- rescue Net::FTPPermError => _e
75
- # If not allowed to create path, that's over, we're stuck
76
- return false unless mkdir
77
- chdir_or_create parent, mkdir
78
-
79
- # Now I was able to chdir into my parent, create the current directory
80
- mkdir current
81
-
82
- # Finally retry the chdir
83
- retry
84
- else
85
- return true
86
- end
87
- end
88
-
89
- def upload source, target, use_temp_name = false, &callback
90
- # Push init
91
- raise RestFtpDaemon::AssertionFailed, "upload/ftp" if @ftp.nil?
92
-
93
- # Temp file if needed
94
- dest = target.clone
95
- if use_temp_name
96
- dest.generate_temp_name!
97
- end
98
-
99
- # Move to the directory
100
- log_debug "RemoteFTP.upload chdir [#{dest.dir}]"
101
- @ftp.chdir "/#{dest.dir}"
102
-
103
- # Do the transfer
104
- log_debug "RemoteFTP.upload putbinaryfile [#{dest.name}]"
105
- @ftp.putbinaryfile source.path, dest.name, @chunk_size do |data|
106
- # Update job status after this block transfer
107
- yield data.bytesize, dest.name
108
- end
109
-
110
- # Move the file back to its original name
111
- if use_temp_name
112
- log_debug "RemoteFTP.upload rename [#{dest.name}] > [#{target.name}]"
113
- @ftp.rename dest.name, target.name
114
- end
115
- end
116
-
117
- def close
118
- # Close init
119
- super
120
-
121
- # Close FTP connexion and free up memory
122
- @ftp.close
123
- end
124
-
125
- def connected?
126
- !@ftp.welcome.nil?
127
- end
128
-
129
- private
130
-
131
- def prepare_ftp
132
- @ftp = Net::FTP.new
133
- end
134
-
135
- def prepare_ftpes
136
- @ftp = DoubleBagFTPS.new
137
- @ftp.ssl_context = DoubleBagFTPS.create_ssl_context(verify_mode: OpenSSL::SSL::VERIFY_NONE)
138
- @ftp.ftps_mode = DoubleBagFTPS::EXPLICIT
139
- end
140
-
141
- end
142
- end