onlinestatus 0.0.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.
- data/bin/onlinestatus +16 -0
- data/lib/onlinestatus.rb +71 -0
- metadata +64 -0
data/bin/onlinestatus
ADDED
data/lib/onlinestatus.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'net/ping/tcp'
|
2
|
+
require 'net/ping/udp'
|
3
|
+
|
4
|
+
module OnlineStatus
|
5
|
+
KNOWN_GOOD_HOSTS = {
|
6
|
+
# Some known good websites
|
7
|
+
"www.google.com" => { tcp: 80 },
|
8
|
+
"www.wikipedia.org" => { tcp: 80 },
|
9
|
+
"www.facebook.com" => { tcp: 80 },
|
10
|
+
"www.twitter.com" => { tcp: 80 },
|
11
|
+
"www.youtube.com" => { tcp: 80 },
|
12
|
+
|
13
|
+
# TODO: somehow ping DNS root servers?
|
14
|
+
# DNS root server IPs
|
15
|
+
#"198.41.0.4" => { udp: 53 }, # A
|
16
|
+
#"192.228.79.201" => { udp: 53 }, # B
|
17
|
+
#"192.33.4.12" => { udp: 53 }, # C
|
18
|
+
#"199.7.91.13" => { udp: 53 }, # D
|
19
|
+
#"192.203.230.10" => { udp: 53 }, # E
|
20
|
+
#"192.5.5.241" => { udp: 53 }, # F
|
21
|
+
#"192.112.36.4" => { udp: 53 }, # G
|
22
|
+
#"128.63.2.53" => { udp: 53 }, # H
|
23
|
+
#"192.36.148.17" => { udp: 53 }, # I
|
24
|
+
#"192.58.128.30" => { udp: 53 }, # J
|
25
|
+
#"193.0.14.129" => { udp: 53 }, # K
|
26
|
+
#"199.7.83.42" => { udp: 53 }, # L
|
27
|
+
#"202.12.27.33" => { udp: 53 }, # M
|
28
|
+
}
|
29
|
+
|
30
|
+
private
|
31
|
+
def self.host_pingable?(host, methods)
|
32
|
+
for protocol, port in methods
|
33
|
+
case protocol
|
34
|
+
when :tcp
|
35
|
+
ping = Net::Ping::TCP.new(host, port)
|
36
|
+
#when :udp
|
37
|
+
# ping = Net::Ping::UDP.new(host, port)
|
38
|
+
else
|
39
|
+
next
|
40
|
+
end
|
41
|
+
|
42
|
+
return true if ping.ping?
|
43
|
+
end
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
public
|
48
|
+
def self.online?
|
49
|
+
# Online = at least 3 known good servers are pingable
|
50
|
+
good_hosts = 0
|
51
|
+
for host, methods in KNOWN_GOOD_HOSTS
|
52
|
+
good_hosts += 1 if host_pingable?(host, methods)
|
53
|
+
|
54
|
+
return true if good_hosts >= 3
|
55
|
+
end
|
56
|
+
|
57
|
+
false
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.online
|
61
|
+
online?
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.offline?
|
65
|
+
!online?
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.offline
|
69
|
+
offline?
|
70
|
+
end
|
71
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: onlinestatus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michal Pokorny
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: net-ping
|
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
|
+
description: ! "\t\tThis simple gem tries to detect your online status\n\t\tby pinging
|
31
|
+
a few places.\n"
|
32
|
+
email: pok@rny.cz
|
33
|
+
executables:
|
34
|
+
- onlinestatus
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- lib/onlinestatus.rb
|
39
|
+
- bin/onlinestatus
|
40
|
+
homepage: http://github.com/MichalPokorny/onlinestatus
|
41
|
+
licenses: []
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.8.23
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: Do you have an internet connection?
|
64
|
+
test_files: []
|