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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb25e218ef23ecf95a88462d1d5bdbbe43a17aa8
4
- data.tar.gz: 0d946d025dfe5a19bc3abc2c6472df2f49c99ecc
3
+ metadata.gz: 14eca78815c548cdb4782e8cda4588b6d7b66951
4
+ data.tar.gz: 457c0294ab9f9be83b45bb57ecc99784878c9882
5
5
  SHA512:
6
- metadata.gz: a733d2731cbc2c64c5787a22854bc56b3df8878dd1b03fb02ef0c55f5978cbf259546d7baaf582b9b7b73663d619f5b7eef3326189d92b58c11779ae8f2b782d
7
- data.tar.gz: 58b09d9b73546d106f8e6f48c117af70bc1383adc4d064e691df0bfe6139c3981cb0edf4ea8f88d353212e9b14131012ae84b5db84516600f3a290e2bf6ee76d
6
+ metadata.gz: f35b1bef6088c4693197602a2d7951408f242fd6eb6ab1bc3f11c7dc520b0de51607002fa2a185112871529f89f916a41759a74174657eb88e02b411801a07d8
7
+ data.tar.gz: 971bd7cece3daf3110e01edac0c599f524993f1ac56ef9eb94215d853f39cfe336580ab97b644dea57afee3904dde1d33b39b041c1f0226e4609fd8e07ede0d9
data/.rspec CHANGED
@@ -1,2 +1,5 @@
1
1
  --format documentation
2
2
  --color
3
+ --require spec_helper
4
+ --warnings
5
+ --order rand
data/.rubocop.yml CHANGED
@@ -13,6 +13,9 @@ Encoding:
13
13
  Metrics/AbcSize:
14
14
  Max: 50
15
15
 
16
+ Metrics/BlockLength:
17
+ Enabled: false
18
+
16
19
  Metrics/CyclomaticComplexity:
17
20
  Max: 25
18
21
 
data/.travis.yml CHANGED
@@ -1,10 +1,8 @@
1
- bundler_args: --without development
2
1
  language: ruby
3
2
  rvm:
4
- - 2.1
5
- - 2.2
6
- - 2.3
7
- - jruby-9.0
3
+ - 2.3.3
4
+ - 2.4.0
5
+ - jruby-9.1.7.0
8
6
  - ruby-head
9
7
  matrix:
10
8
  allow_failures:
data/CHANGES.md ADDED
@@ -0,0 +1,6 @@
1
+ ### 0.1.3 2017-02-23
2
+ - Handle syntax errors (and other errors that do not inherit from StandardError) in eval.
3
+ - Cleanup logging and change log message format
4
+
5
+ ### 0.1.2 2016-08-24
6
+ - Initial Release
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in debug_socket.gemspec
4
4
  gemspec
5
+
6
+ gem "pry"
7
+ gem "rake"
8
+ gem "rspec", "~> 3.5"
9
+ gem "rubocop", "0.47.1"
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  A unix domain socket that listens for debug commands.
4
4
 
5
+ [![Build Status](https://travis-ci.org/square/debug_socket.svg?branch=master)](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
- Then in a terminal:
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(0177)
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("[DEBUG SOCKET] #{input.inspect}") if logger
30
- socket.puts(eval(input)) # rubocop:disable Lint/Eval
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("[DEBUG SOCKET] error=#{e.inspect}")
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
@@ -1,3 +1,3 @@
1
1
  module DebugSocket
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "0.1.3".freeze
3
3
  end
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.2
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: 2016-08-24 00:00:00.000000000 Z
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.5.1
55
+ rubygems_version: 2.6.10
123
56
  signing_key:
124
57
  specification_version: 4
125
58
  summary: Debug Socket for running ruby processes