flying 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 -0
- data/.rspec +1 -0
- data/README.markdown +65 -0
- data/lib/flying.rb +33 -1
- data/lib/flying/aliases/aliases.rb +7 -0
- data/lib/flying/bots/up.rb +62 -0
- data/lib/flying/version.rb +1 -1
- data/spec/bots/up_spec.rb +20 -0
- data/spec/spec_helper.rb +1 -0
- metadata +13 -5
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/README.markdown
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
Flying is a tool for monitoring websites and apps. It was designed to be as simple as Gemfiles.
|
2
|
+
|
3
|
+
###Getting started
|
4
|
+
|
5
|
+
Install the gem:
|
6
|
+
|
7
|
+
gem install flying
|
8
|
+
|
9
|
+
Create a Ruby file anywhere with the following content:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
# flying.rb
|
13
|
+
require "flying"
|
14
|
+
|
15
|
+
Flying.start do
|
16
|
+
site "http://www.google.com"
|
17
|
+
site "http://www.nytimes.com"
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
Now, just run in your terminal:
|
22
|
+
|
23
|
+
ruby flying.rb
|
24
|
+
|
25
|
+
Whenever one of those two sites gets offline, Flying will warn you and stop monitoring.
|
26
|
+
|
27
|
+
###Goal of the project
|
28
|
+
|
29
|
+
We want to be able to use the following DSL:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
require "flying"
|
33
|
+
|
34
|
+
Flying.start do
|
35
|
+
# Defines the interval between verifications
|
36
|
+
timer 1
|
37
|
+
|
38
|
+
# Send an email if any error occured
|
39
|
+
notify_me :email => "email@gmail.com"
|
40
|
+
|
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
|
+
|
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
|
+
|
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
|
+
|
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
|
60
|
+
```
|
61
|
+
|
62
|
+
###License
|
63
|
+
|
64
|
+
License is MIT. If you're gonna improve this project, please collaborate and send
|
65
|
+
a pull request.
|
data/lib/flying.rb
CHANGED
@@ -1,5 +1,37 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
1
2
|
require "flying/version"
|
3
|
+
require "flying/bots/up"
|
4
|
+
|
5
|
+
require "flying/aliases/aliases"
|
2
6
|
|
3
7
|
module Flying
|
4
|
-
|
8
|
+
@an_error_ocurred = false
|
9
|
+
@first_attempt = true
|
10
|
+
@total_attempts = 0
|
11
|
+
|
12
|
+
def self.start(&block)
|
13
|
+
begin
|
14
|
+
puts "Running..."
|
15
|
+
looping = true
|
16
|
+
while(looping) do
|
17
|
+
yield
|
18
|
+
if @an_error_ocurred
|
19
|
+
puts "Stopped assessing targets."
|
20
|
+
break
|
21
|
+
end
|
22
|
+
if @first_attempt
|
23
|
+
puts "Everything's working fine. I'll continue monitoring the targets."
|
24
|
+
@first_attempt = false
|
25
|
+
end
|
26
|
+
@total_attempts += 1
|
27
|
+
sleep(5)
|
28
|
+
end
|
29
|
+
rescue Interrupt => e
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.an_error_ocurred(value = '')
|
34
|
+
return @an_error_ocurred if value == ''
|
35
|
+
@an_error_ocurred = value
|
36
|
+
end
|
5
37
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require "net/http"
|
2
|
+
|
3
|
+
module Flying
|
4
|
+
module Bot
|
5
|
+
class Up
|
6
|
+
attr_reader :message
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@message = "Ok."
|
10
|
+
end
|
11
|
+
|
12
|
+
def assess(referer, *options)
|
13
|
+
begin
|
14
|
+
response_code = get_http_response_code(referer)
|
15
|
+
rescue
|
16
|
+
Flying.an_error_ocurred(true)
|
17
|
+
set_error_message(referer, false, $!)
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
return true if ["200", "302"].include? response_code
|
21
|
+
Flying.an_error_ocurred(true)
|
22
|
+
set_error_message(referer, response_code.to_s)
|
23
|
+
false
|
24
|
+
end
|
25
|
+
|
26
|
+
def set_error_message(referer, response_code, error_details = '')
|
27
|
+
case response_code
|
28
|
+
when false
|
29
|
+
@message = message_unreachable
|
30
|
+
when "404"
|
31
|
+
@message = message_not_found
|
32
|
+
when "501"
|
33
|
+
@message = message_server_error
|
34
|
+
else
|
35
|
+
@message = message_unknown_error + "(#{error_details})"
|
36
|
+
end
|
37
|
+
@message = referer + ": " + @message
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_http_response_code referer
|
41
|
+
Net::HTTP.get_response(URI(referer)).code
|
42
|
+
end
|
43
|
+
|
44
|
+
# Messages
|
45
|
+
def message_unknown_error
|
46
|
+
"An unknown error ocurred."
|
47
|
+
end
|
48
|
+
|
49
|
+
def message_unreachable
|
50
|
+
"It is unreachable (is the url correct?)."
|
51
|
+
end
|
52
|
+
|
53
|
+
def message_not_found
|
54
|
+
"The target was simply not found (404)."
|
55
|
+
end
|
56
|
+
|
57
|
+
def message_server_error
|
58
|
+
"We got a response saying there's a server error (501)"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/flying/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
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
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path("../../lib/flying.rb", __FILE__)
|
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.
|
4
|
+
version: 0.0.2
|
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-
|
12
|
+
date: 2011-11-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70101949261140 !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: *
|
24
|
+
version_requirements: *70101949261140
|
25
25
|
description: Verifies if each given server is not down.
|
26
26
|
email:
|
27
27
|
- chavedomundo@gmail.com
|
@@ -30,11 +30,17 @@ extensions: []
|
|
30
30
|
extra_rdoc_files: []
|
31
31
|
files:
|
32
32
|
- .gitignore
|
33
|
+
- .rspec
|
33
34
|
- Gemfile
|
35
|
+
- README.markdown
|
34
36
|
- Rakefile
|
35
37
|
- flying.gemspec
|
36
38
|
- lib/flying.rb
|
39
|
+
- lib/flying/aliases/aliases.rb
|
40
|
+
- lib/flying/bots/up.rb
|
37
41
|
- lib/flying/version.rb
|
42
|
+
- spec/bots/up_spec.rb
|
43
|
+
- spec/spec_helper.rb
|
38
44
|
homepage: https://github.com/kurko/flying
|
39
45
|
licenses: []
|
40
46
|
post_install_message:
|
@@ -59,4 +65,6 @@ rubygems_version: 1.8.11
|
|
59
65
|
signing_key:
|
60
66
|
specification_version: 3
|
61
67
|
summary: Verifies if services are up and running.
|
62
|
-
test_files:
|
68
|
+
test_files:
|
69
|
+
- spec/bots/up_spec.rb
|
70
|
+
- spec/spec_helper.rb
|