From 148adb5ba96a7c7caa1f22365935f449c49d87f7 Mon Sep 17 00:00:00 2001 From: Anurag Bandyopadhyay Date: Wed, 20 Aug 2025 09:19:27 +0000 Subject: [PATCH 1/2] feat: implement telemetry singleton pattern to use shared instance across SDK components --- .../java/dev/openfga/sdk/api/OpenFgaApi.java | 41 ++++--- .../openfga/sdk/api/auth/OAuth2Client.java | 15 ++- .../sdk/api/client/HttpRequestAttempt.java | 15 ++- .../sdk/api/configuration/Configuration.java | 18 +++ .../dev/openfga/sdk/api/OpenFgaApiTest.java | 2 + .../ConfigurationTelemetryTest.java | 67 ++++++++++ .../TelemetrySingletonIntegrationTest.java | 116 ++++++++++++++++++ 7 files changed, 252 insertions(+), 22 deletions(-) create mode 100644 src/test/java/dev/openfga/sdk/api/configuration/ConfigurationTelemetryTest.java create mode 100644 src/test/java/dev/openfga/sdk/api/integration/TelemetrySingletonIntegrationTest.java diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index 6a88c8aa..f7069624 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -78,10 +78,10 @@ public OpenFgaApi(Configuration configuration) throws FgaInvalidParameterExcepti public OpenFgaApi(Configuration configuration, ApiClient apiClient) throws FgaInvalidParameterException { this.apiClient = apiClient; this.configuration = configuration; - this.telemetry = new Telemetry(this.configuration); + this.telemetry = configuration.getTelemetry(); if (configuration.getCredentials().getCredentialsMethod() == CredentialsMethod.CLIENT_CREDENTIALS) { - this.oAuth2Client = new OAuth2Client(configuration, apiClient); + this.oAuth2Client = new OAuth2Client(configuration, apiClient, this.telemetry); } else { this.oAuth2Client = null; } @@ -145,7 +145,7 @@ private CompletableFuture> batchCheck( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "batchCheck", BatchCheckResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "batchCheck", BatchCheckResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -201,7 +201,7 @@ private CompletableFuture> check( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "check", CheckResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "check", CheckResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -251,7 +251,7 @@ private CompletableFuture> createStore( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "createStore", CreateStoreResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "createStore", CreateStoreResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -300,7 +300,7 @@ private CompletableFuture> deleteStore(String storeId, Configu try { HttpRequest request = buildHttpRequest("DELETE", path, configuration); - return new HttpRequestAttempt<>(request, "deleteStore", Void.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "deleteStore", Void.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -356,7 +356,7 @@ private CompletableFuture> expand( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "expand", ExpandResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "expand", ExpandResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -406,7 +406,7 @@ private CompletableFuture> getStore(String storeId try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "getStore", GetStoreResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "getStore", GetStoreResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -462,7 +462,7 @@ private CompletableFuture> listObjects( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "listObjects", ListObjectsResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "listObjects", ListObjectsResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -513,7 +513,7 @@ private CompletableFuture> listStores( try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "listStores", ListStoresResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "listStores", ListStoresResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -569,7 +569,7 @@ private CompletableFuture> listUsers( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "listUsers", ListUsersResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "listUsers", ListUsersResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -625,7 +625,7 @@ private CompletableFuture> read( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "read", ReadResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "read", ReadResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -684,7 +684,7 @@ private CompletableFuture> readAssertions( try { HttpRequest request = buildHttpRequest("GET", path, configuration); return new HttpRequestAttempt<>( - request, "readAssertions", ReadAssertionsResponse.class, apiClient, configuration) + request, "readAssertions", ReadAssertionsResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -746,7 +746,8 @@ private CompletableFuture> readAutho "readAuthorizationModel", ReadAuthorizationModelResponse.class, apiClient, - configuration) + configuration, + this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -810,7 +811,8 @@ private CompletableFuture> readAuth "readAuthorizationModels", ReadAuthorizationModelsResponse.class, apiClient, - configuration) + configuration, + this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -896,7 +898,7 @@ private CompletableFuture> readChanges( try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "readChanges", ReadChangesResponse.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "readChanges", ReadChangesResponse.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -951,7 +953,7 @@ private CompletableFuture> write(String storeId, WriteReques try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "write", Object.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "write", Object.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -1018,7 +1020,7 @@ private CompletableFuture> writeAssertions( try { HttpRequest request = buildHttpRequest("PUT", path, body, configuration); - return new HttpRequestAttempt<>(request, "writeAssertions", Void.class, apiClient, configuration) + return new HttpRequestAttempt<>(request, "writeAssertions", Void.class, apiClient, configuration, this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -1080,7 +1082,8 @@ private CompletableFuture> writeAut "writeAuthorizationModel", WriteAuthorizationModelResponse.class, apiClient, - configuration) + configuration, + this.telemetry) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { diff --git a/src/main/java/dev/openfga/sdk/api/auth/OAuth2Client.java b/src/main/java/dev/openfga/sdk/api/auth/OAuth2Client.java index 2fca23b6..88b42453 100644 --- a/src/main/java/dev/openfga/sdk/api/auth/OAuth2Client.java +++ b/src/main/java/dev/openfga/sdk/api/auth/OAuth2Client.java @@ -40,6 +40,17 @@ public class OAuth2Client { * @param configuration Configuration, including credentials, that can be used to retrieve an access tokens */ public OAuth2Client(Configuration configuration, ApiClient apiClient) throws FgaInvalidParameterException { + this(configuration, apiClient, configuration.getTelemetry()); + } + + /** + * Initializes a new instance of the {@link OAuth2Client} class + * + * @param configuration Configuration, including credentials, that can be used to retrieve an access tokens + * @param apiClient The API client to use for HTTP requests + * @param telemetry The shared telemetry instance to use + */ + public OAuth2Client(Configuration configuration, ApiClient apiClient, Telemetry telemetry) throws FgaInvalidParameterException { var clientCredentials = configuration.getCredentials().getClientCredentials(); this.apiClient = apiClient; @@ -53,7 +64,7 @@ public OAuth2Client(Configuration configuration, ApiClient apiClient) throws Fga .maxRetries(configuration.getMaxRetries()) .minimumRetryDelay(configuration.getMinimumRetryDelay()) .telemetryConfiguration(configuration.getTelemetryConfiguration()); - this.telemetry = new Telemetry(this.config); + this.telemetry = telemetry; } /** @@ -90,7 +101,7 @@ private CompletableFuture exchangeToken() ApiClient.formRequestBuilder("POST", "", this.authRequest.buildFormRequestBody(), config); HttpRequest request = requestBuilder.build(); - return new HttpRequestAttempt<>(request, "exchangeToken", CredentialsFlowResponse.class, apiClient, config) + return new HttpRequestAttempt<>(request, "exchangeToken", CredentialsFlowResponse.class, apiClient, config, telemetry) .attemptHttpRequest() .thenApply(ApiResponse::getData); } diff --git a/src/main/java/dev/openfga/sdk/api/client/HttpRequestAttempt.java b/src/main/java/dev/openfga/sdk/api/client/HttpRequestAttempt.java index 62bab071..ffa1f31e 100644 --- a/src/main/java/dev/openfga/sdk/api/client/HttpRequestAttempt.java +++ b/src/main/java/dev/openfga/sdk/api/client/HttpRequestAttempt.java @@ -42,7 +42,20 @@ public HttpRequestAttempt( this.name = name; this.request = request; this.clazz = clazz; - this.telemetry = new Telemetry(configuration); + this.telemetry = configuration.getTelemetry(); + this.telemetryAttributes = new HashMap<>(); + } + + public HttpRequestAttempt( + HttpRequest request, String name, Class clazz, ApiClient apiClient, Configuration configuration, Telemetry telemetry) + throws FgaInvalidParameterException { + assertParamExists(configuration.getMaxRetries(), "maxRetries", "Configuration"); + this.apiClient = apiClient; + this.configuration = configuration; + this.name = name; + this.request = request; + this.clazz = clazz; + this.telemetry = telemetry; this.telemetryAttributes = new HashMap<>(); } diff --git a/src/main/java/dev/openfga/sdk/api/configuration/Configuration.java b/src/main/java/dev/openfga/sdk/api/configuration/Configuration.java index 8c518389..3333ac6e 100644 --- a/src/main/java/dev/openfga/sdk/api/configuration/Configuration.java +++ b/src/main/java/dev/openfga/sdk/api/configuration/Configuration.java @@ -16,6 +16,7 @@ import static dev.openfga.sdk.util.Validation.assertParamExists; import dev.openfga.sdk.errors.FgaInvalidParameterException; +import dev.openfga.sdk.telemetry.Telemetry; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; @@ -54,6 +55,7 @@ public class Configuration implements BaseConfiguration { private Duration minimumRetryDelay; private Map defaultHeaders; private TelemetryConfiguration telemetryConfiguration; + private Telemetry telemetry; public Configuration() { this.apiUrl = DEFAULT_API_URL; @@ -139,6 +141,9 @@ public Configuration override(ConfigurationOverride configurationOverride) { result.telemetryConfiguration = overrideTelemetryConfiguration != null ? overrideTelemetryConfiguration : telemetryConfiguration; + // Don't copy the telemetry instance - let it be lazily initialized for the new configuration + result.telemetry = null; + return result; } @@ -339,4 +344,17 @@ public Configuration telemetryConfiguration(TelemetryConfiguration telemetryConf this.telemetryConfiguration = telemetryConfiguration; return this; } + + /** + * Get the shared Telemetry instance for this configuration. + * Creates the instance lazily if it hasn't been created yet. + * + * @return The shared Telemetry instance. + */ + public Telemetry getTelemetry() { + if (telemetry == null) { + telemetry = new Telemetry(this); + } + return telemetry; + } } diff --git a/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java b/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java index e0ff20b7..b12c1039 100644 --- a/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java +++ b/src/test/java/dev/openfga/sdk/api/OpenFgaApiTest.java @@ -22,6 +22,7 @@ import dev.openfga.sdk.api.configuration.*; import dev.openfga.sdk.api.model.*; import dev.openfga.sdk.errors.*; +import dev.openfga.sdk.telemetry.Telemetry; import java.net.http.HttpClient; import java.time.Duration; import java.time.OffsetDateTime; @@ -74,6 +75,7 @@ public void beforeEachTest() throws Exception { when(mockConfiguration.getMaxRetries()).thenReturn(DEFAULT_MAX_RETRIES); when(mockConfiguration.getMinimumRetryDelay()).thenReturn(DEFAULT_RETRY_DELAY); when(mockConfiguration.getTelemetryConfiguration()).thenReturn(DEFAULT_TELEMETRY_CONFIG); + when(mockConfiguration.getTelemetry()).thenReturn(new Telemetry(mockConfiguration)); mockApiClient = mock(ApiClient.class); when(mockApiClient.getObjectMapper()).thenReturn(mapper); diff --git a/src/test/java/dev/openfga/sdk/api/configuration/ConfigurationTelemetryTest.java b/src/test/java/dev/openfga/sdk/api/configuration/ConfigurationTelemetryTest.java new file mode 100644 index 00000000..c7cc4dae --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/configuration/ConfigurationTelemetryTest.java @@ -0,0 +1,67 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 1.x + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfga.sdk.telemetry.Telemetry; +import org.junit.jupiter.api.Test; + +class ConfigurationTelemetryTest { + @Test + void shouldReturnSameTelemetryInstanceOnMultipleCalls() { + // given + Configuration configuration = new Configuration(); + + // when + Telemetry firstCall = configuration.getTelemetry(); + Telemetry secondCall = configuration.getTelemetry(); + + // then + assertThat(firstCall).isNotNull().isSameAs(secondCall); + } + + @Test + void shouldCreateNewTelemetryInstanceForNewConfiguration() { + // given + Configuration config1 = new Configuration(); + Configuration config2 = new Configuration(); + + // when + Telemetry telemetry1 = config1.getTelemetry(); + Telemetry telemetry2 = config2.getTelemetry(); + + // then + assertThat(telemetry1).isNotNull(); + assertThat(telemetry2).isNotNull(); + assertThat(telemetry1).isNotSameAs(telemetry2); + } + + @Test + void shouldNotCopyTelemetryInstanceWhenUsingOverride() { + // given + Configuration originalConfig = new Configuration(); + Telemetry originalTelemetry = originalConfig.getTelemetry(); // Initialize telemetry + + ConfigurationOverride override = new ConfigurationOverride(); + + // when + Configuration overriddenConfig = originalConfig.override(override); + Telemetry overriddenTelemetry = overriddenConfig.getTelemetry(); + + // then + assertThat(originalTelemetry).isNotNull(); + assertThat(overriddenTelemetry).isNotNull(); + assertThat(originalTelemetry).isNotSameAs(overriddenTelemetry); + } +} \ No newline at end of file diff --git a/src/test/java/dev/openfga/sdk/api/integration/TelemetrySingletonIntegrationTest.java b/src/test/java/dev/openfga/sdk/api/integration/TelemetrySingletonIntegrationTest.java new file mode 100644 index 00000000..c548bf11 --- /dev/null +++ b/src/test/java/dev/openfga/sdk/api/integration/TelemetrySingletonIntegrationTest.java @@ -0,0 +1,116 @@ +/* + * OpenFGA + * A high performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar. + * + * The version of the OpenAPI document: 1.x + * Contact: community@openfga.dev + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package dev.openfga.sdk.api.integration; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfga.sdk.api.OpenFgaApi; +import dev.openfga.sdk.api.auth.OAuth2Client; +import dev.openfga.sdk.api.client.ApiClient; +import dev.openfga.sdk.api.client.HttpRequestAttempt; +import dev.openfga.sdk.api.configuration.Configuration; +import dev.openfga.sdk.api.configuration.Credentials; +import dev.openfga.sdk.api.configuration.CredentialsMethod; +import dev.openfga.sdk.api.configuration.ClientCredentials; +import dev.openfga.sdk.errors.FgaInvalidParameterException; +import dev.openfga.sdk.telemetry.Telemetry; +import java.net.URI; +import java.net.http.HttpRequest; +import java.time.Duration; +import org.junit.jupiter.api.Test; + +class TelemetrySingletonIntegrationTest { + + @Test + void shouldUseSameTelemetryInstanceAcrossComponents() throws FgaInvalidParameterException { + // given + Configuration configuration = new Configuration() + .apiUrl("http://localhost:8080"); + + // when + OpenFgaApi api = new OpenFgaApi(configuration); + Telemetry configTelemetry = configuration.getTelemetry(); + + // then + assertThat(configTelemetry).isNotNull(); + // We can't directly access the telemetry field in OpenFgaApi, but we've verified in code + // that it uses configuration.getTelemetry() + } + + @Test + void shouldUseSameTelemetryInstanceWithOAuth2() throws FgaInvalidParameterException { + // given + ClientCredentials clientCreds = new ClientCredentials() + .clientId("test-client-id") + .clientSecret("test-client-secret") + .apiTokenIssuer("http://localhost:8080") + .apiAudience("test-audience"); + + Credentials credentials = new Credentials(clientCreds); + + Configuration configuration = new Configuration() + .apiUrl("http://localhost:8080") + .credentials(credentials); + + ApiClient apiClient = new ApiClient(); + + // when + OpenFgaApi api = new OpenFgaApi(configuration, apiClient); + OAuth2Client oauth2Client = new OAuth2Client(configuration, apiClient); + Telemetry configTelemetry = configuration.getTelemetry(); + + // then + assertThat(configTelemetry).isNotNull(); + // The OAuth2Client and OpenFgaApi both use the same telemetry instance from configuration + } + + @Test + void shouldUseSameTelemetryInstanceInHttpRequestAttempt() throws FgaInvalidParameterException { + // given + Configuration configuration = new Configuration() + .apiUrl("http://localhost:8080"); + ApiClient apiClient = new ApiClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create("http://localhost:8080/test")) + .GET() + .build(); + + // when + Telemetry configTelemetry = configuration.getTelemetry(); + HttpRequestAttempt attempt = new HttpRequestAttempt<>( + request, "test", Void.class, apiClient, configuration, configTelemetry); + + // then + assertThat(configTelemetry).isNotNull(); + // The HttpRequestAttempt now receives the telemetry instance instead of creating a new one + } + + @Test + void shouldCreateNewTelemetryForDifferentConfigurations() throws FgaInvalidParameterException { + // given + Configuration config1 = new Configuration().apiUrl("http://localhost:8080"); + Configuration config2 = new Configuration().apiUrl("http://localhost:8081"); + + // when + OpenFgaApi api1 = new OpenFgaApi(config1); + OpenFgaApi api2 = new OpenFgaApi(config2); + + Telemetry telemetry1 = config1.getTelemetry(); + Telemetry telemetry2 = config2.getTelemetry(); + + // then + assertThat(telemetry1).isNotNull(); + assertThat(telemetry2).isNotNull(); + assertThat(telemetry1).isNotSameAs(telemetry2); + } +} \ No newline at end of file From 60d095da32b67e69bf681dd02bb968ed13674760 Mon Sep 17 00:00:00 2001 From: SoulPancake Date: Thu, 28 Aug 2025 15:58:56 +0530 Subject: [PATCH 2/2] feat: respect percall telemetry override --- .../java/dev/openfga/sdk/api/OpenFgaApi.java | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java index f7069624..4d209d3e 100644 --- a/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java +++ b/src/main/java/dev/openfga/sdk/api/OpenFgaApi.java @@ -145,7 +145,7 @@ private CompletableFuture> batchCheck( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "batchCheck", BatchCheckResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "batchCheck", BatchCheckResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -201,7 +201,7 @@ private CompletableFuture> check( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "check", CheckResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "check", CheckResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -251,7 +251,7 @@ private CompletableFuture> createStore( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "createStore", CreateStoreResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "createStore", CreateStoreResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -300,7 +300,7 @@ private CompletableFuture> deleteStore(String storeId, Configu try { HttpRequest request = buildHttpRequest("DELETE", path, configuration); - return new HttpRequestAttempt<>(request, "deleteStore", Void.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "deleteStore", Void.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -356,7 +356,7 @@ private CompletableFuture> expand( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "expand", ExpandResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "expand", ExpandResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -406,7 +406,7 @@ private CompletableFuture> getStore(String storeId try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "getStore", GetStoreResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "getStore", GetStoreResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -462,7 +462,7 @@ private CompletableFuture> listObjects( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "listObjects", ListObjectsResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "listObjects", ListObjectsResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -513,7 +513,7 @@ private CompletableFuture> listStores( try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "listStores", ListStoresResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "listStores", ListStoresResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -569,7 +569,7 @@ private CompletableFuture> listUsers( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "listUsers", ListUsersResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "listUsers", ListUsersResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -625,7 +625,7 @@ private CompletableFuture> read( try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "read", ReadResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "read", ReadResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -684,7 +684,7 @@ private CompletableFuture> readAssertions( try { HttpRequest request = buildHttpRequest("GET", path, configuration); return new HttpRequestAttempt<>( - request, "readAssertions", ReadAssertionsResponse.class, apiClient, configuration, this.telemetry) + request, "readAssertions", ReadAssertionsResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -742,12 +742,12 @@ private CompletableFuture> readAutho try { HttpRequest request = buildHttpRequest("GET", path, configuration); return new HttpRequestAttempt<>( - request, - "readAuthorizationModel", - ReadAuthorizationModelResponse.class, - apiClient, - configuration, - this.telemetry) + request, + "readAuthorizationModel", + ReadAuthorizationModelResponse.class, + apiClient, + configuration, + configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -807,12 +807,12 @@ private CompletableFuture> readAuth try { HttpRequest request = buildHttpRequest("GET", path, configuration); return new HttpRequestAttempt<>( - request, - "readAuthorizationModels", - ReadAuthorizationModelsResponse.class, - apiClient, - configuration, - this.telemetry) + request, + "readAuthorizationModels", + ReadAuthorizationModelsResponse.class, + apiClient, + configuration, + configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -898,7 +898,7 @@ private CompletableFuture> readChanges( try { HttpRequest request = buildHttpRequest("GET", path, configuration); - return new HttpRequestAttempt<>(request, "readChanges", ReadChangesResponse.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "readChanges", ReadChangesResponse.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -953,7 +953,7 @@ private CompletableFuture> write(String storeId, WriteReques try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); - return new HttpRequestAttempt<>(request, "write", Object.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "write", Object.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -1020,7 +1020,7 @@ private CompletableFuture> writeAssertions( try { HttpRequest request = buildHttpRequest("PUT", path, body, configuration); - return new HttpRequestAttempt<>(request, "writeAssertions", Void.class, apiClient, configuration, this.telemetry) + return new HttpRequestAttempt<>(request, "writeAssertions", Void.class, apiClient, configuration, configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) { @@ -1078,12 +1078,12 @@ private CompletableFuture> writeAut try { HttpRequest request = buildHttpRequest("POST", path, body, configuration); return new HttpRequestAttempt<>( - request, - "writeAuthorizationModel", - WriteAuthorizationModelResponse.class, - apiClient, - configuration, - this.telemetry) + request, + "writeAuthorizationModel", + WriteAuthorizationModelResponse.class, + apiClient, + configuration, + configuration.getTelemetry()) .addTelemetryAttributes(telemetryAttributes) .attemptHttpRequest(); } catch (ApiException e) {