rest-ftp-daemon 0.424.0 → 0.424.2
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 +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
|