emptyd 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 32566e139b257acf527f779fd480c9fec01e4960
4
- data.tar.gz: 81f6f5a86813270382e4c56a9ccc1294a53c377c
3
+ metadata.gz: ff9c050c494402921ba0f7813e46c1d249cdd4bf
4
+ data.tar.gz: 54bd7b74632cb1c27956a3233cb773a6ec6edb54
5
5
  SHA512:
6
- metadata.gz: cbcd1d4083dfa2f247319607760d5f7fe7293e742319ee2bdd8464d4e614d5567032a4146bf9cb179544b481d9c5191fd5f5b45ae759152259d725489b148acf
7
- data.tar.gz: 0e9b62a83582dc85de24904cfe22fe51b1843b477a2a875bac2227b03fbedaf28941d3cce298211c810959d331f4e8e19e64c1997f7dd96554d00186b56d66b0
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
@@ -1,3 +1,3 @@
1
1
  module Emptyd
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
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(@host, @user, options) do |conn|
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
- EM.next_tick starter
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.3
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