flying 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ script: bundle exec rspec spec
@@ -12,10 +12,10 @@ Create a Ruby file anywhere with the following content:
12
12
  # flying.rb
13
13
  require "flying"
14
14
 
15
- Flying.start do
16
- site "http://www.google.com"
17
- site "http://www.nytimes.com"
18
- end
15
+ site "http://www.google.com"
16
+ site "http://www.nytimes.com"
17
+
18
+ start # starts monitoring
19
19
  ```
20
20
 
21
21
  Now, just run in your terminal:
@@ -31,32 +31,32 @@ We want to be able to use the following DSL:
31
31
  ```ruby
32
32
  require "flying"
33
33
 
34
- Flying.start do
35
- # Defines the interval between verifications
36
- timer 1
34
+ # Defines the interval between verifications
35
+ timer 1
36
+
37
+ # Send an email if any error occured
38
+ notify_me :email => "email@gmail.com"
37
39
 
38
- # Send an email if any error occured
39
- notify_me :email => "email@gmail.com"
40
+ # When an error happens, monitoring stops. :on_error_continue
41
+ # makes Flying ignore the error and continue monitoring.
42
+ site "http://www.google.com", :as => :google, :on_error => :continue
40
43
 
41
- # When an error happens, monitoring stops. :on_error_continue
42
- # makes Flying ignore the error and continue monitoring.
43
- site "http://www.google.com", :as => :google, :on_error_continue
44
+ # If :google is down (above, :as => :google), Flying will notify the related services,
45
+ # e.g. 'www.mysite.com is probably not working properly because :google is offline'
46
+ site "http://www.mysite.com", :depends_on => :google
44
47
 
45
- # If :google is down (above, :as => :google), Flying will notify the related services,
46
- # e.g. 'www.mysite.com is probably not working properly because :google is offline'
47
- site "http://www.mysite.com", :depends_on => :google
48
+ # Besides checking site availability, makes sure the response.body is a valid XML,
49
+ # ideal for making sure 3rd-party webservices are working.
50
+ site "http://www.fedex.com/webservice", :format => :xml
48
51
 
49
- # Besides checking site availability, makes sure the response.body is a valid XML,
50
- # ideal for making sure 3rd-party webservices are working.
51
- site "http://www.fedex.com/webservice", :format => :xml
52
+ # Logs to the server via SSH, goes to a Rails app directory and do the following:
53
+ #
54
+ # - Reads production.log file and checks if any error happened (e.g. Errno... )
55
+ # - Looks for config/database.yml and tries connecting to all possible DBs, except
56
+ # 'development' and 'test'
57
+ rails_app "ssh://kurko@google.com", :path => "/var/rails/google"
52
58
 
53
- # Logs to the server via SSH, goes to a Rails app directory and do the following:
54
- #
55
- # - Reads production.log file and checks if any error happened (e.g. Errno... )
56
- # - Looks for config/database.yml and tries connecting to all possible DBs, except
57
- # 'development' and 'test'
58
- rails_app "ssh://kurko@google.com", :path => "/var/rails/google"
59
- end
59
+ start
60
60
  ```
61
61
 
62
62
  ###License
@@ -1,7 +1,10 @@
1
1
  module Kernel
2
2
  def site(referer, *options)
3
- process = Flying::Bot::Up.new
4
- assessment = process.assess(referer, options)
5
- puts process.message unless assessment
3
+ bot = Flying::Bot::Up.new(referer, options)
4
+ Flying.add_bot(bot)
5
+ end
6
+
7
+ def start
8
+ Flying.start
6
9
  end
7
10
  end
@@ -3,27 +3,57 @@ require "net/http"
3
3
  module Flying
4
4
  module Bot
5
5
  class Up
6
- attr_reader :message
7
-
8
- def initialize
6
+ attr_reader :message, :error, :referer
7
+ #
8
+ # => Name
9
+ #
10
+ # How a service is known. Useful reusing and setting dependencies.
11
+ #
12
+ # e.g. `site "etc.com", :as => :google`
13
+ # name is :google.
14
+ #
15
+ # => Dependency
16
+ #
17
+ # When a service depends on another, it has dependencies. This is
18
+ # an array with the Name of each service.
19
+ #
20
+ attr_accessor :name, :dependency
21
+
22
+ def initialize(referer, options = {})
23
+ @referer = referer
24
+ @options = options
9
25
  @message = "Ok."
26
+ @error = false
27
+ @name = options[:as] if options.include?(:as)
28
+ @dependency = []
29
+
30
+ # Dependency can be one or an array of symbols, whereas @dependency
31
+ # must be only a flat array
32
+ if options.include?(:depends_on)
33
+ @dependency << options[:depends_on] if options[:depends_on].kind_of? Symbol
34
+ @dependency = options[:depends_on] if options[:depends_on].kind_of? Array
35
+ end
10
36
  end
11
37
 
12
- def assess(referer, *options)
38
+ # Starts assessment of the current service using variables set during
39
+ # initialization
40
+ def assess
41
+ @error = false
13
42
  begin
14
- response_code = get_http_response_code(referer)
43
+ response_code = get_http_response_code(@referer)
15
44
  rescue
16
45
  Flying.an_error_ocurred(true)
17
- set_error_message(referer, false, $!)
46
+ set_error_message(@referer, false, $!)
18
47
  return false
19
48
  end
20
49
  return true if ["200", "302"].include? response_code
21
50
  Flying.an_error_ocurred(true)
22
- set_error_message(referer, response_code.to_s)
51
+ set_error_message(@referer, response_code.to_s)
23
52
  false
24
53
  end
25
54
 
26
55
  def set_error_message(referer, response_code, error_details = '')
56
+ @error = true
27
57
  case response_code
28
58
  when false
29
59
  @message = message_unreachable
@@ -34,7 +64,7 @@ module Flying
34
64
  else
35
65
  @message = message_unknown_error + "(#{error_details})"
36
66
  end
37
- @message = referer + ": " + @message
67
+ @message = "\e[31m" + referer + ": " + @message + "\e[0m"
38
68
  end
39
69
 
40
70
  def get_http_response_code referer
@@ -0,0 +1,49 @@
1
+ # This class instance holds the current monitoring.
2
+ module Flying
3
+ class Monitor
4
+
5
+ def initialize
6
+ # This is where each bot instance is saved.
7
+ @bots = []
8
+ @an_error_ocurred = false
9
+ @first_attempt = true
10
+ @total_attempts = 0
11
+ end
12
+
13
+ def add_bot(bot)
14
+ @bots << bot
15
+ end
16
+
17
+ # Loops through each bot, making them perform verifications
18
+ def perform
19
+ puts "Running..."
20
+ looping = true
21
+
22
+ while(looping) do
23
+ @bots.each { |bot|
24
+ has_error = bot.error
25
+ assessment = bot.assess
26
+ if has_error == false && assessment == false
27
+ @an_error_ocurred = true
28
+ puts bot.message
29
+ elsif has_error && assessment
30
+ puts "\e[32m" + bot.referer + " is back online." + "\e[0m"
31
+ end
32
+ }
33
+ if @first_attempt
34
+ if @an_error_ocurred
35
+ puts "Some services are down. I'll continue monitoring the targets anyway."
36
+ else
37
+ puts "Everything's working fine. I'll continue monitoring the targets."
38
+ end
39
+
40
+ @first_attempt = false
41
+ end
42
+ @total_attempts += 1
43
+ sleep(5)
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
@@ -1,3 +1,3 @@
1
1
  module Flying
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe Flying::Bot::Up do
4
+ context "initializing" do
5
+ it "sets an alias" do
6
+ bot = Flying::Bot::Up.new("http://www.google.com", :as => :google)
7
+ bot.name.should == :google
8
+ end
9
+
10
+ it "has a service as dependency" do
11
+ bot = Flying::Bot::Up.new("http://www.google.com", :depends_on => :google)
12
+ bot.dependency.should include(:google)
13
+
14
+ bot = Flying::Bot::Up.new("http://www.google.com", :depends_on => [:google, :fedex] )
15
+ bot.dependency.should include(:google)
16
+ bot.dependency.should include(:fedex)
17
+ end
18
+ end
19
+
20
+ context "assessing" do
21
+ subject { Flying::Bot::Up.new("http://www.google.com") }
22
+
23
+ it "checks if site is up" do
24
+ subject.stub(:get_http_response_code).and_return("302")
25
+ subject.assess.should be_true
26
+ end
27
+
28
+ it "returns false if 404 and saves a message" do
29
+ subject.stub(:get_http_response_code).and_return("404")
30
+ subject.assess.should be_false
31
+ subject.message.should =~ /google\.com.*target was simply not found \(404\)/
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Flying do
4
+ context "regarding errors" do
5
+ subject { Flying::Bot::Up.new("http://www.google.com") }
6
+
7
+ it "no error happened" do
8
+ subject.stub(:get_http_response_code).and_return("302")
9
+ subject.assess.should be_true
10
+ subject.error.should be_false
11
+ end
12
+ end
13
+ end
@@ -1 +1,4 @@
1
- require File.expand_path("../../lib/flying.rb", __FILE__)
1
+ require File.expand_path("../../lib/flying.rb", __FILE__)
2
+
3
+ RSpec.configure do |c|
4
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flying
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-26 00:00:00.000000000 Z
12
+ date: 2011-11-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70101949261140 !ruby/object:Gem::Requirement
16
+ requirement: &70171055504220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70101949261140
24
+ version_requirements: *70171055504220
25
25
  description: Verifies if each given server is not down.
26
26
  email:
27
27
  - chavedomundo@gmail.com
@@ -31,6 +31,7 @@ extra_rdoc_files: []
31
31
  files:
32
32
  - .gitignore
33
33
  - .rspec
34
+ - .travis.yml
34
35
  - Gemfile
35
36
  - README.markdown
36
37
  - Rakefile
@@ -38,8 +39,10 @@ files:
38
39
  - lib/flying.rb
39
40
  - lib/flying/aliases/aliases.rb
40
41
  - lib/flying/bots/up.rb
42
+ - lib/flying/monitor.rb
41
43
  - lib/flying/version.rb
42
- - spec/bots/up_spec.rb
44
+ - spec/lib/bots/up_spec.rb
45
+ - spec/lib/flying_spec.rb
43
46
  - spec/spec_helper.rb
44
47
  homepage: https://github.com/kurko/flying
45
48
  licenses: []
@@ -66,5 +69,6 @@ signing_key:
66
69
  specification_version: 3
67
70
  summary: Verifies if services are up and running.
68
71
  test_files:
69
- - spec/bots/up_spec.rb
72
+ - spec/lib/bots/up_spec.rb
73
+ - spec/lib/flying_spec.rb
70
74
  - spec/spec_helper.rb
@@ -1,20 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Flying::Bot::Up do
4
- subject { Flying::Bot::Up.new }
5
-
6
- context "up" do
7
- it "checks if site is up" do
8
- subject.stub(:get_http_response_code).and_return("302")
9
- subject.assess("http://www.google.com").should be_true
10
- end
11
- end
12
-
13
- context "down" do
14
- it "returns false if 404 and saves a message" do
15
- subject.stub(:get_http_response_code).and_return("404")
16
- subject.assess("http://www.google.com").should be_false
17
- subject.message.should == "http://www.google.com: The target was simply not found (404)."
18
- end
19
- end
20
- end