emptyd 0.0.3 → 0.0.4
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 +4 -4
- data/emptyd.gemspec +2 -0
- data/lib/emptyd/version.rb +1 -1
- data/lib/emptyd.rb +39 -2
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff9c050c494402921ba0f7813e46c1d249cdd4bf
|
4
|
+
data.tar.gz: 54bd7b74632cb1c27956a3233cb773a6ec6edb54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 29d35c215c48355f0afb01459b069af9d4f99d06c9bdc37903fa99171e1b0ae60bdeae631fc78f989b10801221c0cc8cea11c5f545d73af1fffcea62f6807214
|
7
|
+
data.tar.gz: 2e15bf30ff34701df89e85a3c1fab820b751a6897d2871069b91ee3e406e134120ae587d593d1ea607696a39d30fe5cd56efc0c59fe414ad11c6e0f960940f38
|
data/emptyd.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
|
24
|
+
spec.add_dependency "eventmachine-le"
|
25
|
+
spec.add_dependency "em-udns"
|
24
26
|
spec.add_dependency "em-ssh"
|
25
27
|
spec.add_dependency "eventmachine_httpserver"
|
26
28
|
end
|
data/lib/emptyd/version.rb
CHANGED
data/lib/emptyd.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# vim: ai:ts=2:sw=2:et:syntax=ruby
|
2
2
|
require "emptyd/version"
|
3
3
|
|
4
|
+
require 'eventmachine-le'
|
4
5
|
require 'fiber'
|
5
6
|
require 'em-ssh'
|
6
7
|
require 'securerandom'
|
7
8
|
require 'json'
|
9
|
+
require 'em-udns'
|
8
10
|
|
9
11
|
module Emptyd
|
10
12
|
class Connection
|
@@ -14,6 +16,7 @@ module Emptyd
|
|
14
16
|
HAPPY_RATIO = 0.5
|
15
17
|
@@connections = {}
|
16
18
|
@@count = {}
|
19
|
+
@@dns = nil
|
17
20
|
|
18
21
|
def self.[](key, logger)
|
19
22
|
@@connections[key] or Connection.new(key, logger)
|
@@ -55,6 +58,11 @@ module Emptyd
|
|
55
58
|
return if @conn or @connecting
|
56
59
|
@connecting = true
|
57
60
|
|
61
|
+
unless @@dns
|
62
|
+
@@dns = EM::Udns::Resolver.new
|
63
|
+
EM::Udns.run @@dns
|
64
|
+
end
|
65
|
+
|
58
66
|
pressure = proc do
|
59
67
|
if @@count.size >= MAX_CONNECTIONS # pressure
|
60
68
|
c = @@count.select{|k,c| c.free?}.values.sample
|
@@ -85,7 +93,7 @@ module Emptyd
|
|
85
93
|
@logger.debug "Created new conn: #{key}, quota = #{@@count.size}"
|
86
94
|
options = { :user_known_hosts_file => [] }
|
87
95
|
options[:password] = $PASSWORD if $PASSWORD
|
88
|
-
EM::Ssh.start(@
|
96
|
+
EM::Ssh.start(@ip, @user, options) do |conn|
|
89
97
|
conn.errback { |err| errback err }
|
90
98
|
conn.on(:closed) { errback "closed" }
|
91
99
|
conn.callback do |ssh|
|
@@ -122,7 +130,36 @@ module Emptyd
|
|
122
130
|
end
|
123
131
|
end
|
124
132
|
|
125
|
-
|
133
|
+
resfail = proc do |err|
|
134
|
+
@error = err
|
135
|
+
@failed_at = Time.now
|
136
|
+
EM::Timer.new(rand(1..10)) do
|
137
|
+
@start_timer.cancel
|
138
|
+
EM.next_tick resolver
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
resolver = proc do
|
143
|
+
query = @@dns.submit_AAAA @host
|
144
|
+
query.callback do |result|
|
145
|
+
@ip = result.sample
|
146
|
+
starter[]
|
147
|
+
end
|
148
|
+
query.errback do |err|
|
149
|
+
if err == :dns_error_nodata
|
150
|
+
query = @@dns.submit_A @host
|
151
|
+
query.callback do |result|
|
152
|
+
@ip = result.sample
|
153
|
+
starter[]
|
154
|
+
end
|
155
|
+
query.errback { |err| resfail[err] }
|
156
|
+
else
|
157
|
+
resfail[]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
EM.next_tick resolver
|
126
163
|
end
|
127
164
|
|
128
165
|
def errback err
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emptyd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kmeaw
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: eventmachine-le
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: em-udns
|
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'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: em-ssh
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|