mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-18 03:23:57 +08:00
feat(@angular/cli): allows analytics sharing with a third party
Documentation can be seen at https://next.angular.io/cli/usage-analytics-gathering
This commit is contained in:
parent
c42c82f669
commit
6e5095b134
@ -448,39 +448,43 @@ export async function promptProjectAnalytics(force = false): Promise<boolean> {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the global analytics setting for the user. This returns a string for UID, false if the user
|
* Get the global analytics object for the user. This returns an instance of UniversalAnalytics,
|
||||||
* opted out of analytics, true if the user wants to stay anonymous (no client id), and undefined
|
* or undefined if analytics are disabled.
|
||||||
* if the user has not been prompted yet.
|
|
||||||
*
|
*
|
||||||
* If any problem happens, it is considered the user has been opting out of analytics.
|
* If any problem happens, it is considered the user has been opting out of analytics.
|
||||||
*/
|
*/
|
||||||
export function getGlobalAnalytics(): string | boolean | undefined {
|
export function getGlobalAnalytics(): UniversalAnalytics | undefined {
|
||||||
analyticsDebug('getGlobalAnalytics');
|
analyticsDebug('getGlobalAnalytics');
|
||||||
|
const propertyId = 'UA-8594346-29';
|
||||||
|
|
||||||
if ('NG_CLI_ANALYTICS' in process.env) {
|
if ('NG_CLI_ANALYTICS' in process.env) {
|
||||||
if (process.env['NG_CLI_ANALYTICS'] == 'false' || process.env['NG_CLI_ANALYTICS'] == '') {
|
if (process.env['NG_CLI_ANALYTICS'] == 'false' || process.env['NG_CLI_ANALYTICS'] == '') {
|
||||||
analyticsDebug('NG_CLI_ANALYTICS is false');
|
analyticsDebug('NG_CLI_ANALYTICS is false');
|
||||||
|
|
||||||
return false;
|
return undefined;
|
||||||
}
|
}
|
||||||
if (process.env['NG_CLI_ANALYTICS'] === 'ci') {
|
if (process.env['NG_CLI_ANALYTICS'] === 'ci') {
|
||||||
analyticsDebug('Running in CI mode');
|
analyticsDebug('Running in CI mode');
|
||||||
|
|
||||||
return 'ci';
|
return new UniversalAnalytics(propertyId, 'ci');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If anything happens we just keep the NOOP analytics.
|
// If anything happens we just keep the NOOP analytics.
|
||||||
try {
|
try {
|
||||||
const globalWorkspace = getWorkspace('global');
|
const globalWorkspace = getWorkspace('global');
|
||||||
const analyticsConfig = globalWorkspace
|
const analyticsConfig: string | undefined | null | { uid?: string } = globalWorkspace
|
||||||
&& globalWorkspace.getCli()
|
&& globalWorkspace.getCli()
|
||||||
&& globalWorkspace.getCli()['analytics'];
|
&& globalWorkspace.getCli()['analytics'];
|
||||||
analyticsDebug('Client Analytics config found: %j', analyticsConfig);
|
analyticsDebug('Client Analytics config found: %j', analyticsConfig);
|
||||||
|
|
||||||
if (analyticsConfig === false) {
|
if (analyticsConfig === false) {
|
||||||
return false;
|
analyticsDebug('Analytics disabled. Ignoring all analytics.');
|
||||||
|
|
||||||
|
return undefined;
|
||||||
} else if (analyticsConfig === undefined || analyticsConfig === null) {
|
} else if (analyticsConfig === undefined || analyticsConfig === null) {
|
||||||
|
analyticsDebug('Analytics settings not found. Ignoring all analytics.');
|
||||||
|
|
||||||
// globalWorkspace can be null if there is no file. analyticsConfig would be null in this
|
// globalWorkspace can be null if there is no file. analyticsConfig would be null in this
|
||||||
// case. Since there is no file, the user hasn't answered and the expected return value is
|
// case. Since there is no file, the user hasn't answered and the expected return value is
|
||||||
// undefined.
|
// undefined.
|
||||||
@ -493,13 +497,54 @@ export function getGlobalAnalytics(): string | boolean | undefined {
|
|||||||
uid = analyticsConfig['uid'];
|
uid = analyticsConfig['uid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
analyticsDebug('client id: %s', uid);
|
analyticsDebug('client id: %j', uid);
|
||||||
|
if (uid == undefined) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
return uid;
|
return new UniversalAnalytics(propertyId, uid);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
analyticsDebug('Error happened during reading of analytics config: %s', err.message);
|
analyticsDebug('Error happened during reading of analytics config: %s', err.message);
|
||||||
|
|
||||||
return false;
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the usage analytics sharing setting, which is either a property string (GA-XXXXXXX-XX),
|
||||||
|
* or undefined if no sharing.
|
||||||
|
*/
|
||||||
|
export function getSharedAnalytics(): UniversalAnalytics | undefined {
|
||||||
|
analyticsDebug('getSharedAnalytics');
|
||||||
|
|
||||||
|
const envVarName = 'NG_CLI_ANALYTICS_SHARE';
|
||||||
|
if (envVarName in process.env) {
|
||||||
|
if (process.env[envVarName] == 'false' || process.env[envVarName] == '') {
|
||||||
|
analyticsDebug('NG_CLI_ANALYTICS is false');
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If anything happens we just keep the NOOP analytics.
|
||||||
|
try {
|
||||||
|
const globalWorkspace = getWorkspace('global');
|
||||||
|
const analyticsConfig = globalWorkspace
|
||||||
|
&& globalWorkspace.getCli()
|
||||||
|
&& globalWorkspace.getCli()['analyticsSharing'];
|
||||||
|
|
||||||
|
if (!analyticsConfig || !analyticsConfig.tracking || !analyticsConfig.uuid) {
|
||||||
|
return undefined;
|
||||||
|
} else {
|
||||||
|
analyticsDebug('Analytics sharing info: %j', analyticsConfig);
|
||||||
|
|
||||||
|
return new UniversalAnalytics(analyticsConfig.tracking, analyticsConfig.uuid);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
analyticsDebug('Error happened during reading of analytics sharing config: %s', err.message);
|
||||||
|
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import { readFileSync } from 'fs';
|
|||||||
import { dirname, join, resolve } from 'path';
|
import { dirname, join, resolve } from 'path';
|
||||||
import { findUp } from '../utilities/find-up';
|
import { findUp } from '../utilities/find-up';
|
||||||
import { parseJsonSchemaToCommandDescription } from '../utilities/json-schema';
|
import { parseJsonSchemaToCommandDescription } from '../utilities/json-schema';
|
||||||
import { UniversalAnalytics, getGlobalAnalytics } from './analytics';
|
import { UniversalAnalytics, getGlobalAnalytics, getSharedAnalytics } from './analytics';
|
||||||
import { Command } from './command';
|
import { Command } from './command';
|
||||||
import {
|
import {
|
||||||
CommandDescription,
|
CommandDescription,
|
||||||
@ -37,30 +37,22 @@ export interface CommandMapOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the analytics instance.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
async function _createAnalytics(): Promise<analytics.Analytics> {
|
async function _createAnalytics(): Promise<analytics.Analytics> {
|
||||||
const config = getGlobalAnalytics();
|
const config = getGlobalAnalytics();
|
||||||
|
const maybeSharedAnalytics = getSharedAnalytics();
|
||||||
|
|
||||||
switch (config) {
|
if (config && maybeSharedAnalytics) {
|
||||||
case undefined:
|
return new analytics.MultiAnalytics([config, maybeSharedAnalytics]);
|
||||||
case false:
|
} else if (config) {
|
||||||
analyticsDebug('Analytics disabled. Ignoring all analytics.');
|
return config;
|
||||||
|
} else if (maybeSharedAnalytics) {
|
||||||
|
return maybeSharedAnalytics;
|
||||||
|
} else {
|
||||||
return new analytics.NoopAnalytics();
|
return new analytics.NoopAnalytics();
|
||||||
|
|
||||||
case true:
|
|
||||||
analyticsDebug('Analytics enabled, anonymous user.');
|
|
||||||
|
|
||||||
return new UniversalAnalytics('UA-8594346-29', '');
|
|
||||||
|
|
||||||
case 'ci':
|
|
||||||
analyticsDebug('Logging analytics as CI.');
|
|
||||||
|
|
||||||
return new UniversalAnalytics('UA-8594346-29', 'ci');
|
|
||||||
|
|
||||||
default:
|
|
||||||
analyticsDebug('Analytics enabled. User ID: %j', config);
|
|
||||||
|
|
||||||
return new UniversalAnalytics('UA-8594346-29', config);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user