fuey_client 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c55f6018a4743c0a52159c75550ee8914c2b7bd7
4
- data.tar.gz: 3a564550ccb2bc25bd31e4791b2a886026e8bf52
3
+ metadata.gz: 9ea6c05fa6472914d543bc8917bab792ca343d36
4
+ data.tar.gz: 2dc00f23f8b70cd8bb574225abc16813603409fe
5
5
  SHA512:
6
- metadata.gz: ec669001542237b2969e4539e8c210d6a95f9dfed9cda8184a4ce64ef202388f805d0c45d651d2d714b5b3bb6f44903ef64547a53a83f84eb1004c87a8b10290
7
- data.tar.gz: 9ff5d687d0e7a2b30aeee93ca0a66499afd0c91e07dd98d81f9484e93f717e016af3cb1aebfdaede1b4506718289e260be839248cbfd17a8317fbab169e64295
6
+ metadata.gz: 05fcb0eb04ce69e477724a52f7850206ae98effd2c5d2d6b041d8bb57556d81c350b41ccf929fe70b719dde2c8155c91dbfe2ed0507e81a3faca122def3b5f86
7
+ data.tar.gz: 8553302abfd23b7deff1c7ab1379fb1612edfe06b2de6b0aca5be0bfb91e75549c66fc9b582b70d4b3c681908195db59bee9a44254a88f5d8b26c749f47682d5
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ gem "stately", :github => "mattsnyder/stately"
4
+
3
5
  # Specify your gem's dependencies in fuey_client.gemspec
4
6
  gemspec
5
7
 
data/Rakefile CHANGED
@@ -1,6 +1,47 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rubygems"
3
3
  require "rspec"
4
+ require 'pty'
5
+
6
+ def version
7
+ FueyClient::VERSION
8
+ end
9
+
10
+ def tag_name
11
+ "fuey_client-#{version}"
12
+ end
13
+
14
+ def tagged?
15
+ `git tag`.split.include?(tag_name)
16
+ end
17
+
18
+ def git_clean?
19
+ sh "git status | grep 'nothing to commit'", :verbose => false do |status|
20
+ return status
21
+ end
22
+ end
23
+
24
+ desc "Display the current version tag"
25
+ task :version do
26
+ puts tag_name
27
+ end
28
+
29
+ desc "Tag the current commit with #{tag_name}"
30
+ task :tag do
31
+ fail "Cannot tag, project directory is not clean" unless git_clean?
32
+ fail "Cannot tag, #{tag_name} already exists." if tagged?
33
+ sh "git tag #{tag_name}"
34
+ end
35
+
36
+ desc "Uninstall, build, and install new build locally"
37
+ task :update do
38
+ PTY.spawn("gem uninstall fuey_client") do | reader, writer |
39
+ writer.puts 'Y'
40
+ puts reader.gets
41
+ end
42
+ puts %x(gem build fuey_client.gemspec)
43
+ puts %x(gem install -l #{tag_name}.gem)
44
+ end
4
45
 
5
46
  task :default do
6
47
  if RUBY_VERSION < "1.9"
File without changes
@@ -0,0 +1,2 @@
1
+ host: 127.0.0.1
2
+ port: 6380
data/fuey_client.gemspec CHANGED
@@ -24,6 +24,8 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "configurethis", ">= 1.0.5"
25
25
  spec.add_dependency "net-ping", "~> 1.6"
26
26
  spec.add_dependency "activesupport", "3.0.0"
27
+ spec.add_dependency "redis"
28
+ # spec.add_dependency "stately", :github => "git@github.com:mattsnyder/stately.git"
27
29
  # spec.add_dependency "b2b2dot0-sapnwrfc", "~> 0.26" # https://github.com/piersharding/ruby-sapnwrfc
28
30
 
29
31
  spec.add_development_dependency "bundler", "~> 1.3"
@@ -1,8 +1,10 @@
1
- require "fuey_client/fuey/log"
2
1
  require "fuey_client/fuey/config"
2
+ require "fuey_client/fuey/log"
3
+ require "fuey_client/fuey/null_object"
3
4
  require "fuey_client/fuey/trace"
4
5
  require "fuey_client/fuey/inspections"
5
- require "net/ping"
6
+ require "fuey_client/fuey/reporters"
7
+
6
8
  require "active_support"
7
9
 
8
10
  module Fuey
@@ -10,12 +12,17 @@ module Fuey
10
12
  def initialize(path_to_config_dir="", notifications=nil)
11
13
  Configurethis.root_path = path_to_config_dir
12
14
 
13
- notifications = Config.notifications if notifications.nil?
15
+ notifications = Config::Fuey.notifications if notifications.nil?
14
16
  setup_notifications notifications
15
17
  end
16
18
 
19
+ def reporter
20
+ @_reporter ||= Reporters::Redis.new
21
+ end
22
+
17
23
  def run
18
24
  Trace.all.each do |trace|
25
+ trace.add_observer reporter
19
26
  output = trace.run
20
27
  Log.write %([#{trace.name}] #{output})
21
28
  end
@@ -0,0 +1,9 @@
1
+ require 'configurethis'
2
+
3
+ module Fuey
4
+ module Config
5
+ class Fuey
6
+ extend Configurethis
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'configurethis'
2
+
3
+ module Fuey
4
+ module Config
5
+ class Redis
6
+ extend Configurethis
7
+ end
8
+ end
9
+ end
@@ -1,7 +1,2 @@
1
- require 'configurethis'
2
-
3
- module Fuey
4
- class Config
5
- extend Configurethis
6
- end
7
- end
1
+ require "fuey_client/fuey/config/fuey"
2
+ require "fuey_client/fuey/config/redis"
@@ -0,0 +1,50 @@
1
+ require "observer"
2
+ require "stately"
3
+ require "fuey_client/fuey/model_initializer"
4
+
5
+ module Fuey
6
+ module Inspections
7
+ class Inspection
8
+ include ModelInitializer
9
+ include Observable
10
+
11
+ attr_accessor :name, :state
12
+
13
+ stately :start => :pending, :attr => :state do
14
+ state :executed, :action => :execute do
15
+ before_transition :do => :notify
16
+ after_transition :do => :notify
17
+ after_transition :do => :_execute
18
+ end
19
+ state :passed, :action => :pass do
20
+ after_transition :do => :notify
21
+ end
22
+ state :failed, :action => :fail do
23
+ after_transition :do => :notify
24
+ end
25
+ end
26
+
27
+ def passed?
28
+ state == 'passed'
29
+ end
30
+
31
+ def failed?
32
+ state == 'failed'
33
+ end
34
+
35
+ def notify
36
+ changed
37
+ notify_observers status
38
+ end
39
+
40
+ def status
41
+ {
42
+ :type => self.class.to_s.split('::').last,
43
+ :name => name,
44
+ :status => self.state
45
+ }
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -1,22 +1,29 @@
1
1
  require "net/ping"
2
- require "fuey_client/fuey/model_initializer"
3
2
 
4
3
  module Fuey
5
4
  module Inspections
6
- class Ping
7
- include ModelInitializer
5
+ class Ping < Fuey::Inspections::Inspection
6
+ attr_accessor :host, :result
8
7
 
9
- attr_accessor :host, :name
10
-
11
- def execute
8
+ def _execute
12
9
  result = Net::Ping::External.new(@host).ping
13
- Log.write "[#{@name}] Pinging #{@host} #{result ? 'succeeded' : 'failed'}."
14
- result
10
+ if result
11
+ self.pass
12
+ else
13
+ self.fail
14
+ end
15
15
  end
16
16
 
17
17
  def to_s
18
18
  %(Ping #{name} #{host})
19
19
  end
20
+
21
+ def status
22
+ {
23
+ :settings => host || "",
24
+ :statusMessage => %(#{state} ping for #{host}),
25
+ }.merge(super)
26
+ end
20
27
  end
21
28
  end
22
29
  end
@@ -1,21 +1,30 @@
1
1
  require "fuey_client/fuey/inspections/support/sap"
2
- require "fuey_client/fuey/model_initializer"
3
2
 
4
3
  module Fuey
5
4
  module Inspections
6
- class RFCPing
7
- include ModelInitializer
5
+ class RFCPing < Fuey::Inspections::Inspection
6
+ attr_accessor :ashost, :sysnr, :client, :user, :passwd, :lang, :response
8
7
 
9
- attr_accessor :name, :ashost, :sysnr, :client, :user, :passwd, :lang
10
-
11
- def execute
12
- Support::SAP.new(config).ping
8
+ def _execute
9
+ result, response = Support::SAP.new(config).ping
10
+ if result
11
+ self.pass
12
+ else
13
+ self.fail
14
+ end
13
15
  end
14
16
 
15
17
  def to_s
16
18
  %(RFC Ping #{ashost} with user #{user})
17
19
  end
18
20
 
21
+ def status
22
+ {
23
+ :settings => config.reject{|k,v| k == 'passwd'},
24
+ :statusMessage => response || %(#{state} RFCPing for #{ashost})
25
+ }.merge(super)
26
+ end
27
+
19
28
  def config
20
29
  {
21
30
  'ashost' => ashost,
@@ -1,24 +1,37 @@
1
1
  require "fuey_client/fuey/inspections/support/shell_command"
2
- require "fuey_client/fuey/model_initializer"
3
2
 
4
3
  module Fuey
5
4
  module Inspections
6
- class SNMPWalk
7
- include ModelInitializer
8
-
9
- attr_accessor :name, :ip, :agent, :oid, :version, :community
5
+ class SNMPWalk < Fuey::Inspections::Inspection
6
+ attr_accessor :ip, :agent, :oid, :version, :community, :response
10
7
 
11
8
  def initialize(args)
12
9
  super(args)
13
10
  @version ||= "v1"
14
11
  @community ||= "public"
12
+ @status_message = ""
13
+ end
14
+
15
+ def _execute
16
+ response = Support::ShellCommand.new(snmp_walk_command).execute
17
+ result = (response =~ /#{ip}/)
18
+ if result
19
+ self.pass
20
+ else
21
+ self.fail
22
+ end
23
+ end
24
+
25
+ def status_message
26
+ return %(#{state} #{snmp_walk_command}) if response.nil?
27
+ %(SNMPWalk #{state}. #{response})
15
28
  end
16
29
 
17
- def execute
18
- result = Support::ShellCommand.new(snmp_walk_command).execute
19
- result = result =~ /#{@ip}/
20
- Log.write %([#{@name}] SNMPWalk for #{@ip} using #{@agent} #{result ? "succeeded" : "failed" }.)
21
- result
30
+ def status
31
+ {
32
+ :settings => snmp_walk_command,
33
+ :statusMessage => status_message
34
+ }.merge(super)
22
35
  end
23
36
 
24
37
  def to_s
@@ -13,14 +13,12 @@ module Fuey
13
13
  attrib = conn.connection_attributes
14
14
  fld = conn.discover("RFC_PING")
15
15
  fl = fld.new_function_call
16
- fl.invoke
17
- true
16
+ response = fl.invoke
17
+ [true, response]
18
18
  rescue Gem::LoadError
19
- Log.write %(Could not ping SAP instance. The sapnwrfc gem is not installed)
20
- false
19
+ return [false, %(Could not RFC Ping because the sapnwrfc gem is not available)]
21
20
  rescue Exception => caught
22
- Log.write %(RFC Ping for #{@config['ashost']} failed due to #{caught})
23
- return false
21
+ return [false, caught]
24
22
  ensure
25
23
  conn.close unless conn.nil?
26
24
  end
@@ -1,3 +1,4 @@
1
+ require "fuey_client/fuey/inspections/inspection"
1
2
  require "fuey_client/fuey/inspections/ping"
2
3
  require "fuey_client/fuey/inspections/rfc_ping"
3
4
  require "fuey_client/fuey/inspections/snmp_walk"
@@ -1,10 +1,10 @@
1
- require "fuey_client/fuey/config"
1
+ require "fuey_client/fuey/config/fuey"
2
2
  require 'logger'
3
3
 
4
4
  module Fuey
5
5
  class Log
6
6
  def self.write(message)
7
- logger.info "[#{Config.title}] #{message}"
7
+ logger.info "[#{Config::Fuey.title}] #{message}"
8
8
  end
9
9
 
10
10
  # Handles ActiveSupport::Notifications
@@ -13,7 +13,7 @@ module Fuey
13
13
  end
14
14
 
15
15
  def self.logger
16
- @@logger ||= Logger.new Config.logfile, 'daily'
16
+ @@logger ||= Logger.new Config::Fuey.logfile, 'daily'
17
17
  end
18
18
  private_class_method :logger
19
19
  end
@@ -0,0 +1,11 @@
1
+ class NullObject
2
+ def initialize
3
+ @origin = caller.first ### SETS ORIGIN FOR INSPECT INFO
4
+ end
5
+
6
+ def method_missing(*args, &block)
7
+ self
8
+ end
9
+
10
+ def nil?; true; end
11
+ end
@@ -0,0 +1,20 @@
1
+
2
+ require "redis"
3
+ require "json"
4
+
5
+ module Fuey
6
+ module Reporters
7
+ class Redis
8
+ def redis
9
+ @@redis ||= ::Redis.new(
10
+ :host => Config::Redis.host,
11
+ :port => Config::Redis.port )
12
+ end
13
+
14
+ # Handles update from observable
15
+ def update(channel, message)
16
+ redis.publish channel, message.to_json
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1 @@
1
+ require "fuey_client/fuey/reporters/redis"
@@ -1,9 +1,11 @@
1
1
  require "fuey_client/fuey/model_initializer"
2
2
  require "active_support"
3
+ require "observer"
3
4
 
4
5
  module Fuey
5
6
  class Trace
6
7
  include ModelInitializer
8
+ include Observable
7
9
 
8
10
  attr_accessor :name, :steps
9
11
 
@@ -13,11 +15,13 @@ module Fuey
13
15
  end
14
16
 
15
17
  def self.all
16
- Config.traces.keys.map do |trace_name|
18
+ Config::Fuey.traces.keys.map do |trace_name|
17
19
  trace = Trace.new :name => trace_name
18
- Config.traces.send(trace_name).each do |step|
19
- inspection = ActiveSupport::Inflector.constantize %(Fuey::Inspections::#{step.keys.first})
20
- trace.steps.push inspection.new(step.values.first)
20
+ Config::Fuey.traces.send(trace_name).each do |step|
21
+ inspection_class = ActiveSupport::Inflector.constantize %(Fuey::Inspections::#{step.keys.first})
22
+ inspection = inspection_class.new(step.values.first)
23
+ inspection.add_observer(trace)
24
+ trace.steps.push inspection
21
25
  end
22
26
  trace
23
27
  end
@@ -27,14 +31,37 @@ module Fuey
27
31
  %(#{name}: [#{steps.join(', ')}])
28
32
  end
29
33
 
34
+ # Handle updates from inpsections via observation
35
+ def update(status)
36
+ changed
37
+ notify_observers(
38
+ "fuey.trace.update",
39
+ {
40
+ :name => name,
41
+ :status => status[:status],
42
+ :statusMessage => status[:statusMessage],
43
+ :steps => [ status ]
44
+ })
45
+ end
46
+
30
47
  def run
48
+ changed
49
+ notify_observers(
50
+ "fuey.trace.new",
51
+ {
52
+ :name => name,
53
+ :status => "executed",
54
+ :statusMessage => "",
55
+ :steps => steps.map(&:status)
56
+ }
57
+ )
31
58
  ActiveSupport::Notifications.instrument("run.trace", {:trace => self.to_s}) do
32
59
  run, failed, current = 0, 0, ""
33
60
  steps.each do |step|
34
61
  run += 1
35
62
  current = step.name
36
- if step.execute
37
- else
63
+ step.execute
64
+ if step.failed?
38
65
  failed += 1
39
66
  break
40
67
  end
@@ -1,3 +1,3 @@
1
1
  module FueyClient
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe Fuey::Client do
4
- after(:each) { Fuey::Config.reload_configuration }
4
+ after(:each) { Fuey::Config::Fuey.reload_configuration }
5
5
 
6
6
  describe "#initialize" do
7
7
  context "passing a configuration path" do
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Fuey::Inspections::Inspection do
4
+
5
+ describe "observing an inspection" do
6
+
7
+ class TestInspection < Fuey::Inspections::Inspection
8
+ def _execute
9
+ self.pass
10
+ end
11
+ end
12
+ Given(:inspection) { TestInspection.new({ :name => 'Example' }) }
13
+ Given(:subscriber) { double "Observer" }
14
+
15
+ describe "and it's initial state" do
16
+ Then { expect( inspection.state ).to eql('pending') }
17
+ end
18
+
19
+ describe "while executing" do
20
+ Given { subscriber.
21
+ should_receive(:update).
22
+ with({
23
+ :type => 'TestInspection',
24
+ :name => 'Example',
25
+ :status => 'pending'
26
+ }) }
27
+ Given { subscriber.
28
+ should_receive(:update).
29
+ with({
30
+ :type => 'TestInspection',
31
+ :name => 'Example',
32
+ :status => 'executed'
33
+ }) }
34
+ Given { subscriber.
35
+ should_receive(:update).
36
+ with({
37
+ :type => 'TestInspection',
38
+ :name => 'Example',
39
+ :status => 'passed'
40
+ }) }
41
+ Given { inspection.add_observer subscriber }
42
+ When { inspection.execute }
43
+ Then { expect( inspection ).to have_passed }
44
+ end
45
+ end
46
+
47
+ describe "inspecting state" do
48
+ Given (:inspection) { Fuey::Inspections::Inspection.new }
49
+
50
+ context "when the inspection passes" do
51
+ When { inspection.pass }
52
+ Then { expect( inspection ).to be_passed }
53
+ end
54
+
55
+ context "when the inspection fails" do
56
+ When { inspection.fail }
57
+ Then { expect( inspection ).to be_failed }
58
+ end
59
+ end
60
+ end
@@ -5,17 +5,17 @@ describe Fuey::Inspections::Ping do
5
5
 
6
6
  describe "#execute" do
7
7
  context "when the ping fails" do
8
- Given { Fuey::Log.should_receive(:write).with("[some-server] Pinging 172.0.0.1 failed.") }
9
8
  Given { Net::Ping::External.stub(:new).with("172.0.0.1").and_return double("ping", :ping => false) }
10
- When (:result){ Fuey::Inspections::Ping.new(:name => 'some-server', :host => '172.0.0.1').execute }
11
- Then { expect( result ).to eql(false) }
9
+ Given (:ping) { Fuey::Inspections::Ping.new(:name => 'some-server', :host => '172.0.0.1') }
10
+ When { ping.execute }
11
+ Then { expect( ping ).to have_aborted }
12
12
  end
13
13
 
14
14
  context "when the ping succeeds" do
15
- Given { Fuey::Log.should_receive(:write).with("[some-server] Pinging 172.0.0.1 succeeded.") }
16
15
  Given { Net::Ping::External.stub(:new).with("172.0.0.1").and_return double("ping", :ping => true) }
17
- When (:result){ Fuey::Inspections::Ping.new(:name => 'some-server', :host => '172.0.0.1').execute }
18
- Then { expect( result ).to eql(true) }
16
+ Given (:ping) { Fuey::Inspections::Ping.new(:name => 'some-server', :host => '172.0.0.1') }
17
+ When { ping.execute }
18
+ Then { expect( ping ).to have_passed }
19
19
  end
20
20
  end
21
21
  end
@@ -15,20 +15,23 @@ describe Fuey::Inspections::RFCPing do
15
15
  }
16
16
  Given (:rfc_ping) { Fuey::Inspections::RFCPing.new config }
17
17
 
18
+ describe "status" do
19
+ Then { expect( rfc_ping.status[:settings] ).to_not include('passwd') }
20
+ end
18
21
 
19
22
  context "when the ping fails" do
20
23
  Given (:conn) { double Fuey::Inspections::Support::SAP }
21
24
  Given { Fuey::Inspections::Support::SAP.should_receive(:new).with(config).and_return(conn) }
22
- Given { conn.stub(:ping).and_return(false) }
23
- When (:result) { rfc_ping.execute }
24
- Then { expect( result ).to be_false }
25
+ Given { conn.stub(:ping).and_return([false, "RFC Ping failure msg"]) }
26
+ When { rfc_ping.execute }
27
+ Then { expect( rfc_ping ).to have_aborted }
25
28
  end
26
29
 
27
30
  context "when the ping succeeds" do
28
31
  Given (:conn) { double Fuey::Inspections::Support::SAP }
29
32
  Given { Fuey::Inspections::Support::SAP.should_receive(:new).with(config).and_return(conn) }
30
- Given { conn.stub(:ping).and_return(true) }
31
- When (:result) { rfc_ping.execute }
32
- Then { expect( result ).to be_true }
33
+ Given { conn.stub(:ping).and_return([true, ""]) }
34
+ When { rfc_ping.execute }
35
+ Then { expect( rfc_ping ).to have_passed }
33
36
  end
34
37
  end
@@ -19,26 +19,26 @@ describe Fuey::Inspections::SNMPWalk do
19
19
 
20
20
  context "when the walk fails" do
21
21
  Given (:ip) { '172.0.0.1' }
22
- Given { Fuey::Log.should_receive(:write).with("[some-tunnel] SNMPWalk for 172.0.0.1 using 172.16.0.100 failed.") }
23
22
  Given { Fuey::Inspections::Support::ShellCommand.stub(:new).with("snmpwalk -v1 -c public 172.16.0.100 1.2.9.2.5.3.5.7.111.0.2.0.1.0").and_return double("ShellCommand", :execute => walk_result) }
24
- When (:result) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid).execute }
25
- Then { expect( result ).to be_false }
23
+ Given (:snmpwalk) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid) }
24
+ When { snmpwalk.execute }
25
+ Then { expect( snmpwalk ).to have_aborted }
26
26
  end
27
27
 
28
28
  context "when the walk succeeds" do
29
29
  Given (:ip) { '121.48.196.13' }
30
- Given { Fuey::Log.should_receive(:write).with("[some-tunnel] SNMPWalk for 121.48.196.13 using 172.16.0.100 succeeded.") }
31
30
  Given { Fuey::Inspections::Support::ShellCommand.stub(:new).with("snmpwalk -v1 -c public 172.16.0.100 1.2.9.2.5.3.5.7.111.0.2.0.1.0").and_return double("ShellCommand", :execute => walk_result) }
32
- When (:result) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid).execute }
33
- Then { expect( result ).to be_true }
31
+ Given (:snmpwalk) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid) }
32
+ When { snmpwalk.execute }
33
+ Then { expect( snmpwalk ).to have_passed }
34
34
  end
35
35
 
36
36
  context "when the walk specifies the version and community" do
37
37
  Given (:ip) { '81.197.184.129' }
38
- Given { Fuey::Log.should_receive(:write).with("[some-tunnel] SNMPWalk for 81.197.184.129 using 172.16.0.100 succeeded.") }
39
38
  Given { Fuey::Inspections::Support::ShellCommand.stub(:new).with("snmpwalk -v3 -c private 172.16.0.100 1.2.9.2.5.3.5.7.111.0.2.0.1.0").and_return double("ShellCommand", :execute => walk_result) }
40
- When (:result) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid, :version => 'v3', :community => 'private').execute }
41
- Then { expect( result ).to be_true }
39
+ Given (:snmpwalk) { Fuey::Inspections::SNMPWalk.new(:name => name, :ip => ip, :agent => agent, :oid => oid, :version => 'v3', :community => 'private') }
40
+ When { snmpwalk.execute }
41
+ Then { expect( snmpwalk ).to have_passed }
42
42
  end
43
43
  end
44
44
 
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fuey::Trace do
4
- after(:each) { Fuey::Config.reload_configuration }
4
+ after(:each) { Fuey::Config::Fuey.reload_configuration }
5
5
 
6
6
  describe "retrieving all configured traces" do
7
7
  context "when configured for no traces" do
8
- Given { Fuey::Config.test_with(no_traces) }
8
+ Given { Fuey::Config::Fuey.test_with(no_traces) }
9
9
  When (:result) { Fuey::Trace.all }
10
10
  Then { expect( result ).to be_empty }
11
11
  end
12
12
 
13
13
  context "when configured with one trace" do
14
- Given { Fuey::Config.test_with(two_pings) }
14
+ Given { Fuey::Config::Fuey.test_with(two_pings) }
15
15
  When (:result) { Fuey::Trace.all }
16
16
  Then { expect( result ).to have(1).items }
17
17
  And { expect( result.first ).to be_a(Fuey::Trace) }
@@ -23,16 +23,16 @@ describe Fuey::Trace do
23
23
 
24
24
  describe "running a trace" do
25
25
  context "when the first step fails" do
26
- Given (:step1) { double(Fuey::Inspections::Ping, :name => "step1", :execute => false) }
27
- Given (:step2) { double(Fuey::Inspections::Ping) }
26
+ Given (:step1) { double(Fuey::Inspections::Ping, :name => "step1", :execute => nil, :failed? => true, :status => {}) }
27
+ Given (:step2) { double(Fuey::Inspections::Ping, :status => {}) }
28
28
  Given { step2.should_not_receive(:execute) }
29
29
  When (:result) { Fuey::Trace.new(:name => "trace1", :steps => [step1, step2]).run }
30
30
  Then { expect( result ).to eql(%[trace1 failed on step1. 2 steps, 1 executed, 1 failed.]) }
31
31
  end
32
32
 
33
33
  context "when all steps pass" do
34
- Given (:step1) { double(Fuey::Inspections::Ping, :name => "step1", :execute => true) }
35
- Given (:step2) { double(Fuey::Inspections::Ping, :name => "step2", :execute => true) }
34
+ Given (:step1) { double(Fuey::Inspections::Ping, :name => "step1", :execute => nil, :failed? => false, :status => {}) }
35
+ Given (:step2) { double(Fuey::Inspections::Ping, :name => "step2", :execute => nil, :failed? => false, :status => {}) }
36
36
  When (:result) { Fuey::Trace.new(:name => "trace1", :steps => [step1, step2]).run }
37
37
  Then { expect( result ).to eql(%[trace1 passed. 2 steps, 2 executed, 0 failed.]) }
38
38
  end
@@ -11,4 +11,18 @@ shared_examples "an inspection" do
11
11
  When (:inspection) { described_class.new({:name => 'hong kong fuey'} ) }
12
12
  Then { expect( inspection.name ).to eql('hong kong fuey') }
13
13
  end
14
+
15
+ describe "should be able to produce a status represented in json" do
16
+ Then { expect( described_class.new({}) ).to respond_to(:status) }
17
+
18
+ describe "and have specific pieces of information" do
19
+ When (:status) { described_class.new({:name => 'descriptive'}).status }
20
+ Then { expect( status[:type] ).to eql(described_class.to_s.split('::').last) }
21
+ And { expect( status[:name] ).to eql('descriptive') }
22
+ And { expect( status[:settings] ).to_not be_nil }
23
+ And { expect( status[:status] ).to eql("pending") }
24
+ And { expect( status[:statusMessage] ).to_not be_nil }
25
+ end
26
+
27
+ end
14
28
  end
@@ -0,0 +1,35 @@
1
+ RSpec::Matchers.define :have_passed do
2
+ match do |actual|
3
+ actual.state == "passed"
4
+ end
5
+
6
+ failure_message_for_should do
7
+ "have passed, but was #{actual.state}"
8
+ end
9
+
10
+ failure_message_for_should_not do
11
+ "not have passed, but did"
12
+ end
13
+
14
+ description do
15
+ "should have passed"
16
+ end
17
+ end
18
+
19
+ RSpec::Matchers.define :have_aborted do
20
+ match do |actual|
21
+ actual.state == "failed"
22
+ end
23
+
24
+ failure_message_for_should do
25
+ "have failed, but was #{actual.state}"
26
+ end
27
+
28
+ failure_message_for_should_not do
29
+ "not have failed, but did"
30
+ end
31
+
32
+ description do
33
+ "should have failed"
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fuey_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Snyder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-19 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: configurethis
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: redis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -98,12 +112,16 @@ files:
98
112
  - README.md
99
113
  - Rakefile
100
114
  - bin/fuey
101
- - config_example/fuey/config.yml
115
+ - config_example/fuey/config/fuey.yml
116
+ - config_example/fuey/config/redis.yml
102
117
  - fuey_client.gemspec
103
118
  - lib/fuey_client.rb
104
119
  - lib/fuey_client/fuey/client.rb
105
120
  - lib/fuey_client/fuey/config.rb
121
+ - lib/fuey_client/fuey/config/fuey.rb
122
+ - lib/fuey_client/fuey/config/redis.rb
106
123
  - lib/fuey_client/fuey/inspections.rb
124
+ - lib/fuey_client/fuey/inspections/inspection.rb
107
125
  - lib/fuey_client/fuey/inspections/ping.rb
108
126
  - lib/fuey_client/fuey/inspections/rfc_ping.rb
109
127
  - lib/fuey_client/fuey/inspections/snmp_walk.rb
@@ -111,15 +129,20 @@ files:
111
129
  - lib/fuey_client/fuey/inspections/support/shell_command.rb
112
130
  - lib/fuey_client/fuey/log.rb
113
131
  - lib/fuey_client/fuey/model_initializer.rb
132
+ - lib/fuey_client/fuey/null_object.rb
133
+ - lib/fuey_client/fuey/reporters.rb
134
+ - lib/fuey_client/fuey/reporters/redis.rb
114
135
  - lib/fuey_client/fuey/trace.rb
115
136
  - lib/fuey_client/version.rb
116
137
  - spec/fuey_client/fuey/#trace_spec.rb#
117
138
  - spec/fuey_client/fuey/client_spec.rb
139
+ - spec/fuey_client/fuey/inspections/inspection_spec.rb
118
140
  - spec/fuey_client/fuey/inspections/ping_spec.rb
119
141
  - spec/fuey_client/fuey/inspections/rfc_ping_spec.rb
120
142
  - spec/fuey_client/fuey/inspections/snmpwalk_spec.rb
121
143
  - spec/fuey_client/fuey/trace_spec.rb
122
144
  - spec/matchers/inspection_shared_examples.rb
145
+ - spec/matchers/pass_fail.rb
123
146
  - spec/spec_helper.rb
124
147
  - vendor/gems/b2b2dot0-sapnwrfc-0.26-x86_64-darwin-12.gem
125
148
  homepage: http://github.com/b2b2dot0/fuey_client
@@ -151,9 +174,11 @@ summary: Client for inspecting server state and reports it back to Fuey. Require
151
174
  test_files:
152
175
  - spec/fuey_client/fuey/#trace_spec.rb#
153
176
  - spec/fuey_client/fuey/client_spec.rb
177
+ - spec/fuey_client/fuey/inspections/inspection_spec.rb
154
178
  - spec/fuey_client/fuey/inspections/ping_spec.rb
155
179
  - spec/fuey_client/fuey/inspections/rfc_ping_spec.rb
156
180
  - spec/fuey_client/fuey/inspections/snmpwalk_spec.rb
157
181
  - spec/fuey_client/fuey/trace_spec.rb
158
182
  - spec/matchers/inspection_shared_examples.rb
183
+ - spec/matchers/pass_fail.rb
159
184
  - spec/spec_helper.rb