debug_socket 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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