xlogin 0.7.14 → 0.7.16
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 +7 -6
- data/lib/xlogin/factory.rb +0 -5
- data/lib/xlogin/session.rb +1 -1
- data/lib/xlogin/session_pool.rb +24 -13
- data/lib/xlogin/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c724426e5a7a390655bde1100323aa82b3e7189e
|
4
|
+
data.tar.gz: 2e1f06d01d84439fdbce0acd48487d1ffb6fec6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a878236af348f8b765472712079c09dc7847d6db5a0521c1913edd62fb4efd63cd24411386b320912c24ed504a56acf1b8a3267db8ba2c4ef2f63abf8869a234
|
7
|
+
data.tar.gz: 6d48c122220ce879f30933a866773b9d2bd0879059cca7ea0419f7cb9b6aef6a08d6680f0e5629f8a44689e1efd4c0e85d1e6199775379e340c44908f325e6b8
|
data/lib/xlogin.rb
CHANGED
@@ -54,7 +54,13 @@ module Xlogin
|
|
54
54
|
factory.source(source_file || DEFAULT_INVENTORY_FILE)
|
55
55
|
end
|
56
56
|
|
57
|
-
def template(*
|
57
|
+
def template(*template_dirs)
|
58
|
+
files = template_dirs.flat_map { |dir| Dir.glob(File.join(dir, '*.rb')) }
|
59
|
+
load_template(*files)
|
60
|
+
end
|
61
|
+
alias_method :template_dir, :template
|
62
|
+
|
63
|
+
def load_template(*template_files)
|
58
64
|
return factory.source_template(*template_files) unless template_files.empty?
|
59
65
|
|
60
66
|
unless Dir.exist?(DEFAULT_TEMPLATE_DIR)
|
@@ -64,11 +70,6 @@ module Xlogin
|
|
64
70
|
template_dir(DEFAULT_TEMPLATE_DIR)
|
65
71
|
end
|
66
72
|
|
67
|
-
def template_dir(*template_dirs)
|
68
|
-
files = template_dirs.flat_map { |dir| Dir.glob(File.join(dir, '*.rb')) }
|
69
|
-
template(*files)
|
70
|
-
end
|
71
|
-
|
72
73
|
end
|
73
74
|
|
74
75
|
end
|
data/lib/xlogin/factory.rb
CHANGED
@@ -10,7 +10,6 @@ module Xlogin
|
|
10
10
|
def initialize
|
11
11
|
@database = Hash.new
|
12
12
|
@templates = Hash.new
|
13
|
-
@mutex = Mutex.new
|
14
13
|
@group = nil
|
15
14
|
end
|
16
15
|
|
@@ -68,15 +67,11 @@ module Xlogin
|
|
68
67
|
end
|
69
68
|
|
70
69
|
def build(type:, uri:, **opts)
|
71
|
-
@mutex.synchronize { Xlogin.configure { template_dir } if @templates.empty? }
|
72
|
-
|
73
70
|
template = get_template(type)
|
74
71
|
template.build(uri, **opts)
|
75
72
|
end
|
76
73
|
|
77
74
|
def build_from_hostname(hostname, **opts)
|
78
|
-
@mutex.synchronize { Xlogin.configure { source } if @database.empty? }
|
79
|
-
|
80
75
|
hostinfo = get(hostname)
|
81
76
|
raise Xlogin::SessionError.new("Host not found: '#{hostname}'") unless hostinfo
|
82
77
|
|
data/lib/xlogin/session.rb
CHANGED
@@ -20,7 +20,7 @@ module Xlogin
|
|
20
20
|
when 'telnet' then 23
|
21
21
|
end
|
22
22
|
|
23
|
-
raise
|
23
|
+
raise SessionError.new("Invalid URI - '#{uri}'") unless @host && @port
|
24
24
|
|
25
25
|
@name = opts.delete(:name) || @host
|
26
26
|
@config = OpenStruct.new(opts)
|
data/lib/xlogin/session_pool.rb
CHANGED
@@ -5,15 +5,17 @@ module Xlogin
|
|
5
5
|
class SessionPool
|
6
6
|
|
7
7
|
DEFAULT_SIZE = 1
|
8
|
-
DEFAULT_IDLE =
|
8
|
+
DEFAULT_IDLE = false
|
9
9
|
|
10
10
|
def initialize(args, **opts)
|
11
|
-
@args
|
12
|
-
@opts
|
11
|
+
@args = args
|
12
|
+
@opts = opts
|
13
13
|
|
14
|
-
@mutex
|
15
|
-
@queue
|
16
|
-
|
14
|
+
@mutex = Mutex.new
|
15
|
+
@queue = Queue.new
|
16
|
+
|
17
|
+
@created = 0
|
18
|
+
@watchdog = Hash.new
|
17
19
|
end
|
18
20
|
|
19
21
|
def size
|
@@ -43,27 +45,36 @@ module Xlogin
|
|
43
45
|
def deq
|
44
46
|
session = try_create
|
45
47
|
unless session
|
46
|
-
session,
|
47
|
-
if
|
48
|
-
session.close
|
49
|
-
session = session.duplicate
|
50
|
-
end
|
48
|
+
session, updated = @queue.deq
|
49
|
+
session = session.duplicate if idle && updated + idle.to_f < Time.now
|
51
50
|
end
|
52
51
|
|
53
52
|
session
|
54
53
|
end
|
55
54
|
|
56
55
|
def enq(session)
|
57
|
-
@
|
56
|
+
@mutex.synchronize { update_watchdog(session) }
|
57
|
+
@queue.enq [session, Time.now]
|
58
58
|
end
|
59
59
|
|
60
60
|
def try_create
|
61
61
|
@mutex.synchronize do
|
62
62
|
return unless @created < size
|
63
63
|
|
64
|
+
session = Xlogin.get(@args, **@opts)
|
65
|
+
update_watchdog(session)
|
66
|
+
|
64
67
|
@created += 1
|
65
|
-
|
68
|
+
session
|
66
69
|
end
|
67
70
|
end
|
71
|
+
|
72
|
+
def update_watchdog(session)
|
73
|
+
return unless idle
|
74
|
+
|
75
|
+
@watchdog[session].tap { |th| th.kill if th }
|
76
|
+
@watchdog[session] = Thread.new(session) { |s| sleep(idle.to_f + 1) && s.close }
|
77
|
+
end
|
68
78
|
end
|
79
|
+
|
69
80
|
end
|
data/lib/xlogin/version.rb
CHANGED
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.16
|
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-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: net-telnet
|