Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #2107 from snyk/refactor/analytics-tests
Use await syntax in analytics
  • Loading branch information
maxjeffos committed Jul 23, 2021
2 parents fce83d5 + 0f2a7e3 commit 64e3fe8
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 72 deletions.
135 changes: 65 additions & 70 deletions src/lib/analytics.ts
Expand Up @@ -61,7 +61,7 @@ export function allowAnalytics(): boolean {
* given by the data parameter, or called from {@link addDataAndSend}.
* @param data the analytics data to send to the backend.
*/
export function postAnalytics(
export async function postAnalytics(
data,
): Promise<void | { res: needle.NeedleResponse; body: any }> {
// if the user opt'ed out of analytics, then let's bail out early
Expand All @@ -71,76 +71,71 @@ export function postAnalytics(
return Promise.resolve();
}

const isStandalone = version.isStandaloneBuild();

// get snyk version
return version
.getVersion()
.then(async (version) => {
data.version = version;
data.os = osName(os.platform(), os.release());
data.nodeVersion = process.version;
data.standalone = isStandalone;
data.integrationName = getIntegrationName(data.args);
data.integrationVersion = getIntegrationVersion(data.args);
data.integrationEnvironment = getIntegrationEnvironment(data.args);
data.integrationEnvironmentVersion = getIntegrationEnvironmentVersion(
data.args,
);

const seed = uuidv4();
const shasum = crypto.createHash('sha1');
data.id = shasum.update(seed).digest('hex');

const headers = {};
if (snyk.api) {
headers['authorization'] = 'token ' + snyk.api;
}

data.ci = isCI();

data.environment = {};
if (!isStandalone) {
data.environment.npmVersion = await getCommandVersion('npm');
}

data.durationMs = Date.now() - startTime;

try {
const networkTime = MetricsCollector.NETWORK_TIME.getTotal();
const cpuTime = data.durationMs - networkTime;
MetricsCollector.CPU_TIME.createInstance().setValue(cpuTime);
data.metrics = MetricsCollector.getAllMetrics();
} catch (err) {
debug('Error with metrics', err);
}

const queryStringParams = {};
if (data.org) {
queryStringParams['org'] = data.org;
}

debug('analytics', JSON.stringify(data, null, ' '));

const queryString =
Object.keys(queryStringParams).length > 0
? queryStringParams
: undefined;

return request({
body: {
data: data,
},
qs: queryString,
url: config.API + '/analytics/cli',
json: true,
method: 'post',
headers: headers,
});
})
.catch((error) => {
debug('analytics', error); // this swallows the analytics error
try {
const isStandalone = version.isStandaloneBuild();
const snykVersion = await version.getVersion();

data.version = snykVersion;
data.os = osName(os.platform(), os.release());
data.nodeVersion = process.version;
data.standalone = isStandalone;
data.integrationName = getIntegrationName(data.args);
data.integrationVersion = getIntegrationVersion(data.args);
data.integrationEnvironment = getIntegrationEnvironment(data.args);
data.integrationEnvironmentVersion = getIntegrationEnvironmentVersion(
data.args,
);

const seed = uuidv4();
const shasum = crypto.createHash('sha1');
data.id = shasum.update(seed).digest('hex');

const headers = {};
if (snyk.api) {
headers['authorization'] = 'token ' + snyk.api;
}

data.ci = isCI();

data.environment = {};
if (!isStandalone) {
data.environment.npmVersion = await getCommandVersion('npm');
}

data.durationMs = Date.now() - startTime;

try {
const networkTime = MetricsCollector.NETWORK_TIME.getTotal();
const cpuTime = data.durationMs - networkTime;
MetricsCollector.CPU_TIME.createInstance().setValue(cpuTime);
data.metrics = MetricsCollector.getAllMetrics();
} catch (err) {
debug('Error with metrics', err);
}

const queryStringParams = {};
if (data.org) {
queryStringParams['org'] = data.org;
}

debug('analytics', JSON.stringify(data, null, ' '));

const queryString =
Object.keys(queryStringParams).length > 0 ? queryStringParams : undefined;

return request({
body: {
data: data,
},
qs: queryString,
url: config.API + '/analytics/cli',
json: true,
method: 'post',
headers: headers,
});
} catch (err) {
debug('analytics', err); // this swallows the analytics error
}
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/lib/protect/apply-patch.js
Expand Up @@ -5,7 +5,7 @@ const exec = require('child_process').exec;
const path = require('path');
const fs = require('fs');
const semver = require('semver');
const errorAnalytics = require('../analytics').postAnalytics;
import { addDataAndSend } from '../analytics';

function applyPatch(patchFileName, vuln, live, patchUrl) {
let cwd = vuln.source;
Expand Down Expand Up @@ -190,7 +190,7 @@ function patchError(error, dir, vuln, patchUrl) {
const filename = path.relative(process.cwd(), dir);

// post metadata to help diagnose
errorAnalytics({
addDataAndSend({
command: 'patch-fail',
metadata: {
from: vuln.from.slice(1),
Expand Down

0 comments on commit 64e3fe8

Please sign in to comment.