debug_socket 0.1.2 → 0.1.3
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/.rspec +3 -0
- data/.rubocop.yml +3 -0
- data/.travis.yml +3 -5
- data/CHANGES.md +6 -0
- data/Gemfile +5 -0
- data/README.md +26 -1
- data/debug_socket.gemspec +0 -6
- data/exe/debug-socket +13 -0
- data/lib/debug_socket.rb +8 -6
- data/lib/debug_socket/version.rb +1 -1
- metadata +8 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14eca78815c548cdb4782e8cda4588b6d7b66951
|
4
|
+
data.tar.gz: 457c0294ab9f9be83b45bb57ecc99784878c9882
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f35b1bef6088c4693197602a2d7951408f242fd6eb6ab1bc3f11c7dc520b0de51607002fa2a185112871529f89f916a41759a74174657eb88e02b411801a07d8
|
7
|
+
data.tar.gz: 971bd7cece3daf3110e01edac0c599f524993f1ac56ef9eb94215d853f39cfe336580ab97b644dea57afee3904dde1d33b39b041c1f0226e4609fd8e07ede0d9
|
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGES.md
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
A unix domain socket that listens for debug commands.
|
4
4
|
|
5
|
+
[](https://travis-ci.org/square/debug_socket)
|
5
6
|
|
6
7
|
## Warning
|
7
8
|
|
@@ -35,12 +36,17 @@ in `config/initializers/sidekiq.rb`
|
|
35
36
|
```ruby
|
36
37
|
Sidekiq.configure_server do |_config|
|
37
38
|
DebugSocket.logger = Sidekiq::Logging.logger
|
39
|
+
# GOTCHA: if the Rails.root.join("tmp", "sidekiq-debug-#{Process.pid}.sock")
|
40
|
+
# path is too long, this will fail. The max on Linux is 108 characters, MacOS
|
41
|
+
# is 104. If the path is too long, try using a relative path or /tmp/<blah>.
|
38
42
|
DebugSocket.start(Rails.root.join("tmp", "sidekiq-debug-#{Process.pid}.sock"))
|
39
43
|
at_exit { DebugSocket.stop }
|
40
44
|
end
|
41
45
|
```
|
42
46
|
|
43
|
-
|
47
|
+
You can now send ruby instruction commands through the socket and they'll be
|
48
|
+
executed in your running process. You can use `socat` to write and read
|
49
|
+
from the socket and dump to `stdout` like so:
|
44
50
|
|
45
51
|
```
|
46
52
|
% echo backtrace | socat - UNIX-CONNECT:~/tmp/puma-debug-1234.sock
|
@@ -57,6 +63,25 @@ spec/debug_socket_spec.rb:48:in `sleep'
|
|
57
63
|
spec/debug_socket_spec.rb:48:in `block (4 levels) in <top (required)>'
|
58
64
|
```
|
59
65
|
|
66
|
+
The gem also provides a helper script that wraps the above command. The
|
67
|
+
`debug-socket` script takes one argument, the path to the unix socket, and it
|
68
|
+
will run the `backtrace` command through that socket.
|
69
|
+
|
70
|
+
```
|
71
|
+
% debug-socket ~/tmp/puma-debug-1234.sock
|
72
|
+
2016-08-09T00:51:57Z puma: cluster worker 0: 1234
|
73
|
+
2016-08-09T00:51:57Z pid=1234 thread.object_id=70099243629020 thread.status=run
|
74
|
+
lib/debug_socket.rb:55:in `backtrace'
|
75
|
+
lib/debug_socket.rb:55:in `block in backtrace'
|
76
|
+
lib/debug_socket.rb:54:in `map'
|
77
|
+
lib/debug_socket.rb:54:in `backtrace'
|
78
|
+
spec/debug_socket_spec.rb:48:in `block (3 levels) in <top (required)>'
|
79
|
+
|
80
|
+
2016-08-09T00:51:57Z pid=1234 thread.object_id=70121809360520 thread.status=sleep
|
81
|
+
spec/debug_socket_spec.rb:48:in `sleep'
|
82
|
+
spec/debug_socket_spec.rb:48:in `block (4 levels) in <top (required)>'
|
83
|
+
```
|
84
|
+
|
60
85
|
## Contributing
|
61
86
|
|
62
87
|
Bug reports and pull requests are welcome on GitHub at https://github.com/square/debug_socket.
|
data/debug_socket.gemspec
CHANGED
@@ -16,10 +16,4 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.bindir = "exe"
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
|
-
|
20
|
-
spec.add_development_dependency "bundler", "~> 1.11"
|
21
|
-
spec.add_development_dependency "pry"
|
22
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
-
spec.add_development_dependency "rubocop", "0.40.0"
|
25
19
|
end
|
data/exe/debug-socket
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
if ARGV[0].nil? || ARGV[0].empty?
|
4
|
+
puts "\nUsage: debug-socket <socket-path>"
|
5
|
+
puts "Default command is backtrace\n"
|
6
|
+
exit 1
|
7
|
+
end
|
8
|
+
|
9
|
+
puts ""
|
10
|
+
puts "Sending `backtrace` to the following socket: #{ARGV[0]}"
|
11
|
+
puts "----------------------------------------------------------"
|
12
|
+
puts ""
|
13
|
+
Kernel.exec("echo backtrace | socat - UNIX-CONNECT:#{ARGV[0]}")
|
data/lib/debug_socket.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require "debug_socket/version"
|
2
2
|
require "socket"
|
3
|
+
require "time"
|
3
4
|
|
4
5
|
module DebugSocket
|
6
|
+
@thread = nil
|
7
|
+
|
5
8
|
def self.logger=(logger)
|
6
9
|
@logger = logger
|
7
10
|
end
|
@@ -16,7 +19,7 @@ module DebugSocket
|
|
16
19
|
raise "debug socket thread already running" if @thread
|
17
20
|
|
18
21
|
# make sure socket is only accessible to the process owner
|
19
|
-
old_mask = File.umask(
|
22
|
+
old_mask = File.umask(0o0177)
|
20
23
|
|
21
24
|
@path = path.to_s
|
22
25
|
|
@@ -26,12 +29,11 @@ module DebugSocket
|
|
26
29
|
begin
|
27
30
|
socket = server.accept
|
28
31
|
input = socket.read
|
29
|
-
logger.warn("
|
30
|
-
socket.puts(eval(input)) # rubocop:disable
|
31
|
-
rescue => e
|
32
|
+
logger.warn("debug-socket-command=#{input.inspect}") if logger
|
33
|
+
socket.puts(eval(input)) # rubocop:disable Security/Eval
|
34
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
32
35
|
next unless logger
|
33
|
-
logger.error("
|
34
|
-
logger.error(e.backtrace)
|
36
|
+
logger.error("debug-socket-error=#{e.inspect} backtrace=#{e.backtrace.inspect}")
|
35
37
|
ensure
|
36
38
|
socket.close
|
37
39
|
end
|
data/lib/debug_socket/version.rb
CHANGED
metadata
CHANGED
@@ -1,89 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: debug_socket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Lazarus
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.11'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.11'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pry
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '10.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '10.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rubocop
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.40.0
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.40.0
|
11
|
+
date: 2017-02-23 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
83
13
|
description:
|
84
14
|
email:
|
85
15
|
- lazarus@squareup.com
|
86
|
-
executables:
|
16
|
+
executables:
|
17
|
+
- debug-socket
|
87
18
|
extensions: []
|
88
19
|
extra_rdoc_files: []
|
89
20
|
files:
|
@@ -91,6 +22,7 @@ files:
|
|
91
22
|
- ".rspec"
|
92
23
|
- ".rubocop.yml"
|
93
24
|
- ".travis.yml"
|
25
|
+
- CHANGES.md
|
94
26
|
- Gemfile
|
95
27
|
- LICENSE.txt
|
96
28
|
- README.md
|
@@ -98,6 +30,7 @@ files:
|
|
98
30
|
- bin/console
|
99
31
|
- bin/setup
|
100
32
|
- debug_socket.gemspec
|
33
|
+
- exe/debug-socket
|
101
34
|
- lib/debug_socket.rb
|
102
35
|
- lib/debug_socket/version.rb
|
103
36
|
homepage: https://github.com/square/debug_socket
|
@@ -119,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
52
|
version: '0'
|
120
53
|
requirements: []
|
121
54
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
55
|
+
rubygems_version: 2.6.10
|
123
56
|
signing_key:
|
124
57
|
specification_version: 4
|
125
58
|
summary: Debug Socket for running ruby processes
|