diff --git a/src/trace-api.js b/src/trace-api.js index 2fc11542f..0d9ece83e 100644 --- a/src/trace-api.js +++ b/src/trace-api.js @@ -25,6 +25,7 @@ var SpanData = require('./span-data.js'); var uuid = require('uuid'); var TracingPolicy = require('./tracing-policy.js'); var semver = require('semver'); +var TraceWriter = require('./trace-writer.js'); var ROOT_SPAN_STACK_OFFSET = semver.satisfies(process.version, '>=8') ? 0 : 2; @@ -36,9 +37,10 @@ var ROOT_SPAN_STACK_OFFSET = semver.satisfies(process.version, '>=8') ? 0 : 2; var phantomApiImpl = { enhancedDatabaseReportingEnabled: function() { return false; }, runInRootSpan: function(opts, fn) { return fn(null); }, - getCurrentContext: function() { return null; }, + getCurrentContextId: function() { return null; }, createChildSpan: function(opts) { return null; }, getResponseTraceContext: function(context, traced) { return ''; }, + getWriterProjectId : function() { return null; }, wrap: function(fn) { return fn; }, wrapEmitter: function(ee) {}, }; @@ -196,6 +198,23 @@ TraceAgent.prototype.getCurrentContextId = function() { return rootSpan.trace.traceId; }; +/** + * Returns the projectId that was either configured or auto-discovered by the + * TraceWriter. Note that the auto-discovery is done asynchronously, so this + * will return null until the projectId auto-discovery completes. + */ +TraceAgent.prototype.getWriterProjectId = function() { + var traceWriter; + try { + traceWriter = TraceWriter.get(); + } catch(err) { + // The TraceWriter.get() call could fail if the TraceWriter has not been + // initialized yet. + return null; + } + return traceWriter.config().projectId; +}; + /** * Creates and returns a new ChildSpan object nested within the root span. If * there is no current RootSpan object, this function returns null. diff --git a/test/test-trace-api.js b/test/test-trace-api.js index cccd9adc5..f734096aa 100644 --- a/test/test-trace-api.js +++ b/test/test-trace-api.js @@ -49,6 +49,7 @@ function assertAPISurface(traceAPI) { } }); assert.strictEqual(typeof traceAPI.getCurrentContextId, 'function'); + assert.strictEqual(typeof traceAPI.getWriterProjectId, 'function'); var child = traceAPI.createChildSpan({ name: 'child' }); // TODO: Ditto but with child spans if (child) { @@ -180,7 +181,12 @@ describe('Trace Interface', function() { traceAPI.runInRootSpan({name: 'root', url: 'root'}, function(rootSpan) { var id = traceAPI.getCurrentContextId(); assert.strictEqual(id, rootSpan.trace.traceId); - }); + }); + }); + + it('should return get the project ID if set in the writer', function() { + var traceApi = createTraceAgent(); + assert.equal(traceApi.getWriterProjectId(), '0'); }); it('should add labels to spans', function() {