metrics-capacitor-utils 0.0.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.
- checksums.yaml +7 -0
- data/lib/metrics-capacitor/utils/graphite.rb +88 -0
- data/lib/metrics-capacitor/utils/sensu.rb +28 -0
- metadata +126 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7d250dadf7c7b0ed6295d98277ce17fa09e56bc4
|
4
|
+
data.tar.gz: 2b12a3394c54eb606985e1c2bbf0a7a45786889c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6fd8a5b2fa2cda337da8cb146693e252d6bcdcce9d10269dba5a7f896871d0f556f2ba3aa3fad5b6c757508df093c5d854b1900fa3b2187ffd2811c21cb23ab8
|
7
|
+
data.tar.gz: 24127a911f222f94a598eaa23b72d36787f63c40112264aeeed1b5d55f673faf07032250e8d1977f6ee2cb1f851ba2247673d8782687a0103c7b445182c88dcf
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'redis'
|
2
|
+
require 'securerandom'
|
3
|
+
require 'json'
|
4
|
+
require 'metrics-capacitor/config'
|
5
|
+
require 'metrics-capacitor/model'
|
6
|
+
|
7
|
+
module MetricsCapacitor
|
8
|
+
module Utils
|
9
|
+
class Graphite
|
10
|
+
|
11
|
+
def initialize(opts)
|
12
|
+
Config.load!
|
13
|
+
@options = opts
|
14
|
+
@metrics = Model::Metrics.new
|
15
|
+
begin
|
16
|
+
@input = $stdin.readlines
|
17
|
+
rescue Interrupt
|
18
|
+
$stderr.puts 'Interrupted'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def run!
|
23
|
+
parse_input!
|
24
|
+
send_metrics!
|
25
|
+
end
|
26
|
+
|
27
|
+
def apply_tag_map path
|
28
|
+
name = []
|
29
|
+
autodetect = []
|
30
|
+
tags = {}
|
31
|
+
map = @options[:tag_map].split '.'
|
32
|
+
fields = path.split '.'
|
33
|
+
if fields.length < map.length
|
34
|
+
$stderr.puts "Map length can't be deeper than source tree length"
|
35
|
+
else
|
36
|
+
fields.each_with_index do |field, idx|
|
37
|
+
next if map[idx] == '_'
|
38
|
+
i = Integer(map[idx]) rescue i = map[idx]
|
39
|
+
case i
|
40
|
+
when nil
|
41
|
+
autodetect.push field
|
42
|
+
when Integer
|
43
|
+
name[i] = field
|
44
|
+
when String
|
45
|
+
tags[i] = field
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
tags['autodetect'] = autodetect.join(':')
|
50
|
+
tags.merge! @options[:add_tag]
|
51
|
+
return [ name.join(':'), tags ]
|
52
|
+
end
|
53
|
+
|
54
|
+
def debug msg
|
55
|
+
$stderr.puts "DEBUG: #{msg}" if @options[:debug]
|
56
|
+
end
|
57
|
+
|
58
|
+
def parse_input!
|
59
|
+
@input.each do |line|
|
60
|
+
fields = line.split(/\s+/)
|
61
|
+
( name, tags ) = apply_tag_map(fields[0]) unless fields.empty?
|
62
|
+
@metrics << Model::Metric.new(name: name, tags: tags, values: fields[1].to_f) unless name == ''
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def send_metrics!
|
67
|
+
@redis = Redis.new(url: Config.redis[:url])
|
68
|
+
msg = JSON.dump({
|
69
|
+
'class' => 'MetricsCapacitor::Processor::Scrubber',
|
70
|
+
'args' => @metrics.to_redis,
|
71
|
+
'jid' => SecureRandom.hex(12),
|
72
|
+
'retry' => true,
|
73
|
+
'enqueued_at' => Time.now.to_f
|
74
|
+
})
|
75
|
+
debug "Metrics packet to send"
|
76
|
+
debug msg
|
77
|
+
begin
|
78
|
+
@redis.lpush('queue:scrubber', msg) unless @options[:debug]
|
79
|
+
exit 0
|
80
|
+
rescue StandardError => e
|
81
|
+
$stderr.puts "#{e.class}: #{e.message}"
|
82
|
+
$stderr.puts @metrics.to_redis
|
83
|
+
exit 1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'redis'
|
2
|
+
require 'sensu-plugin'
|
3
|
+
require 'mixlib/cli'
|
4
|
+
require 'metrics-capacitor/config'
|
5
|
+
require 'metrics-capacitor/model'
|
6
|
+
|
7
|
+
|
8
|
+
module MetricsCapacitor
|
9
|
+
module Utils
|
10
|
+
class Sensu < Sensu::Plugin::CLI
|
11
|
+
|
12
|
+
def initialize(args=ARGV)
|
13
|
+
super()
|
14
|
+
self.args = self.parse_options(argv)
|
15
|
+
@settings = Utils.settings
|
16
|
+
@redis = Redis.new(url: Config.redis[:url])
|
17
|
+
end
|
18
|
+
|
19
|
+
def output(args)
|
20
|
+
case args
|
21
|
+
when Array
|
22
|
+
when Hash
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metrics-capacitor-utils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Radek 'blufor' Slavicinsky
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: metrics-capacitor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.0.1
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.0.1
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sensu-plugin
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1'
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.1.0
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ~>
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1'
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.1.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: redis
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.3'
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.3.0
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.3'
|
70
|
+
- - '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 3.3.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: msgpack
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0.7'
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.7.6
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.7'
|
90
|
+
- - '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 0.7.6
|
93
|
+
description: Inheritable class for writing Sensu metric plugins and Graphite format
|
94
|
+
CLI transformer/sender.
|
95
|
+
email: radek@blufor.cz
|
96
|
+
executables: []
|
97
|
+
extensions: []
|
98
|
+
extra_rdoc_files: []
|
99
|
+
files:
|
100
|
+
- lib/metrics-capacitor/utils/graphite.rb
|
101
|
+
- lib/metrics-capacitor/utils/sensu.rb
|
102
|
+
homepage: https://github.com/metrics-capacitor/metrics-capacitor-engine
|
103
|
+
licenses:
|
104
|
+
- GPLv3
|
105
|
+
metadata: {}
|
106
|
+
post_install_message:
|
107
|
+
rdoc_options: []
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 2.0.0
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
requirements: []
|
121
|
+
rubyforge_project:
|
122
|
+
rubygems_version: 2.4.8
|
123
|
+
signing_key:
|
124
|
+
specification_version: 4
|
125
|
+
summary: Metrics Capacitor (utils)
|
126
|
+
test_files: []
|