prometheus-splash 0.1.0 → 0.1.1

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.
@@ -1,4 +1,4 @@
1
- require 'etc'
1
+ # coding: utf-8
2
2
  module Splash
3
3
  module Config
4
4
  include Splash::Helpers
@@ -175,11 +175,10 @@ module Splash
175
175
  end
176
176
 
177
177
  if full_res > 0 then
178
- $stderr.puts "Splash config done with #{full_res} errors"
179
- return 25
178
+ $stderr.puts " => #{full_res} errors occured"
179
+ return { :case => :splash_setup_error}
180
180
  else
181
- puts "Splash config successfully done."
182
- return 0
181
+ return { :case => :splash_setup_success }
183
182
  end
184
183
 
185
184
  end
@@ -230,11 +229,10 @@ module Splash
230
229
  end
231
230
 
232
231
  if full_res > 0 then
233
- $stderr.puts "Sanitycheck finished with #{full_res} errors"
234
- return 20
232
+ $stderr.puts " => #{full_res} errors occured"
233
+ return { :case => :splash_sanitycheck_error }
235
234
  else
236
- puts "Sanitycheck finished with no errors"
237
- return 0
235
+ return { :case => :splash_sanitycheck_success}
238
236
  end
239
237
  end
240
238
 
@@ -1,6 +1,7 @@
1
+ # coding: utf-8
1
2
  module Splash
2
3
  module Constants
3
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
4
5
 
5
6
  # the path to th config file, not overridable by config
6
7
  CONFIG_FILE = "/etc/splash.yml"
@@ -1,4 +1,4 @@
1
-
1
+ # coding: utf-8
2
2
  module Splash
3
3
  module LogsMonitor
4
4
  module DaemonController
@@ -10,9 +10,7 @@ module Splash
10
10
  def startdaemon(options = {})
11
11
  config = get_config
12
12
  unless verify_service host: config.prometheus_pushgateway_host ,port: config.prometheus_pushgateway_port then
13
- $stderr.puts "Prometheus PushGateway Service is not running,"
14
- $stderr.puts " please start before running Splash daemon."
15
- exit 11
13
+ return {:case => :service_dependence_missing, :more => 'Prometheus Gateway'}
16
14
  end
17
15
 
18
16
  unless File::exist? config.full_pid_path then
@@ -25,36 +23,31 @@ module Splash
25
23
  if res == 0 then
26
24
  pid = `cat #{config.full_pid_path}`.to_i
27
25
  puts "Splash Daemon Started, with PID : #{pid}"
26
+ return {:case => :quiet_exit}
28
27
  else
29
- $stderr.puts "Splash Daemon loading error"
28
+ return {:case => :unknown_error, :more => "Splash Daemon loading error"}
30
29
  end
31
- return res
32
30
 
33
31
  else
34
- $stderr.puts "Pid File already exist, please verify if Splash daemon is running."
35
- return 14
32
+ return {:case => :already_exist, :more => "Pid File, please verify if Splash daemon is running."}
36
33
  end
37
34
  end
38
35
 
39
36
  def stopdaemon(options = {})
40
37
  config = get_config
41
- errorcode = 0
42
38
  if File.exist?(config.full_pid_path) then
43
-
44
39
  begin
45
40
  pid = `cat #{config.full_pid_path}`.to_i
46
41
  Process.kill("TERM", pid)
47
- puts 'Splash stopped succesfully'
42
+ acase = {:case => :quiet_exit, :more => 'Splash stopped succesfully'}
48
43
  rescue Errno::ESRCH
49
- $stderr.puts "Process of PID : #{pid} not found"
50
- errorcode = 12
44
+ acase = {:case => :not_found, :more => "Process of PID : #{pid} not found"}
51
45
  end
52
46
  FileUtils::rm config.full_pid_path if File::exist? config.full_pid_path
53
47
  else
54
- $stderr.puts "Splash is not running"
55
- errorcode = 13
48
+ acase = {:case => :not_found, :more => "Splash is not running"}
56
49
  end
57
- return errorcode
50
+ return acase
58
51
  end
59
52
 
60
53
  def statusdaemon
@@ -75,16 +68,11 @@ module Splash
75
68
  puts "and PID file don't exist"
76
69
  end
77
70
  if pid == realpid then
78
- puts 'Status OK'
79
- return 0
71
+ return {:case => :status_ok }
80
72
  elsif pid.empty? then
81
- $stderr.puts "PID File error, you have to kill process manualy, with : '(sudo )kill -TERM #{realpid}'"
82
- $stderr.puts "Status KO"
83
- return 16
73
+ return {:case => :status_ko, :more => "PID File error, you have to kill process manualy, with : '(sudo )kill -TERM #{realpid}'"}
84
74
  elsif realpid.empty? then
85
- $stderr.puts "Process Splash Dameon missing, run 'splash daemon stop' to reload properly"
86
- $stderr.puts "Status KO"
87
- return 17
75
+ return {:case => :status_ko, :more => "Process Splash Dameon missing, run 'splash daemon stop' to reload properly"}
88
76
  end
89
77
  end
90
78
 
@@ -0,0 +1,51 @@
1
+ # coding: utf-8
2
+ module Splash
3
+ module Dependencies
4
+
5
+
6
+ # Internal Ruby
7
+ require 'open3'
8
+ require 'date'
9
+ require 'socket'
10
+ require 'yaml'
11
+ require 'thread'
12
+ require 'fileutils'
13
+ require 'etc'
14
+ require 'forwardable'
15
+
16
+
17
+
18
+ # Rubygems
19
+ begin
20
+ require 'prometheus/client'
21
+ require 'prometheus/client/push'
22
+ require 'thor'
23
+ require 'bunny'
24
+ require 'rufus-scheduler'
25
+ require 'tty-markdown'
26
+ require 'tty-pager'
27
+ require "redis"
28
+
29
+ rescue Gem::GemNotFoundException
30
+ $stderr.puts "Loadind error, it's like you try to run Splash, with a lake of dependencies."
31
+ $stderr.puts "If you run on RVM, please run with rvmsudo and not with sudo."
32
+ $stderr.puts "If problem is percistant, please, proceed to new install and Setup."
33
+ end
34
+
35
+
36
+ # Splash
37
+ require 'splash/constants'
38
+ require 'splash/helpers'
39
+ require 'splash/config'
40
+ require 'splash/exiter'
41
+ require 'splash/templates'
42
+ require 'splash/backends'
43
+ require 'splash/transports'
44
+
45
+ require 'splash/commands'
46
+ require 'splash/logs'
47
+ require 'splash/orchestrator'
48
+ require 'splash/controller'
49
+
50
+ end
51
+ end
@@ -0,0 +1,52 @@
1
+ module Splash
2
+ module Exiter
3
+ EXIT_MAP= {
4
+
5
+ # context execution
6
+ :not_root => {:message => "This operation need to be run as root (use sudo or rvmsudo)", :code => 10},
7
+ :options_incompatibility => {:message => "Options incompatibility", :code => 40},
8
+ :service_dependence_missing => {:message => "Splash Service dependence missing", :code => 60},
9
+
10
+ # config
11
+ :specific_config_required => {:message => "Specific configuration required", :code => 30},
12
+ :splash_setup_error => {:message => "Splash Setup terminated unsuccessfully", :code => 25},
13
+ :splash_setup_success => {:message => "Splash Setup terminated successfully", :code => 0},
14
+ :splash_sanitycheck_error => {:message => "Splash Sanitycheck terminated unsuccessfully", :code => 20},
15
+ :splash_sanitycheck_success => {:message => "Splash Sanitycheck terminated successfully", :code => 0},
16
+ :configuration_error => {:message => "Splash Configuration Error", :code => 50},
17
+
18
+
19
+ # global
20
+ :quiet_exit => {:code => 0},
21
+
22
+ # events
23
+ :interrupt => {:message => "Splash user operation interrupted", :code => 33},
24
+
25
+ # request
26
+ :not_found => {:message => "Object not found", :code => 44},
27
+ :already_exist => {:message => "Object already exist", :code => 48},
28
+
29
+ # daemon
30
+ :status_ok => {:message => "Status OK", :code => 0},
31
+ :status_ko => {:message => "Status KO", :code => 31}
32
+
33
+ }
34
+
35
+ def splash_exit(options = {})
36
+ mess = ""
37
+ mess = EXIT_MAP[options[:case]][:message] if EXIT_MAP[options[:case]].include? :message
38
+ mess << " : " unless mess.empty? or not options[:more]
39
+ mess << "#{options[:more]}" if options[:more]
40
+ if EXIT_MAP[options[:case]][:code] == 0 then
41
+ puts mess unless mess.empty?
42
+ exit 0
43
+ else
44
+ $stderr.puts mess unless mess.empty?
45
+ exit EXIT_MAP[options[:case]][:code]
46
+ end
47
+ end
48
+
49
+
50
+
51
+ end
52
+ end
@@ -1,7 +1,3 @@
1
- # coding: utf-8
2
- require 'fileutils'
3
- require 'etc'
4
-
5
1
  # coding: utf-8
6
2
  module Splash
7
3
  module Helpers
@@ -35,11 +31,9 @@ module Splash
35
31
  # facilité pour s'assurer qu'on execute une méthode avec les droits root
36
32
  # @param [Symbol] method a method name th wrap
37
33
  # @return [void] le retour de la méthode wrappée
38
- def run_as_root(method)
34
+ def run_as_root(method, options = {})
39
35
  unless is_root?
40
- $stderr.puts "You need to be root to execute this subcommands : #{method.to_s}"
41
- $stderr.puts "Please execute with sudo, or rvmsudo."
42
- exit 10
36
+ return {:case => :not_root, :more => "subcommands : #{method.to_s}"}
43
37
  else
44
38
  return self.send method
45
39
  end
@@ -1,5 +1,4 @@
1
- require 'socket'
2
-
1
+ # coding: utf-8
3
2
  module Splash
4
3
  class LogScanner
5
4
  include Splash::Constants
@@ -34,6 +33,7 @@ module Splash
34
33
  record[:status] = :missing
35
34
  end
36
35
  end
36
+ return {:case => :quiet_exit }
37
37
  end
38
38
 
39
39
  # pseudo-accessor on @logs_target
@@ -44,9 +44,7 @@ module Splash
44
44
  # start notification on prometheus for metric logerrors, logmissing; loglines
45
45
  def notify
46
46
  unless verify_service host: @config.prometheus_pushgateway_host ,port: @config.prometheus_pushgateway_port then
47
- $stderr.puts "Prometheus PushGateway Service IS NOT running"
48
- $stderr.puts "Exit without notification."
49
- exit 30
47
+ return { :case => :service_dependence_missing, :more => "Prometheus Notification not send." }
50
48
  end
51
49
  puts "Sending metrics to Prometheus Pushgateway"
52
50
  @logs_target.each do |item|
@@ -61,6 +59,7 @@ module Splash
61
59
  url = "http://#{@config.prometheus_pushgateway_host}:#{@config.prometheus_pushgateway_port}"
62
60
  Prometheus::Client::Push.new('Splash',hostname, url).add(@registry)
63
61
  puts "Sending done."
62
+ return {:case => :quiet_exit }
64
63
  end
65
64
 
66
65
  end
@@ -1,6 +1,4 @@
1
- require 'socket'
2
- require 'yaml'
3
-
1
+ # coding: utf-8
4
2
  module Splash
5
3
  module Orchestrator
6
4
 
@@ -35,7 +33,6 @@ module Splash
35
33
  end
36
34
  end
37
35
 
38
-
39
36
  class Scheduler
40
37
  include Splash::Constants
41
38
  include Splash::Helpers
@@ -46,8 +43,10 @@ module Splash
46
43
  @server = Rufus::Scheduler::new
47
44
  @server.extend SchedulerHooks
48
45
  @server.init_log
46
+ @config = get_config
49
47
  @result = LogScanner::new
50
- @server.every '20s' do
48
+ sched,value = @config.daemon_logmon_scheduling.flatten
49
+ @server.send sched,value do
51
50
  begin
52
51
  puts "Notify"
53
52
  @result.analyse
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  module Splash
2
3
  module Templates
3
4
 
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  Dir[File.dirname(__FILE__) + '/transports/*.rb'].each {|file| require file }
2
3
 
3
4
  module Splash
@@ -1,7 +1,4 @@
1
- require 'bunny'
2
- require 'yaml'
3
- require 'forwardable'
4
-
1
+ # coding: utf-8
5
2
  module Splash
6
3
  module Transports
7
4
  module Rabbitmq
@@ -23,7 +23,9 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency 'prometheus-client','~> 2.0.0'
24
24
  spec.add_runtime_dependency 'rufus-scheduler','~> 3.6.0'
25
25
  spec.add_runtime_dependency 'redis','~> 4.1.3'
26
- spec.add_runtime_dependency 'bunny','~> 2.15.0'
26
+ spec.add_runtime_dependency 'bunny','~> 2.15.0'
27
+ spec.add_runtime_dependency 'tty-markdown','~> 0.6.0'
28
+ spec.add_runtime_dependency 'tty-pager','~> 0.12.1'
27
29
  spec.add_development_dependency 'rake', '~> 13.0.1'
28
30
  spec.add_development_dependency 'rspec', '~> 3.9.0'
29
31
  spec.add_development_dependency 'yard', '~> 0.9.24'
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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romain GEORGES
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-08 00:00:00.000000000 Z
11
+ date: 2020-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 2.15.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: tty-markdown
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.6.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.6.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: tty-pager
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.12.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.12.1
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rake
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -200,10 +228,18 @@ files:
200
228
  - lib/splash/backends.rb
201
229
  - lib/splash/backends/file.rb
202
230
  - lib/splash/backends/redis.rb
231
+ - lib/splash/cli.rb
232
+ - lib/splash/cli/commands.rb
233
+ - lib/splash/cli/config.rb
234
+ - lib/splash/cli/daemon.rb
235
+ - lib/splash/cli/documentation.rb
236
+ - lib/splash/cli/logs.rb
203
237
  - lib/splash/commands.rb
204
238
  - lib/splash/config.rb
205
239
  - lib/splash/constants.rb
206
240
  - lib/splash/controller.rb
241
+ - lib/splash/dependencies.rb
242
+ - lib/splash/exiter.rb
207
243
  - lib/splash/helpers.rb
208
244
  - lib/splash/logs.rb
209
245
  - lib/splash/orchestrator.rb