nagios_analyzer 0.0.1 → 0.0.2
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 +1 -1
- data/Gemfile.lock +24 -0
- data/README.textile +7 -2
- data/lib/nagios_analyzer/section.rb +18 -8
- data/lib/nagios_analyzer/status.rb +19 -3
- data/lib/nagios_analyzer/version.rb +1 -1
- data/nagios_analyzer.gemspec +1 -1
- data/spec/section_spec.rb +0 -1
- data/spec/status_spec.rb +9 -0
- metadata +5 -55
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
nagios_analyzer (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.1.2)
|
10
|
+
rspec (2.4.0)
|
11
|
+
rspec-core (~> 2.4.0)
|
12
|
+
rspec-expectations (~> 2.4.0)
|
13
|
+
rspec-mocks (~> 2.4.0)
|
14
|
+
rspec-core (2.4.0)
|
15
|
+
rspec-expectations (2.4.0)
|
16
|
+
diff-lcs (~> 1.1.2)
|
17
|
+
rspec-mocks (2.4.0)
|
18
|
+
|
19
|
+
PLATFORMS
|
20
|
+
ruby
|
21
|
+
|
22
|
+
DEPENDENCIES
|
23
|
+
nagios_analyzer!
|
24
|
+
rspec
|
data/README.textile
CHANGED
@@ -31,8 +31,13 @@ pp status.host_items
|
|
31
31
|
# all items ?
|
32
32
|
pp status.items
|
33
33
|
|
34
|
-
#
|
35
|
-
pp status.
|
34
|
+
# only problems, services or hosts
|
35
|
+
pp status.service_problems
|
36
|
+
pp status.host_problems
|
37
|
+
|
38
|
+
# in fact, each item contains the section
|
39
|
+
# and can be accessed as a Hash
|
40
|
+
pp status.items.first[:current_state]
|
36
41
|
|
37
42
|
# get all sections, even those where status is OK
|
38
43
|
status = NagiosAnalyzer::Status.new("/path/to/status.dat", :include_ok => true)
|
@@ -1,20 +1,30 @@
|
|
1
1
|
module NagiosAnalyzer
|
2
|
-
class Section
|
2
|
+
class Section
|
3
3
|
def initialize(section)
|
4
|
-
section.strip
|
5
|
-
|
4
|
+
@section = section.strip
|
5
|
+
end
|
6
|
+
|
7
|
+
def method_missing(method, *args)
|
8
|
+
hash.send(method, *args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def hash
|
12
|
+
return @hash if @hash
|
13
|
+
@hash = {}
|
14
|
+
@section.each_line do |line|
|
6
15
|
line.strip!
|
7
16
|
if line.match(/(\S+) \{/)
|
8
|
-
|
17
|
+
@hash[:type] = $1
|
9
18
|
elsif line.match(/(\S+)=(.*)/) #more efficient than include?+split+join..
|
10
|
-
|
19
|
+
@hash[$1.to_sym] = ($2 == "#{$2.to_i}" ? $2.to_i : $2)
|
11
20
|
end
|
12
21
|
end
|
13
|
-
if
|
14
|
-
|
22
|
+
if @hash[:type] == "servicestatus"
|
23
|
+
@hash[:status] = Status::STATES[@hash[:current_state]]
|
15
24
|
else
|
16
|
-
|
25
|
+
@hash[:status] = (@hash[:current_state] == Status::STATE_OK ? "OK" : "CRITICAL")
|
17
26
|
end
|
27
|
+
@hash
|
18
28
|
end
|
19
29
|
|
20
30
|
def <=>(other)
|
@@ -37,17 +37,29 @@ module NagiosAnalyzer
|
|
37
37
|
def host_items
|
38
38
|
@host_items ||= sections.map do |s|
|
39
39
|
Section.new(s) if s.start_with?("hoststatus") && in_scope?(s)
|
40
|
-
end.compact
|
40
|
+
end.compact
|
41
41
|
end
|
42
42
|
|
43
43
|
def service_items
|
44
44
|
@service_items ||= sections.map do |s|
|
45
45
|
Section.new(s) if s.start_with?("servicestatus") && in_scope?(s)
|
46
|
-
end.compact
|
46
|
+
end.compact
|
47
47
|
end
|
48
48
|
|
49
49
|
def items
|
50
|
-
@items ||= (host_items + service_items)
|
50
|
+
@items ||= (host_items + service_items)
|
51
|
+
end
|
52
|
+
|
53
|
+
def host_problems
|
54
|
+
@host_problems ||= sections.map do |s|
|
55
|
+
Section.new(s) if s.start_with?("hoststatus") && in_scope?(s) && problem?(s)
|
56
|
+
end.compact
|
57
|
+
end
|
58
|
+
|
59
|
+
def service_problems
|
60
|
+
@service_problems ||= sections.map do |s|
|
61
|
+
Section.new(s) if s.start_with?("servicestatus") && in_scope?(s) && problem?(s)
|
62
|
+
end.compact
|
51
63
|
end
|
52
64
|
|
53
65
|
def in_scope?(section)
|
@@ -56,6 +68,10 @@ module NagiosAnalyzer
|
|
56
68
|
end
|
57
69
|
end
|
58
70
|
|
71
|
+
def problem?(section)
|
72
|
+
section.match(/current_state=(\d+)/) && $1.to_i != STATE_OK
|
73
|
+
end
|
74
|
+
|
59
75
|
def reset_cache!
|
60
76
|
@items = @service_items = @host_items = nil
|
61
77
|
end
|
data/nagios_analyzer.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["jeanbaptiste.barth@gmail.com"]
|
11
11
|
s.homepage = "http://github.com/jbbarth/nagios_analyzer"
|
12
12
|
s.summary = %q{Parses a nagios/shinken status.dat file}
|
13
|
-
s.description =
|
13
|
+
s.description = %q{Helps you parse a status.dat file produced by nagios or shinken. It aims at being performant for big status.dat files. Take a look at nagios_parser too if you want, looks very cool too !}
|
14
14
|
|
15
15
|
s.rubyforge_project = "nagios_analyzer"
|
16
16
|
|
data/spec/section_spec.rb
CHANGED
data/spec/status_spec.rb
CHANGED
@@ -54,6 +54,15 @@ describe NagiosAnalyzer::Status do
|
|
54
54
|
@status.service_items.first[:type].should == "servicestatus"
|
55
55
|
end
|
56
56
|
|
57
|
+
it "returns only service problems, keeping scopes on every items" do
|
58
|
+
@status.should have(1).service_problems
|
59
|
+
@status.should have(2).service_items
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns host problems, currently none" do
|
63
|
+
@status.should have(0).host_problems
|
64
|
+
end
|
65
|
+
|
57
66
|
it "resets cached attributes" do
|
58
67
|
@status.should have(4).items
|
59
68
|
@status.scopes << lambda{|s| s.start_with?("servicestatus")}
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jean-Baptiste Barth
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-05-07 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -30,58 +30,7 @@ dependencies:
|
|
30
30
|
version: "0"
|
31
31
|
type: :development
|
32
32
|
version_requirements: *id001
|
33
|
-
description:
|
34
|
-
h1. nagios_analyzer
|
35
|
-
|
36
|
-
h2. Description
|
37
|
-
|
38
|
-
nagios_analyzer gem allows you to parse a status.dat file produced by nagios or shinken.
|
39
|
-
|
40
|
-
It's similar to nagios_parser in some way, but has different goals:
|
41
|
-
* the parser doesn't rely on 3rd party library nor standard parser like 'racc', I want to keep the code very simple to read and maintain ;
|
42
|
-
* the parser supports defining scopes, which are processed on the raw file for performance concern, ruby objects being instanciated lately when necessary : on my conf (85hosts/700services), spawning a ruby object for each section makes the script at least 10 times slower (0.25s => >3s). Most of the time, you'll only want to access a subset of your services or hosts, so it's ok.
|
43
|
-
|
44
|
-
Since nagios_parser looks very cool too, you should try both and keep the best one for you.
|
45
|
-
|
46
|
-
h2. Installation
|
47
|
-
|
48
|
-
<pre>gem install nagios_analyzer</pre>
|
49
|
-
|
50
|
-
h2. Usage
|
51
|
-
|
52
|
-
<pre>
|
53
|
-
require 'nagios_analyzer'
|
54
|
-
require 'pp'
|
55
|
-
|
56
|
-
status = NagiosAnalyzer::Status.new("/path/to/status.dat")
|
57
|
-
|
58
|
-
# get services items
|
59
|
-
pp status.service_items
|
60
|
-
|
61
|
-
# get host items
|
62
|
-
pp status.host_items
|
63
|
-
|
64
|
-
# all items ?
|
65
|
-
pp status.items
|
66
|
-
|
67
|
-
# in fact, each items is a hash
|
68
|
-
pp status.items.first
|
69
|
-
|
70
|
-
# get all sections, even those where status is OK
|
71
|
-
status = NagiosAnalyzer::Status.new("/path/to/status.dat", :include_ok => true)
|
72
|
-
|
73
|
-
# define a personal scope (applied to section string, so look at your status.dat!)
|
74
|
-
not_acknowleged = lambda{|section| section.include?("problem_has_been_acknowledged=0") }
|
75
|
-
status = NagiosAnalyzer::Status.new("/path/to/status.dat", :scope => not_acknowledged)
|
76
|
-
|
77
|
-
# add more scopes
|
78
|
-
status.scopes << lambda{|s| s.include?("notifications_enabled=1") } #no notifications
|
79
|
-
status.scopes << lambda{|s| s.start_with?("hoststatus") } #only host statuses
|
80
|
-
|
81
|
-
# reset cached results (if you changed scopes!)
|
82
|
-
status.reset_cache!
|
83
|
-
</pre>
|
84
|
-
|
33
|
+
description: Helps you parse a status.dat file produced by nagios or shinken. It aims at being performant for big status.dat files. Take a look at nagios_parser too if you want, looks very cool too !
|
85
34
|
email:
|
86
35
|
- jeanbaptiste.barth@gmail.com
|
87
36
|
executables: []
|
@@ -93,6 +42,7 @@ extra_rdoc_files: []
|
|
93
42
|
files:
|
94
43
|
- .gitignore
|
95
44
|
- Gemfile
|
45
|
+
- Gemfile.lock
|
96
46
|
- README.textile
|
97
47
|
- Rakefile
|
98
48
|
- lib/nagios_analyzer.rb
|