prometheus-splash 0.8.0 → 0.8.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 +4 -4
- data/CHANGELOG.md +47 -3
- data/README.md +400 -178
- data/config/splash.yml +28 -14
- data/lib/splash/backends.rb +7 -1
- data/lib/splash/backends/file.rb +1 -1
- data/lib/splash/cli/commands.rb +122 -37
- data/lib/splash/cli/config.rb +12 -1
- data/lib/splash/cli/daemon.rb +1 -1
- data/lib/splash/cli/logs.rb +144 -48
- data/lib/splash/cli/process.rb +145 -52
- data/lib/splash/cli/transfers.rb +10 -3
- data/lib/splash/commands.rb +115 -40
- data/lib/splash/config.rb +112 -29
- data/lib/splash/config/flush.rb +2 -2
- data/lib/splash/constants.rb +3 -4
- data/lib/splash/daemon/orchestrator.rb +6 -7
- data/lib/splash/daemon/orchestrator/grammar.rb +1 -1
- data/lib/splash/dependencies.rb +1 -0
- data/lib/splash/exiter.rb +1 -1
- data/lib/splash/helpers.rb +1 -1
- data/lib/splash/logs.rb +94 -16
- data/lib/splash/monkeys.rb +5 -0
- data/lib/splash/processes.rb +91 -16
- data/lib/splash/sequences.rb +6 -1
- data/lib/splash/transfers.rb +13 -8
- data/lib/splash/webadmin/api/routes/commands.rb +15 -3
- data/lib/splash/webadmin/api/routes/config.rb +140 -2
- data/lib/splash/webadmin/api/routes/logs.rb +32 -17
- data/lib/splash/webadmin/api/routes/process.rb +21 -9
- data/lib/splash/webadmin/api/routes/sequences.rb +2 -2
- data/lib/splash/webadmin/main.rb +15 -1
- data/lib/splash/webadmin/portal/controllers/commands.rb +101 -1
- data/lib/splash/webadmin/portal/controllers/documentation.rb +2 -0
- data/lib/splash/webadmin/portal/controllers/home.rb +6 -1
- data/lib/splash/webadmin/portal/controllers/logs.rb +71 -1
- data/lib/splash/webadmin/portal/controllers/processes.rb +75 -3
- data/lib/splash/webadmin/portal/controllers/proxy.rb +2 -1
- data/lib/splash/webadmin/portal/controllers/restclient.rb +6 -1
- data/lib/splash/webadmin/portal/controllers/sequences.rb +2 -0
- data/lib/splash/webadmin/portal/public/css/ultragreen.css +6 -0
- data/lib/splash/webadmin/portal/public/favicon.ico +0 -0
- data/lib/splash/webadmin/portal/views/command_form.slim +45 -0
- data/lib/splash/webadmin/portal/views/command_history.slim +27 -0
- data/lib/splash/webadmin/portal/views/commands.slim +70 -20
- data/lib/splash/webadmin/portal/views/documentation.slim +1 -1
- data/lib/splash/webadmin/portal/views/home.slim +19 -20
- data/lib/splash/webadmin/portal/views/layout.slim +2 -2
- data/lib/splash/webadmin/portal/views/log_form.slim +27 -0
- data/lib/splash/webadmin/portal/views/log_history.slim +24 -0
- data/lib/splash/webadmin/portal/views/logs.slim +95 -21
- data/lib/splash/webadmin/portal/views/nav.slim +1 -1
- data/lib/splash/webadmin/portal/views/not_found.slim +1 -1
- data/lib/splash/webadmin/portal/views/process_form.slim +24 -0
- data/lib/splash/webadmin/portal/views/process_history.slim +24 -0
- data/lib/splash/webadmin/portal/views/processes.slim +80 -7
- data/lib/splash/webadmin/portal/views/proxy.slim +2 -2
- data/lib/splash/webadmin/portal/views/restclient.slim +7 -4
- data/lib/splash/webadmin/portal/views/restclient_result.slim +24 -20
- data/lib/splash/webadmin/portal/views/sequences.slim +1 -1
- data/prometheus-splash.gemspec +4 -4
- data/ultragreen_roodi_coding_convention.yml +4 -4
- metadata +18 -10
data/config/splash.yml
CHANGED
@@ -26,9 +26,15 @@
|
|
26
26
|
# :port: 6379
|
27
27
|
# #:auth: "mykey"
|
28
28
|
# :base: 1
|
29
|
-
:
|
29
|
+
:transfers_trace:
|
30
30
|
:type: :file
|
31
|
-
:path: /var/run/splash/
|
31
|
+
:path: /var/run/splash/transfers
|
32
|
+
:logs_trace:
|
33
|
+
:type: :file
|
34
|
+
:path: /var/run/splash/logs
|
35
|
+
:process_trace:
|
36
|
+
:type: :file
|
37
|
+
:path: /var/run/splash/process
|
32
38
|
|
33
39
|
:transports:
|
34
40
|
:active: :rabbitmq
|
@@ -67,49 +73,51 @@
|
|
67
73
|
|
68
74
|
### Sample configuration of commands and scheduling
|
69
75
|
:commands:
|
70
|
-
:id_root
|
76
|
+
- :name: :id_root
|
71
77
|
:desc: run id command on root
|
72
78
|
:command: id root
|
73
|
-
:true_test
|
79
|
+
- :name: :true_test
|
74
80
|
:desc: "test command returning true : 0"
|
75
81
|
:command: "true"
|
76
82
|
:schedule:
|
77
83
|
:every: "1h"
|
78
84
|
:on_failure: :ls_slash_tmp
|
79
85
|
:on_success: :pwd
|
80
|
-
:false_test
|
86
|
+
- :name: :false_test
|
81
87
|
:desc: "test command returning false > 0"
|
82
88
|
:command: "false"
|
83
89
|
:schedule:
|
84
90
|
:every: "1h"
|
85
91
|
:on_failure: :ls_slash_tmp
|
86
92
|
:on_success: :pwd
|
87
|
-
:ls_slash_tmp
|
93
|
+
- :name: :ls_slash_tmp
|
88
94
|
:desc: list file in /tmp
|
89
95
|
:command: ls -al /tmp
|
90
96
|
:user: daemon
|
91
97
|
:on_success: :echo1
|
92
|
-
:pwd
|
98
|
+
- :name: :pwd
|
93
99
|
:desc: run pwd
|
94
100
|
:command: pwd
|
95
101
|
:on_success: :echo1
|
96
102
|
:on_failure: :echo2
|
97
|
-
:echo1
|
103
|
+
- :name: :echo1
|
98
104
|
:desc: echo 'foo'
|
99
105
|
:command: echo foo
|
100
106
|
:on_failure: :echo3
|
101
|
-
:echo2
|
107
|
+
- :name: :echo2
|
102
108
|
:desc: echo 'bar'
|
103
109
|
:command: echo bar
|
104
|
-
:echo3
|
110
|
+
- :name: :echo3
|
105
111
|
:desc: echo 'been'
|
106
112
|
:command: echo been
|
107
|
-
:rand_sleep_5
|
113
|
+
- :name: :rand_sleep_5
|
108
114
|
:desc: sleep on a rand 5
|
109
115
|
:command: ruby -e 'sleep rand(5)'
|
110
116
|
:schedule:
|
111
|
-
:every: "
|
112
|
-
|
117
|
+
:every: "30s"
|
118
|
+
:retention:
|
119
|
+
:hours: 1
|
120
|
+
- :name: :test_remote_call
|
113
121
|
:desc: remote call test
|
114
122
|
:delegate_to:
|
115
123
|
:host: omicron
|
@@ -122,15 +130,21 @@
|
|
122
130
|
- :label: :log_app_1
|
123
131
|
:log: /tmp/test
|
124
132
|
:pattern: ERROR
|
133
|
+
:retention:
|
134
|
+
:hours: 5
|
125
135
|
- :label: :log_app_2
|
126
136
|
:log: /tmp/test2
|
127
137
|
:pattern: ERROR
|
138
|
+
:retention:
|
139
|
+
:hours: 5
|
128
140
|
|
129
141
|
### configuration of monitored processes
|
130
142
|
:processes:
|
131
|
-
- :process: cron
|
143
|
+
- :process: :cron
|
132
144
|
:patterns:
|
133
145
|
- cron
|
146
|
+
:retention:
|
147
|
+
:hours: 5
|
134
148
|
|
135
149
|
|
136
150
|
###
|
data/lib/splash/backends.rb
CHANGED
@@ -11,7 +11,7 @@ module Splash
|
|
11
11
|
|
12
12
|
# factory for backend
|
13
13
|
# @param [Symbol] store the name of the store actually in [:execution_trace]
|
14
|
-
# @return [Splash::Backends::<Type>|Hash] with type in [:redis,:file] or Exiter case :configuration_error
|
14
|
+
# @return [Splash::Backends::<Type>|Hash] with type in [:redis,:file] or Exiter case :configuration_error
|
15
15
|
def get_backend(store)
|
16
16
|
splash_exit case: :configuration_error, more: "backend definition failure" if get_config[:backends][:stores][store].nil?
|
17
17
|
backend = get_config[:backends][:stores][store][:type].to_s
|
@@ -23,5 +23,11 @@ module Splash
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
# return list of configured backand
|
27
|
+
# @return [Hash] the backends hash list/structure
|
28
|
+
def list_backends
|
29
|
+
return get_config[:backends][:stores]
|
30
|
+
end
|
31
|
+
|
26
32
|
end
|
27
33
|
end
|
data/lib/splash/backends/file.rb
CHANGED
@@ -54,7 +54,7 @@ module Splash
|
|
54
54
|
# @option options [Symbol] :key the name of the record
|
55
55
|
# @return [Boolean] status of the operation
|
56
56
|
def del(options)
|
57
|
-
::File.unlink("#{@path}/#{suffix_trace(options[:key])}") if File.exist?("#{@path}/#{suffix_trace(options[:key])}")
|
57
|
+
::File.unlink("#{@path}/#{suffix_trace(options[:key])}") if ::File.exist?("#{@path}/#{suffix_trace(options[:key])}")
|
58
58
|
end
|
59
59
|
|
60
60
|
# verifiy a specific record existance
|
data/lib/splash/cli/commands.rb
CHANGED
@@ -15,7 +15,7 @@ module CLISplash
|
|
15
15
|
|
16
16
|
|
17
17
|
# Thor method : execution of command
|
18
|
-
desc "execute
|
18
|
+
desc "execute COMMAND", "run for command/sequence or ack result"
|
19
19
|
long_desc <<-LONGDESC
|
20
20
|
execute command or sequence or ack result\n
|
21
21
|
with --no-trace prevent storing execution trace in configured backend (see config file)\n
|
@@ -79,7 +79,7 @@ module CLISplash
|
|
79
79
|
|
80
80
|
|
81
81
|
# Thor method : scheduling commands
|
82
|
-
desc "schedule
|
82
|
+
desc "schedule COMMAND", "Schedule excution of command on Splash daemon"
|
83
83
|
long_desc <<-LONGDESC
|
84
84
|
Schedule excution of command on Splash daemon\n
|
85
85
|
with --hostname, Schedule on an other Splash daemon via transport\n
|
@@ -93,6 +93,9 @@ module CLISplash
|
|
93
93
|
option :at, :type => :string
|
94
94
|
option :in, :type => :string
|
95
95
|
def schedule(name)
|
96
|
+
unless is_root? then
|
97
|
+
splash_exit case: :not_root, :more => "Command scheduling"
|
98
|
+
end
|
96
99
|
log = get_logger
|
97
100
|
log.level = :fatal if options[:quiet]
|
98
101
|
hostname = (options[:hostname])? options[:hostname] : Socket.gethostname
|
@@ -122,13 +125,16 @@ module CLISplash
|
|
122
125
|
end
|
123
126
|
|
124
127
|
# Thor method : getting a treeview of sequence of commands
|
125
|
-
desc "treeview", "Show commands sequence tree"
|
128
|
+
desc "treeview COMMAND", "Show commands sequence tree"
|
126
129
|
long_desc <<-LONGDESC
|
127
130
|
Show commands sequence tree\n
|
128
131
|
with --hostname, ask other Splash daemon via transport\n
|
129
132
|
LONGDESC
|
130
133
|
option :hostname, :type => :string, :aliases => "-H"
|
131
134
|
def treeview(command)
|
135
|
+
unless is_root? then
|
136
|
+
splash_exit case: :not_root, :more => "Command treeview"
|
137
|
+
end
|
132
138
|
depht = 0
|
133
139
|
log = get_logger
|
134
140
|
if options[:hostname] then
|
@@ -153,7 +159,7 @@ module CLISplash
|
|
153
159
|
end
|
154
160
|
log.info "Command : #{command.to_s}" if depht == 0
|
155
161
|
aproc = Proc::new do |command,depht|
|
156
|
-
cmd = commands[command.to_sym
|
162
|
+
cmd = commands.select{|item| item[:name] == command.to_sym}.first
|
157
163
|
if cmd[:on_failure] then
|
158
164
|
spacer= " " * depht + " "
|
159
165
|
log.flat "#{spacer}* on failure => #{cmd[:on_failure]}"
|
@@ -179,6 +185,9 @@ module CLISplash
|
|
179
185
|
option :detail, :type => :boolean, :aliases => "-D"
|
180
186
|
option :hostname, :type => :string, :aliases => "-H"
|
181
187
|
def list
|
188
|
+
unless is_root? then
|
189
|
+
splash_exit case: :not_root, :more => "Command list"
|
190
|
+
end
|
182
191
|
log = get_logger
|
183
192
|
list = {}
|
184
193
|
if options[:hostname] then
|
@@ -202,16 +211,16 @@ module CLISplash
|
|
202
211
|
list = get_config.commands
|
203
212
|
end
|
204
213
|
log.info "Splash configured commands :"
|
205
|
-
log.ko 'No configured commands found' if list.
|
206
|
-
list.
|
207
|
-
log.item "#{command.to_s}"
|
214
|
+
log.ko 'No configured commands found' if list.empty?
|
215
|
+
list.each do |command|
|
216
|
+
log.item "#{command[:name].to_s}"
|
208
217
|
if options[:detail] then
|
209
|
-
log.arrow "command line : '#{
|
210
|
-
log.arrow "command description : '#{
|
211
|
-
log.arrow "command failure callback : '#{
|
212
|
-
log.arrow "command success callback : '#{
|
213
|
-
if
|
214
|
-
sched,val =
|
218
|
+
log.arrow "command line : '#{command[:command]}'"
|
219
|
+
log.arrow "command description : '#{command[:desc]}'"
|
220
|
+
log.arrow "command failure callback : '#{command[:on_failure]}'" if command[:on_failure]
|
221
|
+
log.arrow "command success callback : '#{command[:on_success]}'" if command[:on_success]
|
222
|
+
if command[:schedule] then
|
223
|
+
sched,val = command[:schedule].flatten
|
215
224
|
log.arrow "command scheduled : #{sched} #{val}."
|
216
225
|
end
|
217
226
|
end
|
@@ -226,7 +235,10 @@ module CLISplash
|
|
226
235
|
with --hostname <HOSTNAME>, an other Splash monitored server (only with Redis backend configured)
|
227
236
|
LONGDESC
|
228
237
|
option :hostname, :type => :string, :aliases => "-H"
|
229
|
-
def show(
|
238
|
+
def show(name)
|
239
|
+
unless is_root? then
|
240
|
+
splash_exit case: :not_root, :more => "Command show specifications"
|
241
|
+
end
|
230
242
|
log = get_logger
|
231
243
|
list = {}
|
232
244
|
if options[:hostname] then
|
@@ -249,14 +261,15 @@ module CLISplash
|
|
249
261
|
else
|
250
262
|
list = get_config.commands
|
251
263
|
end
|
252
|
-
|
253
|
-
|
254
|
-
log.
|
255
|
-
log.item "command
|
256
|
-
log.item "command
|
257
|
-
log.item "command
|
258
|
-
if
|
259
|
-
|
264
|
+
command = list.select{|item| item[:name] == name.to_sym}.first
|
265
|
+
unless command.nil? then
|
266
|
+
log.info "Splash command : #{command[:name]}"
|
267
|
+
log.item "command line : '#{command[:command]}'"
|
268
|
+
log.item "command description : '#{command[:desc]}'"
|
269
|
+
log.item "command failure callback : '#{command[:on_failure]}'" if command[:on_failure]
|
270
|
+
log.item "command success callback : '#{command[:on_success]}'" if command[:on_success]
|
271
|
+
if command[:schedule]
|
272
|
+
sched,val = command[:schedule].flatten
|
260
273
|
log.item "command scheduled : #{sched} #{val}."
|
261
274
|
end
|
262
275
|
splash_exit case: :quiet_exit
|
@@ -265,14 +278,71 @@ module CLISplash
|
|
265
278
|
end
|
266
279
|
end
|
267
280
|
|
268
|
-
|
269
|
-
|
281
|
+
|
282
|
+
|
283
|
+
# Thor method : show commands executions history
|
284
|
+
long_desc <<-LONGDESC
|
285
|
+
show commands executions history for LABEL\n
|
286
|
+
LONGDESC
|
287
|
+
option :table, :type => :boolean, :aliases => "-t"
|
288
|
+
desc "history COMMAND", "show commands executions history"
|
289
|
+
def history(command)
|
290
|
+
if is_root? then
|
291
|
+
log = get_logger
|
292
|
+
log.info "Command : #{command}"
|
293
|
+
config = get_config
|
294
|
+
if options[:table] then
|
295
|
+
table = TTY::Table.new do |t|
|
296
|
+
t << ["Start Date","Status", "end_date", "Execution time","STDOUT empty ? ", "STDERR empty ? "]
|
297
|
+
t << ['','','','','','']
|
298
|
+
CmdRecords::new(command).get_all_records.each do |item|
|
299
|
+
record =item.keys.first
|
300
|
+
value=item[record]
|
301
|
+
t << [record, value[:status].to_s,
|
302
|
+
value[:end_date],
|
303
|
+
value[:exec_time],
|
304
|
+
value[:stdout].empty?,
|
305
|
+
value[:stderr].empty?]
|
306
|
+
end
|
307
|
+
end
|
308
|
+
if check_unicode_term then
|
309
|
+
puts table.render(:unicode)
|
310
|
+
else
|
311
|
+
puts table.render(:ascii)
|
312
|
+
end
|
313
|
+
|
314
|
+
else
|
315
|
+
CmdRecords::new(command).get_all_records.each do |item|
|
316
|
+
record =item.keys.first
|
317
|
+
value=item[record]
|
318
|
+
log.item record
|
319
|
+
log.arrow "Status : #{value[:status].to_s}"
|
320
|
+
log.arrow "End date : #{value[:end_date]}"
|
321
|
+
log.arrow "Execution time : #{value[:exec_time]}"
|
322
|
+
log.arrow "STDOUT empty ? : #{value[:stdout].empty?}"
|
323
|
+
log.arrow "STDERR empty ? : #{value[:stderr].empty?}"
|
324
|
+
end
|
325
|
+
end
|
326
|
+
splash_exit case: :quiet_exit
|
327
|
+
else
|
328
|
+
splash_exit case: :not_root, :more => "Command execution history"
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
332
|
+
# Thor method : getting information on one specific execution of a command
|
333
|
+
desc "get_result COMMAND", "Show running result for specific configured command COMMAND"
|
270
334
|
long_desc <<-LONGDESC
|
271
|
-
Show
|
335
|
+
Show specific running result for specific configured command COMMAND\n
|
272
336
|
with --hostname <HOSTNAME>, an other Splash monitored server (only with Redis backend configured)
|
337
|
+
with --date <DATE>, a date format string (same as in history ouput)
|
338
|
+
|
273
339
|
LONGDESC
|
274
340
|
option :hostname, :type => :string, :aliases => "-H"
|
275
|
-
|
341
|
+
option :date, :type => :string, :aliases => "-D"
|
342
|
+
def get_result(command)
|
343
|
+
unless is_root? then
|
344
|
+
splash_exit case: :not_root, :more => "Command specific execution report"
|
345
|
+
end
|
276
346
|
log = get_logger
|
277
347
|
backend = get_backend :execution_trace
|
278
348
|
redis = (backend.class == Splash::Backends::Redis)? true : false
|
@@ -280,12 +350,12 @@ module CLISplash
|
|
280
350
|
splash_exit case: :specific_config_required, :more => "Redis backend is requiered for Remote execution report request"
|
281
351
|
end
|
282
352
|
splash_exit case: :not_root if not is_root? and not redis
|
283
|
-
list = get_config.commands
|
353
|
+
list = get_config.commands
|
284
354
|
if options[:hostname] then
|
285
355
|
options[:hostname] = Socket.gethostname if options[:hostname] == 'hostname'
|
286
356
|
list = backend.list("*", options[:hostname]).map(&:to_sym)
|
287
357
|
end
|
288
|
-
if list.
|
358
|
+
if list.select{|cmd| cmd[:name] == command.to_sym}.count > 0 then
|
289
359
|
log.info "Splash command #{command} previous execution report:\n"
|
290
360
|
req = { :key => command}
|
291
361
|
req[:hostname] = options[:hostname] if options[:hostname]
|
@@ -294,19 +364,32 @@ module CLISplash
|
|
294
364
|
tp = Template::new(
|
295
365
|
list_token: get_config.execution_template_tokens,
|
296
366
|
template_file: get_config.execution_template_path)
|
297
|
-
|
298
|
-
|
367
|
+
if options[:date] then
|
368
|
+
prov = YAML::load(res).select{|key,value| key.keys.first == options[:date]}.first
|
369
|
+
else
|
370
|
+
prov = YAML::load(res).last
|
371
|
+
end
|
372
|
+
if prov.nil? then
|
373
|
+
log.ko "Command not runned one this date or date misformatted."
|
374
|
+
else
|
375
|
+
tp.map prov.values.first
|
376
|
+
log.flat tp.output
|
377
|
+
end
|
299
378
|
else
|
300
379
|
log.ko "Command not already runned."
|
301
380
|
end
|
302
381
|
splash_exit case: :quiet_exit
|
303
382
|
else
|
304
|
-
|
383
|
+
if options[:hostname]
|
384
|
+
splash_exit case: :not_found, :more => "Command never runned remotly"
|
385
|
+
else
|
386
|
+
splash_exit case: :not_found, :more => "Command never runned"
|
387
|
+
end
|
305
388
|
end
|
306
389
|
end
|
307
390
|
|
308
391
|
# Thor method : getting the list of avaibles executions reports
|
309
|
-
desc "
|
392
|
+
desc "reportlist", "list all executions report results "
|
310
393
|
long_desc <<-LONGDESC
|
311
394
|
list all executions report results\n
|
312
395
|
with --pattern <SEARCH>, search type string, wilcard * (group) ? (char)\n
|
@@ -319,7 +402,10 @@ module CLISplash
|
|
319
402
|
option :hostname, :type => :string, :aliases => "-H"
|
320
403
|
option :all, :type => :boolean, :negate => false, :aliases => "-A"
|
321
404
|
option :detail, :type => :boolean, :aliases => "-D"
|
322
|
-
def
|
405
|
+
def reportlist
|
406
|
+
unless is_root? then
|
407
|
+
splash_exit case: :not_root, :more => "Command execution report list"
|
408
|
+
end
|
323
409
|
log = get_logger
|
324
410
|
options[:hostname] = Socket.gethostname if options[:hostname] == 'hostname'
|
325
411
|
if options[:hostname] and options[:all] then
|
@@ -355,10 +441,9 @@ module CLISplash
|
|
355
441
|
req = { :key => command }
|
356
442
|
req[:hostname] = host if options[:all]
|
357
443
|
res = YAML::load(backend.get(req))
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
log.arrow "Execution time : #{res[:exec_time]}"
|
444
|
+
res.each do |record|
|
445
|
+
log.arrow "#{record.keys.first} : #{record[record.keys.first][:status]}"
|
446
|
+
end
|
362
447
|
end
|
363
448
|
end
|
364
449
|
splash_exit case: :quiet_exit
|
data/lib/splash/cli/config.rb
CHANGED
@@ -9,6 +9,7 @@ module CLISplash
|
|
9
9
|
include Splash::Helpers
|
10
10
|
include Splash::Exiter
|
11
11
|
include Splash::Loggers
|
12
|
+
include Splash::Backends
|
12
13
|
|
13
14
|
# Thor method : running of Splash setup
|
14
15
|
desc "setup", "Setup installation fo Splash"
|
@@ -49,8 +50,18 @@ module CLISplash
|
|
49
50
|
|
50
51
|
# Thor method : flushing configured backend
|
51
52
|
desc "flushbackend", "Flush configured backend"
|
53
|
+
option :name, :type => :string, :aliases => "-N"
|
52
54
|
def flushbackend
|
53
|
-
|
55
|
+
if options[:name] then
|
56
|
+
acase = run_as_root :flush_backend, options
|
57
|
+
else
|
58
|
+
return_cases = {}
|
59
|
+
list_backends.each do |key,value|
|
60
|
+
return_cases[key] = run_as_root :flush_backend, { :name => key }
|
61
|
+
end
|
62
|
+
errors = return_cases.select {|key,value| value[:case] != :quiet_exit}.keys
|
63
|
+
acase = (errors.empty?)? {:case => :quiet_exit, :more => "All backends flushed successfully"}: {:case => :configuration_error, :more => "Backends #{errors.join(',')} flushing failed"}
|
64
|
+
end
|
54
65
|
splash_exit acase
|
55
66
|
end
|
56
67
|
|
data/lib/splash/cli/daemon.rb
CHANGED
@@ -99,7 +99,7 @@ module CLISplash
|
|
99
99
|
end
|
100
100
|
|
101
101
|
# Thor method : sending reset verb over transport in the input queue of Splashd
|
102
|
-
desc "
|
102
|
+
desc "reset", "send a reset verb to HOSTNAME daemon over transport (need an active tranport), Typicallly RabbitMQ"
|
103
103
|
def reset(hostname=Socket.gethostname)
|
104
104
|
log = get_logger
|
105
105
|
log.info "ctrl+c for interrupt"
|
data/lib/splash/cli/logs.rb
CHANGED
@@ -12,61 +12,76 @@ module CLISplash
|
|
12
12
|
# Thor method : running Splash configured logs monitors analyse
|
13
13
|
desc "analyse", "analyze logs defined in Splash config"
|
14
14
|
def analyse
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
15
|
+
if is_root? then
|
16
|
+
log = get_logger
|
17
|
+
results = LogScanner::new
|
18
|
+
res = results.analyse
|
19
|
+
log.info "SPlash Configured log monitors :"
|
20
|
+
full_status = true
|
21
|
+
results.output.each do |result|
|
22
|
+
if result[:status] == :clean then
|
23
|
+
log.ok "Log : #{result[:log]} with label : #{result[:label]} : no errors"
|
24
|
+
log.item "Detected pattern : #{result[:pattern]}"
|
25
|
+
log.item "Nb lines = #{result[:lines]}"
|
26
|
+
elsif result[:status] == :missing then
|
27
|
+
log.ko "Log : #{result[:log]} with label : #{result[:label]} : missing !"
|
28
|
+
log.item "Detected pattern : #{result[:pattern]}"
|
29
|
+
else
|
30
|
+
log.ko "Log : #{result[:log]} with label : #{result[:label]} : #{result[:count]} errors"
|
31
|
+
log.item "Detected pattern : #{result[:pattern]}"
|
32
|
+
log.item "Nb lines = #{result[:lines]}"
|
33
|
+
end
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
full_status = false unless result[:status] == :clean
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
38
|
+
if full_status then
|
39
|
+
log.ok "Global status : no error found"
|
40
|
+
else
|
41
|
+
log.error "Global status : some error found"
|
42
|
+
end
|
43
|
+
splash_exit case: :quiet_exit
|
39
44
|
else
|
40
|
-
|
45
|
+
splash_exit case: :not_root, :more => "Log analysis"
|
41
46
|
end
|
42
|
-
splash_exit case: :quiet_exit
|
43
47
|
end
|
44
48
|
|
45
49
|
|
46
50
|
# Thor method : running Splash configured logs monitors analyse and sending to Prometheus Pushgateway
|
47
51
|
desc "monitor", "monitor logs defined in Splash config"
|
48
52
|
def monitor
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
if is_root? then
|
54
|
+
log = get_logger
|
55
|
+
log.level = :fatal if options[:quiet]
|
56
|
+
result = LogScanner::new
|
57
|
+
result.analyse
|
58
|
+
splash_exit result.notify
|
59
|
+
else
|
60
|
+
splash_exit case: :not_root, :more => "Log analysis"
|
61
|
+
end
|
54
62
|
|
55
63
|
end
|
56
64
|
|
65
|
+
|
66
|
+
|
67
|
+
|
57
68
|
# Thor method : display a specific Splash configured log monitor
|
58
|
-
desc "show
|
69
|
+
desc "show LABEL", "show Splash configured log monitoring for LOG"
|
59
70
|
def show(logrecord)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
71
|
+
if is_root? then
|
72
|
+
log = get_logger
|
73
|
+
log_record_set = get_config.logs.select{|item| item[:log] == logrecord or item[:label] == logrecord.to_sym}
|
74
|
+
unless log_record_set.empty? then
|
75
|
+
record = log_record_set.first
|
76
|
+
log.info "Splash log monitor : #{record[:log]}"
|
77
|
+
log.item "pattern : /#{record[:pattern]}/"
|
78
|
+
log.item "label : #{record[:label]}"
|
79
|
+
splash_exit case: :quiet_exit
|
80
|
+
else
|
81
|
+
splash_exit case: :not_found, :more => "log not configured"
|
82
|
+
end
|
68
83
|
else
|
69
|
-
splash_exit case: :
|
84
|
+
splash_exit case: :not_root, :more => "Log analysis"
|
70
85
|
end
|
71
86
|
end
|
72
87
|
|
@@ -78,17 +93,98 @@ module CLISplash
|
|
78
93
|
LONGDESC
|
79
94
|
option :detail, :type => :boolean, :aliases => "-D"
|
80
95
|
def list
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
96
|
+
if is_root? then
|
97
|
+
log = get_logger
|
98
|
+
log.info "Splash configured log monitoring :"
|
99
|
+
log_record_set = get_config.logs
|
100
|
+
log.ko 'No configured commands found' if log_record_set.empty?
|
101
|
+
log_record_set.each do |record|
|
102
|
+
log.item "log monitor : #{record[:log]} label : #{record[:label]}"
|
103
|
+
if options[:detail] then
|
104
|
+
log.arrow "pattern : /#{record[:pattern]}/"
|
105
|
+
end
|
89
106
|
end
|
107
|
+
splash_exit case: :quiet_exit
|
108
|
+
else
|
109
|
+
splash_exit case: :not_root, :more => "Log analysis"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Thor method : display the full list of Splash configured log monitors
|
114
|
+
desc "get_result LABEL", "Get last or specific log monitoring report"
|
115
|
+
long_desc <<-LONGDESC
|
116
|
+
Get last or specific log monitoring report\n
|
117
|
+
with --date <DATE>, a date format string (same as in history ouput)
|
118
|
+
LONGDESC
|
119
|
+
option :date, :type => :string, :aliases => "-D"
|
120
|
+
def get_result(label)
|
121
|
+
if is_root? then
|
122
|
+
log = get_logger
|
123
|
+
log.info "Log : #{label}"
|
124
|
+
config = get_config
|
125
|
+
records = LogsRecords::new(label).get_all_records
|
126
|
+
if options[:date] then
|
127
|
+
wanted = records.select{|key,value| key.keys.first == options[:date]}.first
|
128
|
+
else
|
129
|
+
wanted = records.last
|
130
|
+
end
|
131
|
+
if wanted.nil? then
|
132
|
+
splash_exit case: :not_found, more: "Log never monitored"
|
133
|
+
else
|
134
|
+
record =wanted.keys.first
|
135
|
+
value=wanted[record]
|
136
|
+
log.item record
|
137
|
+
log.arrow "Status : #{value[:status].to_s}"
|
138
|
+
log.arrow "nb files : #{value[:errors]}"
|
139
|
+
log.arrow "nb lines : #{value[:lines]}"
|
140
|
+
end
|
141
|
+
else
|
142
|
+
splash_exit case: :not_root, :more => "Log get result"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Thor method : show logs monitoring history
|
147
|
+
long_desc <<-LONGDESC
|
148
|
+
show logs monitoring history for LABEL\n
|
149
|
+
LONGDESC
|
150
|
+
option :table, :type => :boolean, :aliases => "-t"
|
151
|
+
desc "history LABEL", "show logs monitoring history"
|
152
|
+
def history(label)
|
153
|
+
if is_root? then
|
154
|
+
log = get_logger
|
155
|
+
log.info "Log : #{label}"
|
156
|
+
config = get_config
|
157
|
+
if options[:table] then
|
158
|
+
table = TTY::Table.new do |t|
|
159
|
+
t << ["Start Date", "File","Status", "Nb errors", "Nb lines"]
|
160
|
+
t << ['','','','','']
|
161
|
+
LogsRecords::new(label).get_all_records.each do |item|
|
162
|
+
record =item.keys.first
|
163
|
+
value=item[record]
|
164
|
+
|
165
|
+
t << [record, value[:file], value[:status].to_s, value[:errors], value[:lines]]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
if check_unicode_term then
|
169
|
+
puts table.render(:unicode)
|
170
|
+
else
|
171
|
+
puts table.render(:ascii)
|
172
|
+
end
|
173
|
+
|
174
|
+
else
|
175
|
+
LogsRecords::new(label).get_all_records.each do |item|
|
176
|
+
record =item.keys.first
|
177
|
+
value=item[record]
|
178
|
+
log.item record
|
179
|
+
log.arrow "Status : #{value[:status].to_s}"
|
180
|
+
log.arrow "nb files : #{value[:errors]}"
|
181
|
+
log.arrow "nb lines : #{value[:lines]}"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
splash_exit case: :quiet_exit
|
185
|
+
else
|
186
|
+
splash_exit case: :not_root, :more => "Log analysis"
|
90
187
|
end
|
91
|
-
splash_exit case: :quiet_exit
|
92
188
|
end
|
93
189
|
|
94
190
|
end
|