@@ -314,6 +314,7 @@ class Spanner extends GrpcService {
314314 instances_ : Map < string , Instance > ;
315315 instanceConfigs_ : Map < string , InstanceConfig > ;
316316 projectIdReplaced_ : boolean ;
317+ projectId_ ?: string ;
317318 projectFormattedName_ : string ;
318319 commonHeaders_ : { [ k : string ] : string } ;
319320 routeToLeaderEnabled = true ;
@@ -500,6 +501,7 @@ class Spanner extends GrpcService {
500501 ensureInitialContextManagerSet ( ) ;
501502 this . _nthClientId = nextSpannerClientId ( ) ;
502503 this . _universeDomain = universeEndpoint ;
504+ this . projectId_ = options . projectId ;
503505 this . configureMetrics_ ( options . disableBuiltInMetrics ) ;
504506 }
505507
@@ -1620,19 +1622,44 @@ class Spanner extends GrpcService {
16201622 * Setup the OpenTelemetry metrics capturing for service metrics to Google Cloud Monitoring.
16211623 */
16221624 configureMetrics_ ( disableBuiltInMetrics ?: boolean ) {
1625+ // Only enable metrics if not explicitly disabled and we are not using
1626+ // insecure credentials.
16231627 const metricsEnabled =
16241628 process . env . SPANNER_DISABLE_BUILTIN_METRICS !== 'true' &&
16251629 ! disableBuiltInMetrics &&
16261630 ! this . _isInSecureCredentials ;
1627- MetricsTracerFactory . enabled = metricsEnabled ;
16281631 if ( metricsEnabled ) {
1629- const factory = MetricsTracerFactory . getInstance ( this . projectId ) ;
1630- const periodicReader = new PeriodicExportingMetricReader ( {
1631- exporter : new CloudMonitoringMetricsExporter ( { auth : this . auth } ) ,
1632- exportIntervalMillis : 60000 ,
1633- } ) ;
1634- // Retrieve the MeterProvider to trigger construction
1635- factory ! . getMeterProvider ( [ periodicReader ] ) ;
1632+ try {
1633+ this . auth . getProjectId ( ( err , projectId ) => {
1634+ if ( err || ! projectId ) {
1635+ console . error (
1636+ 'Unable to get Project Id for client side metrics, will skip exporting client' +
1637+ ' side metrics' +
1638+ err ,
1639+ ) ;
1640+ return ;
1641+ }
1642+
1643+ MetricsTracerFactory . enabled = metricsEnabled ;
1644+ this . projectId_ = projectId ;
1645+ const factory = MetricsTracerFactory . getInstance ( projectId ) ;
1646+ const periodicReader = new PeriodicExportingMetricReader ( {
1647+ exporter : new CloudMonitoringMetricsExporter (
1648+ { auth : this . auth } ,
1649+ projectId ,
1650+ ) ,
1651+ exportIntervalMillis : 60000 ,
1652+ } ) ;
1653+ // Retrieve the MeterProvider to trigger construction
1654+ factory ! . getMeterProvider ( [ periodicReader ] ) ;
1655+ } ) ;
1656+ } catch ( err ) {
1657+ console . error (
1658+ 'Unable to configure client side metrics, will skip exporting client' +
1659+ ' side metrics' +
1660+ err ,
1661+ ) ;
1662+ }
16361663 }
16371664 }
16381665
@@ -1782,9 +1809,9 @@ class Spanner extends GrpcService {
17821809 // eslint-disable-next-line @typescript-eslint/no-explicit-any
17831810 request ( config : any , callback ?: any ) : any {
17841811 let metricsTracer : MetricsTracer | null = null ;
1785- if ( config . client === 'SpannerClient' ) {
1812+ if ( config . client === 'SpannerClient' && this . projectId_ ) {
17861813 metricsTracer =
1787- MetricsTracerFactory ?. getInstance ( ) ?. createMetricsTracer (
1814+ MetricsTracerFactory ?. getInstance ( this . projectId_ ) ?. createMetricsTracer (
17881815 config . method ,
17891816 config . reqOpts . session ?? config . reqOpts . database ,
17901817 config . headers [ 'x-goog-spanner-request-id' ] ,
@@ -1846,9 +1873,9 @@ class Spanner extends GrpcService {
18461873 // eslint-disable-next-line @typescript-eslint/no-explicit-any
18471874 requestStream ( config ) : any {
18481875 let metricsTracer : MetricsTracer | null = null ;
1849- if ( config . client === 'SpannerClient' ) {
1876+ if ( config . client === 'SpannerClient' && this . projectId_ ) {
18501877 metricsTracer =
1851- MetricsTracerFactory ?. getInstance ( ) ?. createMetricsTracer (
1878+ MetricsTracerFactory ?. getInstance ( this . projectId_ ) ?. createMetricsTracer (
18521879 config . method ,
18531880 config . reqOpts . session ?? config . reqOpts . database ,
18541881 config . headers [ 'x-goog-spanner-request-id' ] ,
0 commit comments