redcap 0.1.1 → 0.2.0
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 +7 -0
- data/.travis.yml +8 -0
- data/Gemfile +2 -0
- data/README.textile +5 -1
- data/Rakefile +3 -0
- data/bin/redcap +1 -0
- data/lib/redcap.rb +2 -4
- data/lib/redcap/server.rb +7 -5
- data/lib/redcap/version.rb +3 -1
- data/redcap.gemspec +4 -4
- data/spec/redcap/server_spec.rb +12 -12
- data/spec/redcap_spec.rb +10 -8
- data/spec/spec_helper.rb +2 -1
- metadata +49 -57
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 1fff71b17f4d498a4616e2b89bd5ab14b0a5c3bd
|
|
4
|
+
data.tar.gz: 781d7208172e418708ec5d0707a2a50074b8fb0f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: dcf6724fe98fe543339836cf4755cd316701b9c4f087409df3904c0f3bdf1b4a1ecc516f9bd29dd1ee4094db2ad30e561c9626ff78ce3d975e3e00854d53473b
|
|
7
|
+
data.tar.gz: e47c3fea6987cfdcf3bcdfdc51e63ddc09ee08cfac43b969c8d4183fe6183bcc51f7d133237ad104d237a9cbc1f9e553593cc28fb15023684248f665e6d59095
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.textile
CHANGED
|
@@ -8,7 +8,11 @@ h2. Installation
|
|
|
8
8
|
|
|
9
9
|
h2. Usage
|
|
10
10
|
|
|
11
|
-
As a server:
|
|
11
|
+
As a server, you'll also want EventMachine installed:
|
|
12
|
+
|
|
13
|
+
<pre><code>gem install eventmachine</code></pre>
|
|
14
|
+
|
|
15
|
+
And then, the service must be run as root (so it can get all the requierd port and process information):
|
|
12
16
|
|
|
13
17
|
<pre><code>$ sudo redcap</code></pre>
|
|
14
18
|
|
data/Rakefile
CHANGED
data/bin/redcap
CHANGED
data/lib/redcap.rb
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
require 'socket'
|
|
2
2
|
require 'singleton'
|
|
3
3
|
require 'logger'
|
|
4
|
-
require 'eventmachine'
|
|
5
4
|
|
|
6
5
|
module Redcap
|
|
7
6
|
def self.pid_for_port(port, options = {})
|
|
8
7
|
options[:server] ||= '127.0.0.1'
|
|
9
8
|
options[:port] ||= 11000
|
|
10
|
-
|
|
9
|
+
|
|
11
10
|
socket = TCPSocket.new options[:server], options[:port]
|
|
12
11
|
socket.write "#{port}\n"
|
|
13
12
|
pid = socket.read.to_i
|
|
14
13
|
socket.close
|
|
15
|
-
|
|
14
|
+
|
|
16
15
|
pid
|
|
17
16
|
end
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
require 'redcap/app'
|
|
21
|
-
require 'redcap/server'
|
|
22
20
|
require 'redcap/version'
|
data/lib/redcap/server.rb
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
+
require 'eventmachine'
|
|
2
|
+
|
|
1
3
|
class Redcap::Server < EventMachine::Protocols::LineAndTextProtocol
|
|
2
4
|
attr_accessor :logger
|
|
3
|
-
|
|
5
|
+
|
|
4
6
|
def receive_line(line)
|
|
5
7
|
port = line.to_i
|
|
6
8
|
pid = pid_for_port(port)
|
|
7
|
-
|
|
9
|
+
|
|
8
10
|
logger.info "port: #{port} -> pid: #{pid}"
|
|
9
|
-
|
|
11
|
+
|
|
10
12
|
send_data pid
|
|
11
13
|
close_connection_after_writing
|
|
12
14
|
end
|
|
13
|
-
|
|
15
|
+
|
|
14
16
|
private
|
|
15
|
-
|
|
17
|
+
|
|
16
18
|
def pid_for_port(port)
|
|
17
19
|
`lsof -i :#{port} | grep ssh | awk '{print $2}'`[/\d+/] || 'Unknown'
|
|
18
20
|
end
|
data/lib/redcap/version.rb
CHANGED
data/redcap.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
$:.push File.expand_path('../lib', __FILE__)
|
|
3
|
-
require 'redcap'
|
|
3
|
+
require 'redcap/version'
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |s|
|
|
6
6
|
s.name = 'redcap'
|
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
|
20
20
|
File.basename(f)
|
|
21
21
|
}
|
|
22
22
|
s.require_paths = ['lib']
|
|
23
|
-
|
|
24
|
-
s.
|
|
25
|
-
s.add_development_dependency 'rspec'
|
|
23
|
+
|
|
24
|
+
s.add_development_dependency 'rake'
|
|
25
|
+
s.add_development_dependency 'rspec'
|
|
26
26
|
end
|
data/spec/redcap/server_spec.rb
CHANGED
|
@@ -3,32 +3,32 @@ require 'spec_helper'
|
|
|
3
3
|
describe Redcap::Server do
|
|
4
4
|
describe '#receive_line' do
|
|
5
5
|
let(:server) { Redcap::Server.new :spec }
|
|
6
|
-
let(:logger) {
|
|
7
|
-
|
|
6
|
+
let(:logger) { double('logger', :info => nil) }
|
|
7
|
+
|
|
8
8
|
before :each do
|
|
9
9
|
server.logger = logger
|
|
10
|
-
server.
|
|
10
|
+
allow(server).to receive_messages(
|
|
11
11
|
:` => '24',
|
|
12
12
|
:close_connection_after_writing => nil,
|
|
13
13
|
:send_data => nil
|
|
14
14
|
)
|
|
15
15
|
end
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
it "sends the process id for a given port" do
|
|
18
|
-
server.
|
|
19
|
-
|
|
18
|
+
expect(server).to receive(:send_data).with('24')
|
|
19
|
+
|
|
20
20
|
server.receive_line('101')
|
|
21
21
|
end
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
it "closes the connection once writing is finished" do
|
|
24
|
-
server.
|
|
25
|
-
|
|
24
|
+
expect(server).to receive(:close_connection_after_writing)
|
|
25
|
+
|
|
26
26
|
server.receive_line('101')
|
|
27
27
|
end
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
it "logs the request" do
|
|
30
|
-
logger.
|
|
31
|
-
|
|
30
|
+
expect(logger).to receive(:info).with('port: 101 -> pid: 24')
|
|
31
|
+
|
|
32
32
|
server.receive_line('101')
|
|
33
33
|
end
|
|
34
34
|
end
|
data/spec/redcap_spec.rb
CHANGED
|
@@ -2,20 +2,22 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Redcap do
|
|
4
4
|
describe '.pid_for_port' do
|
|
5
|
-
let(:socket) {
|
|
6
|
-
|
|
5
|
+
let(:socket) {
|
|
6
|
+
double('socket', :write => nil, :read => '42', :close => nil)
|
|
7
|
+
}
|
|
8
|
+
|
|
7
9
|
before :each do
|
|
8
|
-
TCPSocket.
|
|
10
|
+
allow(TCPSocket).to receive(:new).and_return(socket)
|
|
9
11
|
end
|
|
10
|
-
|
|
12
|
+
|
|
11
13
|
it "sends the given port to the socket" do
|
|
12
|
-
socket.
|
|
13
|
-
|
|
14
|
+
expect(socket).to receive(:write).with("101\n")
|
|
15
|
+
|
|
14
16
|
Redcap.pid_for_port(101)
|
|
15
17
|
end
|
|
16
|
-
|
|
18
|
+
|
|
17
19
|
it "returns the socket output as an integer" do
|
|
18
|
-
Redcap.pid_for_port(101).
|
|
20
|
+
expect(Redcap.pid_for_port(101)).to eq(42)
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,51 +1,54 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: redcap
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
5
|
-
version: 0.1.1
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
6
5
|
platform: ruby
|
|
7
|
-
authors:
|
|
6
|
+
authors:
|
|
8
7
|
- Pat Allan
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
19
|
-
none: false
|
|
20
|
-
requirements:
|
|
11
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
21
17
|
- - ">="
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: 0
|
|
24
|
-
type: :
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
25
21
|
prerelease: false
|
|
26
|
-
version_requirements:
|
|
27
|
-
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rspec
|
|
29
|
-
requirement:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
version: 2.5.0
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
35
34
|
type: :development
|
|
36
35
|
prerelease: false
|
|
37
|
-
version_requirements:
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
description: A service that translates SSH forward ports to process IDs. Built for
|
|
42
|
+
Flying Sphinx.
|
|
43
|
+
email:
|
|
40
44
|
- pat@freelancing-gods.com
|
|
41
|
-
executables:
|
|
45
|
+
executables:
|
|
42
46
|
- redcap
|
|
43
47
|
extensions: []
|
|
44
|
-
|
|
45
48
|
extra_rdoc_files: []
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- .
|
|
49
|
+
files:
|
|
50
|
+
- ".gitignore"
|
|
51
|
+
- ".travis.yml"
|
|
49
52
|
- Gemfile
|
|
50
53
|
- LICENCE
|
|
51
54
|
- README.textile
|
|
@@ -59,41 +62,30 @@ files:
|
|
|
59
62
|
- spec/redcap/server_spec.rb
|
|
60
63
|
- spec/redcap_spec.rb
|
|
61
64
|
- spec/spec_helper.rb
|
|
62
|
-
has_rdoc: true
|
|
63
65
|
homepage: http://github.com/flying-sphinx/redcap
|
|
64
66
|
licenses: []
|
|
65
|
-
|
|
67
|
+
metadata: {}
|
|
66
68
|
post_install_message:
|
|
67
69
|
rdoc_options: []
|
|
68
|
-
|
|
69
|
-
require_paths:
|
|
70
|
+
require_paths:
|
|
70
71
|
- lib
|
|
71
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
|
-
|
|
73
|
-
requirements:
|
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
74
|
- - ">="
|
|
75
|
-
- !ruby/object:Gem::Version
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
version: "0"
|
|
80
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
|
-
requirements:
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
83
79
|
- - ">="
|
|
84
|
-
- !ruby/object:Gem::Version
|
|
85
|
-
|
|
86
|
-
segments:
|
|
87
|
-
- 0
|
|
88
|
-
version: "0"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
89
82
|
requirements: []
|
|
90
|
-
|
|
91
83
|
rubyforge_project: redcap
|
|
92
|
-
rubygems_version:
|
|
84
|
+
rubygems_version: 2.6.11
|
|
93
85
|
signing_key:
|
|
94
|
-
specification_version:
|
|
86
|
+
specification_version: 4
|
|
95
87
|
summary: Translates SSH forward ports to process IDs
|
|
96
|
-
test_files:
|
|
88
|
+
test_files:
|
|
97
89
|
- spec/redcap/server_spec.rb
|
|
98
90
|
- spec/redcap_spec.rb
|
|
99
91
|
- spec/spec_helper.rb
|