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 +4 -4
- data/lib/xlogin.rb +2 -1
- data/lib/xlogin/factory.rb +6 -4
- data/lib/xlogin/session.rb +0 -46
- data/lib/xlogin/session_pool.rb +69 -0
- data/lib/xlogin/version.rb +1 -1
- data/xlogin.gemspec +0 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdd4ee47fc2ae343363a8074944dbaf7d624c430
|
4
|
+
data.tar.gz: d50197fa6e9fec8b0f79fb32f3f1ca00153a53a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 =
|
34
|
+
pool = Xlogin::SessionPool.new(args, **opts)
|
34
35
|
|
35
36
|
return pool unless block
|
36
37
|
block.call(pool)
|
data/lib/xlogin/factory.rb
CHANGED
@@ -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
|
|
data/lib/xlogin/session.rb
CHANGED
@@ -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
|
data/lib/xlogin/version.rb
CHANGED
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.
|
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-
|
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
|