Skip to content
This repository was archived by the owner on Apr 3, 2024. It is now read-only.

Commit 416031f

Browse files
authored
Move initConfig logic to debuglet (#202)
1 parent 30bd528 commit 416031f

File tree

6 files changed

+52
-73
lines changed

6 files changed

+52
-73
lines changed

src/agent/config.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,6 @@
2020
*/
2121

2222
module.exports = {
23-
/**
24-
* @property {boolean} Whether the debug agent should be started.
25-
* @memberof DebugAgentConfig
26-
* @default
27-
*/
28-
enabled: true,
29-
3023
// FIXME(ofrobots): presently this is dependent what cwd() is at the time this
3124
// file is first required. We should make the default config static.
3225
/**

src/agent/debuglet.js

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
var fs = require('fs');
2020
var path = require('path');
2121
var EventEmitter = require('events').EventEmitter;
22+
var extend = require('extend');
2223
var util = require('util');
2324
var semver = require('semver');
2425

2526
var v8debugapi = require('./v8debugapi.js');
2627
var Debuggee = require('../debuggee.js');
2728
var DebugletApi = require('../controller.js');
29+
var defaultConfig = require('./config.js');
2830
var scanner = require('./scanner.js');
2931
var common = require('@google/cloud-diagnostics-common');
3032
var Logger = common.logger;
@@ -41,20 +43,21 @@ var BREAKPOINT_ACTION_MESSAGE = 'The only currently supported breakpoint actions
4143
module.exports = Debuglet;
4244

4345
/**
44-
* @param {Object} config The option parameters for the Debuglet.
46+
* @param {Debug} debug - A Debug instance.
47+
* @param {object=} config - The option parameters for the Debuglet.
4548
* @event 'error' on startup errors
4649
* @event 'started' once the startup tasks are completed
4750
* @event 'registered' once successfully registered to the debug api
4851
* @event 'stopped' if the agent stops due to a fatal error after starting
4952
* @constructor
5053
*/
51-
function Debuglet(debug, config, logger) {
54+
function Debuglet(debug, config) {
55+
/** @private {object} */
56+
this.config_ = this.normalizeConfig_(config);
57+
5258
/** @private {Debug} */
5359
this.debug_ = debug;
5460

55-
/** @private {object} */
56-
this.config_ = config || {};
57-
5861
/**
5962
* @private {object} V8 Debug API. This can be null if the Node.js version
6063
* is out of date.
@@ -71,7 +74,7 @@ function Debuglet(debug, config, logger) {
7174
this.fetcherActive_ = false;
7275

7376
/** @private {Logger} */
74-
this.logger_ = logger;
77+
this.logger_ = Logger.create(this.config_.logLevel, '@google-cloud/debug');
7578

7679
/** @private {DebugletApi} */
7780
this.debugletApi_ = new DebugletApi(this.debug_);
@@ -90,6 +93,28 @@ function Debuglet(debug, config, logger) {
9093

9194
util.inherits(Debuglet, EventEmitter);
9295

96+
Debuglet.prototype.normalizeConfig_ = function(config) {
97+
config = extend({}, defaultConfig, config);
98+
99+
if (config.keyFilename || config.credentials || config.projectId) {
100+
throw new Error('keyFilename, projectId or credentials should be provided' +
101+
' to the Debug module constructor rather than startAgent');
102+
}
103+
104+
if (process.env.hasOwnProperty('GCLOUD_DEBUG_LOGLEVEL')) {
105+
config.logLevel = process.env.GCLOUD_DEBUG_LOGLEVEL;
106+
}
107+
if (process.env.hasOwnProperty('GAE_MODULE_NAME')) {
108+
config.serviceContext = config.serviceContext || {};
109+
config.serviceContext.service = process.env.GAE_MODULE_NAME;
110+
}
111+
if (process.env.hasOwnProperty('GAE_MODULE_VERSION')) {
112+
config.serviceContext = config.serviceContext || {};
113+
config.serviceContext.version = process.env.GAE_MODULE_VERSION;
114+
}
115+
return config;
116+
};
117+
93118
/**
94119
* Starts the Debuglet. It is important that this is as quick as possible
95120
* as it is on the critical path of application startup.

src/index.js

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@
1616

1717
'use strict';
1818

19-
var logger = require('@google/cloud-diagnostics-common').logger;
2019
var common = require('@google-cloud/common');
2120
var Debuglet = require('./agent/debuglet.js');
2221
var util = require('util');
23-
var _ = require('lodash');
2422

2523
/**
2624
* <p class="notice">
@@ -73,30 +71,6 @@ function Debug(options) {
7371
}
7472
util.inherits(Debug, common.Service);
7573

76-
var initConfig = function(config_) {
77-
var config = config_ || {};
78-
79-
if (config.keyFilename || config.credentials || config.projectId) {
80-
throw new Error('keyFilename, projectId or credentials should be provided' +
81-
' to the Debug module constructor rather than startAgent');
82-
}
83-
84-
var defaults = require('./agent/config.js');
85-
_.defaultsDeep(config, defaults);
86-
if (process.env.hasOwnProperty('GCLOUD_DEBUG_LOGLEVEL')) {
87-
config.logLevel = process.env.GCLOUD_DEBUG_LOGLEVEL;
88-
}
89-
if (process.env.hasOwnProperty('GAE_MODULE_NAME')) {
90-
config.serviceContext = config.serviceContext || {};
91-
config.serviceContext.service = process.env.GAE_MODULE_NAME;
92-
}
93-
if (process.env.hasOwnProperty('GAE_MODULE_VERSION')) {
94-
config.serviceContext = config.serviceContext || {};
95-
config.serviceContext.version = process.env.GAE_MODULE_VERSION;
96-
}
97-
return config;
98-
};
99-
10074
var debuglet;
10175

10276
/**
@@ -118,14 +92,9 @@ Debug.prototype.startAgent = function(config) {
11892
throw new Error('Debug Agent has already been started');
11993
}
12094

121-
// FIXME(ofrobots): the initConfig logic belongs in the agent/ directory.
122-
config = initConfig(config);
123-
if (config.enabled) {
124-
debuglet = new Debuglet(
125-
this, config, logger.create(config.logLevel, '@google-cloud/debug'));
126-
debuglet.start();
127-
this.private_ = debuglet;
128-
}
95+
debuglet = new Debuglet(this, config);
96+
debuglet.start();
97+
this.private_ = debuglet;
12998
};
13099

131100
module.exports = Debug;

test/e2e/test-capture-time.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
var assert = require('assert');
1919
var request = require('request');
20-
var logger = require('@google/cloud-diagnostics-common').logger;
2120
var config = require('../../src/agent/config.js');
2221
var semver = require('semver');
2322
var Debuglet = require('../../src/debuglet.js');
@@ -35,8 +34,7 @@ var debuglet;
3534
describe(__filename, function(){
3635
beforeEach(function() {
3736
process.env.GCLOUD_PROJECT = 0;
38-
debuglet = new Debuglet(
39-
config, logger.create(config.logLevel, '@google/cloud-debug'));
37+
debuglet = new Debuglet(config);
4038
debuglet.once('started', function() {
4139
debuglet.debugletApi_.request_ = request; // Avoid authing.
4240
});

test/standalone/test-debuglet.js

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
'use strict';
1717

1818
var assert = require('assert');
19-
var loggerModule = require('@google/cloud-diagnostics-common').logger;
2019
var defaultConfig = require('../../src/agent/config.js');
2120
var Debuglet = require('../../src/agent/debuglet.js');
2221
var extend = require('extend');
@@ -32,8 +31,6 @@ var nock = require('nock');
3231
var nocks = require('../nocks.js');
3332
nock.disableNetConnect();
3433

35-
var logger = loggerModule.create(process.env.GCLOUD_DEBUG_LOGLEVEL || 0, 'test');
36-
3734
var bp = {
3835
id: 'test',
3936
action: 'CAPTURE',
@@ -59,7 +56,7 @@ describe(__filename, function(){
5956

6057
it('should not start when projectId is not available', function(done) {
6158
var debug = require('../..')();
62-
debuglet = new Debuglet(debug, defaultConfig, logger);
59+
debuglet = new Debuglet(debug, defaultConfig);
6360

6461
// The following mock is neccessary for the case when the test is running
6562
// on GCP. In that case we will get the projectId from the metadata service.
@@ -80,7 +77,7 @@ describe(__filename, function(){
8077

8178
it('should not crash without project num', function(done) {
8279
var debug = require('../..')();
83-
debuglet = new Debuglet(debug, defaultConfig, logger);
80+
debuglet = new Debuglet(debug, defaultConfig);
8481

8582
// The following mock is neccessary for the case when the test is running
8683
// on GCP. In that case we will get the projectId from the metadata service.
@@ -101,7 +98,7 @@ describe(__filename, function(){
10198
it('should accept non-numeric GCLOUD_PROJECT', function(done) {
10299
var debug = require('../..')(
103100
{projectId: '11020304f2934', credentials: fakeCredentials});
104-
debuglet = new Debuglet(debug, defaultConfig, logger);
101+
debuglet = new Debuglet(debug, defaultConfig);
105102

106103
nocks.oauth2();
107104
var scope = nock(API)
@@ -125,7 +122,7 @@ describe(__filename, function(){
125122
this.timeout(10000);
126123
process.env.GCLOUD_PROJECT='11020304f2934';
127124
var debug = require('../..')({credentials: fakeCredentials});
128-
debuglet = new Debuglet(debug, defaultConfig, logger);
125+
debuglet = new Debuglet(debug, defaultConfig);
129126

130127
nocks.oauth2();
131128
var scope = nock(API)
@@ -153,7 +150,7 @@ describe(__filename, function(){
153150
var debug = require('../..')(
154151
{projectId: 'fake-project', credentials: fakeCredentials});
155152
var config = extend({}, defaultConfig, {workingDirectory: __dirname});
156-
debuglet = new Debuglet(debug, config, logger);
153+
debuglet = new Debuglet(debug, config);
157154

158155
nocks.oauth2();
159156
debuglet.once('initError', function(err) {
@@ -167,7 +164,7 @@ describe(__filename, function(){
167164
it('should register successfully otherwise', function(done) {
168165
var debug = require('../..')(
169166
{projectId: 'fake-project', credentials: fakeCredentials});
170-
debuglet = new Debuglet(debug, defaultConfig, logger);
167+
debuglet = new Debuglet(debug, defaultConfig);
171168

172169
nocks.oauth2();
173170
var scope =
@@ -188,7 +185,7 @@ describe(__filename, function(){
188185

189186
var debug = require('../..')(
190187
{projectId: 'fake-project', credentials: fakeCredentials});
191-
debuglet = new Debuglet(debug, defaultConfig, logger);
188+
debuglet = new Debuglet(debug, defaultConfig);
192189

193190
nocks.oauth2();
194191
var scope = nock(API)
@@ -216,7 +213,7 @@ describe(__filename, function(){
216213
this.timeout(4000);
217214
var debug = require('../..')(
218215
{projectId: 'fake-project', credentials: fakeCredentials});
219-
debuglet = new Debuglet(debug, defaultConfig, logger);
216+
debuglet = new Debuglet(debug, defaultConfig);
220217

221218
nocks.oauth2();
222219
var scope = nock(API)
@@ -253,7 +250,7 @@ describe(__filename, function(){
253250
it('should re-register when registration expires', function(done) {
254251
var debug = require('../..')(
255252
{projectId: 'fake-project', credentials: fakeCredentials});
256-
debuglet = new Debuglet(debug, defaultConfig, logger);
253+
debuglet = new Debuglet(debug, defaultConfig);
257254

258255
nocks.oauth2();
259256
var scope = nock(API)
@@ -288,7 +285,7 @@ describe(__filename, function(){
288285
this.timeout(2000);
289286
var debug = require('../..')(
290287
{projectId: 'fake-project', credentials: fakeCredentials});
291-
debuglet = new Debuglet(debug, defaultConfig, logger);
288+
debuglet = new Debuglet(debug, defaultConfig);
292289

293290
nocks.oauth2();
294291
var scope = nock(API)
@@ -320,7 +317,7 @@ describe(__filename, function(){
320317

321318
var debug = require('../..')(
322319
{projectId: 'fake-project', credentials: fakeCredentials});
323-
debuglet = new Debuglet(debug, defaultConfig, logger);
320+
debuglet = new Debuglet(debug, defaultConfig);
324321

325322
nocks.oauth2();
326323
var scope = nock(API)
@@ -390,7 +387,7 @@ describe(__filename, function(){
390387
})
391388
.reply(200);
392389

393-
debuglet = new Debuglet(debug, config, logger);
390+
debuglet = new Debuglet(debug, config);
394391
debuglet.once('registered', function(id) {
395392
assert.equal(id, DEBUGGEE_ID);
396393
setTimeout(function() {
@@ -444,7 +441,7 @@ describe(__filename, function(){
444441
breakpoints: [bp]
445442
});
446443

447-
debuglet = new Debuglet(debug, config, logger);
444+
debuglet = new Debuglet(debug, config);
448445
debuglet.once('registered', function(id) {
449446
assert.equal(id, DEBUGGEE_ID);
450447
setTimeout(function() {

test/standalone/test-options-credentials.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ var assert = require('assert');
2020
var nock = require('nock');
2121
var nocks = require('../nocks.js');
2222
var extend = require('extend');
23-
var logger = require('@google/cloud-diagnostics-common').logger;
2423
var defaultOptions = {};
2524
var config = require('../../src/agent/config.js');
2625
var Debuglet = require('../../src/agent/debuglet.js');
@@ -66,8 +65,7 @@ describe('test-options-credentials', function() {
6665
return true;
6766
});
6867

69-
debuglet =
70-
new Debuglet(debug, config, logger.create(logger.WARN, 'testing'));
68+
debuglet = new Debuglet(debug, config);
7169
debuglet.start();
7270
});
7371

@@ -90,8 +88,7 @@ describe('test-options-credentials', function() {
9088
setImmediate(done);
9189
return true;
9290
});
93-
debuglet =
94-
new Debuglet(debug, config, logger.create(logger.WARN, 'testing'));
91+
debuglet = new Debuglet(debug, config);
9592
debuglet.start();
9693
});
9794

@@ -113,7 +110,7 @@ describe('test-options-credentials', function() {
113110
setImmediate(done);
114111
return true;
115112
});
116-
debuglet = new Debuglet(debug, config, logger.create(undefined, 'testing'));
113+
debuglet = new Debuglet(debug, config);
117114
debuglet.start();
118115
});
119116

@@ -148,7 +145,7 @@ describe('test-options-credentials', function() {
148145
assert(options.credentials.hasOwnProperty(field));
149146
assert.notEqual(options.credentials[field], fileCredentials[field]);
150147
});
151-
debuglet = new Debuglet(debug, config, logger.create(undefined, 'testing'));
148+
debuglet = new Debuglet(debug, config);
152149
debuglet.start();
153150
});
154151
});

0 commit comments

Comments
 (0)