mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Fix: Invalid JSON on gc-stats (#1801)
* Fix: Invalid JSON on gc-stats Credits of this patch should be for @jdsundberg, who reported the issue but never sent a patch. Link to his bug report is below. Closes #1687. * Update tests so JSON response is correctly parsed JSON without a whitespace between key and values wasn't being correctly parsed (for example: `key: 'value'` was processed ok, but `key:'value'` wasn't).
This commit is contained in:
parent
73c20266fd
commit
2db1ef10f7
2 changed files with 5 additions and 8 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
require 'json'
|
||||||
|
|
||||||
module Puma
|
module Puma
|
||||||
module App
|
module App
|
||||||
class Status
|
class Status
|
||||||
|
@ -60,8 +62,7 @@ module Puma
|
||||||
return rack_response(200, OK_STATUS)
|
return rack_response(200, OK_STATUS)
|
||||||
|
|
||||||
when /\/gc-stats$/
|
when /\/gc-stats$/
|
||||||
json = "{" + GC.stat.map { |k, v| "\"#{k}\": #{v}" }.join(",") + "}"
|
return rack_response(200, GC.stat.to_json)
|
||||||
return rack_response(200, json)
|
|
||||||
|
|
||||||
when /\/stats$/
|
when /\/stats$/
|
||||||
return rack_response(200, @cli.stats)
|
return rack_response(200, @cli.stats)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
require "puma/cli"
|
require "puma/cli"
|
||||||
|
require "json"
|
||||||
|
|
||||||
class TestCLI < Minitest::Test
|
class TestCLI < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
|
@ -195,12 +196,7 @@ class TestCLI < Minitest::Test
|
||||||
|
|
||||||
lines = body.split("\r\n")
|
lines = body.split("\r\n")
|
||||||
json_line = lines.detect { |l| l[0] == "{" }
|
json_line = lines.detect { |l| l[0] == "{" }
|
||||||
pairs = json_line.scan(/\"[^\"]+\": [^,]+/)
|
gc_stats = JSON.parse(json_line)
|
||||||
gc_stats = {}
|
|
||||||
pairs.each do |p|
|
|
||||||
p =~ /\"([^\"]+)\": ([^,]+)/ || raise("Can't parse #{p.inspect}!")
|
|
||||||
gc_stats[$1] = $2
|
|
||||||
end
|
|
||||||
gc_count_after = gc_stats["count"].to_i
|
gc_count_after = gc_stats["count"].to_i
|
||||||
|
|
||||||
# Hitting the /gc route should increment the count by 1
|
# Hitting the /gc route should increment the count by 1
|
||||||
|
|
Loading…
Reference in a new issue