rest-ftp-daemon 0.424.0 → 0.424.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rest-ftp-daemon/api/jobs.rb +56 -56
- data/lib/rest-ftp-daemon/api/root.rb +25 -6
- data/lib/rest-ftp-daemon/constants.rb +2 -2
- data/lib/rest-ftp-daemon/job.rb +1 -1
- data/lib/rest-ftp-daemon/jobs/transfer.rb +55 -39
- data/lib/rest-ftp-daemon/workers/transfer.rb +30 -39
- data/rest-ftp-daemon.gemspec +1 -1
- metadata +1 -3
- data/lib/rest-ftp-daemon/api/root-real.rb +0 -80
- data/lib/rest-ftp-daemon/api/root-test.rb +0 -69
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7e975d417576100041ffbdaf11a22f811a1e585
|
4
|
+
data.tar.gz: 27cb0f4e9a738589e1dd6b3cf957d1e5d8239970
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62d898e7c52b0f89a0cf204c47503c98ddae8b210b8ea8a5cfd24f27ebb7d7940f0a0296b5a5299ffbc7bec3ef176e43c95c8128e8fb6167eb1e3b99969d7d6d
|
7
|
+
data.tar.gz: e02ef0697b640053766319bf917d974cd648baf64f6b50558a1b89f1c275671c31031502db460e1274d6c93ee4b682d289db5a28389ea44c183d60e6e23889c1
|
data/Gemfile.lock
CHANGED
@@ -5,6 +5,26 @@ module RestFtpDaemon
|
|
5
5
|
class Jobs < Grape::API
|
6
6
|
include BmcDaemonLib
|
7
7
|
|
8
|
+
|
9
|
+
### EXCEPTIONS HANDLERS
|
10
|
+
rescue_from RestFtpDaemon::JobNotFound do |exception|
|
11
|
+
exception_error :api_job_not_found, 404, exception
|
12
|
+
end
|
13
|
+
rescue_from JSON::ParserError do |exception|
|
14
|
+
exception_error :api_job_not_found, 404, exception
|
15
|
+
|
16
|
+
log_error "JSON::ParserError: #{exception.message}"
|
17
|
+
error!({error: :api_parse_error, message: exception.message}, 422)
|
18
|
+
end
|
19
|
+
rescue_from RestFtpDaemon::QueueCantCreateJob do |exception|
|
20
|
+
exception_error :api_cant_create_job, 422, exception
|
21
|
+
error!({error: :api_cant_create_job, message: exception.message}, 422)
|
22
|
+
end
|
23
|
+
rescue_from RestFtpDaemonException do |exception|
|
24
|
+
exception_error exception_to_error(exception), 500, exception
|
25
|
+
Rollbar.error exception
|
26
|
+
end
|
27
|
+
|
8
28
|
### ENDPOINTS
|
9
29
|
desc "Read job with ID", http_codes: [
|
10
30
|
{ code: 200, message: "Here is the job you requested" },
|
@@ -15,27 +35,15 @@ module RestFtpDaemon
|
|
15
35
|
requires :id, type: String, desc: "ID of the Job to read"
|
16
36
|
end
|
17
37
|
get "/:id", requirements: { id: /.*/ } do
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
log_error "JobNotFound: #{exception.message}"
|
28
|
-
error!({ error: :api_job_not_found, message: exception.message }, 404)
|
29
|
-
|
30
|
-
rescue StandardError => exception
|
31
|
-
log_error "Exception: #{exception.message}"
|
32
|
-
error!({ error: :api_exception, message: exception.message }, 500)
|
33
|
-
|
34
|
-
else
|
35
|
-
status 200
|
36
|
-
present job, with: RestFtpDaemon::Entities::Job, type: "complete"
|
37
|
-
|
38
|
-
end
|
38
|
+
# Get job to display
|
39
|
+
raise RestFtpDaemon::JobNotFound if params[:id].nil?
|
40
|
+
job = RestFtpDaemon::JobQueue.instance.find_by_id(params[:id]) || RestFtpDaemon::JobQueue.instance.find_by_id(params[:id], true)
|
41
|
+
raise RestFtpDaemon::JobNotFound if job.nil?
|
42
|
+
log_debug "found job: #{job.inspect}"
|
43
|
+
|
44
|
+
# Prepare response
|
45
|
+
status 200
|
46
|
+
present job, with: RestFtpDaemon::Entities::Job, type: "complete"
|
39
47
|
end
|
40
48
|
|
41
49
|
desc "List all Jobs", http_codes: [
|
@@ -43,19 +51,12 @@ module RestFtpDaemon
|
|
43
51
|
],
|
44
52
|
is_array: true
|
45
53
|
get "/" do
|
46
|
-
|
47
|
-
|
48
|
-
jobs = RestFtpDaemon::JobQueue.instance.jobs
|
49
|
-
|
50
|
-
rescue StandardError => exception
|
51
|
-
log_error "Exception: #{exception.message}"
|
52
|
-
error!({ error: :api_exception, message: exception.message }, 500)
|
53
|
-
|
54
|
-
else
|
55
|
-
status 200
|
56
|
-
present jobs, with: RestFtpDaemon::Entities::Job
|
54
|
+
# Get jobs to display
|
55
|
+
jobs = RestFtpDaemon::JobQueue.instance.jobs
|
57
56
|
|
58
|
-
|
57
|
+
# Prepare response
|
58
|
+
status 200
|
59
|
+
present jobs, with: RestFtpDaemon::Entities::Job
|
59
60
|
end
|
60
61
|
|
61
62
|
desc "Create a new job"
|
@@ -119,6 +120,21 @@ module RestFtpDaemon
|
|
119
120
|
desc: "video: custom options passed to FFMPEG encoder",
|
120
121
|
default: {}
|
121
122
|
|
123
|
+
optional :options, type: Hash, desc: "Options for transfers" do
|
124
|
+
optional :overwrite,
|
125
|
+
type: Boolean,
|
126
|
+
desc: "Overwrites files at target server",
|
127
|
+
default: Conf.at(:transfer, :overwrite)
|
128
|
+
optional :mkdir,
|
129
|
+
type: Boolean,
|
130
|
+
desc: "Create missing directories on target server",
|
131
|
+
default: Conf.at(:transfer, :mkdir)
|
132
|
+
optional :tempfile,
|
133
|
+
type: Boolean,
|
134
|
+
desc: "Upload to a temp file before renaming it to the target filename",
|
135
|
+
default: Conf.at(:transfer, :tempfile)
|
136
|
+
end
|
137
|
+
|
122
138
|
optional :overwrite,
|
123
139
|
type: Boolean,
|
124
140
|
desc: "Overwrites files at target server",
|
@@ -140,31 +156,15 @@ module RestFtpDaemon
|
|
140
156
|
end
|
141
157
|
|
142
158
|
post "/" do
|
143
|
-
#
|
144
|
-
|
145
|
-
# Add up the new job on the queue
|
146
|
-
job = RestFtpDaemon::JobQueue.instance.create_job(params)
|
159
|
+
# Add up the new job on the queue
|
160
|
+
job = RestFtpDaemon::JobQueue.instance.create_job(params)
|
147
161
|
|
148
|
-
|
149
|
-
|
162
|
+
# Increment a counter
|
163
|
+
RestFtpDaemon::Counters.instance.increment :jobs, :received
|
150
164
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
rescue QueueCantCreateJob => exception
|
156
|
-
log_error "QueueCantCreateJob: #{exception.message}"
|
157
|
-
error!({error: :api_cant_create_job, message: exception.message}, 422)
|
158
|
-
|
159
|
-
rescue RestFtpDaemonException => exception
|
160
|
-
log_error "#{exception.class.to_s} #{exception.message}"
|
161
|
-
error!({error: exception_to_error(exception), message: exception.message}, 500)
|
162
|
-
|
163
|
-
else
|
164
|
-
status 201
|
165
|
-
present job, with: RestFtpDaemon::Entities::Job, hide_params: true
|
166
|
-
|
167
|
-
end
|
165
|
+
# Prepare response
|
166
|
+
status 201
|
167
|
+
present job, with: RestFtpDaemon::Entities::Job, hide_params: true
|
168
168
|
end
|
169
169
|
|
170
170
|
end
|
@@ -22,12 +22,37 @@ module RestFtpDaemon
|
|
22
22
|
def logger
|
23
23
|
Root.logger
|
24
24
|
end
|
25
|
+
|
26
|
+
def exception_error name, http_code, exception
|
27
|
+
# Extract message lines
|
28
|
+
lines = exception.message.lines.collect(&:strip).reject(&:empty?)
|
29
|
+
|
30
|
+
# Log error to file
|
31
|
+
log_error "#{http_code} [#{name}] #{lines.shift} ", lines
|
32
|
+
|
33
|
+
# Return error
|
34
|
+
error!({
|
35
|
+
error: name,
|
36
|
+
http_code: http_code,
|
37
|
+
message: exception.message
|
38
|
+
}, http_code)
|
39
|
+
end
|
40
|
+
|
25
41
|
end
|
26
42
|
|
27
43
|
before do
|
28
44
|
log_request
|
29
45
|
end
|
30
46
|
|
47
|
+
|
48
|
+
## EXCEPTION HANDLERS
|
49
|
+
rescue_from :all do |exception|
|
50
|
+
Rollbar.error exception
|
51
|
+
#error!({error: :internal_server_error, message: exception.message}, 500)
|
52
|
+
exception_error :internal_server_error, 500, exception
|
53
|
+
end
|
54
|
+
|
55
|
+
|
31
56
|
### CLASS CONFIG
|
32
57
|
logger BmcDaemonLib::LoggerPool.instance.get :api
|
33
58
|
do_not_route_head!
|
@@ -50,12 +75,6 @@ module RestFtpDaemon
|
|
50
75
|
put "-----"
|
51
76
|
end
|
52
77
|
|
53
|
-
## GLOBAL EXCEPTION HANDLING
|
54
|
-
rescue_from :all do |exception|
|
55
|
-
Rollbar.error exception
|
56
|
-
error_response(message: "Internal server error: #{exception}", status: 500)
|
57
|
-
end
|
58
|
-
|
59
78
|
### MOUNTPOINTS
|
60
79
|
mount RestFtpDaemon::API::Status => MOUNT_STATUS
|
61
80
|
mount RestFtpDaemon::API::Jobs => MOUNT_JOBS
|
@@ -16,8 +16,8 @@ JOB_FFMPEG_THREADS = 2
|
|
16
16
|
JOB_FFMPEG_ATTRIBUTES = [:video_codec, :video_bitrate, :video_bitrate_tolerance, :frame_rate, :resolution, :aspect, :keyframe_interval, :x264_vprofile, :x264_preset, :audio_codec, :audio_bitrate, :audio_sample_rate, :audio_channels]
|
17
17
|
|
18
18
|
# Internal job infos
|
19
|
-
INFO_PROGRESS = :
|
20
|
-
INFO_BITRATE = :
|
19
|
+
INFO_PROGRESS = :progress
|
20
|
+
INFO_BITRATE = :bitrate
|
21
21
|
|
22
22
|
# Constants: logger
|
23
23
|
LOG_FORMAT_PROGNAME = "%d\t%s"
|
data/lib/rest-ftp-daemon/job.rb
CHANGED
@@ -15,7 +15,7 @@ module RestFtpDaemon
|
|
15
15
|
include BmcDaemonLib::LoggerHelper
|
16
16
|
|
17
17
|
# Fields to be imported from params
|
18
|
-
IMPORTED = %w(type priority pool label priority source target overwrite mkdir tempfile video_options video_custom)
|
18
|
+
IMPORTED = %w(type priority pool label priority source target overwrite notify mkdir tempfile video_options video_custom)
|
19
19
|
|
20
20
|
# Class options
|
21
21
|
attr_accessor :wid
|
@@ -145,63 +145,79 @@ module RestFtpDaemon
|
|
145
145
|
|
146
146
|
# Compute final bitrate
|
147
147
|
global_transfer_bitrate = get_bitrate @transfer_total, (Time.now - transfer_started_at)
|
148
|
-
set_info
|
148
|
+
set_info INFO_BITRATE, global_transfer_bitrate.round(0)
|
149
149
|
|
150
150
|
# Done
|
151
151
|
set_info :source_current, nil
|
152
152
|
end
|
153
153
|
|
154
154
|
def update_progress transferred, name = ""
|
155
|
-
# What's current time ?
|
156
|
-
now = Time.now
|
157
|
-
notify_after = @config[:notify_after]
|
158
|
-
|
159
155
|
# Update counters
|
160
156
|
@transfer_sent += transferred
|
161
157
|
set_info :work_sent, @transfer_sent
|
162
158
|
|
163
159
|
# Update job info
|
164
160
|
percent0 = (100.0 * @transfer_sent / @transfer_total).round(0)
|
165
|
-
set_info INFO_PROGRESS,
|
166
|
-
|
167
|
-
#
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
# Log progress
|
174
|
-
stack = []
|
175
|
-
stack << "#{percent0} %"
|
176
|
-
stack << (format_bytes @transfer_sent, "B")
|
177
|
-
stack << (format_bytes @transfer_total, "B")
|
178
|
-
stack << (format_bytes @current_bitrate.round(0), "bps")
|
179
|
-
stack2 = stack.map { |txt| ("%#{LOG_PIPE_LEN.to_i}s" % txt) }.join("\t")
|
180
|
-
log_debug "progress #{stack2} \t#{name}"
|
181
|
-
|
182
|
-
# Remember when we last did it
|
183
|
-
@progress_at = now
|
184
|
-
end
|
161
|
+
set_info INFO_PROGRESS, percent0
|
162
|
+
|
163
|
+
# What's current time ?
|
164
|
+
now = Time.now
|
165
|
+
|
166
|
+
# Update job status
|
167
|
+
update_progress_jobinfo now, percent0, name
|
185
168
|
|
186
169
|
# Notify if requested
|
187
|
-
|
188
|
-
if (!notify_after.nil?) && (notified_ago > notify_after)
|
189
|
-
# Prepare and send notification
|
190
|
-
notif_status = {
|
191
|
-
progress: percent0,
|
192
|
-
transfer_sent: @transfer_sent,
|
193
|
-
transfer_total: @transfer_total,
|
194
|
-
transfer_bitrate: @current_bitrate.round(0),
|
195
|
-
}
|
196
|
-
client_notify :progress, status: notif_status
|
197
|
-
|
198
|
-
# Remember when we last did it
|
199
|
-
@notified_at = now
|
200
|
-
end
|
170
|
+
update_progress_notify now, percent0, name
|
201
171
|
end
|
202
172
|
|
203
173
|
private
|
204
174
|
|
175
|
+
def update_progress_jobinfo now, percent0, name
|
176
|
+
# No delay provided ?
|
177
|
+
return if JOB_UPDATE_INTERVAL.to_f.zero?
|
178
|
+
|
179
|
+
# Still too early to notify again ?
|
180
|
+
how_long_ago = (now.to_f - @progress_at.to_f)
|
181
|
+
return unless how_long_ago > JOB_UPDATE_INTERVAL.to_f
|
182
|
+
|
183
|
+
# Update bitrates
|
184
|
+
@current_bitrate = running_bitrate @transfer_sent
|
185
|
+
set_info INFO_BITRATE, @current_bitrate.round(0)
|
186
|
+
|
187
|
+
# Log progress
|
188
|
+
stack = [
|
189
|
+
"#{percent0} %",
|
190
|
+
format_bytes(@transfer_sent, "B"),
|
191
|
+
format_bytes(@current_bitrate.round(0), "bps")
|
192
|
+
]
|
193
|
+
stack2 = stack.map { |txt| ("%#{LOG_PIPE_LEN.to_i}s" % txt) }.join("\t")
|
194
|
+
log_debug "progress #{stack2} \t#{name}"
|
195
|
+
|
196
|
+
# Remember when we last did it
|
197
|
+
@progress_at = now
|
198
|
+
end
|
199
|
+
|
200
|
+
def update_progress_notify now, percent0, name
|
201
|
+
# No delay provided ?
|
202
|
+
return if @config[:notify_after].nil?
|
203
|
+
|
204
|
+
# Still too early to notify again ?
|
205
|
+
how_long_ago = (now.to_f - @notified_at.to_f)
|
206
|
+
return unless how_long_ago > @config[:notify_after]
|
207
|
+
|
208
|
+
# Prepare and send notification
|
209
|
+
client_notify :progress, status: {
|
210
|
+
progress: percent0,
|
211
|
+
transfer_sent: @transfer_sent,
|
212
|
+
transfer_total: @transfer_total,
|
213
|
+
transfer_bitrate: @current_bitrate.round(0),
|
214
|
+
transfer_current: name,
|
215
|
+
}
|
216
|
+
|
217
|
+
# Remember when we last did it
|
218
|
+
@notified_at = now
|
219
|
+
end
|
220
|
+
|
205
221
|
def get_bitrate delta_data, delta_time
|
206
222
|
return nil if delta_time.nil? || delta_time.zero?
|
207
223
|
8 * delta_data.to_f.to_f / delta_time
|
@@ -35,37 +35,14 @@ module RestFtpDaemon
|
|
35
35
|
job = RestFtpDaemon::JobQueue.instance.pop @pool
|
36
36
|
|
37
37
|
# Work on this job
|
38
|
-
work_on_job
|
38
|
+
work_on_job job
|
39
39
|
|
40
40
|
# Clean job status
|
41
41
|
job.wid = nil
|
42
42
|
#sleep 1
|
43
43
|
|
44
|
-
#
|
45
|
-
|
46
|
-
#log_info "job succeeded"
|
47
|
-
|
48
|
-
elsif !(@config[:retry_on].is_a?(Enumerable) && @config[:retry_on].include?(job.error))
|
49
|
-
log_error "not retrying: error not eligible"
|
50
|
-
|
51
|
-
elsif @config[:retry_for] && (job.age >= @config[:retry_for])
|
52
|
-
log_error "not retrying: max_age reached (#{@config[:retry_for]} s)"
|
53
|
-
|
54
|
-
elsif @config[:retry_max] && (job.runs >= @config[:retry_max])
|
55
|
-
log_error "not retrying: max_runs reached (#{@config[:retry_max]} tries)"
|
56
|
-
|
57
|
-
else
|
58
|
-
# Delay cannot be negative, and will be 1s minimum
|
59
|
-
retry_after = [@config[:retry_after] || DEFAULT_RETRY_AFTER, 1].max
|
60
|
-
log_info "retrying job: waiting for #{retry_after} seconds"
|
61
|
-
|
62
|
-
# Wait !
|
63
|
-
sleep retry_after
|
64
|
-
log_info "retrying job: requeued after delay"
|
65
|
-
|
66
|
-
# Now, requeue this job
|
67
|
-
RestFtpDaemon::JobQueue.instance.requeue job
|
68
|
-
end
|
44
|
+
# Handle the retry if needed
|
45
|
+
handle_job_result job
|
69
46
|
end
|
70
47
|
|
71
48
|
def work_on_job job
|
@@ -92,26 +69,40 @@ module RestFtpDaemon
|
|
92
69
|
# Inform the job
|
93
70
|
job.oops_you_stop_now ex unless job.nil?
|
94
71
|
|
95
|
-
rescue RestFtpDaemon::AttributeMissing => ex
|
96
|
-
log_error "JOB
|
72
|
+
rescue RestFtpDaemon::AssertionFailed, RestFtpDaemon::AttributeMissing, StandardError => ex
|
73
|
+
log_error "JOB EXCEPTION ex[#{ex.class}] #{ex.message}", ex.backtrace
|
97
74
|
worker_status WORKER_STATUS_CRASHED
|
98
75
|
|
99
76
|
# Inform the job
|
100
|
-
job.
|
77
|
+
job.oops_after_crash ex unless job.nil?
|
78
|
+
end
|
101
79
|
|
102
|
-
|
103
|
-
|
104
|
-
|
80
|
+
def handle_job_result job
|
81
|
+
# If job status requires a retry, just restack it
|
82
|
+
if !job.error
|
83
|
+
#log_info "job succeeded"
|
105
84
|
|
106
|
-
|
107
|
-
|
85
|
+
elsif !(@config[:retry_on].is_a?(Enumerable) && @config[:retry_on].include?(job.error))
|
86
|
+
log_error "not retrying: error not eligible"
|
108
87
|
|
109
|
-
|
110
|
-
|
111
|
-
worker_status WORKER_STATUS_CRASHED
|
88
|
+
elsif @config[:retry_for] && (job.age >= @config[:retry_for])
|
89
|
+
log_error "not retrying: max_age reached (#{@config[:retry_for]} s)"
|
112
90
|
|
113
|
-
|
114
|
-
|
91
|
+
elsif @config[:retry_max] && (job.runs >= @config[:retry_max])
|
92
|
+
log_error "not retrying: max_runs reached (#{@config[:retry_max]} tries)"
|
93
|
+
|
94
|
+
else
|
95
|
+
# Delay cannot be negative, and will be 1s minimum
|
96
|
+
retry_after = [@config[:retry_after] || DEFAULT_RETRY_AFTER, 1].max
|
97
|
+
log_info "retrying job: waiting for #{retry_after} seconds"
|
98
|
+
|
99
|
+
# Wait !
|
100
|
+
sleep retry_after
|
101
|
+
log_info "retrying job: requeued after delay"
|
102
|
+
|
103
|
+
# Now, requeue this job
|
104
|
+
RestFtpDaemon::JobQueue.instance.requeue job
|
105
|
+
end
|
115
106
|
end
|
116
107
|
|
117
108
|
end
|
data/rest-ftp-daemon.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-ftp-daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.424.
|
4
|
+
version: 0.424.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno MEDICI
|
@@ -414,8 +414,6 @@ files:
|
|
414
414
|
- lib/rest-ftp-daemon/api/dashboard.rb
|
415
415
|
- lib/rest-ftp-daemon/api/debug.rb
|
416
416
|
- lib/rest-ftp-daemon/api/jobs.rb
|
417
|
-
- lib/rest-ftp-daemon/api/root-real.rb
|
418
|
-
- lib/rest-ftp-daemon/api/root-test.rb
|
419
417
|
- lib/rest-ftp-daemon/api/root.rb
|
420
418
|
- lib/rest-ftp-daemon/api/status.rb
|
421
419
|
- lib/rest-ftp-daemon/constants.rb
|
@@ -1,80 +0,0 @@
|
|
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::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
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require "grape"
|
2
|
-
require 'grape-swagger'
|
3
|
-
|
4
|
-
module RestFtpDaemon
|
5
|
-
module API
|
6
|
-
class Root < Grape::API
|
7
|
-
|
8
|
-
### API Documentation
|
9
|
-
add_swagger_documentation hide_documentation_path: true,
|
10
|
-
api_version: Conf.app_ver,
|
11
|
-
doc_version: Conf.app_ver,
|
12
|
-
mount_path: MOUNT_SWAGGER_JSON,
|
13
|
-
info: {
|
14
|
-
title: Conf.app_name,
|
15
|
-
version: Conf.app_ver,
|
16
|
-
description: "API description for #{Conf.app_name} #{Conf.app_ver}",
|
17
|
-
}
|
18
|
-
|
19
|
-
|
20
|
-
namespace :hudson do
|
21
|
-
desc 'Document root'
|
22
|
-
get '/' do
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
namespace :hudson do
|
27
|
-
desc 'This gets something.',
|
28
|
-
notes: '_test_'
|
29
|
-
|
30
|
-
get '/simple' do
|
31
|
-
{ bla: 'something' }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
namespace :colorado do
|
36
|
-
desc 'This gets something for URL using - separator.',
|
37
|
-
notes: '_test_'
|
38
|
-
|
39
|
-
get '/simple-test' do
|
40
|
-
{ bla: 'something' }
|
41
|
-
end
|
42
|
-
|
43
|
-
|
44
|
-
desc "List all Jobs", http_codes: [
|
45
|
-
{ code: 200, message: "Here are the jobs you requested" },
|
46
|
-
],
|
47
|
-
is_array: true
|
48
|
-
get "/" do
|
49
|
-
begin
|
50
|
-
# Get jobs to display
|
51
|
-
jobs = RestFtpDaemon::JobQueue.instance.jobs
|
52
|
-
|
53
|
-
rescue StandardError => exception
|
54
|
-
log_error "Exception: #{exception.message}"
|
55
|
-
error!({ error: :api_exception, message: exception.message }, 500)
|
56
|
-
|
57
|
-
else
|
58
|
-
status 200
|
59
|
-
present jobs, with: RestFtpDaemon::Entities::Job
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|