nsca-client 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.
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,8 @@
1
+ NSCA Client
2
+ ===========
3
+
4
+ NSCA is a Linux/Unix daemon allows you to integrate passive alerts and checks
5
+ from remote machines and applications with Nagios. Useful for processing
6
+ security alerts, as well as redundant and distributed Nagios setups.
7
+
8
+ **This client allows you to send easily passive alerts and checks.**
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,46 @@
1
+ require 'nsca/client/host'
2
+ require 'nsca/client/message'
3
+ require 'nsca/client/notifier'
4
+ require 'nsca/client/remote_server'
5
+ require 'nsca/client/service'
6
+ require 'nsca/client/version'
7
+
8
+ module NSCA
9
+ module Client
10
+ class << self
11
+ def servers
12
+ @servers ||= []
13
+ end
14
+
15
+ def ok(service, message = 'OK')
16
+ status = false
17
+ servers.each do |server|
18
+ message = Message.new(:ok, message, service, server)
19
+ notifier = Notifier.new(message)
20
+ status = true if notifier.send_nsca
21
+ end
22
+ status
23
+ end
24
+
25
+ def warning(service, message = 'WARNING')
26
+ status = false
27
+ servers.each do |server|
28
+ message = Message.new(:warn, message, service, server)
29
+ notifier = Notifier.new(message)
30
+ status = true if notifier.send_nsca
31
+ end
32
+ status
33
+ end
34
+
35
+ def critical(service, message = 'CRITICAL')
36
+ status = false
37
+ servers.each do |server|
38
+ message = Message.new(:critical, message, service, server)
39
+ notifier = Notifier.new(message)
40
+ status = true if notifier.send_nsca
41
+ end
42
+ status
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,17 @@
1
+ require 'socket'
2
+
3
+ module NSCA
4
+ module Client
5
+ class Host
6
+ attr_reader :hostname
7
+
8
+ def initialize(options)
9
+ @hostname = options[:hostname]
10
+ end
11
+
12
+ def self.current
13
+ Host.new(:hostname => Socket.gethostname)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ module NSCA
2
+ module Client
3
+ class Message
4
+ CODE = { :ok => 0, :warn => 1, :critical => 2 }
5
+
6
+ attr_reader :return_code
7
+
8
+ def initialize(alert, status, service, remote_server)
9
+ @return_code = CODE[alert]
10
+ @status = status
11
+ @service = service
12
+ @remote_server = remote_server
13
+ end
14
+
15
+ def to_h
16
+ {
17
+ :nscahost => @remote_server.host,
18
+ :port => @remote_server.port,
19
+ :hostname => @service.host.hostname,
20
+ :service => @service.name,
21
+ :return_code => @return_code,
22
+ :status => @status
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ require 'send_nsca'
2
+
3
+ module NSCA
4
+ module Client
5
+ class Notifier
6
+ def initialize(message)
7
+ @message = message
8
+ end
9
+
10
+ def send_nsca
11
+ connection = SendNsca::NscaConnection.new(@message.to_h)
12
+ connection.send_nsca
13
+ true
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ module NSCA
2
+ module Client
3
+ class RemoteServer
4
+ attr_reader :host, :port
5
+
6
+ def initialize(options)
7
+ @host = options[:host]
8
+ @port = options[:port] || 5667
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module NSCA
2
+ module Client
3
+ class Service
4
+ attr_accessor :name, :host
5
+
6
+ def initialize(options)
7
+ @name = options[:name]
8
+ @host = options[:host] || Host.current
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,5 @@
1
+ module NSCA
2
+ module Client
3
+ VERSION = '0.1.0'
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "nsca/client/version"
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.authors = `git log --raw | grep Author: | awk -F ': | <|>' '{ print $2 }' | sort | uniq`.split("\n")
7
+ gem.email = `git log --raw | grep Author: | awk -F ': | <|>' '{ print $3 }' | sort | uniq`.split("\n")
8
+ gem.description = %q{Send passive notifications to Nagios Service Check Acceptor (NSCA).}
9
+ gem.summary = %q{NSCA Client}
10
+ gem.homepage = "https://github.com/felipecvo/nsca-client"
11
+
12
+ gem.files = `git ls-files`.split($\)
13
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
14
+ gem.test_files = gem.files.grep(%r{^spec/})
15
+ gem.name = "nsca-client"
16
+ gem.require_paths = ["lib"]
17
+ gem.version = NSCA::Client::VERSION
18
+
19
+ gem.add_dependency "send_nsca"
20
+
21
+ gem.add_development_dependency "rspec"
22
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client::Host do
4
+ subject { described_class.new(:hostname => 'dummy') }
5
+ its(:hostname) { should eq 'dummy' }
6
+
7
+ context "current machine" do
8
+ before { Socket.stub(:gethostname).and_return('dummy-client-machine') }
9
+ subject { described_class.current }
10
+ its(:hostname) { should eq 'dummy-client-machine' }
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client::Message do
4
+ let(:server) { NSCA::Client::RemoteServer.new(:host => '172.0.0.1') }
5
+ let(:host) { NSCA::Client::Host.new(:hostname => 'dummy') }
6
+ let(:service) { NSCA::Client::Service.new(:name => 'TestMessage', :host => host) }
7
+
8
+ subject { described_class.new(:ok, 'OK', service, server).to_h }
9
+
10
+ its([:nscahost]) { should eq '172.0.0.1' }
11
+ its([:port]) { should eq 5667 }
12
+ its([:hostname]) { should eq 'dummy' }
13
+ its([:service]) { should eq 'TestMessage' }
14
+ its([:return_code]) { should eq 0 }
15
+ its([:status]) { should eq 'OK' }
16
+
17
+ context "ok message" do
18
+ subject { described_class.new(:ok, 'OK', service, server) }
19
+ its(:return_code) { should eq 0 }
20
+ end
21
+
22
+ context "warn message" do
23
+ subject { described_class.new(:warn, 'WARN', service, server) }
24
+ its(:return_code) { should eq 1 }
25
+ end
26
+
27
+ context "critical message" do
28
+ subject { described_class.new(:critical, 'CRITICAL', service, server) }
29
+ its(:return_code) { should eq 2 }
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client::Notifier do
4
+ let(:server) { NSCA::Client::RemoteServer.new(:host => '172.0.0.1') }
5
+ let(:host) { NSCA::Client::Host.new(:hostname => 'dummy') }
6
+ let(:service) { NSCA::Client::Service.new(:name => 'TestMessage', :host => host) }
7
+ let(:message) { NSCA::Client::Message.new(:ok, 'OK', service, server) }
8
+
9
+ context "send message successfully" do
10
+ before do
11
+ SendNsca::NscaConnection.any_instance.should_receive(:send_nsca)
12
+ end
13
+
14
+ let(:notifier) { NSCA::Client::Notifier.new(message) }
15
+
16
+ subject { notifier.send_nsca }
17
+
18
+ it { should be_true }
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client::RemoteServer do
4
+ subject { described_class.new(:host => '172.0.0.1') }
5
+ its(:host) { should eq '172.0.0.1' }
6
+ its(:port) { should eq 5667 }
7
+
8
+ context "custom port" do
9
+ subject { described_class.new(:port => 12345) }
10
+ its(:port) { should eq 12345 }
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client::Service do
4
+ let(:host) { NSCA::Client::Host.new(:hostname => 'asdf') }
5
+ subject { described_class.new(:name => 'TestMessage', :host => host) }
6
+
7
+ its(:name) { should eq 'TestMessage' }
8
+ its(:host) { should eq host }
9
+
10
+ context "default host to current machine" do
11
+ subject { described_class.new(:name => 'SimpleMessage') }
12
+
13
+ its(:name) { should eq 'SimpleMessage' }
14
+ its(:host) { should be_a NSCA::Client::Host }
15
+ end
16
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe NSCA::Client do
4
+ let(:service) { NSCA::Client::Service.new(:name => 'TestMessage') }
5
+
6
+ before(:all) do
7
+ NSCA::Client.servers << NSCA::Client::RemoteServer.new(:host => '172.0.0.1')
8
+ end
9
+
10
+ before(:each) do
11
+ SendNsca::NscaConnection.any_instance.should_receive(:send_nsca)
12
+ end
13
+
14
+ context "normal service operation" do
15
+ it "should notify" do
16
+ NSCA::Client.ok(service).should be_true
17
+ end
18
+ end
19
+
20
+ context "unstable service operation" do
21
+ it "should notify" do
22
+ NSCA::Client.warning(service).should be_true
23
+ end
24
+ end
25
+
26
+ context "critical service state" do
27
+ it "should notify" do
28
+ NSCA::Client.critical(service).should be_true
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ require 'nsca/client'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ config.order = 'random'
9
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nsca-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Felipe Oliveira
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: send_nsca
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Send passive notifications to Nagios Service Check Acceptor (NSCA).
47
+ email:
48
+ - felipe.oliveira@abril.com.br
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - .rspec
55
+ - Gemfile
56
+ - README.md
57
+ - Rakefile
58
+ - lib/nsca/client.rb
59
+ - lib/nsca/client/host.rb
60
+ - lib/nsca/client/message.rb
61
+ - lib/nsca/client/notifier.rb
62
+ - lib/nsca/client/remote_server.rb
63
+ - lib/nsca/client/service.rb
64
+ - lib/nsca/client/version.rb
65
+ - nsca-client.gemspec
66
+ - spec/nsca/client/host_spec.rb
67
+ - spec/nsca/client/message_spec.rb
68
+ - spec/nsca/client/notifier_spec.rb
69
+ - spec/nsca/client/remote_server_spec.rb
70
+ - spec/nsca/client/service_spec.rb
71
+ - spec/nsca/client_spec.rb
72
+ - spec/spec_helper.rb
73
+ homepage: https://github.com/felipecvo/nsca-client
74
+ licenses: []
75
+ post_install_message:
76
+ rdoc_options: []
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 1.8.23
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: NSCA Client
97
+ test_files:
98
+ - spec/nsca/client/host_spec.rb
99
+ - spec/nsca/client/message_spec.rb
100
+ - spec/nsca/client/notifier_spec.rb
101
+ - spec/nsca/client/remote_server_spec.rb
102
+ - spec/nsca/client/service_spec.rb
103
+ - spec/nsca/client_spec.rb
104
+ - spec/spec_helper.rb