Skip to content

Commit 6a432a5

Browse files
author
Suchita Doshi
committed
Add single telemetry support
1 parent f95e43a commit 6a432a5

3 files changed

Lines changed: 98 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
const puppeteer = require('puppeteer');
2+
const { setTelemetry, getTelemetry } = require('../utils/telemetry');
3+
4+
const DEFAULT_PUPPETEER_ARGS = { ignoreHTTPSErrors: true };
5+
6+
module.exports = async function gatherSingleTelemetry(url, gatherFn, ...args) {
7+
const browser = await puppeteer.launch(DEFAULT_PUPPETEER_ARGS);
8+
const page = await browser.newPage();
9+
10+
await page.goto(url);
11+
12+
await page.exposeFunction('logErrorInNodeProcess', message => {
13+
console.error(message); // eslint-disable-line no-console
14+
});
15+
16+
const telemetry = await bridgeEvaluate(
17+
page,
18+
async (gFn, ...supportFns) => {
19+
supportFns.forEach(fn => {
20+
this[fn.name] = fn;
21+
});
22+
let telemetry = {};
23+
24+
telemetry = await gFn(...supportFns);
25+
return telemetry;
26+
},
27+
gatherFn,
28+
...args
29+
);
30+
31+
// get the current telemetry and add the `single-telemetry` key to it.
32+
const currentTelemetry = getTelemetry();
33+
currentTelemetry['single-telemetry'] = telemetry;
34+
setTelemetry(currentTelemetry);
35+
await browser.close();
36+
37+
async function bridgeEvaluate(page, fn, ...rawArgs) {
38+
const args = await Promise.all(
39+
rawArgs.map(arg => {
40+
return typeof arg === 'function' ? page.evaluateHandle(`(${arg.toString()})`) : arg;
41+
})
42+
);
43+
return page.evaluate(fn, ...args);
44+
}
45+
};
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const startApp = require('../../test/helpers/start-app');
2+
const gatherSingleTelemetry = require('./gather-single-telemetry');
3+
const { getTelemetry } = require('../utils/telemetry');
4+
const APP_TIMEOUT = 100000;
5+
6+
function resolverWithoutArgs() {
7+
return { foo: 'bar' };
8+
}
9+
10+
function resolverWithArgs(lookupNames) {
11+
if (lookupNames) {
12+
return lookupNames.map(item => {
13+
const lookupSplit = item.split(':');
14+
return { name: lookupSplit[1], type: lookupSplit[0] };
15+
});
16+
}
17+
}
18+
19+
describe('Gather single telemetry', () => {
20+
let app;
21+
let localAppPath = './test/fixtures/classic-app';
22+
beforeAll(async () => {
23+
app = await startApp(localAppPath);
24+
console.log(`Spawned PID: ${app.emberServe.pid}`);
25+
}, APP_TIMEOUT);
26+
27+
test('can determine base single telemetry case', async () => {
28+
await gatherSingleTelemetry('http://localhost:4200', resolverWithoutArgs);
29+
let telemetry = getTelemetry();
30+
expect(telemetry['single-telemetry']).toEqual({
31+
foo: 'bar',
32+
});
33+
});
34+
35+
test('can determine single telemetry with arguments passed', async () => {
36+
const lookupNames = ['component:foo', 'helper:bar'];
37+
await gatherSingleTelemetry('http://localhost:4200', resolverWithArgs, lookupNames);
38+
let telemetry = getTelemetry();
39+
expect(telemetry['single-telemetry']).toEqual([
40+
{ name: 'foo', type: 'component' },
41+
{ name: 'bar', type: 'helper' },
42+
]);
43+
});
44+
45+
afterAll(async () => {
46+
console.log(`Killing PID: ${app.emberServe.pid}`);
47+
await app.emberServe.kill('SIGTERM', {
48+
forceKillAfterTimeout: 200,
49+
});
50+
}, APP_TIMEOUT);
51+
});

lib/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const gatherTelemetryForUrl = require('./gather/gather-telemetry');
2+
const gatherSingleTelemetryForUrl = require('./gather/gather-single-telemetry.js');
23
const { getModulePathFor } = require('./utils/get-module-path-for');
34
const { getTelemetry, setTelemetry, getTelemetryFor } = require('./utils/telemetry');
45
const analyzeEmberObject = require('./gather/analyze-ember-object');
@@ -7,6 +8,7 @@ module.exports = {
78
getTelemetry,
89
setTelemetry,
910
gatherTelemetryForUrl,
11+
gatherSingleTelemetryForUrl,
1012
getTelemetryFor,
1113
getModulePathFor,
1214
analyzeEmberObject,

0 commit comments

Comments
 (0)