rest-ftp-daemon 0.400.0 → 0.410.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +26 -6
- data/Rakefile +5 -3
- data/bin/rest-ftp-daemon +2 -1
- data/config.ru +8 -2
- data/lib/rest-ftp-daemon.rb +10 -2
- data/lib/rest-ftp-daemon/api/debug.rb +17 -5
- data/lib/rest-ftp-daemon/api/{job_presenter.rb → entities/job.rb} +25 -2
- data/lib/rest-ftp-daemon/api/entities/options.rb +15 -0
- data/lib/rest-ftp-daemon/api/jobs.rb +46 -13
- data/lib/rest-ftp-daemon/api/root-real.rb +80 -0
- data/lib/rest-ftp-daemon/api/root-test.rb +69 -0
- data/lib/rest-ftp-daemon/api/root.rb +21 -5
- data/lib/rest-ftp-daemon/constants.rb +18 -1
- data/lib/rest-ftp-daemon/counters.rb +0 -3
- data/lib/rest-ftp-daemon/exceptions.rb +16 -12
- data/lib/rest-ftp-daemon/helpers/api.rb +3 -3
- data/lib/rest-ftp-daemon/helpers/common.rb +12 -5
- data/lib/rest-ftp-daemon/helpers/views.rb +41 -11
- data/lib/rest-ftp-daemon/job.rb +118 -420
- data/lib/rest-ftp-daemon/job_queue.rb +34 -5
- data/lib/rest-ftp-daemon/jobs/dummy.rb +20 -0
- data/lib/rest-ftp-daemon/jobs/transfer.rb +319 -0
- data/lib/rest-ftp-daemon/jobs/video.rb +107 -0
- data/lib/rest-ftp-daemon/location.rb +125 -0
- data/lib/rest-ftp-daemon/path.rb +3 -0
- data/lib/rest-ftp-daemon/remote_ftp.rb +2 -2
- data/lib/rest-ftp-daemon/remote_sftp.rb +2 -2
- data/lib/rest-ftp-daemon/static/config.json +411 -0
- data/lib/rest-ftp-daemon/static/css/bootstrap.min.css +14 -0
- data/lib/rest-ftp-daemon/static/css/{bootstrap.css → bootstrap.old.css} +0 -0
- data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.svg +288 -0
- data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/rest-ftp-daemon/static/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/lib/rest-ftp-daemon/static/swagger.html +83 -0
- data/lib/rest-ftp-daemon/static/swagger/css/print.css +1362 -0
- data/lib/rest-ftp-daemon/static/swagger/css/reset.css +125 -0
- data/lib/rest-ftp-daemon/static/swagger/css/screen.css +1489 -0
- data/lib/rest-ftp-daemon/static/swagger/css/style.css +250 -0
- data/lib/rest-ftp-daemon/static/swagger/css/typography.css +14 -0
- data/lib/rest-ftp-daemon/static/swagger/fonts/DroidSans-Bold.ttf +0 -0
- data/lib/rest-ftp-daemon/static/swagger/fonts/DroidSans.ttf +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/collapse.gif +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/expand.gif +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/explorer_icons.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/favicon-16x16.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/favicon-32x32.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/favicon.ico +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/logo_small.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/pet_store_api.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/throbber.gif +0 -0
- data/lib/rest-ftp-daemon/static/swagger/images/wordnik_api.png +0 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/backbone-min.js +15 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/es5-shim.js +2065 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/handlebars-4.0.5.js +4608 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/highlight.9.1.0.pack.js +2 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/highlight.9.1.0.pack_extended.js +34 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/jquery-1.8.0.min.js +2 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/jquery.ba-bbq.min.js +18 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/jquery.slideto.min.js +1 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/jquery.wiggle.min.js +8 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/js-yaml.min.js +3 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/jsoneditor.min.js +11 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/lodash.min.js +102 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/marked.js +1272 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/object-assign-pollyfill.js +23 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/swagger-oauth.js +347 -0
- data/lib/rest-ftp-daemon/static/swagger/lib/swagger-ui.min.js +10 -0
- data/lib/rest-ftp-daemon/uri.rb +9 -1
- data/lib/rest-ftp-daemon/views/dashboard.haml +1 -1
- data/lib/rest-ftp-daemon/views/dashboard_footer.haml +6 -3
- data/lib/rest-ftp-daemon/views/dashboard_jobs.haml +3 -3
- data/lib/rest-ftp-daemon/views/dashboard_table.haml +25 -20
- data/lib/rest-ftp-daemon/workers/transfer.rb +14 -0
- data/rest-ftp-daemon.gemspec +14 -4
- data/spec/rest-ftp-daemon/features/swagger_spec.rb +24 -0
- data/spec/spec_helper.rb +4 -4
- metadata +119 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aef3a9c63e1ea02a0a3c79704750ab76ee2c8808
|
4
|
+
data.tar.gz: 9caa5c76fda9ae48b13a74d668967648a2c50e1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d24876af6c2818633132aef618fe808c1f09d4f624c01c436dfcd1217e455eaaa851fd07381cbe9f8f3b3f9aa54bd6ea54384f8ce8dcb556a29acb32f9e96349
|
7
|
+
data.tar.gz: b2de79768b659cec1428f37ef3ae42f23d7c0ff6c8c282c8bf148a8e178017f7ac2d87a538849f8d6f554d3c8a7f0b59651f0edf291f5db20cc111f4e86ccd71
|
data/Gemfile.lock
CHANGED
@@ -1,21 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rest-ftp-daemon (0.
|
4
|
+
rest-ftp-daemon (0.410.0.pre.1)
|
5
5
|
activesupport (~> 4.2)
|
6
6
|
api-auth
|
7
|
-
bmc-daemon-lib (~> 0.3.
|
7
|
+
bmc-daemon-lib (~> 0.3.4)
|
8
8
|
double-bag-ftps
|
9
9
|
facter
|
10
10
|
get_process_mem
|
11
11
|
grape
|
12
12
|
grape-entity
|
13
|
+
grape-swagger
|
14
|
+
grape-swagger-entity
|
15
|
+
grape-swagger-representable
|
13
16
|
haml
|
14
17
|
json (~> 1.8)
|
15
18
|
net-sftp
|
16
19
|
newrelic_rpm
|
17
20
|
rest-client (~> 1.8)
|
18
21
|
settingslogic
|
22
|
+
streamio-ffmpeg
|
19
23
|
sys-cpu
|
20
24
|
thin (~> 1.7)
|
21
25
|
|
@@ -38,20 +42,22 @@ GEM
|
|
38
42
|
descendants_tracker (~> 0.0.4)
|
39
43
|
ice_nine (~> 0.11.0)
|
40
44
|
thread_safe (~> 0.3, >= 0.3.1)
|
41
|
-
bmc-daemon-lib (0.3.
|
45
|
+
bmc-daemon-lib (0.3.4)
|
42
46
|
chamber (~> 2.9)
|
43
47
|
builder (3.2.2)
|
44
|
-
chamber (2.9.
|
48
|
+
chamber (2.9.1)
|
45
49
|
hashie (~> 3.3)
|
46
50
|
thor (~> 0.19.1)
|
47
51
|
coderay (1.1.1)
|
48
52
|
coercible (1.0.0)
|
49
53
|
descendants_tracker (~> 0.0.1)
|
50
54
|
daemons (1.2.4)
|
55
|
+
declarative (0.0.8)
|
56
|
+
uber (>= 0.0.15)
|
51
57
|
descendants_tracker (0.0.4)
|
52
58
|
thread_safe (~> 0.3, >= 0.3.1)
|
53
59
|
diff-lcs (1.2.5)
|
54
|
-
domain_name (0.5.
|
60
|
+
domain_name (0.5.20160826)
|
55
61
|
unf (>= 0.0.5, < 1.0.0)
|
56
62
|
double-bag-ftps (0.1.3)
|
57
63
|
enumerable-lazy (0.0.1)
|
@@ -74,6 +80,14 @@ GEM
|
|
74
80
|
grape-entity (0.5.1)
|
75
81
|
activesupport
|
76
82
|
multi_json (>= 1.3.2)
|
83
|
+
grape-swagger (0.23.0)
|
84
|
+
grape (>= 0.12.0)
|
85
|
+
grape-swagger-entity (0.1.4)
|
86
|
+
grape-entity
|
87
|
+
grape-swagger (>= 0.20.4)
|
88
|
+
grape-swagger-representable (0.1.3)
|
89
|
+
grape-swagger (>= 0.20.2)
|
90
|
+
representable
|
77
91
|
haml (4.0.7)
|
78
92
|
tilt
|
79
93
|
hashie (3.4.4)
|
@@ -100,7 +114,7 @@ GEM
|
|
100
114
|
net-ssh (>= 2.6.5)
|
101
115
|
net-ssh (3.2.0)
|
102
116
|
netrc (0.11.0)
|
103
|
-
newrelic_rpm (3.16.
|
117
|
+
newrelic_rpm (3.16.2.321)
|
104
118
|
parser (2.3.1.2)
|
105
119
|
ast (~> 2.2)
|
106
120
|
powerpack (0.1.1)
|
@@ -113,6 +127,9 @@ GEM
|
|
113
127
|
rack (>= 0.4)
|
114
128
|
rainbow (2.1.0)
|
115
129
|
rake (11.2.2)
|
130
|
+
representable (3.0.0)
|
131
|
+
declarative (~> 0.0.5)
|
132
|
+
uber (~> 0.0.15)
|
116
133
|
rest-client (1.8.0)
|
117
134
|
http-cookie (>= 1.0.2, < 2.0)
|
118
135
|
mime-types (>= 1.16, < 3.0)
|
@@ -139,6 +156,8 @@ GEM
|
|
139
156
|
ruby-progressbar (1.8.1)
|
140
157
|
settingslogic (2.0.9)
|
141
158
|
slop (3.6.0)
|
159
|
+
streamio-ffmpeg (2.1.0)
|
160
|
+
multi_json (~> 1.8)
|
142
161
|
sys-cpu (0.7.2)
|
143
162
|
ffi
|
144
163
|
thin (1.7.0)
|
@@ -150,6 +169,7 @@ GEM
|
|
150
169
|
tilt (2.0.5)
|
151
170
|
tzinfo (1.2.2)
|
152
171
|
thread_safe (~> 0.1)
|
172
|
+
uber (0.0.15)
|
153
173
|
unf (0.1.4)
|
154
174
|
unf_ext
|
155
175
|
unf_ext (0.0.7.2)
|
data/Rakefile
CHANGED
@@ -5,12 +5,14 @@ require "rubygems"
|
|
5
5
|
require "rspec/core/rake_task"
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
7
7
|
|
8
|
-
# Run specs by default
|
9
|
-
desc "Run all tests"
|
10
|
-
|
11
8
|
require "rubocop/rake_task"
|
12
9
|
RuboCop::RakeTask.new(:rubocop) do |task|
|
13
10
|
task.fail_on_error = false
|
14
11
|
end
|
15
12
|
|
13
|
+
# Load my own tasks
|
14
|
+
# Dir.glob('lib/tasks/*.rake').each { |r| import r }
|
15
|
+
|
16
|
+
# Run specs by default
|
17
|
+
desc "Run all tests"
|
16
18
|
task default: [:spec, :rubocop]
|
data/bin/rest-ftp-daemon
CHANGED
data/config.ru
CHANGED
@@ -12,7 +12,14 @@ unless Conf[:adminpwd].nil?
|
|
12
12
|
end
|
13
13
|
|
14
14
|
# Serve static assets
|
15
|
-
use Rack::Static,
|
15
|
+
use Rack::Static, root: "#{Conf.app_libs}/static/", urls: [
|
16
|
+
"/css/",
|
17
|
+
"/js/",
|
18
|
+
"/fonts/",
|
19
|
+
"/images/",
|
20
|
+
"/swagger/",
|
21
|
+
MOUNT_SWAGGER_UI,
|
22
|
+
]
|
16
23
|
|
17
24
|
# Rack reloader and mini-profiler
|
18
25
|
unless Conf.app_env == "production"
|
@@ -20,7 +27,6 @@ unless Conf.app_env == "production"
|
|
20
27
|
# use Rack::MiniProfiler
|
21
28
|
end
|
22
29
|
|
23
|
-
|
24
30
|
# Initialize workers
|
25
31
|
RestFtpDaemon::WorkerPool.instance.start_em_all
|
26
32
|
|
data/lib/rest-ftp-daemon.rb
CHANGED
@@ -26,21 +26,29 @@ require_relative "rest-ftp-daemon/paginate"
|
|
26
26
|
require_relative "rest-ftp-daemon/uri"
|
27
27
|
require_relative "rest-ftp-daemon/job_queue"
|
28
28
|
require_relative "rest-ftp-daemon/counters"
|
29
|
-
require_relative "rest-ftp-daemon/job"
|
30
29
|
require_relative "rest-ftp-daemon/notification"
|
31
30
|
|
32
31
|
require_relative "rest-ftp-daemon/path"
|
32
|
+
require_relative "rest-ftp-daemon/location"
|
33
|
+
|
33
34
|
require_relative "rest-ftp-daemon/remote"
|
34
35
|
require_relative "rest-ftp-daemon/remote_ftp"
|
35
36
|
require_relative "rest-ftp-daemon/remote_sftp"
|
36
37
|
|
38
|
+
require_relative "rest-ftp-daemon/job"
|
39
|
+
require_relative "rest-ftp-daemon/jobs/dummy"
|
40
|
+
require_relative "rest-ftp-daemon/jobs/transfer"
|
41
|
+
require_relative "rest-ftp-daemon/jobs/video"
|
42
|
+
|
37
43
|
require_relative "rest-ftp-daemon/worker_pool"
|
38
44
|
require_relative "rest-ftp-daemon/workers/worker"
|
39
45
|
require_relative "rest-ftp-daemon/workers/conchita"
|
40
46
|
require_relative "rest-ftp-daemon/workers/reporter"
|
41
47
|
require_relative "rest-ftp-daemon/workers/transfer"
|
42
48
|
|
43
|
-
require_relative "rest-ftp-daemon/api/
|
49
|
+
require_relative "rest-ftp-daemon/api/entities/options"
|
50
|
+
require_relative "rest-ftp-daemon/api/entities/job"
|
51
|
+
|
44
52
|
require_relative "rest-ftp-daemon/api/jobs"
|
45
53
|
require_relative "rest-ftp-daemon/api/dashboard"
|
46
54
|
require_relative "rest-ftp-daemon/api/status"
|
@@ -23,7 +23,7 @@ module RestFtpDaemon
|
|
23
23
|
me[:error] = job.error.encoding.to_s unless job.error.nil?
|
24
24
|
me[:status] = job.status.encoding.to_s unless job.status.nil?
|
25
25
|
|
26
|
-
Job::FIELDS.each do |name|
|
26
|
+
RestFtpDaemon::Job::FIELDS.each do |name|
|
27
27
|
value = job.send(name)
|
28
28
|
me[name] = value.encoding.to_s if value.is_a? String
|
29
29
|
end
|
@@ -37,13 +37,25 @@ module RestFtpDaemon
|
|
37
37
|
end
|
38
38
|
|
39
39
|
### ENDPOINTS
|
40
|
-
desc "debug"
|
40
|
+
desc "debug"#, hidden: true
|
41
41
|
get "/" do
|
42
|
-
|
43
|
-
|
42
|
+
|
43
|
+
# Extract routes
|
44
|
+
routes = []
|
45
|
+
RestFtpDaemon::API::Root.routes.each do |route|
|
46
|
+
routes << {
|
47
|
+
url: "#{route.options[:method]} #{route.pattern.path}",
|
48
|
+
vars: route.instance_variables,
|
49
|
+
options: route.options
|
50
|
+
}
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
# Build response
|
55
|
+
return {
|
44
56
|
metrics: debug_metrics,
|
45
|
-
routes: RestFtpDaemon::API::Root.routes,
|
46
57
|
encodings: debug_encodings,
|
58
|
+
routes: routes,
|
47
59
|
}
|
48
60
|
end
|
49
61
|
|
@@ -3,12 +3,13 @@ require "grape-entity"
|
|
3
3
|
module RestFtpDaemon
|
4
4
|
module API
|
5
5
|
module Entities
|
6
|
-
class
|
6
|
+
class Job < Grape::Entity
|
7
|
+
|
7
8
|
# Job ID
|
8
9
|
expose :id
|
9
10
|
|
10
11
|
# Job specific attributes and flags
|
11
|
-
Job::FIELDS.each { |name| expose name }
|
12
|
+
RestFtpDaemon::Job::FIELDS.each { |name| expose name }
|
12
13
|
|
13
14
|
# Technical fields
|
14
15
|
expose :wid, unless: lambda { |object, _options| object.wid.nil? }
|
@@ -30,6 +31,28 @@ module RestFtpDaemon
|
|
30
31
|
# Params
|
31
32
|
expose :infos, unless: :hide_infos
|
32
33
|
|
34
|
+
# Options
|
35
|
+
# expose :options, using: API::Entities::Options
|
36
|
+
# expose :video_ac
|
37
|
+
# expose :video_custom
|
38
|
+
|
39
|
+
# with_options(format_with: :iso_timestamp) do
|
40
|
+
# expose :created_at
|
41
|
+
# expose :updated_at
|
42
|
+
# end
|
43
|
+
|
44
|
+
# expose :age do
|
45
|
+
# end
|
46
|
+
|
47
|
+
# expose :slots do |station,options|
|
48
|
+
# station.slots.map{ |slot| SlotEntity.new(slot).serializable_hash }
|
49
|
+
# end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def priv_func
|
54
|
+
end
|
55
|
+
|
33
56
|
end
|
34
57
|
end
|
35
58
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "grape-entity"
|
2
|
+
|
3
|
+
module RestFtpDaemon
|
4
|
+
module API
|
5
|
+
module Entities
|
6
|
+
class Options < Grape::Entity
|
7
|
+
|
8
|
+
# expose :opt1, documentation: { type: 'Boolean', desc: 'opt UN', required: false }
|
9
|
+
expose :opt2
|
10
|
+
# expose :opt6
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,7 +5,11 @@ module RestFtpDaemon
|
|
5
5
|
class Jobs < Grape::API
|
6
6
|
|
7
7
|
### ENDPOINTS
|
8
|
-
desc "Read job with ID"
|
8
|
+
desc "Read job with ID", http_codes: [
|
9
|
+
{ code: 200, message: "Here is the job you requested" },
|
10
|
+
{ code: 404, message: "Job not found" }
|
11
|
+
],
|
12
|
+
is_array: false
|
9
13
|
params do
|
10
14
|
requires :id, type: String, desc: "ID of the Job to read"
|
11
15
|
end
|
@@ -16,6 +20,8 @@ module RestFtpDaemon
|
|
16
20
|
job = RestFtpDaemon::JobQueue.instance.find_by_id(params[:id]) || RestFtpDaemon::JobQueue.instance.find_by_id(params[:id], true)
|
17
21
|
raise RestFtpDaemon::JobNotFound if job.nil?
|
18
22
|
|
23
|
+
log_debug "found job: #{job.inspect}"
|
24
|
+
|
19
25
|
rescue RestFtpDaemon::JobNotFound => exception
|
20
26
|
log_error "JobNotFound: #{exception.message}"
|
21
27
|
error!({ error: :api_job_not_found, message: exception.message }, 404)
|
@@ -26,12 +32,15 @@ module RestFtpDaemon
|
|
26
32
|
|
27
33
|
else
|
28
34
|
status 200
|
29
|
-
present job, with: RestFtpDaemon::API::Entities::
|
35
|
+
present job, with: RestFtpDaemon::API::Entities::Job, type: "complete"
|
30
36
|
|
31
37
|
end
|
32
38
|
end
|
33
39
|
|
34
|
-
desc "List all Jobs"
|
40
|
+
desc "List all Jobs", http_codes: [
|
41
|
+
{ code: 200, message: "Here are the jobs you requested" },
|
42
|
+
],
|
43
|
+
is_array: true
|
35
44
|
get "/" do
|
36
45
|
begin
|
37
46
|
# Get jobs to display
|
@@ -43,7 +52,7 @@ module RestFtpDaemon
|
|
43
52
|
|
44
53
|
else
|
45
54
|
status 200
|
46
|
-
present jobs, with: RestFtpDaemon::API::Entities::
|
55
|
+
present jobs, with: RestFtpDaemon::API::Entities::Job
|
47
56
|
|
48
57
|
end
|
49
58
|
end
|
@@ -52,10 +61,31 @@ module RestFtpDaemon
|
|
52
61
|
params do
|
53
62
|
requires :source, type: String, desc: "Source file pattern"
|
54
63
|
requires :target, type: String, desc: "Target remote path"
|
64
|
+
|
55
65
|
optional :label, type: String, desc: "Descriptive label for this job"
|
56
66
|
optional :notify, type: String, desc: "URL to get POST'ed notifications back"
|
57
67
|
optional :priority, type: Integer, desc: "Priority level of the job (lower is stronger)"
|
58
68
|
optional :pool, type: String, desc: "Pool of worker to be used"
|
69
|
+
optional :type,
|
70
|
+
type: String,
|
71
|
+
desc: "Type of job",
|
72
|
+
default: JOB_TYPE_TRANSFER,
|
73
|
+
values: {value: JOB_TYPES, message: "should be one of: #{JOB_TYPES.join', '}"},
|
74
|
+
allow_blank: { value: false, message: 'cannot be empty' }
|
75
|
+
|
76
|
+
optional :video_vc,
|
77
|
+
type: String,
|
78
|
+
desc: "video: video codec",
|
79
|
+
default: ""
|
80
|
+
optional :video_ac,
|
81
|
+
type: String,
|
82
|
+
desc: "video: audio codec",
|
83
|
+
default: ""
|
84
|
+
optional :video_custom,
|
85
|
+
type: Hash,
|
86
|
+
desc: "video: custom options passed to FFMPEG encoder",
|
87
|
+
default: {}
|
88
|
+
|
59
89
|
optional :overwrite,
|
60
90
|
type: Boolean,
|
61
91
|
desc: "Overwrites files at target server",
|
@@ -68,16 +98,15 @@ module RestFtpDaemon
|
|
68
98
|
type: Boolean,
|
69
99
|
desc: "Upload to a temp file before renaming it to the target filename",
|
70
100
|
default: Conf.at(:transfer, :tempfile)
|
101
|
+
# optional :options, desc: "", type: API::Entities::Options
|
102
|
+
|
71
103
|
end
|
104
|
+
|
72
105
|
post "/" do
|
73
106
|
# log_debug params.to_json
|
74
107
|
begin
|
75
|
-
#
|
76
|
-
|
77
|
-
job = Job.new(job_id, params)
|
78
|
-
|
79
|
-
# And push it to the queue
|
80
|
-
RestFtpDaemon::JobQueue.instance.push job
|
108
|
+
# Add up the new job on the queue
|
109
|
+
job = RestFtpDaemon::JobQueue.instance.create_job(params)
|
81
110
|
|
82
111
|
# Increment a counter
|
83
112
|
RestFtpDaemon::Counters.instance.increment :jobs, :received
|
@@ -86,13 +115,17 @@ module RestFtpDaemon
|
|
86
115
|
log_error "JSON::ParserError: #{exception.message}"
|
87
116
|
error!({error: :api_parse_error, message: exception.message}, 422)
|
88
117
|
|
118
|
+
rescue QueueCantCreateJob => exception
|
119
|
+
log_error "QueueCantCreateJob: #{exception.message}"
|
120
|
+
error!({error: :api_cant_create_job, message: exception.message}, 422)
|
121
|
+
|
89
122
|
rescue RestFtpDaemonException => exception
|
90
|
-
log_error "
|
91
|
-
error!({error:
|
123
|
+
log_error "#{exception.class.to_s} #{exception.message}"
|
124
|
+
error!({error: exception_to_error(exception), message: exception.message}, 500)
|
92
125
|
|
93
126
|
else
|
94
127
|
status 201
|
95
|
-
present job, with: RestFtpDaemon::API::Entities::
|
128
|
+
present job, with: RestFtpDaemon::API::Entities::Job, hide_params: true
|
96
129
|
|
97
130
|
end
|
98
131
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require "grape"
|
2
|
+
require 'grape-swagger'
|
3
|
+
|
4
|
+
module RestFtpDaemon
|
5
|
+
module API
|
6
|
+
class Root < Grape::API
|
7
|
+
include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
8
|
+
|
9
|
+
### LOGGING & HELPERS
|
10
|
+
helpers RestFtpDaemon::CommonHelpers
|
11
|
+
helpers RestFtpDaemon::ApiHelpers
|
12
|
+
helpers BmcDaemonLib::LoggerHelper
|
13
|
+
|
14
|
+
helpers do
|
15
|
+
def log_prefix
|
16
|
+
['API', nil, nil]
|
17
|
+
end
|
18
|
+
|
19
|
+
def logger
|
20
|
+
Root.logger
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
before do
|
25
|
+
log_request
|
26
|
+
end
|
27
|
+
|
28
|
+
### CLASS CONFIG
|
29
|
+
logger BmcDaemonLib::LoggerPool.instance.get :api
|
30
|
+
do_not_route_head!
|
31
|
+
do_not_route_options!
|
32
|
+
# version 'v1'
|
33
|
+
format :json
|
34
|
+
content_type :json, 'application/json; charset=utf-8'
|
35
|
+
|
36
|
+
|
37
|
+
desc 'API Root'
|
38
|
+
|
39
|
+
### MOUNTPOINTS
|
40
|
+
# mount RestFtpDaemon::API::Status => MOUNT_STATUS
|
41
|
+
# mount RestFtpDaemon::API::Jobs => MOUNT_JOBS
|
42
|
+
# mount RestFtpDaemon::API::Dashbaord => MOUNT_BOARD
|
43
|
+
# mount RestFtpDaemon::API::Config => MOUNT_CONFIG
|
44
|
+
# mount RestFtpDaemon::API::Debug => MOUNT_DEBUG
|
45
|
+
|
46
|
+
|
47
|
+
### API Documentation
|
48
|
+
add_swagger_documentation hide_documentation_path: true,
|
49
|
+
api_version: BmcDaemonLib::Conf.app_ver,
|
50
|
+
doc_version: BmcDaemonLib::Conf.app_ver,
|
51
|
+
mount_path: MOUNT_SWAGGER_JSON,
|
52
|
+
info: {
|
53
|
+
title: BmcDaemonLib::Conf.app_name,
|
54
|
+
version: BmcDaemonLib::Conf.app_ver,
|
55
|
+
description: "API description for #{BmcDaemonLib::Conf.app_name} #{BmcDaemonLib::Conf.app_ver}",
|
56
|
+
}
|
57
|
+
# models: [
|
58
|
+
# RestFtpDaemon::API::Entities::Job,
|
59
|
+
# ]
|
60
|
+
|
61
|
+
### GLOBAL EXCEPTION HANDLING
|
62
|
+
# rescue_from :all do |e|
|
63
|
+
# raise e
|
64
|
+
# error_response(message: "Internal server error: #{e}", status: 500)
|
65
|
+
# end
|
66
|
+
|
67
|
+
|
68
|
+
### INITIALIZATION
|
69
|
+
def initialize
|
70
|
+
super
|
71
|
+
end
|
72
|
+
|
73
|
+
### ENDPOINTS
|
74
|
+
get "/" do
|
75
|
+
redirect dashboard_url()
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|