fuey_client 0.3.3 → 0.4.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 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