From d161671ac7d6367e8e79879c83c5276fec57d416 Mon Sep 17 00:00:00 2001 From: Eduardo Emery Date: Sun, 7 Oct 2018 22:37:12 -0300 Subject: [PATCH] fix: stackdriver monitoring send requests in order --- .../src/stackdriver-monitoring.ts | 36 +++++++++++-------- .../src/types.ts | 4 ++- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts b/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts index 285ef7dbd..227dc2e63 100644 --- a/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts +++ b/packages/opencensus-exporter-stackdriver/src/stackdriver-monitoring.ts @@ -26,11 +26,15 @@ const monitoring = google.monitoring('v3'); /** Format and sends Stats to Stackdriver */ export class StackdriverStatsExporter implements StatsEventListener { private projectId: string; + // tslint:disable-next-line:no-any + private lastRequest: Promise = Promise.resolve(); + private requestTimeout: number; logger: Logger; constructor(options: StackdriverExporterOptions) { this.projectId = options.projectId; this.logger = options.logger || logger.logger(); + this.requestTimeout = options.requestTimeout || 1000; } /** @@ -64,20 +68,21 @@ export class StackdriverStatsExporter implements StatsEventListener { return this.createTimeSeriesData(view, measurement); }); - return this.authorize().then(authClient => { - const request = { - name: `projects/${this.projectId}`, - resource: {timeSeries}, - auth: authClient - }; - - return new Promise((resolve, reject) => { - monitoring.projects.timeSeries.create(request, (err: Error) => { - this.logger.debug('sent time series', request.resource.timeSeries); - err ? reject(err) : resolve(); - }); - }); - }); + this.lastRequest = this.lastRequest.then(() => this.authorize()) + .then(authClient => { + this.logger.debug('sent time series', timeSeries); + return monitoring.projects.timeSeries.create({ + name: `projects/${this.projectId}`, + resource: {timeSeries}, + auth: authClient + }); + }) + .then(() => { + return new Promise((resolve, reject) => { + setTimeout(resolve, this.requestTimeout); + }); + }); + return this.lastRequest; } /** @@ -152,7 +157,8 @@ export class StackdriverStatsExporter implements StatsEventListener { count: distribution.count.toString(), mean: distribution.mean, sumOfSquaredDeviation: distribution.sumSquaredDeviations, - range: {min: distribution.min, max: distribution.max}, + // Distribution range is not yet supported + // range: {min: distribution.min, max: distribution.max}, bucketOptions: { explicitBuckets: {bounds: this.getBucketBoundaries(distribution.buckets)} diff --git a/packages/opencensus-exporter-stackdriver/src/types.ts b/packages/opencensus-exporter-stackdriver/src/types.ts index 7ea01224e..7d7ecb25c 100644 --- a/packages/opencensus-exporter-stackdriver/src/types.ts +++ b/packages/opencensus-exporter-stackdriver/src/types.ts @@ -40,6 +40,8 @@ export interface StackdriverExporterOptions extends ExporterConfig { * projectId project id defined to stackdriver */ projectId: string; + /** The delay between cloud monitoring requests */ + requestTimeout?: number; } export interface TracesWithCredentials { @@ -85,7 +87,7 @@ export interface Distribution { count: string; mean: number; sumOfSquaredDeviation: number; - range: {min: number; max: number;}; + range?: {min: number; max: number;}; bucketOptions: {explicitBuckets: {bounds: number[];}}; bucketCounts: number[]; }