carbios 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.
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +22 -0
- data/README.md +4 -0
- data/Rakefile +1 -0
- data/bin/carbios +73 -0
- data/carbios.gemspec +24 -0
- data/config/carbios.sample.yaml +34 -0
- data/lib/carbios/helpers.rb +9 -0
- data/lib/carbios/hostname.rb +22 -0
- data/lib/carbios/perfdata.rb +53 -0
- data/lib/carbios/version.rb +3 -0
- data/lib/carbios.rb +11 -0
- data/lib/hash.rb +11 -0
- metadata +92 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
carbios (0.0.1)
|
5
|
+
graphite
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
eventmachine (1.0.0)
|
11
|
+
graphite (0.2.0)
|
12
|
+
eventmachine
|
13
|
+
rufus-scheduler
|
14
|
+
rufus-scheduler (2.0.17)
|
15
|
+
tzinfo (>= 0.3.23)
|
16
|
+
tzinfo (0.3.33)
|
17
|
+
|
18
|
+
PLATFORMS
|
19
|
+
ruby
|
20
|
+
|
21
|
+
DEPENDENCIES
|
22
|
+
carbios!
|
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/carbios
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'carbios'
|
4
|
+
require 'optparse'
|
5
|
+
require 'logger'
|
6
|
+
require 'yaml'
|
7
|
+
require 'pp'
|
8
|
+
require 'graphite/logger'
|
9
|
+
|
10
|
+
|
11
|
+
logger = Logger.new($stdout)
|
12
|
+
logger.level = Logger::WARN
|
13
|
+
|
14
|
+
config = { :reverse_hostname => true,
|
15
|
+
:prefix => 'perfdata',
|
16
|
+
:graphite_host => 'localhost',
|
17
|
+
:graphite_port => 2003,
|
18
|
+
:archive => true, }
|
19
|
+
|
20
|
+
options = {}
|
21
|
+
opts = OptionParser.new
|
22
|
+
opts.banner = "Usage #{$0} --config FILE FILES"
|
23
|
+
opts.on("-c", "--config FILE", String, "Config file" ) do |v|
|
24
|
+
options[:configfile] = v
|
25
|
+
end
|
26
|
+
opts.on("-h", "--help", "help" ) do |v|
|
27
|
+
puts opts
|
28
|
+
exit 1
|
29
|
+
end
|
30
|
+
opts.on("-d", "--debug", "Turn on debug logging" ) do |v|
|
31
|
+
logger.level = Logger::DEBUG
|
32
|
+
end
|
33
|
+
opts.parse!
|
34
|
+
|
35
|
+
unless options[:configfile] && File.file?(options[:configfile])
|
36
|
+
logger.fatal "Must specify --config FILE"
|
37
|
+
puts opts
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
41
|
+
config.merge! YAML.load_file(options[:configfile])
|
42
|
+
|
43
|
+
g = Graphite::Logger.new("#{config[:graphite_host]}:#{config[:graphite_port]}",
|
44
|
+
logger)
|
45
|
+
files = []
|
46
|
+
ARGF.each do |str|
|
47
|
+
perfdata = Carbios::PerfData.new(str, :base_hostname => config[:base_hostname],
|
48
|
+
:prefix => config[:prefix],
|
49
|
+
:reverse_hostname => config[:reverse_hostname] )
|
50
|
+
logger.debug str
|
51
|
+
logger.debug "time => #{perfdata.time.to_i}"
|
52
|
+
logger.debug "perfdata => #{perfdata.to_h.inspect}"
|
53
|
+
g.log(perfdata.time.to_i, perfdata.to_h) if perfdata.has_perfdata?
|
54
|
+
|
55
|
+
files << ARGF.filename unless files.include? ARGF.filename
|
56
|
+
end
|
57
|
+
|
58
|
+
# clean up
|
59
|
+
files.each do |filename|
|
60
|
+
next if filename == '-'
|
61
|
+
begin
|
62
|
+
if config[:archive]
|
63
|
+
newfn = "#{filename}.#{Time.new.strftime('%Y%m%d%H%M%S')}"
|
64
|
+
logger.info "Renaming #{filename} to #{newfn}"
|
65
|
+
File.rename(filename, newfn)
|
66
|
+
else
|
67
|
+
logger.info "Removing #{filename}"
|
68
|
+
File.unlink(filename) if File.file? filename
|
69
|
+
end
|
70
|
+
rescue
|
71
|
+
logger.error "Unable to remove or rename #{filename}"
|
72
|
+
end
|
73
|
+
end
|
data/carbios.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "carbios/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "carbios"
|
7
|
+
s.version = Carbios::VERSION
|
8
|
+
s.authors = ["Aaron Brown"]
|
9
|
+
s.email = ["abrown@ideeli.com"]
|
10
|
+
s.homepage = "https://github.com/ideeli/carbios"
|
11
|
+
s.summary = %q{Nagios perfdata to Graphite/Carbon connector}
|
12
|
+
s.description = %q{Nagios perfdata to Graphite/Carbon connector}
|
13
|
+
|
14
|
+
s.rubyforge_project = "carbios"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "graphite"
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
# base_hostname is a regular expression that is removed
|
3
|
+
# from the hostname field in the graphite metric.
|
4
|
+
# Example:
|
5
|
+
# :base_hostname: !ruby/regexp /\.ideeli\.(net|com)$/
|
6
|
+
# hostname = "foo.bar.ideeli.net"
|
7
|
+
# metric = "loadavg"
|
8
|
+
# => "bar.foo.loadavg"
|
9
|
+
:base_hostname: !ruby/regexp /\.ideeli\.(net|com)$/
|
10
|
+
|
11
|
+
# reverse_hostname will make the hostname appear in
|
12
|
+
# reverse domain order in the graphite metric name
|
13
|
+
# Example:
|
14
|
+
# hostname = "foo.bar.ideeli.net"
|
15
|
+
# metric = "loadavg"
|
16
|
+
# => "net.ideeli.bar.foo.loadavg"
|
17
|
+
:reverse_hostname: true
|
18
|
+
|
19
|
+
:graphite_host: tv.borg.lan
|
20
|
+
:graphite_port: 2003
|
21
|
+
|
22
|
+
# prefix adds a prefix to the graphite metric name
|
23
|
+
# Example:
|
24
|
+
# hostname = "foo.bar.ideeli.net"
|
25
|
+
# metric = "loadavg"
|
26
|
+
# prefix = "perfdata"
|
27
|
+
# => "perfdata.net.ideeli.bar.foo.loadavg"
|
28
|
+
:prefix: perfdata
|
29
|
+
|
30
|
+
# if archive is true, the perfdata files will be renamed
|
31
|
+
# with a timestamp extension after being processed
|
32
|
+
#
|
33
|
+
# if archive is false, the perfdata files WILL BE REMOVED
|
34
|
+
:archive: true
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Carbios
|
2
|
+
|
3
|
+
class Hostname
|
4
|
+
attr_reader :hostname
|
5
|
+
|
6
|
+
def initialize ( hostname, options = {} )
|
7
|
+
@hostname = hostname
|
8
|
+
if options[:base_hostname]
|
9
|
+
@hostname.gsub!(options[:base_hostname], '')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def reverse
|
14
|
+
@hostname.split('.').reverse.join('.')
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
@hostname
|
19
|
+
end
|
20
|
+
end # class Hostname
|
21
|
+
|
22
|
+
end #module Carbios
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Carbios
|
2
|
+
|
3
|
+
class PerfData
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
attr_reader :time, :hostname
|
7
|
+
|
8
|
+
SERVICEKEY = 'SERVICEPERFDATA'
|
9
|
+
HOSTKEY = 'HOSTPERFDATA'
|
10
|
+
|
11
|
+
def initialize ( checkstr, options = {} )
|
12
|
+
@prefix = options[:prefix]
|
13
|
+
parse_checkdata(checkstr)
|
14
|
+
@time = Time.at(@checkdata['TIMET'].to_i)
|
15
|
+
@hostname = Hostname.new( @checkdata['HOSTNAME'],
|
16
|
+
:base_hostname => options[:base_hostname] )
|
17
|
+
@desc = normalize_key(@checkdata['SERVICEDESC']) if @checkdata['SERVICEDESC']
|
18
|
+
@reverse_hostname = options[:reverse_hostname]
|
19
|
+
parse_perfdata
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_checkdata( checkstr )
|
23
|
+
@checkdata = Hash[checkstr.scan(/(.*?)::(?:(.*?)(?:\t+|$))/)]
|
24
|
+
end
|
25
|
+
|
26
|
+
def parse_perfdata
|
27
|
+
if @checkdata.has_key? SERVICEKEY
|
28
|
+
@key = SERVICEKEY
|
29
|
+
elsif @checkdata.has_key? HOSTKEY
|
30
|
+
@key = HOSTKEY
|
31
|
+
else
|
32
|
+
raise "Cannot find #{SERVICEKEY} or #{HOSTKEY} keys"
|
33
|
+
end
|
34
|
+
@perfdata = Hash[@checkdata[@key].scan(/(\S+)=(\d+(?:\.\d+)?)\S*\s?/)]
|
35
|
+
end
|
36
|
+
|
37
|
+
def normalize_perfdata
|
38
|
+
Hash[@perfdata.map { |k,v| [normalize_key(k), v] }]
|
39
|
+
end
|
40
|
+
|
41
|
+
def has_perfdata?
|
42
|
+
!@perfdata.empty?
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_h
|
46
|
+
hostname = @reverse_hostname ? @hostname.reverse : @hostname
|
47
|
+
prefix = [@prefix, hostname, @desc].compact.join('.')
|
48
|
+
normalize_perfdata.prefix_keys("#{prefix}.")
|
49
|
+
end
|
50
|
+
|
51
|
+
end # class PerfData
|
52
|
+
|
53
|
+
end # module Carbios
|
data/lib/carbios.rb
ADDED
data/lib/hash.rb
ADDED
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: carbios
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Aaron Brown
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-10-09 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: graphite
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
description: Nagios perfdata to Graphite/Carbon connector
|
35
|
+
email:
|
36
|
+
- abrown@ideeli.com
|
37
|
+
executables:
|
38
|
+
- carbios
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- Gemfile
|
46
|
+
- Gemfile.lock
|
47
|
+
- README.md
|
48
|
+
- Rakefile
|
49
|
+
- bin/carbios
|
50
|
+
- carbios.gemspec
|
51
|
+
- config/carbios.sample.yaml
|
52
|
+
- lib/carbios.rb
|
53
|
+
- lib/carbios/helpers.rb
|
54
|
+
- lib/carbios/hostname.rb
|
55
|
+
- lib/carbios/perfdata.rb
|
56
|
+
- lib/carbios/version.rb
|
57
|
+
- lib/hash.rb
|
58
|
+
homepage: https://github.com/ideeli/carbios
|
59
|
+
licenses: []
|
60
|
+
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
requirements: []
|
85
|
+
|
86
|
+
rubyforge_project: carbios
|
87
|
+
rubygems_version: 1.8.10
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: Nagios perfdata to Graphite/Carbon connector
|
91
|
+
test_files: []
|
92
|
+
|