xlogin 0.7.13 → 0.7.14

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: c34a45b0c1d699483f3fd9fa15b04b0a8c27ec9d
4
- data.tar.gz: 86834cd8ef3c915d35db00dc4e29fc819686ffd2
3
+ metadata.gz: fdd4ee47fc2ae343363a8074944dbaf7d624c430
4
+ data.tar.gz: d50197fa6e9fec8b0f79fb32f3f1ca00153a53a8
5
5
  SHA512:
6
- metadata.gz: 38c20b0e67d461bc4e10bf8c3aab9af8975f470a27a2ed325b10b0215b6433ac4aa299f6b43b1b5e2160445ab075d277602f54eaebfc71f31ebdba138614124f
7
- data.tar.gz: 114dfeab619cdf87ab1207b22e14bbae82718d9ca82531ae9236819ae481af414cbcf6d02da3c015ec16c6590c9e5c4bf88b5d6062a479831fd8b3f9a1b25848
6
+ metadata.gz: de383fcdbe2573f505563ac729579a954b83321cf7285693b6446df6a7b9d43d2f7d87d925fd01fa7158e4dfee8e9d58c248ed6b9f6a362512e0fd57111370ea
7
+ data.tar.gz: 924e67dc76b0b414b2e402ec6890028e0d37e0b5a65f132b761bcc0761a9f9750490b3b8df4c54cbd8a916b019a399782d650feef2739ca7199b4468fd1c3195
data/lib/xlogin.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
3
  require 'xlogin/factory'
4
+ require 'xlogin/session_pool'
4
5
  require 'xlogin/version'
5
6
 
6
7
  module Xlogin
@@ -30,7 +31,7 @@ module Xlogin
30
31
  end
31
32
 
32
33
  def get_pool(args, **opts, &block)
33
- pool = factory.pool(args, **opts)
34
+ pool = Xlogin::SessionPool.new(args, **opts)
34
35
 
35
36
  return pool unless block
36
37
  block.call(pool)
@@ -1,4 +1,5 @@
1
1
  require 'singleton'
2
+ require 'thread'
2
3
  require 'xlogin/template'
3
4
 
4
5
  module Xlogin
@@ -9,6 +10,7 @@ module Xlogin
9
10
  def initialize
10
11
  @database = Hash.new
11
12
  @templates = Hash.new
13
+ @mutex = Mutex.new
12
14
  @group = nil
13
15
  end
14
16
 
@@ -65,16 +67,16 @@ module Xlogin
65
67
  @group = current_group
66
68
  end
67
69
 
68
- def pool(args, **opts)
69
- SessionPool.new(args, **opts)
70
- end
71
-
72
70
  def build(type:, uri:, **opts)
71
+ @mutex.synchronize { Xlogin.configure { template_dir } if @templates.empty? }
72
+
73
73
  template = get_template(type)
74
74
  template.build(uri, **opts)
75
75
  end
76
76
 
77
77
  def build_from_hostname(hostname, **opts)
78
+ @mutex.synchronize { Xlogin.configure { source } if @database.empty? }
79
+
78
80
  hostinfo = get(hostname)
79
81
  raise Xlogin::SessionError.new("Host not found: '#{hostname}'") unless hostinfo
80
82
 
@@ -1,4 +1,3 @@
1
- require 'connection_pool'
2
1
  require 'delegate'
3
2
  require 'fileutils'
4
3
  require 'net/ssh/gateway'
@@ -165,49 +164,4 @@ module Xlogin
165
164
  end
166
165
  end
167
166
  end
168
-
169
- class SessionPool
170
-
171
- def initialize(args, **opts)
172
- pool_opts = case args
173
- when String then opts.select { |k, v| %i(size timeout).member?(k) && !v.nil? }
174
- when Hash then args.select { |k, v| %i(size timeout).member?(k) && !v.nil? }
175
- end
176
-
177
- @pool = ConnectionPool.new(**pool_opts) { Wrapper.new(args, **opts) }
178
- end
179
-
180
- def with(**opts)
181
- @pool.with(**opts) do |session|
182
- session.repair if session.closed?
183
- session.aging_time(opts[:aging]) if opts[:aging]
184
-
185
- yield session
186
- end
187
- end
188
-
189
- class Wrapper
190
- def initialize(*args)
191
- @session = Xlogin.get(*args)
192
- @agetime = nil
193
- end
194
-
195
- def repair
196
- @session = @session.duplicate
197
- end
198
-
199
- def aging_time(time = @session.config.timeout)
200
- @agetime = Time.now + time
201
- Thread.start do
202
- sleep(time)
203
- @session.close if Time.now > @agetime
204
- end
205
- end
206
-
207
- def method_missing(name, *args, &block)
208
- @session.send(name, *args, &block)
209
- end
210
- end
211
-
212
- end
213
167
  end
@@ -0,0 +1,69 @@
1
+ require 'thread'
2
+
3
+ module Xlogin
4
+
5
+ class SessionPool
6
+
7
+ DEFAULT_SIZE = 1
8
+ DEFAULT_IDLE = 10
9
+
10
+ def initialize(args, **opts)
11
+ @args = args
12
+ @opts = opts
13
+
14
+ @mutex = Mutex.new
15
+ @queue = Queue.new
16
+ @created = 0
17
+ end
18
+
19
+ def size
20
+ case @args
21
+ when String then @opts[:size] || DEFAULT_SIZE
22
+ when Hash then @args[:size] || DEFAULT_SIZE
23
+ end
24
+ end
25
+
26
+ def idle
27
+ case @args
28
+ when String then @opts[:idle] || DEFAULT_IDLE
29
+ when Hash then @args[:idle] || DEFAULT_IDLE
30
+ end
31
+ end
32
+
33
+ def with
34
+ session = deq
35
+ begin
36
+ Thread.handle_interrupt(Exception => :immediate) { yield session }
37
+ ensure
38
+ enq(session)
39
+ end
40
+ end
41
+
42
+ private
43
+ def deq
44
+ session = try_create
45
+ unless session
46
+ session, expires = @queue.deq
47
+ if expires < Time.now
48
+ session.close
49
+ session = session.duplicate
50
+ end
51
+ end
52
+
53
+ session
54
+ end
55
+
56
+ def enq(session)
57
+ @queue.enq [session, Time.now + idle]
58
+ end
59
+
60
+ def try_create
61
+ @mutex.synchronize do
62
+ return unless @created < size
63
+
64
+ @created += 1
65
+ Xlogin.get(@args, **@opts)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,3 +1,3 @@
1
1
  module Xlogin
2
- VERSION = "0.7.13"
2
+ VERSION = "0.7.14"
3
3
  end
data/xlogin.gemspec CHANGED
@@ -35,7 +35,6 @@ Gem::Specification.new do |spec|
35
35
  spec.add_dependency "net-ssh-telnet"
36
36
  spec.add_dependency "net-ssh-gateway"
37
37
  spec.add_dependency "parallel"
38
- spec.add_dependency "connection_pool"
39
38
 
40
39
  spec.add_development_dependency "bundler", "~> 1.13"
41
40
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlogin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.13
4
+ version: 0.7.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-08 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-telnet
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: connection_pool
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -147,6 +133,7 @@ files:
147
133
  - lib/xlogin/factory.rb
148
134
  - lib/xlogin/rake_task.rb
149
135
  - lib/xlogin/session.rb
136
+ - lib/xlogin/session_pool.rb
150
137
  - lib/xlogin/ssh.rb
151
138
  - lib/xlogin/telnet.rb
152
139
  - lib/xlogin/template.rb