prometheus-splash 0.0.3 → 0.1.0
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.
- checksums.yaml +4 -4
- data/README.md +642 -8
- data/assets/images/detail_prom_splash.png +0 -0
- data/assets/images/logo_splash.png +0 -0
- data/assets/images/logo_splash_reduce.png +0 -0
- data/assets/images/prom_pg_logs.png +0 -0
- data/bin/splash +98 -10
- data/config/splash.yml +2 -14
- data/lib/splash/backends/file.rb +11 -5
- data/lib/splash/backends/redis.rb +28 -6
- data/lib/splash/commands.rb +25 -20
- data/lib/splash/config.rb +11 -7
- data/lib/splash/constants.rb +22 -2
- data/lib/splash/logs.rb +7 -0
- data/lib/splash/orchestrator.rb +33 -1
- data/lib/splash/templates.rb +13 -2
- data/lib/splash/transports/rabbitmq.rb +23 -6
- data/lib/splash/transports.rb +3 -3
- data/prometheus-splash.gemspec +2 -1
- data/templates/report.txt +2 -1
- metadata +20 -2
data/lib/splash/logs.rb
CHANGED
@@ -5,6 +5,9 @@ module Splash
|
|
5
5
|
include Splash::Constants
|
6
6
|
include Splash::Config
|
7
7
|
|
8
|
+
|
9
|
+
# LogScanner Constructor
|
10
|
+
# return [LogScanner]
|
8
11
|
def initialize
|
9
12
|
@logs_target = get_config.logs
|
10
13
|
@config = get_config
|
@@ -17,6 +20,8 @@ module Splash
|
|
17
20
|
@registry.register(@metric_lines)
|
18
21
|
end
|
19
22
|
|
23
|
+
|
24
|
+
# start log analyse for log target in config
|
20
25
|
def analyse
|
21
26
|
@logs_target.each do |record|
|
22
27
|
record[:count]=0 if record[:count].nil?
|
@@ -31,10 +36,12 @@ module Splash
|
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
39
|
+
# pseudo-accessor on @logs_target
|
34
40
|
def output
|
35
41
|
return @logs_target
|
36
42
|
end
|
37
43
|
|
44
|
+
# start notification on prometheus for metric logerrors, logmissing; loglines
|
38
45
|
def notify
|
39
46
|
unless verify_service host: @config.prometheus_pushgateway_host ,port: @config.prometheus_pushgateway_port then
|
40
47
|
$stderr.puts "Prometheus PushGateway Service IS NOT running"
|
data/lib/splash/orchestrator.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'yaml'
|
3
|
+
|
1
4
|
module Splash
|
2
5
|
module Orchestrator
|
3
6
|
|
@@ -15,11 +18,30 @@ module Splash
|
|
15
18
|
end
|
16
19
|
end
|
17
20
|
|
21
|
+
module Commander
|
22
|
+
include Splash::Transports
|
23
|
+
def send_message (options)
|
24
|
+
client = get_default_client
|
25
|
+
client.publish options
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
module Grammar
|
30
|
+
|
31
|
+
VERBS=[:ping]
|
32
|
+
|
33
|
+
def ping(payload)
|
34
|
+
return "Pong : #{payload[:hostname]} !"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
18
38
|
|
19
39
|
class Scheduler
|
20
40
|
include Splash::Constants
|
21
41
|
include Splash::Helpers
|
22
42
|
include Splash::Config
|
43
|
+
include Splash::Transports
|
44
|
+
include Splash::Orchestrator::Grammar
|
23
45
|
def initialize
|
24
46
|
@server = Rufus::Scheduler::new
|
25
47
|
@server.extend SchedulerHooks
|
@@ -35,7 +57,17 @@ module Splash
|
|
35
57
|
$stderr.puts "PushGateway seems to be done, please start it."
|
36
58
|
end
|
37
59
|
end
|
38
|
-
|
60
|
+
hostname = Socket.gethostname
|
61
|
+
transport = get_default_subscriber queue: "splash.#{hostname}.input"
|
62
|
+
transport.subscribe(:block => true) do |delivery_info, properties, body|
|
63
|
+
content = YAML::load(body)
|
64
|
+
if VERBS.include? content[:verb]
|
65
|
+
res = self.send content[:verb], content[:payload]
|
66
|
+
get_default_client.publish queue: content[:return_to], message: res.to_yaml
|
67
|
+
else
|
68
|
+
get_default_client.publish queue: content[:return_to], message: "Unkown verb #{content[:verb]}".to_yaml
|
69
|
+
end
|
70
|
+
end
|
39
71
|
end
|
40
72
|
|
41
73
|
def terminate
|
data/lib/splash/templates.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
module Splash
|
2
2
|
module Templates
|
3
|
+
|
4
|
+
# KISS template Engine
|
3
5
|
class Template
|
4
6
|
|
5
7
|
attr_reader :list_token
|
6
8
|
attr_reader :template_file
|
7
9
|
attr_reader :content
|
8
10
|
|
11
|
+
# constructor : generate the pseudo accessor for template Class from token list
|
9
12
|
def initialize(_options)
|
10
13
|
|
11
14
|
|
@@ -28,12 +31,17 @@ module Splash
|
|
28
31
|
@list_token.each{|_token| eval("def #{_token}; @hash_token['#{_token}'] ;end")}
|
29
32
|
end
|
30
33
|
|
34
|
+
# generic accessor
|
35
|
+
# @param [Symbol] _token in the token list
|
36
|
+
# @param [String] _value a text value
|
37
|
+
# @raise [ArgumentError] if _valu is not a String
|
31
38
|
def token(_token,_value)
|
32
39
|
raise ArgumentError::new('Not a String') unless _value.class == String
|
33
40
|
@hash_token[_token.to_s] = _value
|
34
41
|
end
|
35
42
|
|
36
|
-
|
43
|
+
# map a hash against templates token_list
|
44
|
+
# @param [Hash] _hash a hash data to map
|
37
45
|
def map(_hash)
|
38
46
|
_data = {}
|
39
47
|
_hash.each { |item,val|
|
@@ -44,11 +52,14 @@ module Splash
|
|
44
52
|
@hash_token = _data
|
45
53
|
end
|
46
54
|
|
55
|
+
# collector for pseudo accessor to prevent bad mapping
|
56
|
+
# @raise [NotAToken] if caling an accessor not mapped in token list
|
47
57
|
def method_missing(_name,*_args)
|
48
58
|
raise NotAToken
|
49
59
|
end
|
50
60
|
|
51
|
-
|
61
|
+
# the templater;proceed to templating
|
62
|
+
# @return [String] the template output
|
52
63
|
def output
|
53
64
|
_my_res = String::new('')
|
54
65
|
_my_res = @content
|
@@ -1,18 +1,34 @@
|
|
1
1
|
require 'bunny'
|
2
|
+
require 'yaml'
|
3
|
+
require 'forwardable'
|
4
|
+
|
2
5
|
module Splash
|
3
6
|
module Transports
|
4
|
-
module
|
7
|
+
module Rabbitmq
|
5
8
|
|
6
9
|
class Subscriber
|
7
|
-
|
10
|
+
include Splash::Config
|
11
|
+
extend Forwardable
|
12
|
+
|
13
|
+
def_delegators :@queue, :subscribe
|
14
|
+
|
15
|
+
def initialize(options = {})
|
16
|
+
@config = get_config.transports
|
17
|
+
@connection = Bunny.new url: @config[:rabbitmq][:url]
|
18
|
+
@connection.start
|
19
|
+
@channel = @connection.create_channel
|
20
|
+
@queue = @channel.queue options[:queue]
|
8
21
|
|
9
22
|
end
|
23
|
+
|
10
24
|
end
|
11
25
|
|
12
26
|
|
13
27
|
class Client
|
28
|
+
include Splash::Config
|
14
29
|
def initialize
|
15
|
-
@
|
30
|
+
@config = get_config.transports
|
31
|
+
@connection = Bunny.new url: @config[:rabbitmq][:url]
|
16
32
|
@connection.start
|
17
33
|
@channel = @connection.create_channel
|
18
34
|
end
|
@@ -22,16 +38,17 @@ module Splash
|
|
22
38
|
return @channel.default_exchange.publish(options[:message], :routing_key => options[:queue])
|
23
39
|
end
|
24
40
|
|
25
|
-
def ack
|
26
|
-
return @channel.acknowledge(
|
41
|
+
def ack(ack)
|
42
|
+
return @channel.acknowledge(ack, false)
|
27
43
|
end
|
28
44
|
|
29
45
|
|
30
46
|
def get(options ={})
|
31
47
|
queue = @channel.queue(options[:queue])
|
48
|
+
opt = {}; opt[:manual_ack] = (options[:manual_ack])? true : false
|
32
49
|
delivery_info, properties, payload = queue.pop
|
33
50
|
res = {:message => payload}
|
34
|
-
res[:ack] = delivery_info.delivery_tag if options[:
|
51
|
+
res[:ack] = delivery_info.delivery_tag if options[:manual_ack]
|
35
52
|
return res
|
36
53
|
end
|
37
54
|
|
data/lib/splash/transports.rb
CHANGED
@@ -4,9 +4,9 @@ module Splash
|
|
4
4
|
module Transports
|
5
5
|
include Splash::Config
|
6
6
|
|
7
|
-
def get_default_subscriber
|
8
|
-
aclass = "Splash::Transports::#{get_config[:transports][:active].to_s.capitalize}::
|
9
|
-
return Kernel.const_get(aclass)::new
|
7
|
+
def get_default_subscriber(queue)
|
8
|
+
aclass = "Splash::Transports::#{get_config[:transports][:active].to_s.capitalize}::Subscriber"
|
9
|
+
return Kernel.const_get(aclass)::new(queue)
|
10
10
|
end
|
11
11
|
|
12
12
|
def get_default_client
|
data/prometheus-splash.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_runtime_dependency 'thor','~> 1.0.1'
|
23
23
|
spec.add_runtime_dependency 'prometheus-client','~> 2.0.0'
|
24
24
|
spec.add_runtime_dependency 'rufus-scheduler','~> 3.6.0'
|
25
|
-
spec.add_runtime_dependency 'redis','~> 4.1.3'
|
25
|
+
spec.add_runtime_dependency 'redis','~> 4.1.3'
|
26
|
+
spec.add_runtime_dependency 'bunny','~> 2.15.0'
|
26
27
|
spec.add_development_dependency 'rake', '~> 13.0.1'
|
27
28
|
spec.add_development_dependency 'rspec', '~> 3.9.0'
|
28
29
|
spec.add_development_dependency 'yard', '~> 0.9.24'
|
data/templates/report.txt
CHANGED
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.0
|
4
|
+
version: 0.1.0
|
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-
|
11
|
+
date: 2020-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 4.1.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bunny
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.15.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.15.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -177,6 +191,10 @@ files:
|
|
177
191
|
- LICENSE.txt
|
178
192
|
- README.md
|
179
193
|
- Rakefile
|
194
|
+
- assets/images/detail_prom_splash.png
|
195
|
+
- assets/images/logo_splash.png
|
196
|
+
- assets/images/logo_splash_reduce.png
|
197
|
+
- assets/images/prom_pg_logs.png
|
180
198
|
- bin/splash
|
181
199
|
- config/splash.yml
|
182
200
|
- lib/splash/backends.rb
|