prometheus-splash 0.7.0 → 0.8.4

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -1
  3. data/README.md +400 -178
  4. data/config/splash.yml +45 -5
  5. data/lib/splash/backends.rb +8 -1
  6. data/lib/splash/backends/file.rb +1 -1
  7. data/lib/splash/cli.rb +2 -1
  8. data/lib/splash/cli/commands.rb +100 -16
  9. data/lib/splash/cli/config.rb +12 -1
  10. data/lib/splash/cli/daemon.rb +41 -1
  11. data/lib/splash/cli/logs.rb +144 -48
  12. data/lib/splash/cli/process.rb +145 -52
  13. data/lib/splash/cli/transfers.rb +213 -0
  14. data/lib/splash/cli/webadmin.rb +3 -3
  15. data/lib/splash/commands.rb +85 -19
  16. data/lib/splash/config.rb +145 -52
  17. data/lib/splash/config/flush.rb +2 -2
  18. data/lib/splash/constants.rb +7 -3
  19. data/lib/splash/daemon/metrics.rb +6 -6
  20. data/lib/splash/daemon/orchestrator.rb +76 -36
  21. data/lib/splash/daemon/orchestrator/grammar.rb +16 -1
  22. data/lib/splash/dependencies.rb +6 -1
  23. data/lib/splash/exiter.rb +1 -1
  24. data/lib/splash/helpers.rb +12 -3
  25. data/lib/splash/loggers/cli.rb +2 -10
  26. data/lib/splash/logs.rb +94 -16
  27. data/lib/splash/processes.rb +91 -16
  28. data/lib/splash/transfers.rb +229 -0
  29. data/lib/splash/webadmin.rb +3 -3
  30. data/lib/splash/webadmin/api/routes/commands.rb +2 -2
  31. data/lib/splash/webadmin/api/routes/config.rb +95 -2
  32. data/lib/splash/webadmin/api/routes/logs.rb +32 -17
  33. data/lib/splash/webadmin/api/routes/process.rb +21 -9
  34. data/lib/splash/webadmin/api/routes/sequences.rb +2 -2
  35. data/lib/splash/webadmin/main.rb +3 -0
  36. data/lib/splash/webadmin/portal/controllers/commands.rb +2 -0
  37. data/lib/splash/webadmin/portal/controllers/documentation.rb +2 -0
  38. data/lib/splash/webadmin/portal/controllers/home.rb +24 -0
  39. data/lib/splash/webadmin/portal/controllers/logs.rb +57 -1
  40. data/lib/splash/webadmin/portal/controllers/processes.rb +61 -3
  41. data/lib/splash/webadmin/portal/controllers/proxy.rb +12 -3
  42. data/lib/splash/webadmin/portal/controllers/restclient.rb +6 -1
  43. data/lib/splash/webadmin/portal/controllers/sequences.rb +2 -0
  44. data/lib/splash/webadmin/portal/public/css/ultragreen.css +6 -0
  45. data/lib/splash/webadmin/portal/public/favicon.ico +0 -0
  46. data/lib/splash/webadmin/portal/views/commands.slim +1 -1
  47. data/lib/splash/webadmin/portal/views/documentation.slim +1 -1
  48. data/lib/splash/webadmin/portal/views/home.slim +53 -9
  49. data/lib/splash/webadmin/portal/views/layout.slim +2 -2
  50. data/lib/splash/webadmin/portal/views/log_form.slim +24 -0
  51. data/lib/splash/webadmin/portal/views/log_history.slim +24 -0
  52. data/lib/splash/webadmin/portal/views/logs.slim +93 -21
  53. data/lib/splash/webadmin/portal/views/nav.slim +1 -1
  54. data/lib/splash/webadmin/portal/views/not_found.slim +1 -1
  55. data/lib/splash/webadmin/portal/views/process_form.slim +21 -0
  56. data/lib/splash/webadmin/portal/views/process_history.slim +24 -0
  57. data/lib/splash/webadmin/portal/views/processes.slim +73 -3
  58. data/lib/splash/webadmin/portal/views/proxy.slim +5 -2
  59. data/lib/splash/webadmin/portal/views/restclient.slim +7 -4
  60. data/lib/splash/webadmin/portal/views/restclient_result.slim +24 -20
  61. data/lib/splash/webadmin/portal/views/sequences.slim +1 -1
  62. data/prometheus-splash.gemspec +7 -4
  63. data/ultragreen_roodi_coding_convention.yml +4 -4
  64. metadata +71 -8
@@ -6,6 +6,78 @@ module Splash
6
6
  # Splash Commands module/namespace
7
7
  module Commands
8
8
 
9
+
10
+ class CmdNotifier
11
+
12
+ @@registry = Prometheus::Client::Registry::new
13
+ @@metric_exitcode = Prometheus::Client::Gauge.new(:exitcode, docstring: 'SPLASH metric batch exitcode')
14
+ @@metric_time = Prometheus::Client::Gauge.new(:exectime, docstring: 'SPLASH metric batch execution time')
15
+ @@registry.register(@@metric_exitcode)
16
+ @@registry.register(@@metric_time)
17
+
18
+
19
+
20
+ def initialize(options={})
21
+ @config = get_config
22
+ @url = @config.prometheus_pushgateway_url
23
+ @name = "cmd_#{options[:name].to_s}"
24
+ @exitcode = options[:exitcode]
25
+ @time = options[:time]
26
+ end
27
+
28
+ # send metrics to Prometheus PushGateway
29
+ # @return [Bool]
30
+ def notify
31
+ unless verify_service url: @url then
32
+ return { :case => :service_dependence_missing, :more => "Prometheus Notification not send."}
33
+ end
34
+ @@metric_exitcode.set(@exitcode)
35
+ @@metric_time.set(@time)
36
+ hostname = Socket.gethostname
37
+ return Prometheus::Client::Push.new(@name, hostname, @url).add(@@registry)
38
+ end
39
+
40
+ end
41
+
42
+
43
+ class CmdRecords
44
+ include Splash::Backends
45
+ include Splash::Constants
46
+ def initialize(name)
47
+ @name = name
48
+ @backend = get_backend :execution_trace
49
+ end
50
+
51
+ def purge(retention)
52
+ retention = {} if retention.nil?
53
+ if retention.include? :hours then
54
+ adjusted_datetime = DateTime.now - retention[:hours].to_f / 24
55
+ elsif retention.include? :hours then
56
+ adjusted_datetime = DateTime.now - retention[:days].to_i
57
+ else
58
+ adjusted_datetime = DateTime.now - DEFAULT_RETENTION
59
+ end
60
+
61
+ data = get_all_records
62
+
63
+ data.delete_if { |item|
64
+ DateTime.parse(item.keys.first) <= (adjusted_datetime)}
65
+ @backend.put key: @name, value: data.to_yaml
66
+ end
67
+
68
+ def add_record(record)
69
+ data = get_all_records
70
+ data.push({ DateTime.now.to_s => record })
71
+ @backend.put key: @name, value: data.to_yaml
72
+ end
73
+
74
+ def get_all_records(options={})
75
+ return (@backend.exist?({key: @name}))? YAML::load(@backend.get({key: @name})) : []
76
+ end
77
+
78
+ end
79
+
80
+
9
81
  # command execution wrapper
10
82
  class CommandWrapper
11
83
  include Splash::Templates
@@ -16,11 +88,7 @@ module Splash
16
88
  include Splash::Transports
17
89
 
18
90
 
19
- @@registry = Prometheus::Client::Registry::new
20
- @@metric_exitcode = Prometheus::Client::Gauge.new(:errorcode, docstring: 'SPLASH metric batch errorcode')
21
- @@metric_time = Prometheus::Client::Gauge.new(:exectime, docstring: 'SPLASH metric batch execution time')
22
- @@registry.register(@@metric_exitcode)
23
- @@registry.register(@@metric_time)
91
+
24
92
 
25
93
  # Constructor
26
94
  # @param [String] name the name of the command
@@ -43,14 +111,17 @@ module Splash
43
111
  # @param [String] value numeric.to_s
44
112
  # @param [String] time execution time numeric.to_s
45
113
  # @return [Hash] Exiter case :quiet_exit
46
- def notify(value,time)
114
+ def notify(value,time, session)
115
+ log = get_logger
47
116
  unless verify_service url: @config.prometheus_pushgateway_url then
48
117
  return { :case => :service_dependence_missing, :more => "Prometheus Notification not send."}
49
118
  end
50
- @@metric_exitcode.set(value)
51
- @@metric_time.set(time)
52
- hostname = Socket.gethostname
53
- Prometheus::Client::Push.new(@name, hostname, @url).add(@@registry)
119
+ cmdmonitor = CmdNotifier::new({name: @name, exitcode: value, time: time})
120
+ if cmdmonitor.notify then
121
+ log.ok "Sending metrics to Prometheus Pushgateway",session
122
+ else
123
+ log.ko "Failed to send metrics to Prometheus Pushgateway",session
124
+ end
54
125
  return { :case => :quiet_exit}
55
126
  end
56
127
 
@@ -110,9 +181,6 @@ module Splash
110
181
  stdout, stderr, status = Open3.capture3(@config.commands[@name.to_sym][:command])
111
182
  end
112
183
  time = Time.now - start
113
- tp = Template::new(
114
- list_token: @config.execution_template_tokens,
115
- template_file: @config.execution_template_path)
116
184
  data = Hash::new
117
185
  data[:start_date] = start_date
118
186
  data[:end_date] = DateTime.now.to_s
@@ -123,17 +191,15 @@ module Splash
123
191
  data[:stdout] = stdout
124
192
  data[:stderr] = stderr
125
193
  data[:exec_time] = time.to_s
126
- backend = get_backend :execution_trace
127
- key = @name
128
-
129
- backend.put key: key, value: data.to_yaml
194
+ cmdrec = CmdRecords::new @name
195
+ cmdrec.purge(@config.commands[@name.to_sym][:retention])
196
+ cmdrec.add_record data
130
197
  exit_code = status.exitstatus
131
198
  end
132
199
  log.ok "Command executed", session
133
200
  log.arrow "exitcode #{exit_code}", session
134
201
  if options[:notify] then
135
- acase = notify(exit_code,time.to_i)
136
- get_logger.ok "Prometheus Gateway notified.",session
202
+ acase = notify(exit_code,time.to_i,session)
137
203
  else
138
204
  log.item "Without Prometheus notification", session
139
205
  end
@@ -11,56 +11,127 @@ 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
+ :processes => [:process, :patterns ]}
18
+ @lints_types = {:logs => {:label => Symbol, :log => String, :pattern => String, :retention => Hash},
19
+ :processes => {:process => Symbol, :patterns => Array, :retention => Hash}}
20
+ end
21
+
22
+ def verify(options ={})
23
+ status = :success
24
+ missings = []
25
+ type_errors = []
26
+ useless = []
27
+ options[:record].each do |key,value|
28
+ useless.push key unless @lints_present[options[:type]].include? key or @lints_types[options[:type]].keys.include? key
29
+ 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)
30
+ end
31
+ @lints_present[options[:type]].each do |item|
32
+ missings.push item unless options[:record].keys.include? item
33
+ end
34
+
35
+ status = :failure if (missings.count > 0) or (type_errors.count > 0)
36
+ return {:missings => missings, :type_errors => type_errors, :useless => useless, :status => status}
37
+ end
38
+
39
+ end
40
+
14
41
  # Class to manage configuration in Splash from Splash::Constants override by Yaml CONFIG
15
42
  class Configuration < Hash
16
43
  include Splash::Constants
17
44
 
45
+ attr_accessor :config_from_file
46
+
18
47
  # constructor : read config file and map against Constants
19
48
  def initialize(config_file=CONFIG_FILE)
20
- config_from_file = readconf config_file
49
+ @config_file = config_file
50
+ hash_config_to_default
51
+
52
+ end
53
+
54
+
55
+ def hash_config_to_default
56
+ @config_from_file = readconf @config_file
21
57
  self[:version] = VERSION
22
58
  self[:author] = "#{AUTHOR} <#{EMAIL}>"
23
59
  self[:copyright] = "#{COPYRIGHT} #{LICENSE}"
24
60
 
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
61
+ self[:prometheus_url] = (@config_from_file[:prometheus][:url])? @config_from_file[:prometheus][:url] : PROMETHEUS_URL
62
+ self[:prometheus_pushgateway_url] = (@config_from_file[:prometheus][:pushgateway])? @config_from_file[:prometheus][:pushgateway] : PROMETHEUS_PUSHGATEWAY_URL
63
+ self[:prometheus_alertmanager_url] = (@config_from_file[:prometheus][:alertmanager])? @config_from_file[:prometheus][:alertmanager] : PROMETHEUS_ALERTMANAGER_URL
27
64
 
28
- self[:daemon_process_name] = (config_from_file[:daemon][:process_name])? config_from_file[:daemon][:process_name] : DAEMON_PROCESS_NAME
29
- self[:daemon_logmon_scheduling] = (config_from_file[:daemon][:logmon_scheduling])? config_from_file[:daemon][:logmon_scheduling] : DAEMON_LOGMON_SCHEDULING
30
- self[:daemon_metrics_scheduling] = (config_from_file[:daemon][:metrics_scheduling])? config_from_file[:daemon][:metrics_scheduling] : DAEMON_METRICS_SCHEDULING
31
- self[:daemon_procmon_scheduling] = (config_from_file[:daemon][:procmon_scheduling])? config_from_file[:daemon][:procmon_scheduling] : DAEMON_PROCMON_SCHEDULING
65
+ self[:daemon_process_name] = (@config_from_file[:daemon][:process_name])? @config_from_file[:daemon][:process_name] : DAEMON_PROCESS_NAME
66
+ self[:daemon_logmon_scheduling] = (@config_from_file[:daemon][:logmon_scheduling])? @config_from_file[:daemon][:logmon_scheduling] : DAEMON_LOGMON_SCHEDULING
67
+ self[:daemon_metrics_scheduling] = (@config_from_file[:daemon][:metrics_scheduling])? @config_from_file[:daemon][:metrics_scheduling] : DAEMON_METRICS_SCHEDULING
68
+ self[:daemon_procmon_scheduling] = (@config_from_file[:daemon][:procmon_scheduling])? @config_from_file[:daemon][:procmon_scheduling] : DAEMON_PROCMON_SCHEDULING
69
+ self[:daemon_pid_file] = (@config_from_file[:daemon][:files][:pid_file])? @config_from_file[:daemon][:files][:pid_file] : DAEMON_PID_FILE
70
+ self[:daemon_stdout_trace] = (@config_from_file[:daemon][:files][:stdout_trace])? @config_from_file[:daemon][:files][:stdout_trace] : DAEMON_STDOUT_TRACE
71
+ self[:daemon_stderr_trace] = (@config_from_file[:daemon][:files][:stderr_trace])? @config_from_file[:daemon][:files][:stderr_trace] : DAEMON_STDERR_TRACE
32
72
 
33
73
 
34
- self[:webadmin_port] = (config_from_file[:webadmin][:port])? config_from_file[:webadmin][:port] : WEBADMIN_PORT
35
- self[:webadmin_ip] = (config_from_file[:webadmin][:ip])? config_from_file[:webadmin][:ip] : WEBADMIN_IP
36
- self[:webadmin_proxy] = (config_from_file[:webadmin][:proxy])? config_from_file[:webadmin][:proxy] : WEBADMIN_PROXY
37
- self[:webadmin_process_name] = (config_from_file[:webadmin][:process_name])? config_from_file[:webadmin][:process_name] : WEBADMIN_PROCESS_NAME
38
- self[:webadmin_pid_file] = (config_from_file[:webadmin][:files][:pid_file])? config_from_file[:webadmin][:files][:pid_file] : WEBADMIN_PID_FILE
39
- self[:webadmin_stdout_trace] = (config_from_file[:webadmin][:files][:stdout_trace])? config_from_file[:webadmin][:files][:stdout_trace] : WEBADMIN_STDOUT_TRACE
40
- self[:webadmin_stderr_trace] = (config_from_file[:webadmin][:files][:stderr_trace])? config_from_file[:webadmin][:files][:stderr_trace] : WEBADMIN_STDERR_TRACE
74
+ self[:webadmin_port] = (@config_from_file[:webadmin][:port])? @config_from_file[:webadmin][:port] : WEBADMIN_PORT
75
+ self[:webadmin_ip] = (@config_from_file[:webadmin][:ip])? @config_from_file[:webadmin][:ip] : WEBADMIN_IP
76
+ self[:webadmin_proxy] = (@config_from_file[:webadmin][:proxy])? @config_from_file[:webadmin][:proxy] : WEBADMIN_PROXY
77
+ self[:webadmin_process_name] = (@config_from_file[:webadmin][:process_name])? @config_from_file[:webadmin][:process_name] : WEBADMIN_PROCESS_NAME
78
+ self[:webadmin_pid_file] = (@config_from_file[:webadmin][:files][:pid_file])? @config_from_file[:webadmin][:files][:pid_file] : WEBADMIN_PID_FILE
79
+ self[:webadmin_stdout_trace] = (@config_from_file[:webadmin][:files][:stdout_trace])? @config_from_file[:webadmin][:files][:stdout_trace] : WEBADMIN_STDOUT_TRACE
80
+ self[:webadmin_stderr_trace] = (@config_from_file[:webadmin][:files][:stderr_trace])? @config_from_file[:webadmin][:files][:stderr_trace] : WEBADMIN_STDERR_TRACE
41
81
 
42
82
 
43
- self[:pid_path] = (config_from_file[:daemon][:paths][:pid_path])? config_from_file[:daemon][:paths][:pid_path] : PID_PATH
44
- self[:trace_path] = (config_from_file[:daemon][:paths][:trace_path])? config_from_file[:daemon][:paths][:trace_path] : TRACE_PATH
83
+ self[:pid_path] = (@config_from_file[:paths][:pid_path])? @config_from_file[:paths][:pid_path] : PID_PATH
84
+ self[:trace_path] = (@config_from_file[:paths][:trace_path])? @config_from_file[:paths][:trace_path] : TRACE_PATH
45
85
 
46
86
 
47
87
  self[:execution_template_tokens] = EXECUTION_TEMPLATE_TOKENS_LIST
48
- self[:execution_template_path] = (config_from_file[:templates][:execution][:path])? config_from_file[:templates][:execution][:path] : EXECUTION_TEMPLATE
49
- self[:pid_file] = (config_from_file[:daemon][:files][:pid_file])? config_from_file[:daemon][:files][:pid_file] : DAEMON_PID_FILE
50
- self[:stdout_trace] = (config_from_file[:daemon][:files][:stdout_trace])? config_from_file[:daemon][:files][:stdout_trace] : DAEMON_STDOUT_TRACE
51
- self[:stderr_trace] = (config_from_file[:daemon][:files][:stderr_trace])? config_from_file[:daemon][:files][:stderr_trace] : DAEMON_STDERR_TRACE
88
+ self[:execution_template_path] = (@config_from_file[:templates][:execution][:path])? @config_from_file[:templates][:execution][:path] : EXECUTION_TEMPLATE
52
89
 
53
- self[:transports] = {} ; self[:transports].merge! TRANSPORTS_STRUCT ; self[:transports].merge! config_from_file[:transports] if config_from_file[:transports]
54
- self[:backends] = {} ; self[:backends].merge! BACKENDS_STRUCT ; self[:backends].merge! config_from_file[:backends] if config_from_file[:backends]
55
- self[:loggers] = {} ; self[:loggers].merge! LOGGERS_STRUCT ; self[:loggers].merge! config_from_file[:loggers] if config_from_file[:loggers]
90
+ self[:transports] = {} ; self[:transports].merge! TRANSPORTS_STRUCT ; self[:transports].merge! @config_from_file[:transports] if @config_from_file[:transports]
91
+ self[:backends] = {} ; self[:backends].merge! BACKENDS_STRUCT ; self[:backends].merge! @config_from_file[:backends] if @config_from_file[:backends]
92
+ self[:loggers] = {} ; self[:loggers].merge! LOGGERS_STRUCT ; self[:loggers].merge! @config_from_file[:loggers] if @config_from_file[:loggers]
56
93
 
57
- self[:processes] = (config_from_file[:processes])? config_from_file[:processes] : {}
58
- self[:logs] = (config_from_file[:logs])? config_from_file[:logs] : {}
59
- self[:commands] = (config_from_file[:commands])? config_from_file[:commands] : {}
60
- self[:sequences] = (config_from_file[:sequences])? config_from_file[:sequences] : {}
94
+ self[:processes] = (@config_from_file[:processes])? @config_from_file[:processes] : {}
95
+ self[:logs] = (@config_from_file[:logs])? @config_from_file[:logs] : {}
96
+ self[:commands] = (@config_from_file[:commands])? @config_from_file[:commands] : {}
97
+ self[:sequences] = (@config_from_file[:sequences])? @config_from_file[:sequences] : {}
98
+ self[:transfers] = (@config_from_file[:transfers])? @config_from_file[:transfers] : {}
99
+ end
61
100
 
101
+
102
+ def add_record(options = {})
103
+ @config_from_file = readconf @config_file
104
+ key = options[:key]
105
+ res = ConfigLinter::new.verify(options)
106
+ if res[:status] == :success then
107
+ if @config_from_file[options[:type]].select{|item| item[options[:key]] == options[:record][options[:key]]}.count > 0 then
108
+ return {:status => :already_exist}
109
+ else
110
+ res[:useless].each {|item| options[:record].delete item} if options[:clean]
111
+ @config_from_file[options[:type]].push options[:record]
112
+ writeconf
113
+ hash_config_to_default
114
+ return {:status => :success}
115
+ end
116
+ else
117
+ return res
118
+ end
62
119
  end
63
120
 
121
+
122
+ def delete_record(options = {})
123
+ @config_from_file = readconf @config_file
124
+ unless @config_from_file[options[:type]].select{|item| item[options[:key]] == options[options[:key]]}.count > 0 then
125
+ return {:status => :not_found}
126
+ else
127
+ @config_from_file[options[:type]].delete_if {|value| options[options[:key]] == value[options[:key]] }
128
+ writeconf
129
+ hash_config_to_default
130
+ return {:status => :success}
131
+ end
132
+ end
133
+
134
+
64
135
  # @!group accessors on configurations Items
65
136
 
66
137
  # getter for full Config Hash
@@ -87,6 +158,12 @@ module Splash
87
158
  return self[:transports]
88
159
  end
89
160
 
161
+ # getter for transfers Hash Config sample
162
+ # @return [Hash]
163
+ def transfers
164
+ return self[:transfers]
165
+ end
166
+
90
167
  # getter for daemon_logmon_scheduling Hash Config sample
91
168
  # @return [Hash]
92
169
  def daemon_logmon_scheduling
@@ -105,6 +182,31 @@ module Splash
105
182
  return self[:daemon_metrics_scheduling]
106
183
  end
107
184
 
185
+ # getter for daemon_process_name Config sample
186
+ # @return [String]
187
+ def daemon_process_name
188
+ return self[:daemon_process_name]
189
+ end
190
+
191
+
192
+ # getter for daemon_full_pid_path Config sample
193
+ # @return [String]
194
+ def daemon_full_pid_path
195
+ return "#{self[:pid_path]}/#{self[:daemon_pid_file]}"
196
+ end
197
+
198
+ # getter for daemon_full_stdout_trace_path Config sample
199
+ # @return [String]
200
+ def daemon_full_stdout_trace_path
201
+ return "#{self[:trace_path]}/#{self[:daemon_stdout_trace]}"
202
+ end
203
+
204
+ # getter for daemon_full_stderr_trace_path Config sample
205
+ # @return [String]
206
+ def daemon_full_stderr_trace_path
207
+ return "#{self[:trace_path]}/#{self[:daemon_stderr_trace]}"
208
+ end
209
+
108
210
  # getter for execution_template_path Hash Config sample
109
211
  # @return [String]
110
212
  def execution_template_path
@@ -215,36 +317,17 @@ module Splash
215
317
  return self[:prometheus_pushgateway_url]
216
318
  end
217
319
 
218
- # getter for prometheus_url Config sample
219
- # @return [String]
220
- def prometheus_url
221
- return self[:prometheus_url]
222
- end
223
-
224
-
225
- # getter for daemon_process_name Config sample
226
- # @return [String]
227
- def daemon_process_name
228
- return self[:daemon_process_name]
229
- end
230
-
231
-
232
- # getter for daemon_full_pid_path Config sample
320
+ # getter for prometheus_alertmanager_url Config sample
233
321
  # @return [String]
234
- def daemon_full_pid_path
235
- return "#{self[:pid_path]}/#{self[:pid_file]}"
322
+ def prometheus_alertmanager_url
323
+ return self[:prometheus_alertmanager_url]
236
324
  end
237
325
 
238
- # getter for daemon_full_stdout_trace_path Config sample
239
- # @return [String]
240
- def daemon_full_stdout_trace_path
241
- return "#{self[:trace_path]}/#{self[:stdout_trace]}"
242
- end
243
326
 
244
- # getter for daemon_full_stderr_trace_path Config sample
327
+ # getter for prometheus_url Config sample
245
328
  # @return [String]
246
- def daemon_full_stderr_trace_path
247
- return "#{self[:trace_path]}/#{self[:stderr_trace]}"
329
+ def prometheus_url
330
+ return self[:prometheus_url]
248
331
  end
249
332
 
250
333
  # @!endgroup
@@ -258,6 +341,16 @@ module Splash
258
341
  return YAML.load_file(file)[:splash]
259
342
  end
260
343
 
344
+ # write config to file from @config_from_file
345
+ # @param [String] file default from CONFIG_FILE
346
+ # @return [Bool] if ok
347
+ def writeconf(file = CONFIG_FILE)
348
+ File.open(file,"w") do |f|
349
+ data = {}
350
+ data[:splash] = @config_from_file
351
+ f.write(data.to_yaml)
352
+ end
353
+ end
261
354
 
262
355
  end
263
356
 
@@ -16,8 +16,8 @@ module Splash
16
16
  self.extend Splash::Backends
17
17
  self.extend Splash::Loggers
18
18
  log = get_logger
19
- log.info "Splash backend flushing"
20
- name = (options[:name])? options[:name] : :execution_trace
19
+ name = (options[:name])? options[:name].to_sym : :execution_trace
20
+ log.info "Splash backend #{name.to_s} flushing"
21
21
  backend = get_backend name
22
22
  if backend.flush then
23
23
  return { :case => :quiet_exit, :more => "Splash backend #{name.to_s} flushed" }
@@ -7,8 +7,7 @@ module Splash
7
7
  module Constants
8
8
 
9
9
  # Current splash version
10
- VERSION = "0.7.0"
11
-
10
+ VERSION = "0.8.4"
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
@@ -43,7 +42,10 @@ module Splash
43
42
  LICENSE="BSD-2-Clause"
44
43
 
45
44
  # the default prometheus pushgateway URL
46
- PROMETHEUS_PUSHGATEWAY_URL = 'http://localhost:9090/'
45
+ PROMETHEUS_PUSHGATEWAY_URL = 'http://localhost:9091/'
46
+
47
+ # the default prometheus Alertmanager URL
48
+ PROMETHEUS_ALERTMANAGER_URL = 'http://localhost:9092/'
47
49
 
48
50
  # the default prometheus URL
49
51
  PROMETHEUS_URL = "http://localhost:9090/"
@@ -84,6 +86,8 @@ module Splash
84
86
  # the default sdterr trace file
85
87
  WEBADMIN_STDERR_TRACE="stderr.txt"
86
88
 
89
+ # default retention for trace
90
+ DEFAULT_RETENTION=1
87
91
 
88
92
  end
89
93
  end
@@ -17,8 +17,8 @@ module Splash
17
17
 
18
18
  # metrics manager factory
19
19
  # @return [Splash::Daemon::Metrics::Manager]
20
- def get_metrics_manager
21
- return @@manager ||= Manager::new
20
+ def get_metrics_manager(session)
21
+ return @@manager ||= Manager::new(:session => session)
22
22
  end
23
23
 
24
24
  # Metrics Manager (collect and sending to Prometheus)
@@ -32,7 +32,8 @@ module Splash
32
32
  attr_reader :monitoring_processes_count
33
33
 
34
34
  # Constructor prepare prometheus-client, defined metrics and init attributes
35
- def initialize
35
+ def initialize(options ={})
36
+ @session = options[:session]
36
37
  @config = get_config
37
38
  @starttime = Time.now
38
39
  @execution_count = 0
@@ -75,12 +76,11 @@ module Splash
75
76
  # @return [Hash] Exiter case ( :service_dependence_missing , :quiet_exit)
76
77
  def notify
77
78
  log = get_logger
78
- session = get_session
79
79
  unless verify_service url: @config.prometheus_pushgateway_url then
80
80
  return { :case => :service_dependence_missing, :more => "Prometheus Notification not send." }
81
81
  end
82
82
 
83
- log.debug "Sending Splash self metrics to PushGateway." , session
83
+ log.ok "Sending Splash self metrics to PushGateway." , @session
84
84
  @metric_uptime.set uptime
85
85
  @metric_execution.set execution_count
86
86
  @metric_logs_monitoring.set monitoring_logs_count
@@ -89,7 +89,7 @@ module Splash
89
89
  hostname = Socket.gethostname
90
90
  url = @config.prometheus_pushgateway_url
91
91
  Prometheus::Client::Push.new('Splash',hostname, url).add(@registry)
92
- log.debug "Sending to Prometheus PushGateway done.", session
92
+ log.debug "Sending to Prometheus PushGateway done.", @session
93
93
  return {:case => :quiet_exit }
94
94
  end
95
95