这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions lib/pliny/helpers/serialize.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@ def self.included(base)
end

def serialize(data, structure = :default)
if self.class.serializer_class.nil?
serializer_class = self.class.serializer_class

if serializer_class.nil?
raise <<-eos.strip
No serializer has been specified for this endpoint. Please specify one with
`serializer Serializers::ModelName` in the endpoint.
eos
end

self.class.serializer_class.new(structure).serialize(data)
env['pliny.serializer_arity'] = data.respond_to?(:size) ? data.size : 1

start = Time.now
serializer_class.new(structure).serialize(data).tap do
env['pliny.serializer_timing'] = (Time.now - start).to_f
end
end

module ClassMethods
Expand Down
4 changes: 4 additions & 0 deletions lib/pliny/middleware/canonical_log_line.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,14 @@ class LogLine

log_field :response_length, Integer
log_field :response_status, Integer
log_field :serializer_arity, Integer

#
# timing
#

log_field :timing_total_elapsed, Float
log_field :timing_serializer, Float
end

def initialize(app, emitter:)
Expand Down Expand Up @@ -103,12 +105,14 @@ def call(env)
line.response_length = length.to_i
end
line.response_status = status
line.serializer_arity = env["pliny.serializer_arity"]

#
# timing
#

line.timing_total_elapsed = (Time.now - start).to_f
line.timing_serializer = env["pliny.serializer_timing"]

@emitter.call(line.to_h)
rescue => e
Expand Down
12 changes: 12 additions & 0 deletions spec/helpers/serialize_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ def app
get "/" do
MultiJson.encode(serialize([]))
end

get "/env" do
MultiJson.encode(serialize(env))
end
end
end

Expand All @@ -44,5 +48,13 @@ def app
assert_equal 200, last_response.status
assert_equal MultiJson.encode([]), last_response.body
end

it "emits information for canonical log lines" do
get "/env"
assert_equal 200, last_response.status
body = MultiJson.decode(last_response.body)
assert body["pliny.serializer_arity"] > 1
assert body["pliny.serializer_timing"] > 0
end
end
end