prometheus-splash 0.7.0 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
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