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.v2.stub; 18 19 import com.google.api.core.ApiFunction; 20 import com.google.api.core.BetaApi; 21 import com.google.api.gax.core.GaxProperties; 22 import com.google.api.gax.core.GoogleCredentialsProvider; 23 import com.google.api.gax.core.InstantiatingExecutorProvider; 24 import com.google.api.gax.grpc.GaxGrpcProperties; 25 import com.google.api.gax.grpc.GrpcTransportChannel; 26 import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; 27 import com.google.api.gax.httpjson.GaxHttpJsonProperties; 28 import com.google.api.gax.httpjson.HttpJsonTransportChannel; 29 import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; 30 import com.google.api.gax.retrying.RetrySettings; 31 import com.google.api.gax.rpc.ApiClientHeaderProvider; 32 import com.google.api.gax.rpc.ClientContext; 33 import com.google.api.gax.rpc.StatusCode; 34 import com.google.api.gax.rpc.StubSettings; 35 import com.google.api.gax.rpc.TransportChannelProvider; 36 import com.google.api.gax.rpc.UnaryCallSettings; 37 import com.google.common.collect.ImmutableList; 38 import com.google.common.collect.ImmutableMap; 39 import com.google.common.collect.ImmutableSet; 40 import com.google.common.collect.Lists; 41 import com.google.devtools.cloudtrace.v2.BatchWriteSpansRequest; 42 import com.google.devtools.cloudtrace.v2.Span; 43 import com.google.protobuf.Empty; 44 import java.io.IOException; 45 import java.util.List; 46 import javax.annotation.Generated; 47 import org.threeten.bp.Duration; 48 49 // AUTO-GENERATED DOCUMENTATION AND CLASS. 50 /** 51 * Settings class to configure an instance of {@link TraceServiceStub}. 52 * 53 * <p>The default instance has everything set to sensible defaults: 54 * 55 * <ul> 56 * <li>The default service address (cloudtrace.googleapis.com) and default port (443) are used. 57 * <li>Credentials are acquired automatically through Application Default Credentials. 58 * <li>Retries are configured for idempotent methods but not for non-idempotent methods. 59 * </ul> 60 * 61 * <p>The builder of this class is recursive, so contained classes are themselves builders. When 62 * build() is called, the tree of builders is called to create the complete settings object. 63 * 64 * <p>For example, to set the total timeout of batchWriteSpans to 30 seconds: 65 * 66 * <pre>{@code 67 * // This snippet has been automatically generated and should be regarded as a code template only. 68 * // It will require modifications to work: 69 * // - It may require correct/in-range values for request initialization. 70 * // - It may require specifying regional endpoints when creating the service client as shown in 71 * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library 72 * TraceServiceStubSettings.Builder traceServiceSettingsBuilder = 73 * TraceServiceStubSettings.newBuilder(); 74 * traceServiceSettingsBuilder 75 * .batchWriteSpansSettings() 76 * .setRetrySettings( 77 * traceServiceSettingsBuilder 78 * .batchWriteSpansSettings() 79 * .getRetrySettings() 80 * .toBuilder() 81 * .setTotalTimeout(Duration.ofSeconds(30)) 82 * .build()); 83 * TraceServiceStubSettings traceServiceSettings = traceServiceSettingsBuilder.build(); 84 * }</pre> 85 */ 86 @Generated("by gapic-generator-java") 87 public class TraceServiceStubSettings extends StubSettings<TraceServiceStubSettings> { 88 /** The default scopes of the service. */ 89 private static final ImmutableList<String> DEFAULT_SERVICE_SCOPES = 90 ImmutableList.<String>builder() 91 .add("https://www.googleapis.com/auth/cloud-platform") 92 .add("https://www.googleapis.com/auth/trace.append") 93 .build(); 94 95 private final UnaryCallSettings<BatchWriteSpansRequest, Empty> batchWriteSpansSettings; 96 private final UnaryCallSettings<Span, Span> createSpanSettings; 97 98 /** Returns the object with the settings used for calls to batchWriteSpans. */ batchWriteSpansSettings()99 public UnaryCallSettings<BatchWriteSpansRequest, Empty> batchWriteSpansSettings() { 100 return batchWriteSpansSettings; 101 } 102 103 /** Returns the object with the settings used for calls to createSpan. */ createSpanSettings()104 public UnaryCallSettings<Span, Span> createSpanSettings() { 105 return createSpanSettings; 106 } 107 createStub()108 public TraceServiceStub createStub() throws IOException { 109 if (getTransportChannelProvider() 110 .getTransportName() 111 .equals(GrpcTransportChannel.getGrpcTransportName())) { 112 return GrpcTraceServiceStub.create(this); 113 } 114 if (getTransportChannelProvider() 115 .getTransportName() 116 .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { 117 return HttpJsonTraceServiceStub.create(this); 118 } 119 throw new UnsupportedOperationException( 120 String.format( 121 "Transport not supported: %s", getTransportChannelProvider().getTransportName())); 122 } 123 124 /** Returns a builder for the default ExecutorProvider for this service. */ defaultExecutorProviderBuilder()125 public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { 126 return InstantiatingExecutorProvider.newBuilder(); 127 } 128 129 /** Returns the default service endpoint. */ getDefaultEndpoint()130 public static String getDefaultEndpoint() { 131 return "cloudtrace.googleapis.com:443"; 132 } 133 134 /** Returns the default mTLS service endpoint. */ getDefaultMtlsEndpoint()135 public static String getDefaultMtlsEndpoint() { 136 return "cloudtrace.mtls.googleapis.com:443"; 137 } 138 139 /** Returns the default service scopes. */ getDefaultServiceScopes()140 public static List<String> getDefaultServiceScopes() { 141 return DEFAULT_SERVICE_SCOPES; 142 } 143 144 /** Returns a builder for the default credentials for this service. */ defaultCredentialsProviderBuilder()145 public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { 146 return GoogleCredentialsProvider.newBuilder() 147 .setScopesToApply(DEFAULT_SERVICE_SCOPES) 148 .setUseJwtAccessWithScope(true); 149 } 150 151 /** Returns a builder for the default gRPC ChannelProvider for this service. */ defaultGrpcTransportProviderBuilder()152 public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { 153 return InstantiatingGrpcChannelProvider.newBuilder() 154 .setMaxInboundMessageSize(Integer.MAX_VALUE); 155 } 156 157 /** Returns a builder for the default REST ChannelProvider for this service. */ 158 @BetaApi 159 public static InstantiatingHttpJsonChannelProvider.Builder defaultHttpJsonTransportProviderBuilder()160 defaultHttpJsonTransportProviderBuilder() { 161 return InstantiatingHttpJsonChannelProvider.newBuilder(); 162 } 163 defaultTransportChannelProvider()164 public static TransportChannelProvider defaultTransportChannelProvider() { 165 return defaultGrpcTransportProviderBuilder().build(); 166 } 167 168 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultGrpcApiClientHeaderProviderBuilder()169 public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { 170 return ApiClientHeaderProvider.newBuilder() 171 .setGeneratedLibToken( 172 "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) 173 .setTransportToken( 174 GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); 175 } 176 177 @BetaApi("The surface for customizing headers is not stable yet and may change in the future.") defaultHttpJsonApiClientHeaderProviderBuilder()178 public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { 179 return ApiClientHeaderProvider.newBuilder() 180 .setGeneratedLibToken( 181 "gapic", GaxProperties.getLibraryVersion(TraceServiceStubSettings.class)) 182 .setTransportToken( 183 GaxHttpJsonProperties.getHttpJsonTokenName(), 184 GaxHttpJsonProperties.getHttpJsonVersion()); 185 } 186 defaultApiClientHeaderProviderBuilder()187 public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { 188 return TraceServiceStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); 189 } 190 191 /** Returns a new gRPC builder for this class. */ newBuilder()192 public static Builder newBuilder() { 193 return Builder.createDefault(); 194 } 195 196 /** Returns a new REST builder for this class. */ newHttpJsonBuilder()197 public static Builder newHttpJsonBuilder() { 198 return Builder.createHttpJsonDefault(); 199 } 200 201 /** Returns a new builder for this class. */ newBuilder(ClientContext clientContext)202 public static Builder newBuilder(ClientContext clientContext) { 203 return new Builder(clientContext); 204 } 205 206 /** Returns a builder containing all the values of this settings class. */ toBuilder()207 public Builder toBuilder() { 208 return new Builder(this); 209 } 210 TraceServiceStubSettings(Builder settingsBuilder)211 protected TraceServiceStubSettings(Builder settingsBuilder) throws IOException { 212 super(settingsBuilder); 213 214 batchWriteSpansSettings = settingsBuilder.batchWriteSpansSettings().build(); 215 createSpanSettings = settingsBuilder.createSpanSettings().build(); 216 } 217 218 /** Builder for TraceServiceStubSettings. */ 219 public static class Builder extends StubSettings.Builder<TraceServiceStubSettings, Builder> { 220 private final ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders; 221 private final UnaryCallSettings.Builder<BatchWriteSpansRequest, Empty> batchWriteSpansSettings; 222 private final UnaryCallSettings.Builder<Span, Span> createSpanSettings; 223 private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>> 224 RETRYABLE_CODE_DEFINITIONS; 225 226 static { 227 ImmutableMap.Builder<String, ImmutableSet<StatusCode.Code>> definitions = 228 ImmutableMap.builder(); 229 definitions.put( 230 "retry_policy_0_codes", 231 ImmutableSet.copyOf( 232 Lists.<StatusCode.Code>newArrayList( 233 StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); 234 definitions.put( 235 "retry_policy_1_codes", 236 ImmutableSet.copyOf( 237 Lists.<StatusCode.Code>newArrayList( 238 StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); 239 RETRYABLE_CODE_DEFINITIONS = definitions.build(); 240 } 241 242 private static final ImmutableMap<String, RetrySettings> RETRY_PARAM_DEFINITIONS; 243 244 static { 245 ImmutableMap.Builder<String, RetrySettings> definitions = ImmutableMap.builder(); 246 RetrySettings settings = null; 247 settings = 248 RetrySettings.newBuilder() 249 .setInitialRetryDelay(Duration.ofMillis(100L)) 250 .setRetryDelayMultiplier(2.0) 251 .setMaxRetryDelay(Duration.ofMillis(30000L)) 252 .setInitialRpcTimeout(Duration.ofMillis(120000L)) 253 .setRpcTimeoutMultiplier(1.0) 254 .setMaxRpcTimeout(Duration.ofMillis(120000L)) 255 .setTotalTimeout(Duration.ofMillis(120000L)) 256 .build(); 257 definitions.put("retry_policy_0_params", settings); 258 settings = 259 RetrySettings.newBuilder() 260 .setInitialRetryDelay(Duration.ofMillis(100L)) 261 .setRetryDelayMultiplier(1.2) 262 .setMaxRetryDelay(Duration.ofMillis(1000L)) 263 .setInitialRpcTimeout(Duration.ofMillis(120000L)) 264 .setRpcTimeoutMultiplier(1.0) 265 .setMaxRpcTimeout(Duration.ofMillis(120000L)) 266 .setTotalTimeout(Duration.ofMillis(120000L)) 267 .build(); 268 definitions.put("retry_policy_1_params", settings); 269 RETRY_PARAM_DEFINITIONS = definitions.build(); 270 } 271 Builder()272 protected Builder() { 273 this(((ClientContext) null)); 274 } 275 Builder(ClientContext clientContext)276 protected Builder(ClientContext clientContext) { 277 super(clientContext); 278 279 batchWriteSpansSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); 280 createSpanSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); 281 282 unaryMethodSettingsBuilders = 283 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of( 284 batchWriteSpansSettings, createSpanSettings); 285 initDefaults(this); 286 } 287 Builder(TraceServiceStubSettings settings)288 protected Builder(TraceServiceStubSettings settings) { 289 super(settings); 290 291 batchWriteSpansSettings = settings.batchWriteSpansSettings.toBuilder(); 292 createSpanSettings = settings.createSpanSettings.toBuilder(); 293 294 unaryMethodSettingsBuilders = 295 ImmutableList.<UnaryCallSettings.Builder<?, ?>>of( 296 batchWriteSpansSettings, createSpanSettings); 297 } 298 createDefault()299 private static Builder createDefault() { 300 Builder builder = new Builder(((ClientContext) null)); 301 302 builder.setTransportChannelProvider(defaultTransportChannelProvider()); 303 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 304 builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); 305 builder.setEndpoint(getDefaultEndpoint()); 306 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 307 builder.setSwitchToMtlsEndpointAllowed(true); 308 309 return initDefaults(builder); 310 } 311 createHttpJsonDefault()312 private static Builder createHttpJsonDefault() { 313 Builder builder = new Builder(((ClientContext) null)); 314 315 builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); 316 builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); 317 builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); 318 builder.setEndpoint(getDefaultEndpoint()); 319 builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); 320 builder.setSwitchToMtlsEndpointAllowed(true); 321 322 return initDefaults(builder); 323 } 324 initDefaults(Builder builder)325 private static Builder initDefaults(Builder builder) { 326 builder 327 .batchWriteSpansSettings() 328 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) 329 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); 330 331 builder 332 .createSpanSettings() 333 .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_1_codes")) 334 .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_1_params")); 335 336 return builder; 337 } 338 339 /** 340 * Applies the given settings updater function to all of the unary API methods in this service. 341 * 342 * <p>Note: This method does not support applying settings to streaming methods. 343 */ applyToAllUnaryMethods( ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater)344 public Builder applyToAllUnaryMethods( 345 ApiFunction<UnaryCallSettings.Builder<?, ?>, Void> settingsUpdater) { 346 super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); 347 return this; 348 } 349 unaryMethodSettingsBuilders()350 public ImmutableList<UnaryCallSettings.Builder<?, ?>> unaryMethodSettingsBuilders() { 351 return unaryMethodSettingsBuilders; 352 } 353 354 /** Returns the builder for the settings used for calls to batchWriteSpans. */ batchWriteSpansSettings()355 public UnaryCallSettings.Builder<BatchWriteSpansRequest, Empty> batchWriteSpansSettings() { 356 return batchWriteSpansSettings; 357 } 358 359 /** Returns the builder for the settings used for calls to createSpan. */ createSpanSettings()360 public UnaryCallSettings.Builder<Span, Span> createSpanSettings() { 361 return createSpanSettings; 362 } 363 364 @Override build()365 public TraceServiceStubSettings build() throws IOException { 366 return new TraceServiceStubSettings(this); 367 } 368 } 369 } 370