|
28 | 28 | import com.google.api.gax.batching.BatcherImpl; |
29 | 29 | import com.google.api.gax.batching.FlowController; |
30 | 30 | import com.google.api.gax.core.BackgroundResource; |
| 31 | +import com.google.api.gax.grpc.GaxGrpcProperties; |
31 | 32 | import com.google.api.gax.grpc.GrpcCallContext; |
32 | 33 | import com.google.api.gax.grpc.GrpcCallSettings; |
33 | 34 | import com.google.api.gax.grpc.GrpcRawCallableFactory; |
|
47 | 48 | import com.google.api.gax.rpc.UnaryCallSettings; |
48 | 49 | import com.google.api.gax.rpc.UnaryCallable; |
49 | 50 | import com.google.api.gax.tracing.ApiTracerFactory; |
| 51 | +import com.google.api.gax.tracing.OpencensusTracerFactory; |
50 | 52 | import com.google.api.gax.tracing.SpanName; |
51 | 53 | import com.google.api.gax.tracing.TracedServerStreamingCallable; |
52 | 54 | import com.google.api.gax.tracing.TracedUnaryCallable; |
|
98 | 100 | import com.google.cloud.bigtable.data.v2.stub.metrics.BigtableTracerUnaryCallable; |
99 | 101 | import com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsTracerFactory; |
100 | 102 | import com.google.cloud.bigtable.data.v2.stub.metrics.CompositeTracerFactory; |
| 103 | +import com.google.cloud.bigtable.data.v2.stub.metrics.MetricsTracerFactory; |
| 104 | +import com.google.cloud.bigtable.data.v2.stub.metrics.RpcMeasureConstants; |
101 | 105 | import com.google.cloud.bigtable.data.v2.stub.metrics.StatsHeadersServerStreamingCallable; |
102 | 106 | import com.google.cloud.bigtable.data.v2.stub.metrics.StatsHeadersUnaryCallable; |
103 | 107 | import com.google.cloud.bigtable.data.v2.stub.metrics.TracedBatcherUnaryCallable; |
|
122 | 126 | import com.google.cloud.bigtable.data.v2.stub.sql.SqlRowMergingCallable; |
123 | 127 | import com.google.cloud.bigtable.gaxx.retrying.ApiResultRetryAlgorithm; |
124 | 128 | import com.google.cloud.bigtable.gaxx.retrying.RetryInfoRetryAlgorithm; |
| 129 | +import com.google.common.annotations.VisibleForTesting; |
125 | 130 | import com.google.common.base.Functions; |
126 | 131 | import com.google.common.base.MoreObjects; |
127 | 132 | import com.google.common.base.Preconditions; |
|
130 | 135 | import com.google.common.util.concurrent.MoreExecutors; |
131 | 136 | import com.google.protobuf.ByteString; |
132 | 137 | import io.grpc.MethodDescriptor; |
| 138 | +import io.opencensus.stats.Stats; |
| 139 | +import io.opencensus.stats.StatsRecorder; |
| 140 | +import io.opencensus.tags.TagKey; |
| 141 | +import io.opencensus.tags.TagValue; |
| 142 | +import io.opencensus.tags.Tagger; |
| 143 | +import io.opencensus.tags.Tags; |
133 | 144 | import io.opentelemetry.api.OpenTelemetry; |
134 | 145 | import io.opentelemetry.api.common.Attributes; |
135 | 146 | import java.io.IOException; |
@@ -215,11 +226,47 @@ public static BigtableClientContext createBigtableClientContext( |
215 | 226 | public static ApiTracerFactory createBigtableTracerFactory( |
216 | 227 | EnhancedBigtableStubSettings settings, @Nullable OpenTelemetry openTelemetry) |
217 | 228 | throws IOException { |
| 229 | + return createBigtableTracerFactory( |
| 230 | + settings, Tags.getTagger(), Stats.getStatsRecorder(), openTelemetry); |
| 231 | + } |
218 | 232 |
|
219 | | - ImmutableList.Builder<ApiTracerFactory> tracerFactories = ImmutableList.builder(); |
220 | | - |
221 | | - tracerFactories.add(settings.getTracerFactory()); |
| 233 | + @VisibleForTesting |
| 234 | + public static ApiTracerFactory createBigtableTracerFactory( |
| 235 | + EnhancedBigtableStubSettings settings, |
| 236 | + Tagger tagger, |
| 237 | + StatsRecorder stats, |
| 238 | + @Nullable OpenTelemetry openTelemetry) |
| 239 | + throws IOException { |
| 240 | + String projectId = settings.getProjectId(); |
| 241 | + String instanceId = settings.getInstanceId(); |
| 242 | + String appProfileId = settings.getAppProfileId(); |
| 243 | + |
| 244 | + ImmutableMap<TagKey, TagValue> attributes = |
| 245 | + ImmutableMap.<TagKey, TagValue>builder() |
| 246 | + .put(RpcMeasureConstants.BIGTABLE_PROJECT_ID, TagValue.create(projectId)) |
| 247 | + .put(RpcMeasureConstants.BIGTABLE_INSTANCE_ID, TagValue.create(instanceId)) |
| 248 | + .put(RpcMeasureConstants.BIGTABLE_APP_PROFILE_ID, TagValue.create(appProfileId)) |
| 249 | + .build(); |
222 | 250 |
|
| 251 | + ImmutableList.Builder<ApiTracerFactory> tracerFactories = ImmutableList.builder(); |
| 252 | + tracerFactories |
| 253 | + .add( |
| 254 | + // Add OpenCensus Tracing |
| 255 | + new OpencensusTracerFactory( |
| 256 | + ImmutableMap.<String, String>builder() |
| 257 | + // Annotate traces with the same tags as metrics |
| 258 | + .put(RpcMeasureConstants.BIGTABLE_PROJECT_ID.getName(), projectId) |
| 259 | + .put(RpcMeasureConstants.BIGTABLE_INSTANCE_ID.getName(), instanceId) |
| 260 | + .put(RpcMeasureConstants.BIGTABLE_APP_PROFILE_ID.getName(), appProfileId) |
| 261 | + // Also annotate traces with library versions |
| 262 | + .put("gax", GaxGrpcProperties.getGaxGrpcVersion()) |
| 263 | + .put("grpc", GaxGrpcProperties.getGrpcVersion()) |
| 264 | + .put("gapic", Version.VERSION) |
| 265 | + .build())) |
| 266 | + // Add OpenCensus Metrics |
| 267 | + .add(MetricsTracerFactory.create(tagger, stats, attributes)) |
| 268 | + // Add user configured tracer |
| 269 | + .add(settings.getTracerFactory()); |
223 | 270 | BuiltinMetricsTracerFactory builtinMetricsTracerFactory = |
224 | 271 | openTelemetry != null |
225 | 272 | ? BuiltinMetricsTracerFactory.create(openTelemetry, createBuiltinAttributes(settings)) |
|
0 commit comments