Skip to content

Commit

Permalink
refactor: ts conversion of trace-labels and constants (googleapis#558)
Browse files Browse the repository at this point in the history
  • Loading branch information
kjin authored Sep 19, 2017
1 parent ce34e55 commit 7a614c5
Show file tree
Hide file tree
Showing 24 changed files with 157 additions and 146 deletions.
7 changes: 4 additions & 3 deletions index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,12 @@ if (require('semver').satisfies(process.version, '<8') ||
require('continuation-local-storage');
}

import { Constants } from './src/constants';

var path = require('path');
var cls = require('./src/cls'/*.js*/);
var common = require('@google-cloud/common');
var extend = require('extend');
var constants = require('./src/constants'/*.js*/);
var traceUtil = require('./src/util'/*.js*/);
var TraceAgent = require('./src/trace-api'/*.js*/);
var pluginLoader = require('./src/trace-plugin-loader'/*.js*/);
Expand Down Expand Up @@ -85,8 +86,8 @@ function initConfig(projectConfig) {
projectConfig, envConfig);

// Enforce the upper limit for the label value size.
if (config.maximumLabelValueSize > constants.TRACE_SERVICE_LABEL_VALUE_LIMIT) {
config.maximumLabelValueSize = constants.TRACE_SERVICE_LABEL_VALUE_LIMIT;
if (config.maximumLabelValueSize > Constants.TRACE_SERVICE_LABEL_VALUE_LIMIT) {
config.maximumLabelValueSize = Constants.TRACE_SERVICE_LABEL_VALUE_LIMIT;
}
// Clamp the logger level.
if (config.logLevel < 0) {
Expand Down
16 changes: 7 additions & 9 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,23 @@

'use strict';

module.exports = {
export namespace Constants {
/** @const {string} header that carries trace context across Google infrastructure. */
TRACE_CONTEXT_HEADER_NAME: 'x-cloud-trace-context',
export const TRACE_CONTEXT_HEADER_NAME = 'x-cloud-trace-context';

/** @const {string} header that is used to identify outgoing http made by the agent. */
TRACE_AGENT_REQUEST_HEADER: 'x-cloud-trace-agent-request',
export const TRACE_AGENT_REQUEST_HEADER = 'x-cloud-trace-agent-request';

/** @const {number} bitmask to determine whether trace is enabled in trace options. */
TRACE_OPTIONS_TRACE_ENABLED: 1 << 0,
export const TRACE_OPTIONS_TRACE_ENABLED = 1 << 0;

/** See: cloud.google.com/trace/api/reference/rest/v1/projects.traces for limits. */
/** Maximum size of a span name in bytes. */
TRACE_SERVICE_SPAN_NAME_LIMIT: 127,
export const TRACE_SERVICE_SPAN_NAME_LIMIT = 127;

/** Maximum size of a label key in bytes. */
TRACE_SERVICE_LABEL_KEY_LIMIT: 127,
export const TRACE_SERVICE_LABEL_KEY_LIMIT = 127;

/** Maximum size of a label value in bytes. */
TRACE_SERVICE_LABEL_VALUE_LIMIT: 16 * 1024 - 1,
export const TRACE_SERVICE_LABEL_VALUE_LIMIT = 16 * 1024 - 1;
};

export default {};
11 changes: 6 additions & 5 deletions src/span-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@ declare global {
}
}

var constants = require('./constants'/*.js*/);
import { Constants } from './constants';
import { TraceLabels } from './trace-labels';

var TraceSpan = require('./trace-span'/*.js*/);
var TraceLabels = require('./trace-labels'/*.js*/);
var traceUtil = require('./util'/*.js*/);
var util = require('util');
var TraceWriter = require('./trace-writer'/*.js*/);
Expand All @@ -64,7 +65,7 @@ var uid = 1;
*/
function SpanData(trace, name, parentSpanId, isRoot, skipFrames) {
var spanId = uid++;
var spanName = traceUtil.truncate(name, constants.TRACE_SERVICE_SPAN_NAME_LIMIT);
var spanName = traceUtil.truncate(name, Constants.TRACE_SERVICE_SPAN_NAME_LIMIT);
this.span = new TraceSpan(spanName, spanId, parentSpanId);
this.trace = trace;
this.isRoot = isRoot;
Expand Down Expand Up @@ -110,7 +111,7 @@ function SpanData(trace, name, parentSpanId, isRoot, skipFrames) {
// config.maxLabelValueSize.
this.span.setLabel(TraceLabels.STACK_TRACE_DETAILS_KEY,
traceUtil.truncate(JSON.stringify({stack_frame: stackFrames}),
constants.TRACE_SERVICE_LABEL_VALUE_LIMIT));
Constants.TRACE_SERVICE_LABEL_VALUE_LIMIT));

Error.stackTraceLimit = origLimit;
Error.prepareStackTrace = origPrepare;
Expand All @@ -122,7 +123,7 @@ SpanData.prototype.getTraceContext = function() {
};

SpanData.prototype.addLabel = function(key, value) {
var k = traceUtil.truncate(key, constants.TRACE_SERVICE_LABEL_KEY_LIMIT);
var k = traceUtil.truncate(key, Constants.TRACE_SERVICE_LABEL_KEY_LIMIT);
var string_val = typeof value === 'string' ? value : util.inspect(value);
var v = traceUtil.truncate(string_val, TraceWriter.get().config().maximumLabelValueSize);
this.span.setLabel(k, v);
Expand Down
10 changes: 6 additions & 4 deletions src/trace-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@
*/

'use strict';

import { Constants } from './constants';
import { TraceLabels } from './trace-labels';

var cls = require('./cls'/*.js*/);
var constants = require('./constants'/*.js*/);
var is = require('is');
var TraceLabels = require('./trace-labels'/*.js*/);
var util = require('./util'/*.js*/);
var Trace = require('./trace'/*.js*/);
var SpanData = require('./span-data'/*.js*/);
Expand Down Expand Up @@ -161,7 +163,7 @@ TraceAgent.prototype.runInRootSpan = function(options, fn) {
// policy disallows it.
var locallyAllowed = that.policy_.shouldTrace(Date.now(), options.url || '');
var remotelyAllowed = isNaN(incomingTraceContext.options) ||
(incomingTraceContext.options & constants.TRACE_OPTIONS_TRACE_ENABLED);
(incomingTraceContext.options & Constants.TRACE_OPTIONS_TRACE_ENABLED);
if (!locallyAllowed || !remotelyAllowed) {
cls.setRootContext(nullSpan);
return fn(null);
Expand Down Expand Up @@ -298,7 +300,7 @@ TraceAgent.prototype.wrapEmitter = function(emitter) {
this.namespace_.bindEmitter(emitter);
};

TraceAgent.prototype.constants = constants;
TraceAgent.prototype.constants = Constants;

TraceAgent.prototype.labels = TraceLabels;

Expand Down
8 changes: 0 additions & 8 deletions src/trace-labels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,3 @@ export namespace TraceLabels {
*/
export const AGENT_DATA = '/agent';
};


/**
* Export TraceLabels.
*/
module.exports = TraceLabels;

export default {};
19 changes: 10 additions & 9 deletions src/trace-writer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,18 @@

'use strict';

import { Constants } from './constants';
import { TraceLabels } from './trace-labels';

var common = require('@google-cloud/common');
var gcpMetadata = require('gcp-metadata');
var util = require('util');
var traceLabels = require('./trace-labels'/*.js*/);
var pjson = require('../../package.json');
var constants = require('./constants'/*.js*/);

var onUncaughtExceptionValues = ['ignore', 'flush', 'flushAndExit'];

var headers = {};
headers[constants.TRACE_AGENT_REQUEST_HEADER] = 1;
headers[Constants.TRACE_AGENT_REQUEST_HEADER] = 1;

/* @const {Array<string>} list of scopes needed to operate with the trace API */
var SCOPES = ['https://www.googleapis.com/auth/trace.append'];
Expand Down Expand Up @@ -114,25 +115,25 @@ TraceWriter.prototype.initialize = function(cb) {
that.getHostname(function(hostname) {
that.getInstanceId(function(instanceId) {
var labels = {};
labels[traceLabels.AGENT_DATA] = 'node ' + pjson.name + ' v' + pjson.version;
labels[traceLabels.GCE_HOSTNAME] = hostname;
labels[TraceLabels.AGENT_DATA] = 'node ' + pjson.name + ' v' + pjson.version;
labels[TraceLabels.GCE_HOSTNAME] = hostname;
if (instanceId) {
labels[traceLabels.GCE_INSTANCE_ID] = instanceId;
labels[TraceLabels.GCE_INSTANCE_ID] = instanceId;
}
var moduleName = that.config_.serviceContext.service || hostname;
labels[traceLabels.GAE_MODULE_NAME] = moduleName;
labels[TraceLabels.GAE_MODULE_NAME] = moduleName;

var moduleVersion = that.config_.serviceContext.version;
if (moduleVersion) {
labels[traceLabels.GAE_MODULE_VERSION] = moduleVersion;
labels[TraceLabels.GAE_MODULE_VERSION] = moduleVersion;
var minorVersion = that.config_.serviceContext.minorVersion;
if (minorVersion) {
var versionLabel = '';
if (moduleName !== 'default') {
versionLabel = moduleName + ':';
}
versionLabel += moduleVersion + '.' + minorVersion;
labels[traceLabels.GAE_VERSION] = versionLabel;
labels[TraceLabels.GAE_VERSION] = versionLabel;
}
}
Object.freeze(labels);
Expand Down
23 changes: 12 additions & 11 deletions test/plugins/test-trace-connect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
*/
'use strict';

var traceLabels = require('../../src/trace-labels'/*.js*/);
import { Constants } from '../../src/constants';
import { TraceLabels } from '../../src/trace-labels';

var http = require('http');
var assert = require('assert');
var constants = require('../../src/constants'/*.js*/);
var common = require('./common'/*.js*/);

var server;
Expand Down Expand Up @@ -104,10 +105,10 @@ describe('test-trace-connect', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(connectPredicate).labels;
assert.equal(labels[traceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '200');
assert.equal(labels[traceLabels.HTTP_METHOD_LABEL_KEY], 'GET');
assert.equal(labels[traceLabels.HTTP_URL_LABEL_KEY], 'http://localhost:9042/');
assert(labels[traceLabels.HTTP_SOURCE_IP]);
assert.equal(labels[TraceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '200');
assert.equal(labels[TraceLabels.HTTP_METHOD_LABEL_KEY], 'GET');
assert.equal(labels[TraceLabels.HTTP_URL_LABEL_KEY], 'http://localhost:9042/');
assert(labels[TraceLabels.HTTP_SOURCE_IP]);
done();
});
});
Expand All @@ -121,7 +122,7 @@ describe('test-trace-connect', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(connectPredicate).labels;
var stackTrace = JSON.parse(labels[traceLabels.STACK_TRACE_DETAILS_KEY]);
var stackTrace = JSON.parse(labels[TraceLabels.STACK_TRACE_DETAILS_KEY]);
// Ensure that our middleware is on top of the stack
assert.equal(stackTrace.stack_frame[0].method_name, 'middleware');
done();
Expand Down Expand Up @@ -151,7 +152,7 @@ describe('test-trace-connect', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(connectPredicate).labels;
assert.equal(labels[traceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
assert.equal(labels[TraceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
done();
});
});
Expand All @@ -164,16 +165,16 @@ describe('test-trace-connect', function() {
});
server = app.listen(common.serverPort, function() {
var headers = {};
headers[constants.TRACE_CONTEXT_HEADER_NAME] = '123456/1;o=1';
headers[Constants.TRACE_CONTEXT_HEADER_NAME] = '123456/1;o=1';
http.get({
port: common.serverPort
}, function(res) {
assert(!res.headers[constants.TRACE_CONTEXT_HEADER_NAME]);
assert(!res.headers[Constants.TRACE_CONTEXT_HEADER_NAME]);
http.get({
port: common.serverPort,
headers: headers
}, function(res) {
assert(res.headers[constants.TRACE_CONTEXT_HEADER_NAME].indexOf(';o=1') !== -1);
assert(res.headers[Constants.TRACE_CONTEXT_HEADER_NAME].indexOf(';o=1') !== -1);
done();
});
});
Expand Down
25 changes: 13 additions & 12 deletions test/plugins/test-trace-express.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@
*/
'use strict';

var traceLabels = require('../../src/trace-labels'/*.js*/);
import { Constants } from '../../src/constants';
import { TraceLabels } from '../../src/trace-labels';

var http = require('http');
var assert = require('assert');
var constants = require('../../src/constants'/*.js*/);
var common = require('./common'/*.js*/);

var server;
Expand Down Expand Up @@ -159,10 +160,10 @@ describe('test-trace-express', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(expressPredicate).labels;
assert.equal(labels[traceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '200');
assert.equal(labels[traceLabels.HTTP_METHOD_LABEL_KEY], 'GET');
assert.equal(labels[traceLabels.HTTP_URL_LABEL_KEY], 'http://localhost/');
assert(labels[traceLabels.HTTP_SOURCE_IP]);
assert.equal(labels[TraceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '200');
assert.equal(labels[TraceLabels.HTTP_METHOD_LABEL_KEY], 'GET');
assert.equal(labels[TraceLabels.HTTP_URL_LABEL_KEY], 'http://localhost/');
assert(labels[TraceLabels.HTTP_SOURCE_IP]);
done();
});
});
Expand All @@ -176,7 +177,7 @@ describe('test-trace-express', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(expressPredicate).labels;
var stackTrace = JSON.parse(labels[traceLabels.STACK_TRACE_DETAILS_KEY]);
var stackTrace = JSON.parse(labels[TraceLabels.STACK_TRACE_DETAILS_KEY]);
// Ensure that our middleware is on top of the stack
assert.equal(stackTrace.stack_frame[0].method_name, 'middleware');
done();
Expand Down Expand Up @@ -206,7 +207,7 @@ describe('test-trace-express', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(expressPredicate).labels;
assert.equal(labels[traceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
assert.equal(labels[TraceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
done();
});
});
Expand All @@ -220,7 +221,7 @@ describe('test-trace-express', function() {
server = app.listen(common.serverPort, function() {
http.get({port: common.serverPort}, function(res) {
var labels = common.getMatchingSpan(expressPredicate).labels;
assert.equal(labels[traceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
assert.equal(labels[TraceLabels.HTTP_RESPONSE_CODE_LABEL_KEY], '500');
done();
});
});
Expand All @@ -233,14 +234,14 @@ describe('test-trace-express', function() {
});
server = app.listen(common.serverPort, function() {
var headers = {};
headers[constants.TRACE_CONTEXT_HEADER_NAME] = '123456/1;o=1';
headers[Constants.TRACE_CONTEXT_HEADER_NAME] = '123456/1;o=1';
http.get({port: common.serverPort}, function(res) {
assert(!res.headers[constants.TRACE_CONTEXT_HEADER_NAME]);
assert(!res.headers[Constants.TRACE_CONTEXT_HEADER_NAME]);
http.get({
port: common.serverPort,
headers: headers
}, function(res) {
assert(res.headers[constants.TRACE_CONTEXT_HEADER_NAME].indexOf(';o=1') !== -1);
assert(res.headers[Constants.TRACE_CONTEXT_HEADER_NAME].indexOf(';o=1') !== -1);
done();
});
});
Expand Down
9 changes: 5 additions & 4 deletions test/plugins/test-trace-grpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
*/
'use strict';

import { Constants } from '../../src/constants';
import { TraceLabels } from '../../src/trace-labels';

var assert = require('assert');
var cls = require('../../src/cls'/*.js*/);
var util = require('../../src/util'/*.js*/);
var constants = require('../../src/constants'/*.js*/);
var shimmer = require('shimmer');
var traceLabels = require('../../src/trace-labels'/*.js*/);
var TracingPolicy = require('../../src/tracing-policy'/*.js*/);
var common = require('./common'/*.js*/);

Expand All @@ -46,7 +47,7 @@ var checkMetadata;

function checkServerMetadata(metadata) {
if (checkMetadata) {
var traceContext = metadata.getMap()[constants.TRACE_CONTEXT_HEADER_NAME];
var traceContext = metadata.getMap()[Constants.TRACE_CONTEXT_HEADER_NAME];
assert.ok(/[a-f0-9]{32}\/[0-9]+;o=1/.test(traceContext));
var parsedContext = util.parseContextFromHeader(traceContext);
var root = cls.getNamespace().get('root');
Expand Down Expand Up @@ -550,7 +551,7 @@ Object.keys(versions).forEach(function(version) {
function getMethodName(predicate) {
var trace = common.getMatchingSpan(predicate);
var labels = trace.labels;
var stack = JSON.parse(labels[traceLabels.STACK_TRACE_DETAILS_KEY]);
var stack = JSON.parse(labels[TraceLabels.STACK_TRACE_DETAILS_KEY]);
return stack.stack_frame[0].method_name;
}
assert.notStrictEqual(-1, getMethodName(grpcClientPredicate)
Expand Down
Loading

0 comments on commit 7a614c5

Please sign in to comment.