From 3ee94228c72e9bdeefb68ce418261da026e11099 Mon Sep 17 00:00:00 2001 From: David Ashpole Date: Thu, 26 May 2022 15:02:23 -0400 Subject: [PATCH] Allow specifying apiEndpoint for stackdriver exporters (#985) * feat: allow specifying apiEndpoint for stackdriver exporters --- .../src/stackdriver-cloudtrace.ts | 11 ++++++++--- .../src/stackdriver-monitoring.ts | 13 +++++++++---- .../opencensus-exporter-stackdriver/src/types.ts | 5 +++++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-cloudtrace.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-cloudtrace.ts index c48dbfd9b..539c9694f 100644 --- a/packages/opencensus-exporter-stackdriver/src/stackdriver-cloudtrace.ts +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-cloudtrace.ts @@ -22,7 +22,7 @@ import { } from '@opencensus/core'; import { logger, Logger } from '@opencensus/core'; import { auth as globalAuth, GoogleAuth, JWT } from 'google-auth-library'; -import { google } from 'googleapis'; +import { google, cloudtrace_v2 } from 'googleapis'; import { getDefaultResource } from './common-utils'; import { createAttributes, @@ -39,7 +39,6 @@ import { } from './types'; google.options({ headers: { 'x-opencensus-outgoing-request': 0x1 } }); -const cloudTrace = google.cloudtrace('v2'); let auth = globalAuth; /** Format and sends span information to Stackdriver */ @@ -49,6 +48,7 @@ export class StackdriverTraceExporter implements Exporter { logger: Logger; failBuffer: SpanContext[] = []; private RESOURCE_LABELS: Promise>; + private cloudTrace: cloudtrace_v2.Cloudtrace; constructor(options: StackdriverExporterOptions) { this.projectId = options.projectId; @@ -63,6 +63,11 @@ export class StackdriverTraceExporter implements Exporter { scopes: ['https://www.googleapis.com/auth/cloud-platform'], }); } + this.cloudTrace = google.cloudtrace({ + version: 'v2', + rootUrl: + 'https://' + (options.apiEndpoint || 'cloudtrace.googleapis.com'), + }); } /** @@ -165,7 +170,7 @@ export class StackdriverTraceExporter implements Exporter { // data to backend : // https://cloud.google.com/trace/docs/reference/v2/rpc/google.devtools. // cloudtrace.v2#google.devtools.cloudtrace.v2.TraceService - cloudTrace.projects.traces.batchWrite(spans, (err: Error | null) => { + this.cloudTrace.projects.traces.batchWrite(spans, (err: Error | null) => { if (err) { err.message = `batchWriteSpans error: ${err.message}`; this.logger.error(err.message); diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts index b72ced042..ca5f68181 100644 --- a/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts @@ -29,7 +29,7 @@ import { View, } from '@opencensus/core'; import { auth as globalAuth, GoogleAuth, JWT } from 'google-auth-library'; -import { google } from 'googleapis'; +import { google, monitoring_v3 } from 'googleapis'; import { getDefaultResource } from './common-utils'; import { createMetricDescriptorData, @@ -50,7 +50,6 @@ const OC_HEADER = { }; google.options({ headers: OC_HEADER }); -const monitoring = google.monitoring('v3'); let auth = globalAuth; /** Format and sends Stats to Stackdriver */ @@ -71,6 +70,7 @@ export class StackdriverStatsExporter implements StatsEventListener { > = new Map(); private DEFAULT_RESOURCE: Promise; logger: Logger; + private monitoring: monitoring_v3.Monitoring; constructor(options: StackdriverExporterOptions) { this.period = @@ -93,6 +93,11 @@ export class StackdriverStatsExporter implements StatsEventListener { scopes: ['https://www.googleapis.com/auth/cloud-platform'], }); } + this.monitoring = google.monitoring({ + version: 'v3', + rootUrl: + 'https://' + (options.apiEndpoint || 'monitoring.googleapis.com'), + }); } /** @@ -195,7 +200,7 @@ export class StackdriverStatsExporter implements StatsEventListener { }; return new Promise((resolve, reject) => { - monitoring.projects.timeSeries.create( + this.monitoring.projects.timeSeries.create( request, { headers: OC_HEADER, userAgentDirectives: [OC_USER_AGENT] }, (err: Error | null) => { @@ -224,7 +229,7 @@ export class StackdriverStatsExporter implements StatsEventListener { }; return new Promise((resolve, reject) => { - monitoring.projects.metricDescriptors.create( + this.monitoring.projects.metricDescriptors.create( request, { headers: OC_HEADER, userAgentDirectives: [OC_USER_AGENT] }, (err: Error | null) => { diff --git a/packages/opencensus-exporter-stackdriver/src/types.ts b/packages/opencensus-exporter-stackdriver/src/types.ts index e3e96a573..3ee5722ee 100644 --- a/packages/opencensus-exporter-stackdriver/src/types.ts +++ b/packages/opencensus-exporter-stackdriver/src/types.ts @@ -156,6 +156,11 @@ export interface StackdriverExporterOptions extends ExporterConfig { * instead of your application default credentials. Optional */ credentials?: JWTInput; + /** + * The endpoint of the service. Defaults to cloudtrace.googleapis.com + * for trace, and monitoring.googleapis.com for monitoring. + */ + apiEndpoint?: string; /** * Is called whenever the exporter fails to upload metrics to stackdriver.