1 /* 2 * Copyright 2022 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.cloud.trace.v1.stub; 18 19 import static com.google.cloud.trace.v1.TraceServiceClient.ListTracesPagedResponse; 20 21 import com.google.api.core.ApiFunction; 22 import com.google.api.core.ApiFuture; 23 import com.google.api.core.BetaApi; 24 import com.google.api.gax.core.GaxProperties; 25 import com.google.api.gax.core.GoogleCredentialsProvider; 26 import com.google.api.gax.core.InstantiatingExecutorProvider; 27 import com.google.api.gax.grpc.GaxGrpcProperties; 28 import com.google.api.gax.grpc.GrpcTransportChannel; 29 import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; 30 import com.google.api.gax.httpjson.GaxHttpJsonProperties; 31 import com.google.api.gax.httpjson.HttpJsonTransportChannel; 32 import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; 33 import com.google.api.gax.retrying.RetrySettings; 34 import com.google.api.gax.rpc.ApiCallContext; 35 import com.google.api.gax.rpc.ApiClientHeaderProvider; 36 import com.google.api.gax.rpc.ClientContext; 37 import com.google.api.gax.rpc.PageContext; 38 import com.google.api.gax.rpc.PagedCallSettings; 39 import com.google.api.gax.rpc.PagedListDescriptor; 40 import com.google.api.gax.rpc.PagedListResponseFactory; 41 import com.google.api.gax.rpc.StatusCode; 42 import com.google.api.gax.rpc.StubSettings; 43 import com.google.api.gax.rpc.TransportChannelProvider; 44 import com.google.api.gax.rpc.UnaryCallSettings; 45 import com.google.api.gax.rpc.UnaryCallable; 46 import com.google.common.collect.ImmutableList; 47 import com.google.common.collect.ImmutableMap; 48 import com.google.common.collect.ImmutableSet; 49 import com.google.common.collect.Lists; 50 import com.google.devtools.cloudtrace.v1.GetTraceRequest; 51 import com.google.devtools.cloudtrace.v1.ListTracesRequest; 52 import com.google.devtools.cloudtrace.v1.ListTracesResponse; 53 import com.google.devtools.cloudtrace.v1.PatchTracesRequest; 54 import com.google.devtools.cloudtrace.v1.Trace; 55 import com.google.protobuf.Empty; 56 import java.io.IOException; 57 import java.util.List; 58 import javax.annotation.Generated; 59 import org.threeten.bp.Duration; 60 61 // AUTO-GENERATED DOCUMENTATION AND CLASS. 62 /** 63 * Settings class to configure an instance of {@link TraceServiceStub}. 64 * 65 * <p>The default instance has everything set to sensible defaults: 66 * 67 * <ul> 68 * <li>The default service address (cloudtrace.googleapis.com) and default port (443) are used. 69 * <li>Credentials are acquired automatically through Application Default Credentials. 70 * <li>Retries are configured for idempotent methods but not for non-idempotent methods. 71 * </ul> 72 * 73 * <p>The builder of this class is recursive, so contained classes are themselves builders. When 74 * build() is called, the tree of builders is called to create the complete settings object. 75 * 76 * <p>For example, to set the total timeout of getTrace to 30 seconds: 77 * 78 * <pre>{@code 79 * // This snippet has been automatically generated and should be regarded as a code template only. 80 * // It will require modifications to work: 81 * // - It may require correct/in-range values for request initialization. 82 * // - It may require specifying regional endpoints when creating the service client as shown in 83 * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library 84 * TraceServiceStubSettings.Builder traceServiceSettingsBuilder = 85 * TraceServiceStubSettings.newBuilder(); 86 * traceServiceSettingsBuilder 87 * .getTraceSettings() 88 * .setRetrySettings( 89 * traceServiceSettingsBuilder 90 * .getTraceSettings() 91 * .getRetrySettings() 92 * .toBuilder() 93 * .setTotalTimeout(Duration.ofSeconds(30)) 94 * .build()); 95 * TraceServiceStubSettings traceServiceSettings = traceServiceSettingsBuilder.build(); 96 * }</pre> 97 */ 98 @Generated("by gapic-generator-java") 99 public class TraceServiceStubSettings extends StubSettings<TraceServiceStubSettings> { 100 /** The default scopes of the service. */ 101 private static final ImmutableList<String> DEFAULT_SERVICE_SCOPES = 102 ImmutableList.<String>builder() 103 .add("https://www.googleapis.com/auth/cloud-platform") 104 .add("https://www.googleapis.com/auth/trace.append") 105 .add("https://www.googleapis.com/auth/trace.readonly") 106 .build(); 107 108 private final PagedCallSettings<ListTracesRequest, ListTracesResponse, ListTracesPagedResponse> 109 listTracesSettings; 110 private final UnaryCallSettings<GetTraceRequest, Trace> getTraceSettings; 111 private final UnaryCallSettings<PatchTracesRequest, Empty> patchTracesSettings; 112 113 private static final PagedListDescriptor<ListTracesRequest, ListTracesResponse, Trace> 114 LIST_TRACES_PAGE_STR_DESC = 115 new PagedListDescriptor<ListTracesRequest, ListTracesResponse, Trace>() { 116 @Override 117 public String emptyToken() { 118 return ""; 119 } 120 121 @Override 122 public ListTracesRequest injectToken(ListTracesRequest payload, String token) { 123 return ListTracesRequest.newBuilder(payload).setPageToken(token).build(); 124 } 125 126 @Override 127 public ListTracesRequest injectPageSize(ListTracesRequest payload, int pageSize) { 128 return ListTracesRequest.newBuilder(payload).setPageSize(pageSize).build(); 129 } 130 131 @Override 132 public Integer extractPageSize(ListTracesRequest payload) { 133 return payload.getPageSize(); 134 } 135 136 @Override 137 public String extractNextToken(ListTracesResponse payload) { 138 return payload.getNextPageToken(); 139 } 140 141 @Override 142 public Iterable<Trace> extractResources(ListTracesResponse payload) { 143 return payload.getTracesList() == null 144 ? ImmutableList.<Trace>of() 145 : payload.getTracesList(); 146 } 147 }; 148 149 private static final PagedListResponseFactory< 150 ListTracesRequest, ListTracesResponse, ListTracesPagedResponse> 151 LIST_TRACES_PAGE_STR_FACT = 152 new PagedListResponseFactory< 153 ListTracesRequest, ListTracesResponse, ListTracesPagedResponse>() { 154 @Override 155 public ApiFuture<ListTracesPagedResponse> getFuturePagedResponse( 156 UnaryCallable<ListTracesRequest, ListTracesResponse> callable, 157 ListTracesRequest request, 158 ApiCallContext context, 159 ApiFuture<ListTracesResponse> futureResponse) { 160 PageContext<ListTracesRequest, ListTracesResponse, Trace> pageContext = 161 PageContext.create(callable, LIST_TRACES_PAGE_STR_DESC, request, context); 162 return ListTracesPagedResponse.createAsync(pageContext, futureResponse); 163 } 164 }; 165 166 /** Returns the object with the settings used for calls to listTraces. */ 167 public PagedCallSettings<ListTracesRequest, ListTracesResponse, ListTracesPagedResponse> listTracesSettings()168 listTracesSettings() { 169 return listTracesSettings; 170 } 171 172 /** Returns the object with the settings used for calls to getTrace. */ getTraceSettings()173 public UnaryCallSettings<GetTraceRequest, Trace> getTraceSettings() { 174 return getTraceSettings; 175 } 176 177 /** Returns the object with the settings used for calls to patchTraces. */ patchTracesSettings()178 public UnaryCallSettings<PatchTracesRequest, Empty> patchTracesSettings() { 179 return patchTracesSettings; 180 } 181 createStub()182 public TraceServiceStub createStub() throws IOException { 183 if (getTransportChannelProvider() 184 .getTransportName() 185 .equals(GrpcTransportChannel.getGrpcTransportName())) { 186 return GrpcTraceServiceStub.create(this); 187 } 188 if (getTransportChannelProvider() 189 .getTransportName() 190 .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { 191 return HttpJsonTraceServiceStub.create(this); 192 } 193 throw new UnsupportedOperationException( 194 String.format( 195 "Transport not supported: %s", getTransportChannelProvider().getTransportName())); 196 } 197 198 /** Returns a builder for the default ExecutorProvider for this service. */ defaultExecutorProviderBuilder()199 public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { 200 return InstantiatingExecutorProvider.newBuilder(); 201 } 202 203 /** Returns the default service endpoint. */ getDefaultEndpoint()204 public static String getDefaultEndpoint() { 205 return "cloudtrace.googleapis.com:443"; 206 } 207 208 /** Returns the default mTLS service endpoint. */ getDefaultMtlsEndpoint()209 public static String getDefaultMtlsEndpoint() { 210 return "cloudtrace.mtls.googleapis.com:443"; 211 } 212 213 /** Returns the default service scopes. */ getDefaultServiceScopes()214 public static List<String> getDefaultServiceScopes() { 215 return DEFAULT_SERVICE_SCOPES; 216 } 217 218 /** Returns a builder for the default credentials for this service. */ defaultCredentialsProviderBuilder()219 public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { 220 return GoogleCredentialsProvider.newBuilder() 221 .setScopesToApply(DEFAULT_SERVICE_SCOPES) 222 .setUseJwtAccessWithScope(true); 223 } 224 225 /** Returns a builder for the default gRPC ChannelProvider for this service. */ defaultGrpcTransportProviderBuilder()226 public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { 227 return InstantiatingGrpcChannelProvider.newBuilder() 228 .setMaxInboundMessageSize(Integer.MAX_VALUE); 229 } 230 231 /** Returns a builder for the default REST ChannelProvider for this service. */ 232 @BetaApi 233 public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()234 defaultHttpJsonTransportProviderBuilder() { 235 return InstantiatingHttpJsonChannelProvider.newBuilder(); 236 } 237 defaultTransportChannelProvider()238 public static TransportChannelProvider defaultTransportChannelProvider() { 239 return defaultGrpcTransportProviderBuilder().build(); 240 } 241 242 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultGrpcApiClientHeaderProviderBuilder()243 public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { 244 return ApiClientHeaderProvider.newBuilder() 245 .setGeneratedLibToken( 246 "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) 247 .setTransportToken( 248 GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); 249 } 250 251 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultHttpJsonApiClientHeaderProviderBuilder()252 public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { 253 return ApiClientHeaderProvider.newBuilder() 254 .setGeneratedLibToken( 255 "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) 256 .setTransportToken( 257 GaxHttpJsonProperties.getHttpJsonTokenName(), 258 GaxHttpJsonProperties.getHttpJsonVersion()); 259 } 260 defaultApiClientHeaderProviderBuilder()261 public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { 262 return TraceServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); 263 } 264 265 /** Returns a new gRPC builder for this class. */ newBuilder()266 public static Builder newBuilder() { 267 return Builder.createDefault(); 268 } 269 270 /** Returns a new REST builder for this class. */ newHttpJsonBuilder()271 public static Builder newHttpJsonBuilder() { 272 return Builder.createHttpJsonDefault(); 273 } 274 275 /** Returns a new builder for this class. */ newBuilder(ClientContext clientContext)276 public static Builder newBuilder(ClientContext clientContext) { 277 return new Builder(clientContext); 278 } 279 280 /** Returns a builder containing all the values of this settings class. */ toBuilder()281 public Builder toBuilder() { 282 return new Builder(this); 283 } 284 TraceServiceStubSettings(Builder settingsBuilder)285 protected TraceServiceStubSettings(Builder settingsBuilder) throws IOException { 286 super(settingsBuilder); 287 288 listTracesSettings = settingsBuilder.listTracesSettings().build(); 289 getTraceSettings = settingsBuilder.getTraceSettings().build(); 290 patchTracesSettings = settingsBuilder.patchTracesSettings().build(); 291 } 292 293 /** Builder for TraceServiceStubSettings. */ 294 public static class Builder extends StubSettings.Builder<TraceServiceStubSettings, Builder> { 295 private final ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders; 296 private final PagedCallSettings.Builder< 297 ListTracesRequest, ListTracesResponse, ListTracesPagedResponse> 298 listTracesSettings; 299 private final UnaryCallSettings.Builder<GetTraceRequest, Trace> getTraceSettings; 300 private final UnaryCallSettings.Builder<PatchTracesRequest, Empty> patchTracesSettings; 301 private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>> 302 RETRYABLE_CODE_DEFINITIONS; 303 304 static { 305 ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions = 306 ImmutableMap.builder(); 307 definitions.put( 308 "retry_policy_0_codes", 309 ImmutableSet.copyOf( 310 Lists.<StatusCode.Code>newArrayList( 311 StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); 312 RETRYABLE_CODE_DEFINITIONS = definitions.build(); 313 } 314 315 private static final ImmutableMap<String, RetrySettings> RETRY_PARAM_DEFINITIONS; 316 317 static { 318 ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder(); 319 RetrySettings settings = null; 320 settings = 321 RetrySettings.newBuilder() 322 .setInitialRetryDelay(Duration.ofMillis(100L)) 323 .setRetryDelayMultiplier(1.2) 324 .setMaxRetryDelay(Duration.ofMillis(1000L)) 325 .setInitialRpcTimeout(Duration.ofMillis(45000L)) 326 .setRpcTimeoutMultiplier(1.0) 327 .setMaxRpcTimeout(Duration.ofMillis(45000L)) 328 .setTotalTimeout(Duration.ofMillis(45000L)) 329 .build(); 330 definitions.put("retry_policy_0_params", settings); 331 RETRY_PARAM_DEFINITIONS = definitions.build(); 332 } 333 Builder()334 protected Builder() { 335 this(((ClientContext) null)); 336 } 337 Builder(ClientContext clientContext)338 protected Builder(ClientContext clientContext) { 339 super(clientContext); 340 341 listTracesSettings = PagedCallSettings.newBuilder(LIST_TRACES_PAGE_STR_FACT); 342 getTraceSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); 343 patchTracesSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); 344 345 unaryMethodSettingsBuilders = 346 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of( 347 listTracesSettings, getTraceSettings, patchTracesSettings); 348 initDefaults(this); 349 } 350 Builder(TraceServiceStubSettings settings)351 protected Builder(TraceServiceStubSettings settings) { 352 super(settings); 353 354 listTracesSettings = settings.listTracesSettings.toBuilder(); 355 getTraceSettings = settings.getTraceSettings.toBuilder(); 356 patchTracesSettings = settings.patchTracesSettings.toBuilder(); 357 358 unaryMethodSettingsBuilders = 359 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of( 360 listTracesSettings, getTraceSettings, patchTracesSettings); 361 } 362 createDefault()363 private static Builder createDefault() { 364 Builder builder = new Builder(((ClientContext) null)); 365 366 builder.setTransportChannelProvider(defaultTransportChannelProvider()); 367 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 368 builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); 369 builder.setEndpoint(getDefaultEndpoint()); 370 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 371 builder.setSwitchToMtlsEndpointAllowed(true); 372 373 return initDefaults(builder); 374 } 375 createHttpJsonDefault()376 private static Builder createHttpJsonDefault() { 377 Builder builder = new Builder(((ClientContext) null)); 378 379 builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); 380 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 381 builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); 382 builder.setEndpoint(getDefaultEndpoint()); 383 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 384 builder.setSwitchToMtlsEndpointAllowed(true); 385 386 return initDefaults(builder); 387 } 388 initDefaults(Builder builder)389 private static Builder initDefaults(Builder builder) { 390 builder 391 .listTracesSettings() 392 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 393 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 394 395 builder 396 .getTraceSettings() 397 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 398 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 399 400 builder 401 .patchTracesSettings() 402 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 403 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 404 405 return builder; 406 } 407 408 /** 409 * Applies the given settings updater function to all of the unary API methods in this service. 410 * 411 * <p>Note: This method does not support applying settings to streaming methods. 412 */ applyToAllUnaryMethods( ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater)413 public Builder applyToAllUnaryMethods( 414 ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) { 415 super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); 416 return this; 417 } 418 unaryMethodSettingsBuilders()419 public ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders() { 420 return unaryMethodSettingsBuilders; 421 } 422 423 /** Returns the builder for the settings used for calls to listTraces. */ 424 public PagedCallSettings.Builder<ListTracesRequest, ListTracesResponse, ListTracesPagedResponse> listTracesSettings()425 listTracesSettings() { 426 return listTracesSettings; 427 } 428 429 /** Returns the builder for the settings used for calls to getTrace. */ getTraceSettings()430 public UnaryCallSettings.Builder<GetTraceRequest, Trace> getTraceSettings() { 431 return getTraceSettings; 432 } 433 434 /** Returns the builder for the settings used for calls to patchTraces. */ patchTracesSettings()435 public UnaryCallSettings.Builder<PatchTracesRequest, Empty> patchTracesSettings() { 436 return patchTracesSettings; 437 } 438 439 @Override build()440 public TraceServiceStubSettings build() throws IOException { 441 return new TraceServiceStubSettings(this); 442 } 443 } 444 } 445