prometheus-splash 0.6.1 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -1
  3. data/README.md +1 -1
  4. data/config/splash.yml +45 -5
  5. data/lib/splash/backends.rb +1 -0
  6. data/lib/splash/cli.rb +2 -1
  7. data/lib/splash/cli/commands.rb +125 -5
  8. data/lib/splash/cli/daemon.rb +41 -1
  9. data/lib/splash/cli/logs.rb +111 -47
  10. data/lib/splash/cli/process.rb +112 -52
  11. data/lib/splash/cli/sequences.rb +2 -0
  12. data/lib/splash/cli/transfers.rb +213 -0
  13. data/lib/splash/cli/webadmin.rb +3 -3
  14. data/lib/splash/commands.rb +85 -19
  15. data/lib/splash/config.rb +142 -52
  16. data/lib/splash/constants.rb +7 -3
  17. data/lib/splash/daemon/metrics.rb +6 -6
  18. data/lib/splash/daemon/orchestrator.rb +76 -36
  19. data/lib/splash/daemon/orchestrator/grammar.rb +16 -1
  20. data/lib/splash/dependencies.rb +6 -1
  21. data/lib/splash/exiter.rb +1 -1
  22. data/lib/splash/helpers.rb +12 -3
  23. data/lib/splash/loggers/cli.rb +2 -10
  24. data/lib/splash/logs.rb +90 -16
  25. data/lib/splash/processes.rb +87 -16
  26. data/lib/splash/transfers.rb +229 -0
  27. data/lib/splash/webadmin.rb +3 -3
  28. data/lib/splash/webadmin/api/routes/commands.rb +2 -2
  29. data/lib/splash/webadmin/api/routes/config.rb +53 -2
  30. data/lib/splash/webadmin/api/routes/logs.rb +32 -17
  31. data/lib/splash/webadmin/api/routes/process.rb +4 -4
  32. data/lib/splash/webadmin/api/routes/sequences.rb +28 -0
  33. data/lib/splash/webadmin/main.rb +1 -0
  34. data/lib/splash/webadmin/portal/controllers/commands.rb +2 -0
  35. data/lib/splash/webadmin/portal/controllers/documentation.rb +3 -1
  36. data/lib/splash/webadmin/portal/controllers/home.rb +24 -0
  37. data/lib/splash/webadmin/portal/controllers/logs.rb +44 -1
  38. data/lib/splash/webadmin/portal/controllers/processes.rb +2 -0
  39. data/lib/splash/webadmin/portal/controllers/proxy.rb +13 -4
  40. data/lib/splash/webadmin/portal/controllers/restclient.rb +7 -2
  41. data/lib/splash/webadmin/portal/controllers/sequences.rb +9 -0
  42. data/lib/splash/webadmin/portal/init.rb +2 -2
  43. data/lib/splash/webadmin/portal/public/css/ultragreen.css +6 -0
  44. data/lib/splash/webadmin/portal/public/favicon.ico +0 -0
  45. data/lib/splash/webadmin/portal/views/commands.slim +1 -1
  46. data/lib/splash/webadmin/portal/views/documentation.slim +1 -1
  47. data/lib/splash/webadmin/portal/views/home.slim +53 -9
  48. data/lib/splash/webadmin/portal/views/layout.slim +2 -2
  49. data/lib/splash/webadmin/portal/views/logs.slim +68 -21
  50. data/lib/splash/webadmin/portal/views/logs_form.slim +24 -0
  51. data/lib/splash/webadmin/portal/views/nav.slim +1 -1
  52. data/lib/splash/webadmin/portal/views/not_found.slim +1 -1
  53. data/lib/splash/webadmin/portal/views/processes.slim +1 -1
  54. data/lib/splash/webadmin/portal/views/proxy.slim +5 -2
  55. data/lib/splash/webadmin/portal/views/restclient.slim +7 -4
  56. data/lib/splash/webadmin/portal/views/restclient_result.slim +24 -20
  57. data/lib/splash/webadmin/portal/views/sequences.slim +50 -0
  58. data/prometheus-splash.gemspec +7 -4
  59. data/ultragreen_roodi_coding_convention.yml +4 -4
  60. metadata +75 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3048edcf69c8bac285eab790a497fddbb9a4420a5cee8738ee1397c0a7c39587
4
- data.tar.gz: adb8f52b4e3b2d808728e092960e648768a45d8fbb66876ca7c585f492516c86
3
+ metadata.gz: 7da11971391d77ffc6bf37228938bba227880e8748ce605cfa3c33ab16855121
4
+ data.tar.gz: f3a1b196f64ea586a2d604c799ca1a11f9f966471e8938ba56803b1067852b85
5
5
  SHA512:
6
- metadata.gz: fd9ed4dc543ea0a81cd163c73988424a87b76a5e094f548900e30ff71db7e8525798d9c824113ecf8972d2e26b6a616d2393a1afb3a1e3caaa8f62ebb331f3dc
7
- data.tar.gz: 23635fa7711d83e15f8b859d47bdcea3fa4dadc268cb899b46282555b73a2f998bf38614a48ec54997e9fe9986a78098fc2a9c818183be37e7dbd913bc7cfe8a
6
+ metadata.gz: 729ffa39b3dcafb9c70631d6c0c02dc3ba67ce78c1d97fff9b665bff3b1ff311aaa24ed79f43cfb414550da022f8cc7f7cc40de96928c1c44731bd9211e36932
7
+ data.tar.gz: 85dd4b338e46736d8bc68d3b33b5325f18c6276bf2a1e90ac3731e0bb86741d25f1574f333f1a77f23889bb0de8bcf5b2f763bb75bf1c0e4f75c5b00910ddd86
@@ -124,4 +124,46 @@
124
124
  ### FEATURE
125
125
 
126
126
  * processes monitoring #23
127
-
127
+
128
+ ## V 0.6.0 2020/10/10
129
+
130
+ ### FEATURE
131
+
132
+ * read only WebAdmin (Major update)
133
+ * API REST
134
+ * refactoring
135
+
136
+ ## V 0.7.0
137
+
138
+ ### FEATURE
139
+
140
+ * sequences
141
+ * API sequences
142
+ * UI sequences
143
+ * Transfers
144
+ * API Transfers
145
+ * UI Transfers
146
+
147
+ ## V 0.8.0
148
+
149
+ ### FEATURE
150
+ * orchestrator rebuild
151
+ * reshash config and reset + grammar and Cli
152
+ * refacto config
153
+
154
+ ## V 0.8.1
155
+
156
+ ### FEATURE
157
+ * full Web UI features for Logs (R/W)
158
+ * API Logs Full
159
+
160
+ ## V 0.8.2
161
+
162
+ ### FIX
163
+ * WebAdmin UI bugs and cosmetics
164
+ * API (constants CLONE for exiter)
165
+
166
+ ## V 0.8.3
167
+
168
+ ### SECURITY
169
+ * kramdown dependencies update
data/README.md CHANGED
@@ -9,7 +9,7 @@ SPLASH is **Supervision with Prometheus of Logs and Asynchronous tasks orchestra
9
9
  * Web : http://www.ultragreen.net
10
10
  * Github : https://github.com/Ultragreen/prometheus-splash
11
11
  * Rubygems : https://rubygems.org/gems/prometheus-splash
12
- * DOC yardoc : https://www.rubydoc.info/gems/prometheus-splash/0.6.0
12
+ * DOC yardoc : https://www.rubydoc.info/gems/prometheus-splash/0.8.3
13
13
 
14
14
  Prometheus Logs and Batchs supervision over PushGateway
15
15
 
@@ -2,6 +2,9 @@
2
2
  :splash:
3
3
 
4
4
  ### Main Configuration
5
+ :paths:
6
+ :pid_path: /var/run/splash
7
+ :trace_path: /var/run/splash/traces
5
8
  :loggers:
6
9
  :level: :info
7
10
  :daemon:
@@ -23,6 +26,16 @@
23
26
  # :port: 6379
24
27
  # #:auth: "mykey"
25
28
  # :base: 1
29
+ :transfers_trace:
30
+ :type: :file
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
38
+
26
39
  :transports:
27
40
  :active: :rabbitmq
28
41
  :rabbitmq:
@@ -39,16 +52,14 @@
39
52
  :procmon_scheduling:
40
53
  :every: 20s
41
54
  :process_name: "Splash : daemon."
42
- :paths:
43
- :pid_path: /var/run/splash
44
- :trace_path: /var/run/splash/traces
45
55
  :files:
46
56
  :stdout_trace: stdout.txt
47
57
  :stderr_trace: stderr.txt
48
58
  :pid_file: splash.pid
49
59
  :prometheus:
50
- :pushgateway: 'http://localhost:9091/'
51
- :url: 'http://localhost:9090/'
60
+ :pushgateway: 'http://localhost:9091'
61
+ :url: 'http://localhost:9090'
62
+ :alertmanager: 'http://localhost:9093'
52
63
  :webadmin:
53
64
  :port: 9234
54
65
  :ip: 127.0.0.1
@@ -117,15 +128,21 @@
117
128
  - :label: :log_app_1
118
129
  :log: /tmp/test
119
130
  :pattern: ERROR
131
+ :retention:
132
+ :hours: 5
120
133
  - :label: :log_app_2
121
134
  :log: /tmp/test2
122
135
  :pattern: ERROR
136
+ :retention:
137
+ :hours: 5
123
138
 
124
139
  ### configuration of monitored processes
125
140
  :processes:
126
141
  - :process: cron
127
142
  :patterns:
128
143
  - cron
144
+ :retention:
145
+ :hours: 5
129
146
 
130
147
 
131
148
  ###
@@ -175,4 +192,27 @@
175
192
  - :step: exec echo3
176
193
  :command: :echo3
177
194
 
195
+ ### Transfers
196
+ :transfers:
197
+ - :name: :transfer_text
198
+ :desc: "List of text files"
199
+ :pattern: '*.txt'
200
+ :backup: true
201
+ :type: :push
202
+ :retention:
203
+ :hours: 1
204
+ :local:
205
+ :path: /tmp/transferts
206
+ :user: root
207
+ :remote:
208
+ :user: root
209
+ :host: localhost
210
+ :path: /tmp/
211
+ :post:
212
+ :remote_command: 'ls'
213
+
214
+
215
+
216
+
217
+
178
218
  ###
@@ -13,6 +13,7 @@ module Splash
13
13
  # @param [Symbol] store the name of the store actually in [:execution_trace]
14
14
  # @return [Splash::Backends::<Type>|Hash] with type in [:redis,:file] or Exiter case :configuration_error
15
15
  def get_backend(store)
16
+ splash_exit case: :configuration_error, more: "backend definition failure" if get_config[:backends][:stores][store].nil?
16
17
  backend = get_config[:backends][:stores][store][:type].to_s
17
18
  aclass = "Splash::Backends::#{backend.capitalize}"
18
19
  begin
@@ -43,6 +43,7 @@ class CLI < Thor
43
43
  subcommand "documentation", Documentation
44
44
  desc "webadmin SUBCOMMAND ...ARGS", "Splash Webadmin daemon controller"
45
45
  subcommand "webadmin", WebAdmin
46
-
46
+ desc "transfers SUBCOMMAND ...ARGS", "Managing transfers"
47
+ subcommand "transfers", Transfers
47
48
 
48
49
  end
@@ -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
@@ -129,6 +132,9 @@ module CLISplash
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
@@ -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
@@ -227,6 +236,9 @@ module CLISplash
227
236
  LONGDESC
228
237
  option :hostname, :type => :string, :aliases => "-H"
229
238
  def show(command)
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
@@ -265,6 +277,57 @@ module CLISplash
265
277
  end
266
278
  end
267
279
 
280
+
281
+
282
+ # Thor method : show commands executions history
283
+ long_desc <<-LONGDESC
284
+ show commands executions history for LABEL\n
285
+ LONGDESC
286
+ option :table, :type => :boolean, :aliases => "-t"
287
+ desc "history LABEL", "show commands executions history"
288
+ def history(command)
289
+ if is_root? then
290
+ log = get_logger
291
+ log.info "Log : #{command}#"
292
+ config = get_config
293
+ if options[:table] then
294
+ table = TTY::Table.new do |t|
295
+ t << ["Start Date","Status", "end_date", "Execution time","STDOUT empty ? ", "STDERR empty ? "]
296
+ t << ['','','','','','']
297
+ CmdRecords::new(command).get_all_records.each do |item|
298
+ record =item.keys.first
299
+ value=item[record]
300
+ t << [record, value[:status].to_s,
301
+ value[:end_date],
302
+ value[:exec_time],
303
+ value[:stdout].empty?,
304
+ value[:stdout].empty?]
305
+ end
306
+ end
307
+ if check_unicode_term then
308
+ puts table.render(:unicode)
309
+ else
310
+ puts table.render(:ascii)
311
+ end
312
+
313
+ else
314
+ CmdRecords::new(command).get_all_records.each do |item|
315
+ record =item.keys.first
316
+ value=item[record]
317
+ log.item record
318
+ log.arrow "Status : #{value[:status].to_s}"
319
+ log.arrow "End date : #{value[:end_date]}"
320
+ log.arrow "Execution time : #{value[:exec_time]}"
321
+ log.arrow "STDOUT empty ? : #{value[:stdout].empty?}"
322
+ log.arrow "STDERR empty ? : #{value[:stderr].empty?}"
323
+ end
324
+ end
325
+ splash_exit case: :quiet_exit
326
+ else
327
+ splash_exit case: :not_root, :more => "Command execution history"
328
+ end
329
+ end
330
+
268
331
  # Thor method : getting information on the last execution of a command
269
332
  desc "lastrun COMMAND", "Show last running result for specific configured command COMMAND"
270
333
  long_desc <<-LONGDESC
@@ -273,6 +336,9 @@ module CLISplash
273
336
  LONGDESC
274
337
  option :hostname, :type => :string, :aliases => "-H"
275
338
  def lastrun(command)
339
+ unless is_root? then
340
+ splash_exit case: :not_root, :more => "Command last execution report"
341
+ end
276
342
  log = get_logger
277
343
  backend = get_backend :execution_trace
278
344
  redis = (backend.class == Splash::Backends::Redis)? true : false
@@ -294,7 +360,7 @@ module CLISplash
294
360
  tp = Template::new(
295
361
  list_token: get_config.execution_template_tokens,
296
362
  template_file: get_config.execution_template_path)
297
- tp.map YAML::load(res)
363
+ tp.map YAML::load(res).last.values.first
298
364
  log.flat tp.output
299
365
  else
300
366
  log.ko "Command not already runned."
@@ -305,6 +371,58 @@ module CLISplash
305
371
  end
306
372
  end
307
373
 
374
+
375
+ # Thor method : getting information on one specific execution of a command
376
+ desc "onerun COMMAND", "Show running result for specific configured command COMMAND"
377
+ long_desc <<-LONGDESC
378
+ Show specific running result for specific configured command COMMAND\n
379
+ with --hostname <HOSTNAME>, an other Splash monitored server (only with Redis backend configured)
380
+ with --date <DATE>, a date format string (same as in history ouput)
381
+
382
+ LONGDESC
383
+ option :hostname, :type => :string, :aliases => "-H"
384
+ option :date, :type => :string, :aliases => "-D", :required => true
385
+ def onerun(command)
386
+ unless is_root? then
387
+ splash_exit case: :not_root, :more => "Command specific execution report"
388
+ end
389
+ log = get_logger
390
+ backend = get_backend :execution_trace
391
+ redis = (backend.class == Splash::Backends::Redis)? true : false
392
+ if not redis and options[:hostname] then
393
+ splash_exit case: :specific_config_required, :more => "Redis backend is requiered for Remote execution report request"
394
+ end
395
+ splash_exit case: :not_root if not is_root? and not redis
396
+ list = get_config.commands.keys
397
+ if options[:hostname] then
398
+ options[:hostname] = Socket.gethostname if options[:hostname] == 'hostname'
399
+ list = backend.list("*", options[:hostname]).map(&:to_sym)
400
+ end
401
+ if list.include? command.to_sym then
402
+ log.info "Splash command #{command} previous execution report:\n"
403
+ req = { :key => command}
404
+ req[:hostname] = options[:hostname] if options[:hostname]
405
+ if backend.exist? req then
406
+ res = backend.get req
407
+ tp = Template::new(
408
+ list_token: get_config.execution_template_tokens,
409
+ template_file: get_config.execution_template_path)
410
+ prov = YAML::load(res).select{|key,value| key.keys.first == options[:date]}
411
+ if prov.empty? then
412
+ log.ko "Command not runned one this date or date misformatted."
413
+ else
414
+ tp.map prov.first.values.first
415
+ log.flat tp.output
416
+ end
417
+ else
418
+ log.ko "Command not already runned."
419
+ end
420
+ splash_exit case: :quiet_exit
421
+ else
422
+ splash_exit case: :not_found, :more => "Command report never runned remotly" if options[:hostname]
423
+ end
424
+ end
425
+
308
426
  # Thor method : getting the list of avaibles executions reports
309
427
  desc "getreportlist", "list all executions report results "
310
428
  long_desc <<-LONGDESC
@@ -320,6 +438,9 @@ module CLISplash
320
438
  option :all, :type => :boolean, :negate => false, :aliases => "-A"
321
439
  option :detail, :type => :boolean, :aliases => "-D"
322
440
  def getreportlist
441
+ unless is_root? then
442
+ splash_exit case: :not_root, :more => "Command execution report list"
443
+ end
323
444
  log = get_logger
324
445
  options[:hostname] = Socket.gethostname if options[:hostname] == 'hostname'
325
446
  if options[:hostname] and options[:all] then
@@ -355,10 +476,9 @@ module CLISplash
355
476
  req = { :key => command }
356
477
  req[:hostname] = host if options[:all]
357
478
  res = YAML::load(backend.get(req))
358
- log.arrow "Status : #{res[:status]}"
359
- log.arrow "Start date : #{res[:start_date]}"
360
- log.arrow "End date : #{res[:end_date]}"
361
- log.arrow "Execution time : #{res[:exec_time]}"
479
+ res.each do |record|
480
+ log.arrow "#{record.keys.first} : #{record[record.keys.first][:status]}"
481
+ end
362
482
  end
363
483
  end
364
484
  splash_exit case: :quiet_exit
@@ -74,7 +74,47 @@ module CLISplash
74
74
  splash_exit case: :quiet_exit
75
75
  end
76
76
  rescue Interrupt
77
- splash_exit status: :error, case: :interrupt, more: "Ping Command"
77
+ splash_exit status: :error, case: :interrupt, more: "ping Command"
78
+ end
79
+ end
80
+
81
+ # Thor method : sending get_jobs verb over transport in the input queue of Splashd
82
+ desc "getjobs", "send a get_jobs verb to HOSTNAME daemon over transport (need an active tranport), Typicallly RabbitMQ"
83
+ def getjobs(hostname=Socket.gethostname)
84
+ log = get_logger
85
+ log.info "ctrl+c for interrupt"
86
+ begin
87
+ transport = get_default_client
88
+ if transport.class == Hash and transport.include? :case then
89
+ splash_exit transport
90
+ else
91
+ log.receive transport.execute({ :verb => :get_jobs,
92
+ :return_to => "splash.#{Socket.gethostname}.returncli",
93
+ :queue => "splash.#{hostname}.input" })
94
+ splash_exit case: :quiet_exit
95
+ end
96
+ rescue Interrupt
97
+ splash_exit status: :error, case: :interrupt, more: "getjobs Command"
98
+ end
99
+ end
100
+
101
+ # Thor method : sending reset verb over transport in the input queue of Splashd
102
+ desc "getjobs", "send a reset verb to HOSTNAME daemon over transport (need an active tranport), Typicallly RabbitMQ"
103
+ def reset(hostname=Socket.gethostname)
104
+ log = get_logger
105
+ log.info "ctrl+c for interrupt"
106
+ begin
107
+ transport = get_default_client
108
+ if transport.class == Hash and transport.include? :case then
109
+ splash_exit transport
110
+ else
111
+ log.receive transport.execute({ :verb => :reset,
112
+ :return_to => "splash.#{Socket.gethostname}.returncli",
113
+ :queue => "splash.#{hostname}.input" })
114
+ splash_exit case: :quiet_exit
115
+ end
116
+ rescue Interrupt
117
+ splash_exit status: :error, case: :interrupt, more: "reset Command"
78
118
  end
79
119
  end
80
120
 
@@ -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
- log = get_logger
16
- results = LogScanner::new
17
- res = results.analyse
18
- log.info "SPlash Configured log monitors :"
19
- full_status = true
20
- results.output.each do |result|
21
- if result[:status] == :clean then
22
- log.ok "Log : #{result[:log]} with label : #{result[:label]} : no errors"
23
- log.item "Detected pattern : #{result[:pattern]}"
24
- log.item "Nb lines = #{result[:lines]}"
25
- elsif result[:status] == :missing then
26
- log.ko "Log : #{result[:log]} with label : #{result[:label]} : missing !"
27
- log.item "Detected pattern : #{result[:pattern]}"
28
- else
29
- log.ko "Log : #{result[:log]} with label : #{result[:label]} : #{result[:count]} errors"
30
- log.item "Detected pattern : #{result[:pattern]}"
31
- log.item "Nb lines = #{result[:lines]}"
32
- end
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
- full_status = false unless result[:status] == :clean
35
- end
35
+ full_status = false unless result[:status] == :clean
36
+ end
36
37
 
37
- if full_status then
38
- log.ok "Global status : no error found"
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
- log.error "Global status : some error found"
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
- log = get_logger
50
- log.level = :fatal if options[:quiet]
51
- result = LogScanner::new
52
- result.analyse
53
- splash_exit result.notify
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
69
  desc "show LOG", "show Splash configured log monitoring for LOG"
59
70
  def show(logrecord)
60
- log = get_logger
61
- log_record_set = get_config.logs.select{|item| item[:log] == logrecord or item[:label] == logrecord.to_sym}
62
- unless log_record_set.empty? then
63
- record = log_record_set.first
64
- log.info "Splash log monitor : #{record[:log]}"
65
- log.item "pattern : /#{record[:pattern]}/"
66
- log.item "label : #{record[:label]}"
67
- splash_exit case: :quiet_exit
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: :not_found, :more => "log not configured"
84
+ splash_exit case: :not_root, :more => "Log analysis"
70
85
  end
71
86
  end
72
87
 
@@ -78,17 +93,66 @@ module CLISplash
78
93
  LONGDESC
79
94
  option :detail, :type => :boolean, :aliases => "-D"
80
95
  def list
81
- log = get_logger
82
- log.info "Splash configured log monitoring :"
83
- log_record_set = get_config.logs
84
- log.ko 'No configured commands found' if log_record_set.empty?
85
- log_record_set.each do |record|
86
- log.item "log monitor : #{record[:log]} label : #{record[:label]}"
87
- if options[:detail] then
88
- log.arrow "pattern : /#{record[:pattern]}/"
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
+
114
+ # Thor method : show logs monitoring history
115
+ long_desc <<-LONGDESC
116
+ show logs monitoring history for LABEL\n
117
+ LONGDESC
118
+ option :table, :type => :boolean, :aliases => "-t"
119
+ desc "history LABEL", "show logs monitoring history"
120
+ def history(label)
121
+ if is_root? then
122
+ log = get_logger
123
+ log.info "Log : #{label}"
124
+ config = get_config
125
+ if options[:table] then
126
+ table = TTY::Table.new do |t|
127
+ t << ["Start Date", "File","Status", "Nb errors", "Nb lines"]
128
+ t << ['','','','','']
129
+ LogsRecords::new(label).get_all_records.each do |item|
130
+ record =item.keys.first
131
+ value=item[record]
132
+
133
+ t << [record, value[:file], value[:status].to_s, value[:errors], value[:lines]]
134
+ end
135
+ end
136
+ if check_unicode_term then
137
+ puts table.render(:unicode)
138
+ else
139
+ puts table.render(:ascii)
140
+ end
141
+
142
+ else
143
+ LogsRecords::new(label).get_all_records.each do |item|
144
+ record =item.keys.first
145
+ value=item[record]
146
+ log.item record
147
+ log.arrow "Status : #{value[:status].to_s}"
148
+ log.arrow "nb files : #{value[:errors]}"
149
+ log.arrow "nb lines : #{value[:lines]}"
150
+ end
151
+ end
152
+ splash_exit case: :quiet_exit
153
+ else
154
+ splash_exit case: :not_root, :more => "Log analysis"
90
155
  end
91
- splash_exit case: :quiet_exit
92
156
  end
93
157
 
94
158
  end