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 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