socket_duplex 1.1.7 → 1.1.8
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/socket_duplex.rb +10 -40
- data/socket_duplex.gemspec +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: f2b398ca7958f3ac91f2e8ad88c287ae4a529e4a
|
4
|
+
data.tar.gz: 0a75de5c20bf83771e1b5e8890a67afcb8da039d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c79fff5c1468edc7eb0a1466fabf42035dcf9aeb994c252b7012e57ec8274f2195127ac7e301c08bc8c86212f0193877ec66680c27929ba03ace7dc117541b6a
|
7
|
+
data.tar.gz: 915e4c13027ced61b6511253ce2443432f9f33e57ed9dda092f93a4584f6034e98500a27f669c5af675b7321796fa2f0c258507c1ddaff5dd95b927a8ade7087
|
data/lib/socket_duplex.rb
CHANGED
@@ -12,32 +12,24 @@ module Rack
|
|
12
12
|
def initialize(app, socket_path, secful_key, verify_mode=OpenSSL::SSL::VERIFY_PEER)
|
13
13
|
@app, @socket_path, @verify_mode = app, socket_path, verify_mode
|
14
14
|
begin
|
15
|
-
puts 'secful: initialize'
|
16
15
|
@secful_key = secful_key
|
17
|
-
puts 'secful: secful_key'
|
18
16
|
@agent_identifier = SecureRandom.hex
|
19
|
-
puts 'secful: agent_identifier'
|
20
17
|
@machine_ip = Socket.ip_address_list.detect(&:ipv4_private?).try(:ip_address)
|
21
|
-
|
22
|
-
@queue = SizedQueue.new(MAX_QUEUE_SIZE)
|
23
|
-
puts 'secful: queue init ' + @queue.__id__.to_s
|
18
|
+
#@queue = SizedQueue.new(MAX_QUEUE_SIZE)
|
24
19
|
@threads_to_sockets = {}
|
25
|
-
|
26
|
-
|
27
|
-
puts 'secful: activate_workers()'
|
28
|
-
rescue Exception => e
|
29
|
-
puts 'secful: init-exception: ' + e.message
|
30
|
-
puts 'secful: init-trace: ' + e.backtrace.inspect
|
20
|
+
#Thread.new { activate_workers() }
|
21
|
+
rescue nil
|
31
22
|
end
|
32
23
|
end
|
33
24
|
|
34
25
|
def call(env)
|
35
26
|
begin
|
36
|
-
|
27
|
+
if !defined? @queue
|
28
|
+
@queue = SizedQueue.new(MAX_QUEUE_SIZE)
|
29
|
+
activate_workers()
|
30
|
+
end
|
37
31
|
dup._call(env)
|
38
|
-
rescue
|
39
|
-
puts 'secful: call-exception: ' + e.message
|
40
|
-
puts 'secful: call-trace: ' + e.backtrace.inspect
|
32
|
+
rescue nil
|
41
33
|
@app.call(env)
|
42
34
|
end
|
43
35
|
end
|
@@ -45,59 +37,42 @@ module Rack
|
|
45
37
|
protected
|
46
38
|
|
47
39
|
def _call(env)
|
48
|
-
puts 'secful: _call'
|
49
40
|
status, headers, body = @app.call(env)
|
50
|
-
|
51
|
-
puts 'secful: queue.len = ' + @queue.length.to_s + ' id: ' + @queue.__id__.to_s
|
52
|
-
if @queue.length < MAX_QUEUE_SIZE
|
53
|
-
puts 'secful: about to put in queue'
|
41
|
+
if @queue.length < MAX_QUEUE_SIZE - 5
|
54
42
|
@queue << env
|
55
|
-
puts 'secful: put in queue'
|
56
43
|
end
|
57
44
|
return [status, headers, body]
|
58
45
|
end
|
59
46
|
|
60
47
|
def activate_workers
|
61
|
-
puts 'secful: activate_workers'
|
62
48
|
NUM_OF_THREADS.times do
|
63
|
-
puts 'secful: new thread'
|
64
49
|
thr = Thread.new {worker()}
|
65
|
-
puts 'secful: thread started ' + thr.__id__.to_s
|
66
50
|
end
|
67
51
|
end
|
68
52
|
|
69
53
|
def worker
|
70
54
|
loop do
|
71
55
|
begin
|
72
|
-
puts 'secful: worker start: ' + Thread.current.__id__.to_s + 'queue: ' + @queue.__id__.to_s
|
73
56
|
env = @queue.pop
|
74
|
-
puts 'secful: worker poped'
|
75
57
|
if env
|
76
|
-
puts 'secful: env'
|
77
58
|
connect_to_ws(Thread.current)
|
78
59
|
handle_request(env)
|
79
|
-
puts 'scful: worker done'
|
80
60
|
end
|
81
|
-
rescue
|
82
|
-
puts 'secful: worker-exception: ' + e.message
|
83
|
-
puts 'secful: worker-trace: ' + e.backtrace.inspect
|
61
|
+
rescue nil
|
84
62
|
end
|
85
63
|
end
|
86
64
|
end
|
87
65
|
|
88
66
|
def connect_to_ws(thr)
|
89
67
|
begin
|
90
|
-
puts 'secful: connect_to_ws'
|
91
68
|
ws = @threads_to_sockets[thr]
|
92
69
|
if !ws
|
93
|
-
puts 'secful: creating ws'
|
94
70
|
headers = { 'Agent-Type' => 'Ruby',
|
95
71
|
'Agent-Version' => '1.0',
|
96
72
|
'Agent-Identifier' => @agent_identifier,
|
97
73
|
'Authorization' => 'Bearer ' + @secful_key }
|
98
74
|
ws = WebSocket::Client::Simple.connect @socket_path, verify_mode: @verify_mode, headers: headers
|
99
75
|
sleep(3)
|
100
|
-
puts 'secful: connected to ws'
|
101
76
|
end
|
102
77
|
if !ws.open?
|
103
78
|
sleep(60)
|
@@ -114,16 +89,11 @@ module Rack
|
|
114
89
|
def handle_request(env)
|
115
90
|
request_hash = {}
|
116
91
|
if env['rack.url_scheme'] == 'http'
|
117
|
-
puts 'secful: writing env'
|
118
92
|
write_env(request_hash, env)
|
119
93
|
ws = @threads_to_sockets[Thread.current]
|
120
94
|
begin
|
121
|
-
puts 'secful: sending'
|
122
95
|
ws.send request_hash.to_json
|
123
|
-
puts 'secful: sent'
|
124
96
|
rescue Exception => e
|
125
|
-
puts 'secful: handle_request-exception: ' + e.message
|
126
|
-
puts 'secful: handle_request-trace: ' + e.backtrace.inspect
|
127
97
|
if ws
|
128
98
|
ws.close()
|
129
99
|
end rescue nil
|
data/socket_duplex.gemspec
CHANGED
@@ -3,7 +3,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = "socket_duplex"
|
6
|
-
spec.version = '1.1.
|
6
|
+
spec.version = '1.1.8'
|
7
7
|
spec.authors = ["Secful"]
|
8
8
|
spec.description = %q{Rack middleware that duplexes HTTP traffic}
|
9
9
|
spec.summary = spec.description
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: socket_duplex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Secful
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|