Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Report usage of stripe_client #1721

Merged
merged 19 commits into from
Jan 17, 2024
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
33 changes: 31 additions & 2 deletions src/main/java/com/stripe/net/ApiRequest.java
Original file line number Diff line number Diff line change
@@ -1,20 +1,49 @@
package com.stripe.net;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import lombok.Getter;

@Getter
public class ApiRequest extends BaseApiRequest {
private Map<String, Object> params;

private ApiRequest(
BaseAddress baseAddress,
ApiResource.RequestMethod method,
String path,
RequestOptions options,
ApiMode apiMode,
List<String> usage,
Map<String, Object> params) {
super(baseAddress, method, path, options, apiMode, usage);
this.params = params;
}

public ApiRequest(
BaseAddress baseAddress,
ApiResource.RequestMethod method,
String path,
Map<String, Object> params,
RequestOptions options,
ApiMode apiMode) {
super(baseAddress, method, path, options, apiMode);
this.params = params;
this(baseAddress, method, path, options, apiMode, null, params);
}

public ApiRequest addUsage(String usage) {
List<String> newUsage = new ArrayList<>();
if (this.getUsage() != null) {
newUsage.addAll(this.getUsage());
}
newUsage.add(usage);
return new ApiRequest(
this.getBaseAddress(),
this.getMethod(),
this.getPath(),
this.getOptions(),
this.getApiMode(),
newUsage,
this.getParams());
}
}
32 changes: 14 additions & 18 deletions src/main/java/com/stripe/net/BaseApiRequest.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
package com.stripe.net;

import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@AllArgsConstructor(access = AccessLevel.PROTECTED)
class BaseApiRequest {
richardm-stripe marked this conversation as resolved.
Show resolved Hide resolved
private BaseAddress baseAddress;
private ApiResource.RequestMethod method;
private String path;
private RequestOptions options;
private ApiMode apiMode;
private final BaseAddress baseAddress;
private final ApiResource.RequestMethod method;
private final String path;
private final RequestOptions options;
private final ApiMode apiMode;

@Setter private List<String> usage;
// TODO (major): Remove setter and make final
private List<String> usage;

public BaseApiRequest(
BaseAddress baseAddress,
ApiResource.RequestMethod method,
String path,
RequestOptions options,
ApiMode apiMode) {
this.baseAddress = baseAddress;
this.method = method;
this.path = path;
this.options = options;
this.apiMode = apiMode;
/** @deprecated Use {@link com.stripe.net.ApiRequest#addUsage(String)} instead. */
@Deprecated
public void setUsage(List<String> usage) {
this.usage = usage;
}
}
1 change: 0 additions & 1 deletion src/main/java/com/stripe/net/HttpClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ public StripeResponseStream requestStream(StripeRequest request) throws StripeEx
private interface RequestSendFunction<R> {
R apply(StripeRequest request) throws StripeException;
}

/**
* @param request the request
* @return the response
Expand Down
12 changes: 8 additions & 4 deletions src/main/java/com/stripe/net/LiveStripeResponseGetter.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import java.util.Optional;

Expand All @@ -31,15 +32,16 @@ private interface RequestSendFunction<R> {
}

private <T extends AbstractStripeResponse<?>> T sendWithTelemetry(
StripeRequest request, RequestSendFunction<T> send) throws StripeException {
StripeRequest request, List<String> usage, RequestSendFunction<T> send)
throws StripeException {

Stopwatch stopwatch = Stopwatch.startNew();

T response = send.apply(request);

stopwatch.stop();

requestTelemetry.maybeEnqueueMetrics(response, stopwatch.getElapsed());
requestTelemetry.maybeEnqueueMetrics(response, stopwatch.getElapsed(), usage);

return response;
}
Expand Down Expand Up @@ -89,7 +91,8 @@ public <T extends StripeObjectInterface> T request(ApiRequest apiRequest, Type t
throws StripeException {

StripeRequest request = toStripeRequest(apiRequest);
StripeResponse response = sendWithTelemetry(request, r -> httpClient.requestWithRetries(r));
StripeResponse response =
sendWithTelemetry(request, apiRequest.getUsage(), r -> httpClient.requestWithRetries(r));

int responseCode = response.code();
String responseBody = response.body();
Expand Down Expand Up @@ -120,7 +123,8 @@ public <T extends StripeObjectInterface> T request(ApiRequest apiRequest, Type t
public InputStream requestStream(ApiRequest apiRequest) throws StripeException {
StripeRequest request = toStripeRequest(apiRequest);
StripeResponseStream responseStream =
sendWithTelemetry(request, r -> httpClient.requestStreamWithRetries(r));
sendWithTelemetry(
request, apiRequest.getUsage(), r -> httpClient.requestStreamWithRetries(r));

int responseCode = responseStream.code();

Expand Down
24 changes: 22 additions & 2 deletions src/main/java/com/stripe/net/RequestTelemetry.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.google.gson.annotations.SerializedName;
import com.stripe.Stripe;
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ConcurrentLinkedQueue;
import lombok.Data;
Expand Down Expand Up @@ -51,14 +53,25 @@ public Optional<String> pollPayload() {
return Optional.of(gson.toJson(payload));
}

// TODO (major) remove this overload
/**
* @deprecated use {@link #maybeEnqueueMetrics(AbstractStripeResponse, Duration, List)} instead.
*/
@Deprecated
public void maybeEnqueueMetrics(AbstractStripeResponse<?> response, Duration duration) {
maybeEnqueueMetrics(response, duration, new ArrayList<String>());
}

/**
* If telemetry is enabled and the queue is not full, then enqueue a new metrics item; otherwise,
* do nothing.
*
* @param response the Stripe response
* @param duration the request duration
* @param usage a list of tracked features used by the corresponding request
*/
public void maybeEnqueueMetrics(AbstractStripeResponse<?> response, Duration duration) {
public void maybeEnqueueMetrics(
AbstractStripeResponse<?> response, Duration duration, List<String> usage) {
if (!Stripe.enableTelemetry) {
return;
}
Expand All @@ -71,7 +84,11 @@ public void maybeEnqueueMetrics(AbstractStripeResponse<?> response, Duration dur
return;
}

RequestMetrics metrics = new RequestMetrics(response.requestId(), duration.toMillis());
if (usage != null && usage.size() == 0) {
usage = null;
}

RequestMetrics metrics = new RequestMetrics(response.requestId(), duration.toMillis(), usage);
prevRequestMetrics.add(metrics);
}

Expand All @@ -88,5 +105,8 @@ private static class RequestMetrics {

@SerializedName("request_duration_ms")
private final long requestDurationMs;

@SerializedName("usage")
private final List<String> usage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

/** Controls how the request is sent by {@link StripeResponseGetter} */
public abstract class StripeResponseGetterOptions {

// When adding setting here keep them in sync with settings in RequestOptions and
// When adding settings here keep them in sync with settings in RequestOptions and
// in the RequestOptions.merge method
public abstract String getApiKey();

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/stripe/service/AccountLinkService.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public AccountLink create(AccountLinkCreateParams params, RequestOptions options
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, AccountLink.class);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/stripe/service/AccountService.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public Account delete(String account, RequestOptions options) throws StripeExcep
ApiRequest request =
new ApiRequest(
BaseAddress.API, ApiResource.RequestMethod.DELETE, path, null, options, ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}
/** Retrieves the details of an account. */
Expand All @@ -81,6 +82,7 @@ public Account retrieve(String account, AccountRetrieveParams params, RequestOpt
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}
/**
Expand Down Expand Up @@ -163,6 +165,7 @@ public Account update(String account, AccountUpdateParams params, RequestOptions
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}
/** Retrieves the details of an account. */
Expand All @@ -189,6 +192,7 @@ public Account retrieveCurrent(AccountRetrieveCurrentParams params, RequestOptio
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}
/**
Expand Down Expand Up @@ -231,6 +235,7 @@ public StripeCollection<Account> list(AccountListParams params, RequestOptions o
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter()
.request(request, new TypeToken<StripeCollection<Account>>() {}.getType());
}
Expand Down Expand Up @@ -293,6 +298,7 @@ public Account create(AccountCreateParams params, RequestOptions options) throws
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}
/**
Expand Down Expand Up @@ -323,6 +329,7 @@ public Account reject(String account, AccountRejectParams params, RequestOptions
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Account.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public AccountSession create(AccountSessionCreateParams params, RequestOptions o
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, AccountSession.class);
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/stripe/service/ApplePayDomainService.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public ApplePayDomain delete(String domain, RequestOptions options) throws Strip
ApiRequest request =
new ApiRequest(
BaseAddress.API, ApiResource.RequestMethod.DELETE, path, null, options, ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, ApplePayDomain.class);
}
/** Retrieve an apple pay domain. */
Expand Down Expand Up @@ -60,6 +61,7 @@ public ApplePayDomain retrieve(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, ApplePayDomain.class);
}
/** List apple pay domains. */
Expand Down Expand Up @@ -87,6 +89,7 @@ public StripeCollection<ApplePayDomain> list(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter()
.request(request, new TypeToken<StripeCollection<ApplePayDomain>>() {}.getType());
}
Expand All @@ -106,6 +109,7 @@ public ApplePayDomain create(ApplePayDomainCreateParams params, RequestOptions o
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, ApplePayDomain.class);
}
}
2 changes: 2 additions & 0 deletions src/main/java/com/stripe/service/ApplicationFeeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public StripeCollection<ApplicationFee> list(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter()
.request(request, new TypeToken<StripeCollection<ApplicationFee>>() {}.getType());
}
Expand Down Expand Up @@ -99,6 +100,7 @@ public ApplicationFee retrieve(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, ApplicationFee.class);
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/stripe/service/BalanceService.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public Balance retrieve(BalanceRetrieveParams params, RequestOptions options)
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Balance.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public StripeCollection<BalanceTransaction> list(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter()
.request(request, new TypeToken<StripeCollection<BalanceTransaction>>() {}.getType());
}
Expand Down Expand Up @@ -119,6 +120,7 @@ public BalanceTransaction retrieve(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, BalanceTransaction.class);
}
}
1 change: 1 addition & 0 deletions src/main/java/com/stripe/service/BankAccountService.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public BankAccount verify(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, BankAccount.class);
}
}
3 changes: 3 additions & 0 deletions src/main/java/com/stripe/service/CapabilityService.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public StripeCollection<Capability> list(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter()
.request(request, new TypeToken<StripeCollection<Capability>>() {}.getType());
}
Expand Down Expand Up @@ -93,6 +94,7 @@ public Capability retrieve(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Capability.class);
}
/**
Expand Down Expand Up @@ -137,6 +139,7 @@ public Capability update(
ApiRequestParams.paramsToMap(params),
options,
ApiMode.V1);
request = request.addUsage("stripe_client");
return getResponseGetter().request(request, Capability.class);
}
}
Loading
Loading