mirror of
https://github.com/stripe/stripe-ruby.git
synced 2025-10-17 00:03:02 -04:00
Merge pull request #1293 from stripe/richardm-usage
Measure usage of .save
This commit is contained in:
commit
db16cf65c4
2
Makefile
2
Makefile
@ -5,7 +5,7 @@ update-version:
|
||||
|
||||
codegen-format:
|
||||
bundle install --quiet
|
||||
bundle exec rubocop -o /dev/null --auto-correct
|
||||
bundle exec rubocop -o /dev/null --autocorrect
|
||||
|
||||
ci-test:
|
||||
bundle install && bundle exec rake test
|
||||
|
@ -291,10 +291,11 @@ Stripe.set_app_info('MyAwesomePlugin', version: '1.2.34', url: 'https://myawesom
|
||||
This information is passed along when the library makes calls to the Stripe
|
||||
API.
|
||||
|
||||
### Request latency telemetry
|
||||
### Telemetry
|
||||
|
||||
By default, the library sends request latency telemetry to Stripe. These
|
||||
numbers help Stripe improve the overall latency of its API for all users.
|
||||
By default, the library sends telemetry to Stripe regarding request latency and feature usage. These
|
||||
numbers help Stripe improve the overall latency of its API for all users, and
|
||||
improve popular features.
|
||||
|
||||
You can disable this behavior if you prefer:
|
||||
|
||||
|
@ -5,14 +5,14 @@ module Stripe
|
||||
module Request
|
||||
module ClassMethods
|
||||
def execute_resource_request(method, url,
|
||||
params = {}, opts = {})
|
||||
params = {}, opts = {}, usage = [])
|
||||
execute_resource_request_internal(
|
||||
:execute_request, method, url, params, opts
|
||||
:execute_request, method, url, params, opts, usage
|
||||
)
|
||||
end
|
||||
|
||||
def execute_resource_request_stream(method, url,
|
||||
params = {}, opts = {},
|
||||
params = {}, opts = {}, usage = [],
|
||||
&read_body_chunk_block)
|
||||
execute_resource_request_internal(
|
||||
:execute_request_stream,
|
||||
@ -20,18 +20,19 @@ module Stripe
|
||||
url,
|
||||
params,
|
||||
opts,
|
||||
usage,
|
||||
&read_body_chunk_block
|
||||
)
|
||||
end
|
||||
|
||||
private def request_stripe_object(method:, path:, params:, opts: {})
|
||||
resp, opts = execute_resource_request(method, path, params, opts)
|
||||
private def request_stripe_object(method:, path:, params:, opts: {}, usage: [])
|
||||
resp, opts = execute_resource_request(method, path, params, opts, usage)
|
||||
Util.convert_to_stripe_object_with_params(resp.data, params, opts)
|
||||
end
|
||||
|
||||
private def execute_resource_request_internal(client_request_method_sym,
|
||||
method, url,
|
||||
params, opts,
|
||||
params, opts, usage,
|
||||
&read_body_chunk_block)
|
||||
params ||= {}
|
||||
|
||||
@ -53,7 +54,7 @@ module Stripe
|
||||
client_request_method_sym,
|
||||
method, url,
|
||||
api_base: api_base, api_key: api_key,
|
||||
headers: headers, params: params,
|
||||
headers: headers, params: params, usage: usage,
|
||||
&read_body_chunk_block
|
||||
)
|
||||
|
||||
@ -66,6 +67,7 @@ module Stripe
|
||||
[resp, opts_to_persist]
|
||||
end
|
||||
|
||||
# TODO: (major)
|
||||
# This method used to be called `request`, but it's such a short name
|
||||
# that it eventually conflicted with the name of a field on an API
|
||||
# resource (specifically, `Event#request`), so it was renamed to
|
||||
@ -111,9 +113,9 @@ module Stripe
|
||||
end
|
||||
|
||||
protected def execute_resource_request(method, url,
|
||||
params = {}, opts = {})
|
||||
params = {}, opts = {}, usage = [])
|
||||
opts = @opts.merge(Util.normalize_opts(opts))
|
||||
self.class.execute_resource_request(method, url, params, opts)
|
||||
self.class.execute_resource_request(method, url, params, opts, usage)
|
||||
end
|
||||
|
||||
protected def execute_resource_request_stream(method, url,
|
||||
@ -125,8 +127,8 @@ module Stripe
|
||||
)
|
||||
end
|
||||
|
||||
private def request_stripe_object(method:, path:, params:, opts: {})
|
||||
resp, opts = execute_resource_request(method, path, params, opts)
|
||||
private def request_stripe_object(method:, path:, params:, opts: {}, usage: [])
|
||||
resp, opts = execute_resource_request(method, path, params, opts, usage)
|
||||
Util.convert_to_stripe_object_with_params(resp.data, params, opts)
|
||||
end
|
||||
|
||||
|
@ -66,7 +66,7 @@ module Stripe
|
||||
# generated a uri for this object with an identifier baked in
|
||||
values.delete(:id)
|
||||
|
||||
resp, opts = execute_resource_request(:post, save_url, values, opts)
|
||||
resp, opts = execute_resource_request(:post, save_url, values, opts, ["save"])
|
||||
initialize_from(resp.data, opts)
|
||||
end
|
||||
extend Gem::Deprecate
|
||||
|
@ -209,9 +209,9 @@ module Stripe
|
||||
end
|
||||
|
||||
def execute_request(method, path,
|
||||
api_base: nil, api_key: nil, headers: {}, params: {})
|
||||
api_base: nil, api_key: nil, headers: {}, params: {}, usage: [])
|
||||
http_resp, api_key = execute_request_internal(
|
||||
method, path, api_base, api_key, headers, params
|
||||
method, path, api_base, api_key, headers, params, usage
|
||||
)
|
||||
|
||||
begin
|
||||
@ -240,7 +240,7 @@ module Stripe
|
||||
# passed, then a StripeStreamResponse is returned containing an IO stream
|
||||
# with the response body.
|
||||
def execute_request_stream(method, path,
|
||||
api_base: nil, api_key: nil,
|
||||
api_base: nil, api_key: nil, usage: [],
|
||||
headers: {}, params: {},
|
||||
&read_body_chunk_block)
|
||||
unless block_given?
|
||||
@ -249,7 +249,7 @@ module Stripe
|
||||
end
|
||||
|
||||
http_resp, api_key = execute_request_internal(
|
||||
method, path, api_base, api_key, headers, params, &read_body_chunk_block
|
||||
method, path, api_base, api_key, headers, params, usage, &read_body_chunk_block
|
||||
)
|
||||
|
||||
# When the read_body_chunk_block is given, we no longer have access to the
|
||||
@ -428,7 +428,7 @@ module Stripe
|
||||
end
|
||||
|
||||
private def execute_request_internal(method, path,
|
||||
api_base, api_key, headers, params,
|
||||
api_base, api_key, headers, params, usage,
|
||||
&read_body_chunk_block)
|
||||
raise ArgumentError, "method should be a symbol" \
|
||||
unless method.is_a?(Symbol)
|
||||
@ -490,7 +490,7 @@ module Stripe
|
||||
end
|
||||
|
||||
http_resp =
|
||||
execute_request_with_rescues(method, api_base, headers, context) do
|
||||
execute_request_with_rescues(method, api_base, headers, usage, context) do
|
||||
self.class
|
||||
.default_connection_manager(config)
|
||||
.execute_request(method, url,
|
||||
@ -560,7 +560,7 @@ module Stripe
|
||||
http_status >= 400
|
||||
end
|
||||
|
||||
private def execute_request_with_rescues(method, api_base, headers, context)
|
||||
private def execute_request_with_rescues(method, api_base, headers, usage, context)
|
||||
num_retries = 0
|
||||
|
||||
begin
|
||||
@ -586,7 +586,7 @@ module Stripe
|
||||
if config.enable_telemetry? && context.request_id
|
||||
request_duration_ms = (request_duration * 1000).to_i
|
||||
@last_request_metrics =
|
||||
StripeRequestMetrics.new(context.request_id, request_duration_ms)
|
||||
StripeRequestMetrics.new(context.request_id, request_duration_ms, usage: usage)
|
||||
end
|
||||
|
||||
# We rescue all exceptions from a request so that we have an easy spot to
|
||||
@ -1038,13 +1038,19 @@ module Stripe
|
||||
# Request duration in milliseconds
|
||||
attr_accessor :request_duration_ms
|
||||
|
||||
def initialize(request_id, request_duration_ms)
|
||||
# list of names of tracked behaviors associated with this request
|
||||
attr_accessor :usage
|
||||
|
||||
def initialize(request_id, request_duration_ms, usage: [])
|
||||
self.request_id = request_id
|
||||
self.request_duration_ms = request_duration_ms
|
||||
self.usage = usage
|
||||
end
|
||||
|
||||
def payload
|
||||
{ request_id: request_id, request_duration_ms: request_duration_ms }
|
||||
ret = { request_id: request_id, request_duration_ms: request_duration_ms }
|
||||
ret[:usage] = usage if !usage.nil? && !usage.empty?
|
||||
ret
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1408,14 +1408,24 @@ module Stripe
|
||||
false
|
||||
end.to_return(body: JSON.generate(object: "charge"))
|
||||
|
||||
Stripe::Charge.list
|
||||
cus = Stripe::Customer.new("cus_xyz")
|
||||
cus.description = "hello"
|
||||
cus.save
|
||||
Stripe::Charge.list
|
||||
|
||||
assert(!trace_metrics_header.nil?)
|
||||
|
||||
trace_payload = JSON.parse(trace_metrics_header)
|
||||
|
||||
assert(trace_payload["last_request_metrics"]["request_id"] == "req_123")
|
||||
assert(!trace_payload["last_request_metrics"]["request_duration_ms"].nil?)
|
||||
assert(trace_payload["last_request_metrics"]["usage"] == ["save"])
|
||||
|
||||
Stripe::Charge.list
|
||||
trace_payload = JSON.parse(trace_metrics_header)
|
||||
assert(trace_payload["last_request_metrics"]["request_id"] == "req_123")
|
||||
assert(!trace_payload["last_request_metrics"]["request_duration_ms"].nil?)
|
||||
assert(trace_payload["last_request_metrics"]["usage"].nil?)
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user