prometheus-splash 0.8.1 → 0.8.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -2
  3. data/README.md +1 -1
  4. data/lib/splash/cli/logs.rb +3 -0
  5. data/lib/splash/config.rb +105 -29
  6. data/lib/splash/constants.rb +1 -2
  7. data/lib/splash/exiter.rb +1 -1
  8. data/lib/splash/helpers.rb +1 -1
  9. data/lib/splash/webadmin/api/routes/commands.rb +2 -2
  10. data/lib/splash/webadmin/api/routes/config.rb +53 -2
  11. data/lib/splash/webadmin/api/routes/logs.rb +32 -17
  12. data/lib/splash/webadmin/api/routes/process.rb +4 -4
  13. data/lib/splash/webadmin/api/routes/sequences.rb +2 -2
  14. data/lib/splash/webadmin/portal/controllers/commands.rb +2 -0
  15. data/lib/splash/webadmin/portal/controllers/documentation.rb +2 -0
  16. data/lib/splash/webadmin/portal/controllers/home.rb +6 -1
  17. data/lib/splash/webadmin/portal/controllers/logs.rb +44 -1
  18. data/lib/splash/webadmin/portal/controllers/processes.rb +2 -0
  19. data/lib/splash/webadmin/portal/controllers/proxy.rb +2 -1
  20. data/lib/splash/webadmin/portal/controllers/restclient.rb +6 -1
  21. data/lib/splash/webadmin/portal/controllers/sequences.rb +2 -0
  22. data/lib/splash/webadmin/portal/public/css/ultragreen.css +6 -0
  23. data/lib/splash/webadmin/portal/public/favicon.ico +0 -0
  24. data/lib/splash/webadmin/portal/views/commands.slim +1 -1
  25. data/lib/splash/webadmin/portal/views/documentation.slim +1 -1
  26. data/lib/splash/webadmin/portal/views/home.slim +19 -20
  27. data/lib/splash/webadmin/portal/views/layout.slim +2 -2
  28. data/lib/splash/webadmin/portal/views/logs.slim +68 -21
  29. data/lib/splash/webadmin/portal/views/logs_form.slim +24 -0
  30. data/lib/splash/webadmin/portal/views/nav.slim +1 -1
  31. data/lib/splash/webadmin/portal/views/not_found.slim +1 -1
  32. data/lib/splash/webadmin/portal/views/processes.slim +1 -1
  33. data/lib/splash/webadmin/portal/views/proxy.slim +2 -2
  34. data/lib/splash/webadmin/portal/views/restclient.slim +7 -4
  35. data/lib/splash/webadmin/portal/views/restclient_result.slim +24 -20
  36. data/lib/splash/webadmin/portal/views/sequences.slim +1 -1
  37. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60d3aa2e635dbea8022a1804e9886e495648ce777db2293442ae3a16bae7e25a
4
- data.tar.gz: 14912be5e4171daae1ee7706f98ac7974c43a96d56e7daa58a1e9a40d46b60ee
3
+ metadata.gz: a1089bb88ba3cb916cae48b6253559c5542028ab7752d9c08d5a90cb95a45c9f
4
+ data.tar.gz: 90280e53cbf7124b191707fd089afcd48f29bbf68d332fc2acc7865efc2f70b4
5
5
  SHA512:
6
- metadata.gz: d66a48e63fd8940c6343113511e1ad91531037013a042a79348a755de74e6447a791854fa2ec82461c38695370402e30790ac7660fd75c0cc82c0f5ef788701d
7
- data.tar.gz: 9d59657c45219e31af8a6c85fc137925ee03ccecc7a98e62848ba28540ec2e39df674fcd391b51334c4bc1252de487a5a55110a286707fee9a38e54bf85a3cfc
6
+ metadata.gz: c50f695e45c368955df4c919faa179c32ae333ce9d0e5676e9da0b1497893d08c526a2ba0a07fdaa7172972831fa43e7a16522404e112d1fdae156a1dfc2fbac
7
+ data.tar.gz: c8923535e3af5102bb02c3571cc29a220d83a02e2aa71885ab6022800ad3144361e583302de6021d690922c8f49c503a0e5eb3198cb1e7fa745377727462dae8
@@ -151,7 +151,14 @@
151
151
  * reshash config and reset + grammar and Cli
152
152
  * refacto config
153
153
 
154
- ## V0.8.1
154
+ ## V 0.8.1
155
155
 
156
156
  ### FEATURE
157
- * #55 historisation for reports for all
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)
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.8.1
12
+ * DOC yardoc : https://www.rubydoc.info/gems/prometheus-splash/0.8.2
13
13
 
14
14
  Prometheus Logs and Batchs supervision over PushGateway
15
15
 
@@ -62,6 +62,9 @@ module CLISplash
62
62
 
63
63
  end
64
64
 
65
+
66
+
67
+
65
68
  # Thor method : display a specific Splash configured log monitor
66
69
  desc "show LOG", "show Splash configured log monitoring for LOG"
67
70
  def show(logrecord)
@@ -11,58 +11,124 @@ module Splash
11
11
  include Splash::ConfigUtilities
12
12
 
13
13
 
14
+ class ConfigLinter
15
+ def initialize
16
+ @lints_present = {:logs => [:label, :log, :pattern ]}
17
+ @lints_types = {:logs => {:label => Symbol, :log => String, :pattern => String, :retention => Hash}}
18
+ end
19
+
20
+ def verify(options ={})
21
+ status = :success
22
+ missings = []
23
+ type_errors = []
24
+ useless = []
25
+ options[:record].each do |key,value|
26
+ useless.push key unless @lints_present[options[:type]].include? key or @lints_types[options[:type]].keys.include? key
27
+ type_errors.push key if @lints_types[options[:type]][key] != value.class and (@lints_present[options[:type]].include? key or @lints_types[options[:type]].keys.include? key)
28
+ end
29
+ @lints_present[options[:type]].each do |item|
30
+ missings.push item unless options[:record].keys.include? item
31
+ end
32
+
33
+ status = :failure if (missings.count > 0) or (type_errors.count > 0)
34
+ return {:missings => missings, :type_errors => type_errors, :useless => useless, :status => status}
35
+ end
36
+
37
+ end
38
+
14
39
  # Class to manage configuration in Splash from Splash::Constants override by Yaml CONFIG
15
40
  class Configuration < Hash
16
41
  include Splash::Constants
17
42
 
43
+ attr_accessor :config_from_file
44
+
18
45
  # constructor : read config file and map against Constants
19
46
  def initialize(config_file=CONFIG_FILE)
20
- config_from_file = readconf config_file
47
+ @config_file = config_file
48
+ hash_config_to_default
49
+
50
+ end
51
+
52
+
53
+ def hash_config_to_default
54
+ @config_from_file = readconf @config_file
21
55
  self[:version] = VERSION
22
56
  self[:author] = "#{AUTHOR} <#{EMAIL}>"
23
57
  self[:copyright] = "#{COPYRIGHT} #{LICENSE}"
24
58
 
25
- self[:prometheus_url] = (config_from_file[:prometheus][:url])? config_from_file[:prometheus][:url] : PROMETHEUS_URL
26
- self[:prometheus_pushgateway_url] = (config_from_file[:prometheus][:pushgateway])? config_from_file[:prometheus][:pushgateway] : PROMETHEUS_PUSHGATEWAY_URL
27
- self[:prometheus_alertmanager_url] = (config_from_file[:prometheus][:alertmanager])? config_from_file[:prometheus][:alertmanager] : PROMETHEUS_ALERTMANAGER_URL
59
+ self[:prometheus_url] = (@config_from_file[:prometheus][:url])? @config_from_file[:prometheus][:url] : PROMETHEUS_URL
60
+ self[:prometheus_pushgateway_url] = (@config_from_file[:prometheus][:pushgateway])? @config_from_file[:prometheus][:pushgateway] : PROMETHEUS_PUSHGATEWAY_URL
61
+ self[:prometheus_alertmanager_url] = (@config_from_file[:prometheus][:alertmanager])? @config_from_file[:prometheus][:alertmanager] : PROMETHEUS_ALERTMANAGER_URL
28
62
 
29
- self[:daemon_process_name] = (config_from_file[:daemon][:process_name])? config_from_file[:daemon][:process_name] : DAEMON_PROCESS_NAME
30
- self[:daemon_logmon_scheduling] = (config_from_file[:daemon][:logmon_scheduling])? config_from_file[:daemon][:logmon_scheduling] : DAEMON_LOGMON_SCHEDULING
31
- self[:daemon_metrics_scheduling] = (config_from_file[:daemon][:metrics_scheduling])? config_from_file[:daemon][:metrics_scheduling] : DAEMON_METRICS_SCHEDULING
32
- self[:daemon_procmon_scheduling] = (config_from_file[:daemon][:procmon_scheduling])? config_from_file[:daemon][:procmon_scheduling] : DAEMON_PROCMON_SCHEDULING
33
- self[:daemon_pid_file] = (config_from_file[:daemon][:files][:pid_file])? config_from_file[:daemon][:files][:pid_file] : DAEMON_PID_FILE
34
- self[:daemon_stdout_trace] = (config_from_file[:daemon][:files][:stdout_trace])? config_from_file[:daemon][:files][:stdout_trace] : DAEMON_STDOUT_TRACE
35
- self[:daemon_stderr_trace] = (config_from_file[:daemon][:files][:stderr_trace])? config_from_file[:daemon][:files][:stderr_trace] : DAEMON_STDERR_TRACE
63
+ self[:daemon_process_name] = (@config_from_file[:daemon][:process_name])? @config_from_file[:daemon][:process_name] : DAEMON_PROCESS_NAME
64
+ self[:daemon_logmon_scheduling] = (@config_from_file[:daemon][:logmon_scheduling])? @config_from_file[:daemon][:logmon_scheduling] : DAEMON_LOGMON_SCHEDULING
65
+ self[:daemon_metrics_scheduling] = (@config_from_file[:daemon][:metrics_scheduling])? @config_from_file[:daemon][:metrics_scheduling] : DAEMON_METRICS_SCHEDULING
66
+ self[:daemon_procmon_scheduling] = (@config_from_file[:daemon][:procmon_scheduling])? @config_from_file[:daemon][:procmon_scheduling] : DAEMON_PROCMON_SCHEDULING
67
+ self[:daemon_pid_file] = (@config_from_file[:daemon][:files][:pid_file])? @config_from_file[:daemon][:files][:pid_file] : DAEMON_PID_FILE
68
+ self[:daemon_stdout_trace] = (@config_from_file[:daemon][:files][:stdout_trace])? @config_from_file[:daemon][:files][:stdout_trace] : DAEMON_STDOUT_TRACE
69
+ self[:daemon_stderr_trace] = (@config_from_file[:daemon][:files][:stderr_trace])? @config_from_file[:daemon][:files][:stderr_trace] : DAEMON_STDERR_TRACE
36
70
 
37
71
 
38
- self[:webadmin_port] = (config_from_file[:webadmin][:port])? config_from_file[:webadmin][:port] : WEBADMIN_PORT
39
- self[:webadmin_ip] = (config_from_file[:webadmin][:ip])? config_from_file[:webadmin][:ip] : WEBADMIN_IP
40
- self[:webadmin_proxy] = (config_from_file[:webadmin][:proxy])? config_from_file[:webadmin][:proxy] : WEBADMIN_PROXY
41
- self[:webadmin_process_name] = (config_from_file[:webadmin][:process_name])? config_from_file[:webadmin][:process_name] : WEBADMIN_PROCESS_NAME
42
- self[:webadmin_pid_file] = (config_from_file[:webadmin][:files][:pid_file])? config_from_file[:webadmin][:files][:pid_file] : WEBADMIN_PID_FILE
43
- self[:webadmin_stdout_trace] = (config_from_file[:webadmin][:files][:stdout_trace])? config_from_file[:webadmin][:files][:stdout_trace] : WEBADMIN_STDOUT_TRACE
44
- self[:webadmin_stderr_trace] = (config_from_file[:webadmin][:files][:stderr_trace])? config_from_file[:webadmin][:files][:stderr_trace] : WEBADMIN_STDERR_TRACE
72
+ self[:webadmin_port] = (@config_from_file[:webadmin][:port])? @config_from_file[:webadmin][:port] : WEBADMIN_PORT
73
+ self[:webadmin_ip] = (@config_from_file[:webadmin][:ip])? @config_from_file[:webadmin][:ip] : WEBADMIN_IP
74
+ self[:webadmin_proxy] = (@config_from_file[:webadmin][:proxy])? @config_from_file[:webadmin][:proxy] : WEBADMIN_PROXY
75
+ self[:webadmin_process_name] = (@config_from_file[:webadmin][:process_name])? @config_from_file[:webadmin][:process_name] : WEBADMIN_PROCESS_NAME
76
+ self[:webadmin_pid_file] = (@config_from_file[:webadmin][:files][:pid_file])? @config_from_file[:webadmin][:files][:pid_file] : WEBADMIN_PID_FILE
77
+ self[:webadmin_stdout_trace] = (@config_from_file[:webadmin][:files][:stdout_trace])? @config_from_file[:webadmin][:files][:stdout_trace] : WEBADMIN_STDOUT_TRACE
78
+ self[:webadmin_stderr_trace] = (@config_from_file[:webadmin][:files][:stderr_trace])? @config_from_file[:webadmin][:files][:stderr_trace] : WEBADMIN_STDERR_TRACE
45
79
 
46
80
 
47
- self[:pid_path] = (config_from_file[:paths][:pid_path])? config_from_file[:paths][:pid_path] : PID_PATH
48
- self[:trace_path] = (config_from_file[:paths][:trace_path])? config_from_file[:paths][:trace_path] : TRACE_PATH
81
+ self[:pid_path] = (@config_from_file[:paths][:pid_path])? @config_from_file[:paths][:pid_path] : PID_PATH
82
+ self[:trace_path] = (@config_from_file[:paths][:trace_path])? @config_from_file[:paths][:trace_path] : TRACE_PATH
49
83
 
50
84
 
51
85
  self[:execution_template_tokens] = EXECUTION_TEMPLATE_TOKENS_LIST
52
- self[:execution_template_path] = (config_from_file[:templates][:execution][:path])? config_from_file[:templates][:execution][:path] : EXECUTION_TEMPLATE
86
+ self[:execution_template_path] = (@config_from_file[:templates][:execution][:path])? @config_from_file[:templates][:execution][:path] : EXECUTION_TEMPLATE
87
+
88
+ self[:transports] = {} ; self[:transports].merge! TRANSPORTS_STRUCT ; self[:transports].merge! @config_from_file[:transports] if @config_from_file[:transports]
89
+ self[:backends] = {} ; self[:backends].merge! BACKENDS_STRUCT ; self[:backends].merge! @config_from_file[:backends] if @config_from_file[:backends]
90
+ self[:loggers] = {} ; self[:loggers].merge! LOGGERS_STRUCT ; self[:loggers].merge! @config_from_file[:loggers] if @config_from_file[:loggers]
91
+
92
+ self[:processes] = (@config_from_file[:processes])? @config_from_file[:processes] : {}
93
+ self[:logs] = (@config_from_file[:logs])? @config_from_file[:logs] : {}
94
+ self[:commands] = (@config_from_file[:commands])? @config_from_file[:commands] : {}
95
+ self[:sequences] = (@config_from_file[:sequences])? @config_from_file[:sequences] : {}
96
+ self[:transfers] = (@config_from_file[:transfers])? @config_from_file[:transfers] : {}
97
+ end
53
98
 
54
- self[:transports] = {} ; self[:transports].merge! TRANSPORTS_STRUCT ; self[:transports].merge! config_from_file[:transports] if config_from_file[:transports]
55
- self[:backends] = {} ; self[:backends].merge! BACKENDS_STRUCT ; self[:backends].merge! config_from_file[:backends] if config_from_file[:backends]
56
- self[:loggers] = {} ; self[:loggers].merge! LOGGERS_STRUCT ; self[:loggers].merge! config_from_file[:loggers] if config_from_file[:loggers]
57
99
 
58
- self[:processes] = (config_from_file[:processes])? config_from_file[:processes] : {}
59
- self[:logs] = (config_from_file[:logs])? config_from_file[:logs] : {}
60
- self[:commands] = (config_from_file[:commands])? config_from_file[:commands] : {}
61
- self[:sequences] = (config_from_file[:sequences])? config_from_file[:sequences] : {}
62
- self[:transfers] = (config_from_file[:transfers])? config_from_file[:transfers] : {}
100
+ def add_log(options = {})
101
+ @config_from_file = readconf @config_file
102
+ res = ConfigLinter::new.verify(options)
103
+ if res[:status] == :success then
104
+ if @config_from_file[:logs].select{|item| item[:label] == options[:record][:label]}.count > 0 then
105
+ return {:status => :already_exist}
106
+ else
107
+ res[:useless].each {|item| options[:record].delete item} if options[:clean]
108
+ @config_from_file[:logs].push options[:record]
109
+ writeconf
110
+ hash_config_to_default
111
+ return {:status => :success}
112
+ end
113
+ else
114
+ return res
115
+ end
116
+ end
117
+
63
118
 
119
+ def delete_log(options = {})
120
+ @config_from_file = readconf @config_file
121
+ unless @config_from_file[:logs].select{|item| item[:label] == options[:label]}.count > 0 then
122
+ return {:status => :not_found}
123
+ else
124
+ @config_from_file[:logs].delete_if {|value| options[:label] == value[:label] }
125
+ writeconf
126
+ hash_config_to_default
127
+ return {:status => :success}
128
+ end
64
129
  end
65
130
 
131
+
66
132
  # @!group accessors on configurations Items
67
133
 
68
134
  # getter for full Config Hash
@@ -272,6 +338,16 @@ module Splash
272
338
  return YAML.load_file(file)[:splash]
273
339
  end
274
340
 
341
+ # write config to file from @config_from_file
342
+ # @param [String] file default from CONFIG_FILE
343
+ # @return [Bool] if ok
344
+ def writeconf(file = CONFIG_FILE)
345
+ File.open(file,"w") do |f|
346
+ data = {}
347
+ data[:splash] = @config_from_file
348
+ f.write(data.to_yaml)
349
+ end
350
+ end
275
351
 
276
352
  end
277
353
 
@@ -7,8 +7,7 @@ module Splash
7
7
  module Constants
8
8
 
9
9
  # Current splash version
10
- VERSION = "0.8.1"
11
-
10
+ VERSION = "0.8.2"
12
11
  # the path to th config file, not overridable by config
13
12
  CONFIG_FILE = "/etc/splash.yml"
14
13
  # the default execution trace_path if backend file
@@ -60,7 +60,7 @@ module Splash
60
60
 
61
61
  def splash_return(options = {})
62
62
 
63
- data = EXIT_MAP[options[:case]]
63
+ data = EXIT_MAP[options[:case]].clone
64
64
  data[:status] = (data[:code]>0)? :failure : :success
65
65
  data[:more] = options[:more] if options[:more]
66
66
  return data
@@ -340,7 +340,7 @@ module Splash
340
340
  response = case format
341
341
  when 'application/json' then JSON.pretty_generate(data)
342
342
  when 'text/x-yaml' then data.to_yaml
343
- else JSON.pretty_generate(data)
343
+ else data.to_yaml
344
344
  end
345
345
  return response
346
346
  end
@@ -5,7 +5,7 @@
5
5
  WebAdminApp.get '/api/commands/list.?:format?' do
6
6
  log = get_logger
7
7
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
8
- log.call "api : commands, verb : GET, route : list, format : #{format}"
8
+ log.call "API : commands, verb : GET, route : list, format : #{format}"
9
9
  obj = splash_return case: :quiet_exit, :more => "Commands list"
10
10
  obj[:data] = get_config.commands
11
11
  content_type format
@@ -15,7 +15,7 @@ WebAdminApp.get '/api/commands/list.?:format?' do
15
15
  WebAdminApp.get '/api/commands/show/:name.?:format?' do
16
16
  log = get_logger
17
17
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
18
- log.call "api : commands, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
18
+ log.call "API : commands, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
19
19
  commands_recordset = get_config.commands[params[:name].to_sym]
20
20
  unless commands_recordset.nil? then
21
21
  obj = splash_return case: :quiet_exit
@@ -1,10 +1,61 @@
1
1
  WebAdminApp.get '/api/config/full.?:format?' do
2
2
  log = get_logger
3
3
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
4
- log.call "api : config, verb : GET, route : show, format : #{format}"
4
+ log.call "API : config, verb : GET, route : full, format : #{format}"
5
5
  config = get_config.full
6
- obj = splash_return case: :quiet_exit, :more => "logses list"
6
+ obj = splash_return case: :quiet_exit, :more => "Show internal Splash Config"
7
7
  obj[:data] = config
8
8
  content_type format
9
9
  format_response(obj, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
10
10
  end
11
+
12
+ WebAdminApp.get '/api/config/fromfile.?:format?' do
13
+ log = get_logger
14
+ fromfile = {}
15
+ format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
16
+ log.call "API : config, verb : GET, route : fromfile, format : #{format}"
17
+ config = get_config.config_from_file
18
+ fromfile = splash_return case: :quiet_exit, :more => "Show config from file"
19
+ fromfile[:data] = config
20
+ content_type format
21
+ format_response(fromfile, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
22
+ end
23
+
24
+
25
+ WebAdminApp.post '/api/config/addlog.?:format?' do
26
+ log = get_logger
27
+ addlog = {}
28
+ format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
29
+ log.call "API : config, verb : POST, route : addlog, format : #{format}"
30
+ res = get_config.add_log :record => YAML::load(request.body.read), :type => :logs, :clean => true
31
+ case res[:status]
32
+ when :success
33
+ addlog = splash_return case: :quiet_exit, :more => "add logs"
34
+ when :already_exist
35
+ addlog = splash_return case: :already_exist, :more => "add logs"
36
+ when :failure
37
+ addlog = splash_return case: :configuration_error, :more => "add logs"
38
+ addlog[:data] = res
39
+ end
40
+ content_type format
41
+ format_response(addlog, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
42
+ end
43
+
44
+
45
+ WebAdminApp.delete '/api/config/deletelog/:label.?:format?' do
46
+ log = get_logger
47
+ format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
48
+ log.call "API : config, verb : DELETE, route : deletelog, format : #{format}"
49
+ res = get_config.delete_log label: params[:label].to_sym
50
+ deletelog = {}
51
+ case res[:status]
52
+ when :success
53
+ deletelog = splash_return case: :quiet_exit, :more => "delete logs"
54
+ when :not_found
55
+ deletelog = splash_return case: :not_found, :more => "delete logs"
56
+ else
57
+ deletelog = splash_return case: :configuration_error, :more => "delete logs"
58
+ end
59
+ content_type format
60
+ format_response(deletelog, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
61
+ end
@@ -4,56 +4,71 @@
4
4
 
5
5
  WebAdminApp.get '/api/logs/list.?:format?' do
6
6
  log = get_logger
7
+ list = {}
7
8
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
8
- log.call "api : logs, verb : GET, route : list, format : #{format}"
9
+ log.call "API : logs, verb : GET, route : list, format : #{format}"
9
10
  logs_recordset = get_config.logs
10
- obj = splash_return case: :quiet_exit, :more => "logses list"
11
- obj[:data] = logs_recordset
11
+ list = splash_return case: :quiet_exit, :more => "logs list"
12
+ list[:data] = logs_recordset
12
13
  content_type format
13
- format_response(obj, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
14
+ format_response(list, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
14
15
  end
15
16
 
16
17
  WebAdminApp.get '/api/logs/show/:name.?:format?' do
17
18
  log = get_logger
18
19
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
19
- log.call "api : logs, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
20
+ log.call "API : logs, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
20
21
  logs_recordset = get_config.logs.select{|item| item[:label] == params[:name].to_sym }
22
+ show = {}
21
23
  unless logs_recordset.empty? then
22
24
  record = logs_recordset.first
23
- obj = splash_return case: :quiet_exit
24
- obj[:data] = record
25
+ show = splash_return case: :quiet_exit
26
+ show[:data] = record
27
+ status 201
25
28
  else
26
- obj = splash_return case: :not_found, :more => "logs not configured"
29
+ show = splash_return case: :not_found, :more => "logs not configured"
27
30
  end
28
- format_response(obj, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
31
+ format_response(show, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
29
32
  end
30
33
 
31
34
  WebAdminApp.post '/api/logs/analyse.?:format?' do
32
35
  log = get_logger
33
36
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
34
- log.call "api : logs, verb : POST, route : analyse, format : #{format}"
37
+ log.call "API : logs, verb : POST, route : analyse, format : #{format}"
35
38
  results = Splash::Logs::LogScanner::new
36
39
  results.analyse
37
40
  res = results.output
38
- obj = splash_return case: :quiet_exit, :more => "logs analyse report"
39
- obj[:data] = res
41
+ analyse = splash_return case: :quiet_exit, :more => "logs analyse report"
42
+ analyse[:data] = res
40
43
  status 201
41
44
  content_type format
42
- format_response(obj, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
45
+ format_response(analyse, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
43
46
  end
44
47
 
45
48
  WebAdminApp.post '/api/logs/monitor.?:format?' do
46
49
  log = get_logger
47
50
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
48
- log.call "api : logs, verb : POST, route : monitor, format : #{format}"
51
+ log.call "API : logs, verb : POST, route : monitor, format : #{format}"
49
52
  results = Splash::Logs::LogScanner::new
50
53
  results.analyse
51
- res = splash_return results.notify
52
- if res[:status] == :failure then
54
+ monitor = splash_return results.notify
55
+ if monitor[:status] == :failure then
53
56
  status 503
54
57
  else
55
58
  status 201
56
59
  end
57
60
  content_type format
58
- format_response(res, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
61
+ format_response(monitor, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
62
+ end
63
+
64
+ WebAdminApp.get '/api/logs/history/:label.?:format?' do
65
+ log = get_logger
66
+ format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
67
+ log.call "API : logs, verb : GET, route : history, format : #{format}"
68
+ record = Splash::Logs::LogsRecords::new(params[:label]).get_all_records
69
+ history = splash_return case: :quiet_exit, :more => "log monitoring history"
70
+ history[:data] = record
71
+ content_type format
72
+ status 201
73
+ format_response(history, (params[:format])? format_by_extensions(params[:format]): request.accept.first)
59
74
  end
@@ -5,7 +5,7 @@
5
5
  WebAdminApp.get '/api/process/list.?:format?' do
6
6
  log = get_logger
7
7
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
8
- log.call "api : process, verb : GET, route : list, format : #{format}"
8
+ log.call "API : process, verb : GET, route : list, format : #{format}"
9
9
  process_recordset = get_config.processes
10
10
  obj = splash_return case: :quiet_exit, :more => "Processes list"
11
11
  obj[:data] = process_recordset
@@ -16,7 +16,7 @@ WebAdminApp.get '/api/process/list.?:format?' do
16
16
  WebAdminApp.get '/api/process/show/:name.?:format?' do
17
17
  log = get_logger
18
18
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
19
- log.call "api : process, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
19
+ log.call "API : process, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
20
20
  process_recordset = get_config.processes.select{|item| item[:process] == params[:name] }
21
21
  unless process_recordset.empty? then
22
22
  record = process_recordset.first
@@ -32,7 +32,7 @@ end
32
32
  WebAdminApp.post '/api/process/analyse.?:format?' do
33
33
  log = get_logger
34
34
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
35
- log.call "api : process, verb : POST, route : analyse, format : #{format}"
35
+ log.call "API : process, verb : POST, route : analyse, format : #{format}"
36
36
  results = Splash::Processes::ProcessScanner::new
37
37
  results.analyse
38
38
  res = results.output
@@ -46,7 +46,7 @@ end
46
46
  WebAdminApp.post '/api/process/monitor.?:format?' do
47
47
  log = get_logger
48
48
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
49
- log.call "api : process, verb : POST, route : monitor, format : #{format}"
49
+ log.call "API : process, verb : POST, route : monitor, format : #{format}"
50
50
  results = Splash::Processes::ProcessScanner::new
51
51
  results.analyse
52
52
  res = splash_return results.notify
@@ -5,7 +5,7 @@
5
5
  WebAdminApp.get '/api/sequences/list.?:format?' do
6
6
  log = get_logger
7
7
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
8
- log.call "api : sequences, verb : GET, route : list, format : #{format}"
8
+ log.call "API : sequences, verb : GET, route : list, format : #{format}"
9
9
  obj = splash_return case: :quiet_exit, :more => "Sequences list"
10
10
  obj[:data] = get_config.sequences
11
11
  content_type format
@@ -15,7 +15,7 @@ WebAdminApp.get '/api/sequences/list.?:format?' do
15
15
  WebAdminApp.get '/api/sequences/show/:name.?:format?' do
16
16
  log = get_logger
17
17
  format = (params[:format])? format_by_extensions(params[:format]) : format_by_extensions('json')
18
- log.call "api : sequences, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
18
+ log.call "API : sequences, verb : GET, route : show, item : #{params[:name]} , format : #{format}"
19
19
  sequences_recordset = get_config.sequences[params[:name].to_sym]
20
20
  unless sequences_recordset.nil? then
21
21
  obj = splash_return case: :quiet_exit
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/commands' do
2
2
  get_menu 2
3
+ log = get_logger
4
+ log.call "WEB : commands, verb : GET, controller : /commands"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/commands/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/documentation' do
2
2
  get_menu 6
3
+ log = get_logger
4
+ log.call "WEB : documentation, verb : GET, controller : /documentation"
3
5
  filename = search_file_in_gem("prometheus-splash","README.md")
4
6
  @data = Kramdown::Document.new(File::readlines(filename).join).to_html
5
7
  slim :documentation, :format => :html
@@ -1,4 +1,6 @@
1
1
  WebAdminApp.get '/' do
2
+ log = get_logger
3
+ log.call "WEB : BASE, verb : GET, controller : /"
2
4
  get_menu -1
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/full.yml"
4
6
  @raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
@@ -9,12 +11,15 @@ end
9
11
 
10
12
  WebAdminApp.get '/home' do
11
13
  get_menu 0
14
+ log = get_logger
15
+ log.call "WEB : home, verb : GET, controller : /home"
12
16
  slim :home, :format => :html
13
17
  end
14
18
 
15
19
  WebAdminApp.get '/daemon/:action' do
16
20
  content_type :text
17
-
21
+ log = get_logger
22
+ log.call "WEB : daemon, verb : GET, controller : /daemon/:action"
18
23
  case params[:action]
19
24
  when 'start'
20
25
  startdaemon scheduling: true, purge: false
@@ -1,5 +1,7 @@
1
- WebAdminApp.get '/logs' do
1
+ WebAdminApp.get '/logs/?:status?/?:label?' do
2
2
  get_menu 0
3
+ log = get_logger
4
+ log.call "WEB : logs, verb : GET, controller : /logs/?:status?/?:label?"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/logs/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -7,8 +9,49 @@ WebAdminApp.get '/logs' do
7
9
  raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10)
8
10
  prov = YAML::load(raw)[:data]
9
11
  @result = {}
12
+ @log_failed = params[:label] if params[:status] == 'failure'
13
+ @log_saved = params[:label] if params[:status] == 'success'
10
14
  prov.each {|item|
11
15
  @result[item[:label]] = item
12
16
  }
13
17
  slim :logs, :format => :html
14
18
  end
19
+
20
+
21
+ WebAdminApp.get '/add_modify_log/?:label?' do
22
+ get_menu 0
23
+ log = get_logger
24
+ log.call "WEB : logs, verb : POST, controller : /add_modify_log/?:label?"
25
+ @data = {}
26
+ if params[:label] then
27
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/logs/show/#{params[:label].to_s}.yml"
28
+ raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
29
+ res = YAML::load(raw)
30
+ @data = res[:data] if res[:status] == :success
31
+ @data[:old_label] = params[:label].to_s
32
+ end
33
+ slim :logs_form, :format => :html
34
+ end
35
+
36
+
37
+ WebAdminApp.post '/save_log' do
38
+ get_menu 0
39
+ log = get_logger
40
+ log.call "WEB : logs, verb : POST, controller : /save_log/?:label?"
41
+ data = {}
42
+ data[:log] = params[:log]
43
+ data[:pattern] = params[:pattern]
44
+ data[:label] = params[:label].to_sym
45
+ if params[:update] then
46
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/deletelog/#{params[:old_label]}"
47
+ raw = RestClient::Request.execute(method: 'DELETE', url: url,timeout: 10)
48
+ end
49
+ url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/config/addlog.yml"
50
+ raw = RestClient::Request.execute(method: 'POST', url: url,timeout: 10, payload: data.to_yaml)
51
+ res = YAML::load(raw)
52
+ if res[:status] == :success then
53
+ redirect "/logs/success/#{params[:label].to_s}"
54
+ else
55
+ redirect "/logs/failure/#{params[:label].to_s}"
56
+ end
57
+ end
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/processes' do
2
2
  get_menu 1
3
+ log = get_logger
4
+ log.call "WEB : processes, verb : GET, controller : /processes"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/process/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -19,7 +19,8 @@ end
19
19
 
20
20
  WebAdminApp.get '/proxy/links' do
21
21
  get_menu 5
22
-
22
+ log = get_logger
23
+ log.call "WEB : proxy, verb : GET, controller : /proxy/links"
23
24
  config = get_config
24
25
  if config.webadmin_proxy == true then
25
26
  @proxy = true
@@ -1,14 +1,19 @@
1
1
  WebAdminApp.get '/restclient' do
2
+ log = get_logger
3
+ log.call "WEB : restclient, verb : GET, controller : /restclient"
2
4
  get_menu 4
3
5
  slim :restclient, :format => :html
4
6
  end
5
7
 
6
8
  WebAdminApp.post '/restclient/query' do
9
+ log = get_logger
10
+ log.call "WEB : processes, verb : GET, controller : /restclient/query"
7
11
  @method = params[:method]
8
12
  @url = params[:url]
13
+ @body = params[:body]
9
14
  @notfound = false
10
15
  begin
11
- @result = RestClient::Request.execute(method: @method.to_sym, url: @url,timeout: 10)
16
+ @result = RestClient::Request.execute(method: @method.to_sym, url: @url,timeout: 10, payload: @body)
12
17
  rescue SocketError
13
18
  @result = false
14
19
  rescue RestClient::NotFound => e
@@ -1,5 +1,7 @@
1
1
  WebAdminApp.get '/sequences' do
2
2
  get_menu 3
3
+ log = get_logger
4
+ log.call "WEB : sequences, verb : GET, controller : /sequences"
3
5
  url = "http://#{get_config.webadmin_ip}:#{get_config.webadmin_port}/api/sequences/list.yml"
4
6
  raw = RestClient::Request.execute(method: 'GET', url: url,timeout: 10)
5
7
  @data = YAML::load(raw)[:data]
@@ -10,7 +10,13 @@
10
10
  height: 7em;
11
11
  }
12
12
 
13
+ h2 {
14
+ color: green;
15
+ }
13
16
 
17
+ .error {
18
+ color: red;
19
+ }
14
20
 
15
21
  .wrapper {
16
22
  overflow-y:scroll;
@@ -1,4 +1,4 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Commands configured in Splash
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Commands configured in Splash
2
2
 
3
3
  div.uk-width-medium-1-1
4
4
  div.uk-panel.uk-panel-box
@@ -1,3 +1,3 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medkit "></i>&nbsp;&nbsp;Splash Documentation
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medkit "></i>&nbsp;&nbsp;Splash Documentation
2
2
  div
3
3
  == "#{@data}"
@@ -30,30 +30,29 @@ javascript:
30
30
  div.uk-grid
31
31
  div.uk-width-medium-1-1
32
32
  div.uk-panel.uk-panel-box
33
- div.uk-text-large.uk-text-bold <i class="uk-icon-cogs uk-icon-justify uk-icon-large"></i>&nbsp;&nbsp;Splash Daemon status
34
- table.uk-table
35
- tr
36
- td
37
- b Actions :
38
- div.uk-button-group
39
- - if @status == false
40
- button.uk-button(id="start" disabled): i.uk-icon-play
41
- button.uk-button(id="stop"): i.uk-icon-stop
42
- - else
43
- button.uk-button(id="start"): i.uk-icon-play
44
- button.uk-button(id="stop" disabled): i.uk-icon-stop
45
- td
46
- b Status :
33
+ div.uk-grid
34
+ div.uk-width-1-3.uk-text-large.uk-text-bold.uk-text-success <i class="uk-icon-cogs uk-icon-justify uk-icon-large"></i>&nbsp;&nbsp;Splash Daemon status
35
+ div.uk-width-1-3
36
+ b Actions :
37
+ div.uk-button-group
47
38
  - if @status == false
48
- div.uk-badge.uk-badge-success.uk-badge-notifications(id="daemon") ON
39
+ button.uk-button(id="start" disabled): i.uk-icon-play
40
+ button.uk-button(id="stop"): i.uk-icon-stop
49
41
  - else
50
- div.uk-badge.uk-badge-danger.uk-badge-notifications(id="daemon") OFF
42
+ button.uk-button(id="start"): i.uk-icon-play
43
+ button.uk-button(id="stop" disabled): i.uk-icon-stop
44
+ div.uk-width-1-3
45
+ b Status :
46
+ - if @status == false
47
+ div.uk-badge.uk-badge-success.uk-badge-notifications(id="daemon") ON
48
+ - else
49
+ div.uk-badge.uk-badge-danger.uk-badge-notifications(id="daemon") OFF
51
50
 
52
51
 
53
52
  div.uk-grid
54
53
  div.uk-width-medium-1-2
55
54
  div.uk-panel.uk-panel-box
56
- span.uk-text-large.uk-text-bold Global Configuration
55
+ span.uk-text-large.uk-text-bold.uk-text-success Global Configuration
57
56
  br
58
57
  span.uk-text-bold <i>Logger and display</i> :
59
58
  ul
@@ -68,7 +67,7 @@ div.uk-grid
68
67
 
69
68
  div.uk-width-medium-1-2
70
69
  div.uk-panel.uk-panel-box
71
- span.uk-text-large.uk-text-bold Transport and Backend
70
+ span.uk-text-large.uk-text-bold.uk-text-success Transport and Backend
72
71
  br
73
72
  span.uk-text-bold <i>Backend</i> :
74
73
  ul
@@ -94,7 +93,7 @@ div.uk-grid
94
93
  div.uk-grid
95
94
  div.uk-width-medium-1-2
96
95
  div.uk-panel.uk-panel-box
97
- span.uk-text-large.uk-text-bold Daemon
96
+ span.uk-text-large.uk-text-bold.uk-text-success Daemon
98
97
  br
99
98
  ul
100
99
  li <b>Logs monitoring scheduling: </b> #{@data[:daemon_logmon_scheduling]}
@@ -110,7 +109,7 @@ div.uk-grid
110
109
 
111
110
  div.uk-width-medium-1-2
112
111
  div.uk-panel.uk-panel-box
113
- span.uk-text-large.uk-text-bold Web UI
112
+ span.uk-text-large.uk-text-bold.uk-text-success Web UI
114
113
  br
115
114
  span.uk-text-bold <i>Webadmin</i> :
116
115
  ul
@@ -11,8 +11,7 @@ html lang="fr-fr" dir="ltr"
11
11
  link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/uikit.gradient.min.css" integrity="sha512-Vjr6Vz5D/gNvTBfQW581ssADQr1j8fAOU0seE2SxO8UvsCBZBoFQS9Lec3hkmZbpcYnsifkBtdQaHU4x6MylGw==" crossorigin="anonymous"
12
12
  link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/sticky.gradient.css" integrity="sha512-BY0A+4FEGeikNxmo9Q30BZMGRDykKHScJlOSeGq0uq+ylGDJD3zAApnktyKv9tzira1p0ow+B7VqIlRR2CBWoA==" crossorigin="anonymous"
13
13
  link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/accordion.gradient.min.css" integrity="sha512-Cfd5PRktfT5WA1yUJbYkzjEHvT+9KzqPP1Z1OJud3CFUrkoAc6iIWawoMqPFmtvmxxDNV5RAHfe5DCISV+Gd9A==" crossorigin="anonymous"
14
-
15
-
14
+ link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/css/components/notify.gradient.min.css" integrity="sha512-HOJctZ/0ww0jFHLHNlNODVEwKf1QxiDKyt3TQZRYZl7e7QSi6whfokIvuMJRoUwykB1SXW4eBeK6MecW4TWFFA==" crossorigin="anonymous"
16
15
 
17
16
  link rel="stylesheet" href="/css/ultragreen.css"
18
17
 
@@ -20,6 +19,7 @@ html lang="fr-fr" dir="ltr"
20
19
  script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/uikit.min.js" integrity="sha512-KI08ZutCgdasDMwp5rPKd9nF8r+eAy/bZH3Rjova6HfkDv1W7J72sNW+K++KvMp3HL7z0cCykV9vixJACHeCew==" crossorigin="anonymous"
21
20
  script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/components/sticky.min.js" integrity="sha512-B21PoHN5PsI7sU3cUcNbitUsXp6Zzp81ZDlKJr1xRXwEh3WSftRmgSOgRYxB8h/SlgW+jazkmOXerT33NB7jGA==" crossorigin="anonymous"
22
21
  script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/components/accordion.min.js" integrity="sha512-7UmYoHJ9tTZiNqlBuUgnr2l82TmZxhiOVXIjiMVP/hPFQJopjEBfVEFPjNdv97OX8K/FIZ4kAXSE+SRTfUkPMg==" crossorigin="anonymous"
22
+ script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/2.27.5/js/components/notify.min.js" integrity="sha512-gaUF+WYo5jZ2OjLCBfhz+4NAtt0YHDtcxulSv6/+1xDP9QysfsqljFadHN6sWkLvyXzKtQ7efofABRJfWOVwtw==" crossorigin="anonymous"
23
23
 
24
24
 
25
25
  body
@@ -1,32 +1,79 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Logs configured in Splash
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Logs configured in Splash
2
+
3
+
4
+ - unless @log_saved.nil?
5
+ javascript:
6
+ UIkit.notify("Log record #{@log_saved} saved", {status:'success'});
7
+ - unless @log_failed.nil?
8
+ javascript:
9
+ UIkit.notify("Log record #{@log_saved} not saved", {status:'danger'});
10
+
11
+
12
+ javascript:
13
+ $(document).on( 'click','input.delete-log',function(){
14
+ var id = this.id;
15
+ var url = "/api/config/deletelog/" + id + ".json";
16
+ UIkit.modal.confirm('Are you sure?', function(){
17
+ console.debug(url)
18
+ $.ajax({
19
+ url: url,
20
+ type: 'DELETE',
21
+ success: function( data ) {
22
+ console.debug(data)
23
+ if (data['status'] == 'success') {
24
+ $('table#logrecords tr#' + id).remove();
25
+ UIkit.notify("Deleting log for " + id + " done", {status:'success'});
26
+ }
27
+ else
28
+ {
29
+ UIkit.notify("Deleting log for " + id + " failed !", {status:'danger'});
30
+ }
31
+ },
32
+ error: function(e) {
33
+ UIkit.notify("Deleting log for " + id + " failed !", {status:'danger'});
34
+ }
35
+ });
36
+ });
37
+ });
2
38
 
3
39
  div.uk-width-medium-1-1
4
40
  div.uk-panel.uk-panel-box
5
41
  span.uk-text-large.uk-text-bold List of logs monitored
6
42
  br
7
- table.uk-table.uk-table-hover.uk-table-striped
43
+ table#logrecords.uk-table.uk-table-hover.uk-table-striped
8
44
  thead
9
45
  tr
10
46
  th Log record label
11
47
  th Definition
12
48
  th Status
13
- tbody
14
- - @data.each do |log|
15
- tr
16
- td <b>Label</b> : #{log[:label]}
17
- td
49
+ th Actions
50
+ tbody
51
+ - @data.each do |log|
52
+ tr id="#{log[:label].to_s}"
53
+ td <b>Label</b> : #{log[:label]}
54
+ td
55
+ ul
56
+ li <b>File</b> : #{log[:log]}
57
+ li <b>Pattern</b> : #{log[:pattern]}
58
+ td
59
+ - if @result[log[:label]][:status] == :missing
60
+ div.uk-badge.uk-badge-warning missing
61
+ - if @result[log[:label]][:status] == :clean
62
+ div.uk-badge.uk-badge-success success
63
+ ul
64
+ li <b>Lines count</b> : #{@result[log[:label]][:lines]}
65
+ - if @result[log[:label]][:status] == :matched
66
+ div.uk-badge.uk-badge-danger matched
18
67
  ul
19
- li <b>File</b> : #{log[:log]}
20
- li <b>Pattern</b> : #{log[:pattern]}
21
- td
22
- - if @result[log[:label]][:status] == :missing
23
- div.uk-badge.uk-badge-warning missing
24
- - if @result[log[:label]][:status] == :clean
25
- div.uk-badge.uk-badge-success success
26
- ul
27
- li <b>Lines count</b> : #{@result[log[:label]][:lines]}
28
- - if @result[log[:label]][:status] == :matched
29
- div.uk-badge.uk-badge-danger matched
30
- ul
31
- li <b>Lines count</b> : #{@result[log[:label]][:lines]}
32
- li <b class="uk-text-danger">Matchs count : #{@result[log[:label]][:count]} </b>
68
+ li <b>Lines count</b> : #{@result[log[:label]][:lines]}
69
+ li <b class="uk-text-danger">Matchs count : #{@result[log[:label]][:count]} </b>
70
+ td
71
+ input.delete-log.uk-button.uk-button-mini.uk-button-danger id="#{log[:label].to_s}" value="Delete"
72
+ br
73
+ input.modify-log.uk-button.uk-button-mini.uk-button-primary id="#{log[:label].to_s}" value="Modify" onclick="location.href='/add_modify_log/#{log[:label].to_s}';"
74
+ br
75
+ input.history-log.uk-button.uk-button-mini.uk-button-primary id="#{log[:label].to_s}" value="History" onclick="location.href='/history/#{log[:label].to_s}';"
76
+ div.uk-align-right
77
+ form.uk-form.uk-form-horizontal#query action="/add_modify_log" method="GET"
78
+ div &nbsp;
79
+ input.add-log.uk-button type="submit" value="Add new log"
@@ -0,0 +1,24 @@
1
+ - unless @data.empty?
2
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Modify Splash log monitoring : #{@data[:label]}
3
+ - else
4
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Add new Splash log monitoring
5
+
6
+ script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.2/jquery.validate.min.js"
7
+
8
+ form.uk-form.uk-form-horizontal#query action="/save_log" method="POST"
9
+ label.uk-form-label for="label" Label
10
+ <input class="uk-form-width-large" id="label" type="text" placeholder="label" name="label" value="#{@data[:label].to_s}" required>
11
+ div &nbsp;
12
+ label.uk-form-label for="pattern" Pattern
13
+ <input class="uk-form-width-large" id="pattern" type="text" placeholder="pattern" name="pattern" value="#{@data[:pattern]}" required>
14
+ div &nbsp;
15
+ label.uk-form-label for="log" Log file
16
+ <input class="uk-form-width-large" id="log" type="text" placeholder="log" name="log" value="#{@data[:log]}" required>
17
+ div &nbsp;
18
+ - unless @data.empty?
19
+ input type="hidden" name="update" value="true"
20
+ input type="hidden" name="old_label" value="#{@data[:old_label].to_s}"
21
+ div.uk-align-right
22
+ input.uk-button.uk-button-small-primary type="submit" value="Submit"
23
+ javascript:
24
+ $("#query").validate();
@@ -3,7 +3,7 @@ nav.uk-navbar.uk-navbar-attached(data-uk-sticky)
3
3
  ul.uk-navbar-nav.uk-hidden-small
4
4
  - for item in @menu
5
5
  li class=( (item == @current_item)? "uk-active" : "uk-inactive")
6
- a href="/#{item.downcase}" title="Access to #{item.capitalize}" <i class="uk-icon-#{@menu_icons[item]}"></i> #{item.capitalize}
6
+ a.uk-navbar-nav-subtitle href="/#{item.downcase}" title="Access to #{item.capitalize}" <i class="uk-icon-#{@menu_icons[item]}"></i><div> #{item.capitalize}</div>
7
7
  a.uk-navbar-toggle.uk-visible-small(href="#offcanvas" data-uk-offcanvas)
8
8
  div.uk-navbar-brand.uk-navbar-left.uk-visible-small
9
9
  <i class="uk-icon-arrow-left"></i> Menu
@@ -1,3 +1,3 @@
1
- h2 404 : Page not found
1
+ h2.uk-text-danger 404 : Page not found
2
2
  p Ressource or page #{@path} not found
3
3
  p Please click <a href='/'>here</a> to return home
@@ -1,4 +1,4 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Processes configured in Splash
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Processes configured in Splash
2
2
 
3
3
  div.uk-width-medium-1-1
4
4
  div.uk-panel.uk-panel-box
@@ -1,7 +1,7 @@
1
1
  - if @proxy
2
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Proxies for Prometheus components
2
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Proxies for Prometheus components
3
3
  - else
4
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Links for Prometheus components
4
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Links for Prometheus components
5
5
  div.uk-width-medium-1-1
6
6
  div.uk-panel.uk-panel-box
7
7
  ul.uk-list
@@ -1,4 +1,4 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;REST Client
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;REST Client
2
2
 
3
3
  div.uk-grid
4
4
  div.uk-width-1-1
@@ -7,7 +7,7 @@ div.uk-grid
7
7
  <i class="uk-icon-question-circle"></i> &nbsp;&nbsp;Request
8
8
  form.uk-form.uk-form-horizontal#query action="/restclient/query" method="POST"
9
9
  label.uk-form-label for="method" Method
10
- select.uk-form-large#method name="method"
10
+ select#method name="method"
11
11
  option GET
12
12
  option POST
13
13
  option DELETE
@@ -15,8 +15,11 @@ div.uk-grid
15
15
  div &nbsp;
16
16
  label.uk-form-label for="url" Endpoint
17
17
  input.uk-form-width-large#url type="text" placeholder="url" name="url"
18
- dev.uk-align-right
19
- input.uk-button.uk-button-primary type="submit" value="Send"
18
+ div &nbsp;
19
+ label.uk-form-label for="body" Body
20
+ textarea.uk-form-large cols="50" name="body" rows="5" placeholder="body"
21
+ div.uk-align-right
22
+ input.uk-button.uk-button-small-primary type="submit" value="Send"
20
23
 
21
24
  div.uk-grid
22
25
  div.uk-width-1-1
@@ -1,28 +1,32 @@
1
- di &nbsp;
1
+ div &nbsp;
2
2
  ul.uk-list
3
3
  li <b>HTTP Method</b> : #{@method}
4
4
  li <b>URL</b> : #{@url}
5
5
  h3 Result :
6
6
  - unless @result == false
7
- table.uk_table
8
- tr
9
- td.uk-width-2-10
10
- i.uk-icon-dollar
11
- | &nbsp;<b>Return code :</b>
12
- td.uk-width-8-10 #{@result.code}
13
- tr
14
- td.uk-width-2-10
15
- i.uk-icon-file-o
16
- | &nbsp;<b>Body :</b>
17
- td.uk-width-8-10.uk-scrollable-text <pre><code>#{@result}</code></pre>
18
- tr
19
- td.uk-width-2-10
20
- i.uk-icon-header
21
- | &nbsp;<b>Headers :</b>
22
- td.uk-width-8-10
23
- ul
24
- - @result.headers.each do |hkey,value|
25
- li <i><b>#{hkey}:</b> &nbsp; &nbsp; #{value}</i>
7
+ div.uk-grid.uk-text-small
8
+ div.uk-width-1-2
9
+ table.uk-table
10
+ tr
11
+ td.uk-width-2-10
12
+ i.uk-icon-file-o
13
+ | &nbsp;<b>Body :</b>
14
+ td.uk-width-8-10.uk-scrollable-text <pre><code>#{@result}</code></pre>
15
+ div.uk-width-1-2
16
+ table.uk-table
17
+ tr
18
+ td.uk-width-2-10
19
+ i.uk-icon-dollar
20
+ | &nbsp;<b>Return code :</b>
21
+ td.uk-width-8-10 #{@result.code}
22
+ tr
23
+ td.uk-width-2-10
24
+ i.uk-icon-header
25
+ | &nbsp;<b>Headers :</b>
26
+ td.uk-width-8-10
27
+ ul
28
+ - @result.headers.each do |hkey,value|
29
+ li <i><b>#{hkey}:</b> &nbsp; &nbsp; #{value}</i>
26
30
 
27
31
  - else
28
32
  div.uk-alert.uk-alert-danger
@@ -1,4 +1,4 @@
1
- h2 <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Sequences configured in Splash
1
+ h2.uk-text-success <i class="uk-icon-#{@menu_icons[@current_item]} uk-icon-medium "></i>&nbsp;&nbsp;Sequences configured in Splash
2
2
 
3
3
  div.uk-width-medium-1-1
4
4
  div.uk-panel.uk-panel-box
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-splash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-19 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -456,6 +456,7 @@ files:
456
456
  - lib/splash/webadmin/portal/controllers/sequences.rb
457
457
  - lib/splash/webadmin/portal/init.rb
458
458
  - lib/splash/webadmin/portal/public/css/ultragreen.css
459
+ - lib/splash/webadmin/portal/public/favicon.ico
459
460
  - lib/splash/webadmin/portal/public/fonts/FontAwesome.otf
460
461
  - lib/splash/webadmin/portal/public/fonts/fontawesome-webfont.ttf
461
462
  - lib/splash/webadmin/portal/public/fonts/fontawesome-webfont.woff
@@ -468,6 +469,7 @@ files:
468
469
  - lib/splash/webadmin/portal/views/home.slim
469
470
  - lib/splash/webadmin/portal/views/layout.slim
470
471
  - lib/splash/webadmin/portal/views/logs.slim
472
+ - lib/splash/webadmin/portal/views/logs_form.slim
471
473
  - lib/splash/webadmin/portal/views/nav.slim
472
474
  - lib/splash/webadmin/portal/views/not_found.slim
473
475
  - lib/splash/webadmin/portal/views/processes.slim
@@ -508,7 +510,7 @@ homepage: https://github.com/Ultragreen/prometheus-splash
508
510
  licenses:
509
511
  - BSD-2-Clause
510
512
  metadata: {}
511
- post_install_message:
513
+ post_install_message:
512
514
  rdoc_options: []
513
515
  require_paths:
514
516
  - lib
@@ -523,8 +525,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
523
525
  - !ruby/object:Gem::Version
524
526
  version: '0'
525
527
  requirements: []
526
- rubygems_version: 3.0.6
527
- signing_key:
528
+ rubygems_version: 3.1.2
529
+ signing_key:
528
530
  specification_version: 4
529
531
  summary: Supervision with Prometheus of Logs and Asynchronous tasks orchestration
530
532
  for Services or Hosts