From e9ee58a89ea94e2295b4744d08a55d0c76349382 Mon Sep 17 00:00:00 2001 From: Hans Larsen Date: Mon, 25 Mar 2019 16:24:36 -0700 Subject: [PATCH] refactor(@angular/cli): move analytics constants to devkit core They need to be shared with builders and schematics. --- packages/angular/cli/commands/add-impl.ts | 4 +-- packages/angular/cli/commands/build-impl.ts | 5 ++-- packages/angular/cli/commands/serve-impl.ts | 5 ++-- packages/angular/cli/models/analytics.ts | 10 ++++--- .../core/src/analytics/index.ts | 29 +++++++++++++++++++ 5 files changed, 41 insertions(+), 12 deletions(-) diff --git a/packages/angular/cli/commands/add-impl.ts b/packages/angular/cli/commands/add-impl.ts index 27b5a8df48..d6f000827e 100644 --- a/packages/angular/cli/commands/add-impl.ts +++ b/packages/angular/cli/commands/add-impl.ts @@ -5,7 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ -import { tags, terminal } from '@angular-devkit/core'; +import { analytics, tags, terminal } from '@angular-devkit/core'; import { ModuleNotFoundException, resolve } from '@angular-devkit/core/node'; import { NodePackageDoesNotSupportSchematics } from '@angular-devkit/schematics/tools'; import { dirname } from 'path'; @@ -150,7 +150,7 @@ export class AddCommand extends SchematicCommand { // Add the collection if it's safe listed. if (collection && isPackageNameSafeForAnalytics(collection)) { - dimensions[AnalyticsDimensions.NgAddCollection] = collection; + dimensions[analytics.NgCliAnalyticsDimensions.NgAddCollection] = collection; } else { delete dimensions[AnalyticsDimensions.NgAddCollection]; } diff --git a/packages/angular/cli/commands/build-impl.ts b/packages/angular/cli/commands/build-impl.ts index 962e766db1..fe1fde26fd 100644 --- a/packages/angular/cli/commands/build-impl.ts +++ b/packages/angular/cli/commands/build-impl.ts @@ -5,8 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ - -import { AnalyticsDimensions } from '../models/analytics'; +import { analytics } from '@angular-devkit/core'; import { ArchitectCommand, ArchitectCommandOptions } from '../models/architect-command'; import { Arguments } from '../models/interface'; import { Version } from '../upgrade/version'; @@ -29,7 +28,7 @@ export class BuildCommand extends ArchitectCommand { metrics: (boolean | number | string)[] = [], ): Promise { if (options.buildEventLog !== undefined) { - dimensions[AnalyticsDimensions.NgBuildBuildEventLog] = true; + dimensions[analytics.NgCliAnalyticsDimensions.NgBuildBuildEventLog] = true; } return super.reportAnalytics(paths, options, dimensions, metrics); diff --git a/packages/angular/cli/commands/serve-impl.ts b/packages/angular/cli/commands/serve-impl.ts index 337d45a4af..22e104b101 100644 --- a/packages/angular/cli/commands/serve-impl.ts +++ b/packages/angular/cli/commands/serve-impl.ts @@ -5,8 +5,7 @@ * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ - -import { AnalyticsDimensions } from '../models/analytics'; +import { analytics } from '@angular-devkit/core'; import { ArchitectCommand, ArchitectCommandOptions } from '../models/architect-command'; import { Arguments } from '../models/interface'; import { Version } from '../upgrade/version'; @@ -34,7 +33,7 @@ export class ServeCommand extends ArchitectCommand { metrics: (boolean | number | string)[] = [], ): Promise { if (options.buildEventLog !== undefined) { - dimensions[AnalyticsDimensions.NgBuildBuildEventLog] = true; + dimensions[analytics.NgCliAnalyticsDimensions.NgBuildBuildEventLog] = true; } return super.reportAnalytics(paths, options, dimensions, metrics); diff --git a/packages/angular/cli/models/analytics.ts b/packages/angular/cli/models/analytics.ts index 6e2ac774e1..39b9272d2b 100644 --- a/packages/angular/cli/models/analytics.ts +++ b/packages/angular/cli/models/analytics.ts @@ -241,6 +241,7 @@ function _buildUserAgentString() { export class UniversalAnalytics implements analytics.Analytics { private _ua: ua.Visitor; private _dirty = false; + private _metrics: (string | number)[] = []; /** * @param trackingId The Google Analytics ID. @@ -266,10 +267,10 @@ export class UniversalAnalytics implements analytics.Analytics { this._ua.set('aid', _getNodeVersion()); // We set custom metrics for values we care about. - this._ua.set('cm1', _getCpuCount()); - this._ua.set('cm2', _getCpuSpeed()); - this._ua.set('cm3', _getRamSize()); - this._ua.set('cm4', _getNumericNodeVersion()); + this._metrics[analytics.NgCliAnalyticsMetrics.CpuCount] = _getCpuCount(); + this._metrics[analytics.NgCliAnalyticsMetrics.CpuSpeed] = _getCpuSpeed(); + this._metrics[analytics.NgCliAnalyticsMetrics.RamInMegabytes] = _getRamSize(); + this._metrics[analytics.NgCliAnalyticsMetrics.NodeVersion] = _getNumericNodeVersion(); } /** @@ -278,6 +279,7 @@ export class UniversalAnalytics implements analytics.Analytics { */ private _customVariables(options: analytics.CustomDimensionsAndMetricsOptions) { const additionals: { [key: string]: boolean | number | string } = {}; + this._metrics.forEach((v, i) => additionals['cm' + i] = v); (options.dimensions || []).forEach((v, i) => additionals['cd' + i] = v); (options.metrics || []).forEach((v, i) => additionals['cm' + i] = v); diff --git a/packages/angular_devkit/core/src/analytics/index.ts b/packages/angular_devkit/core/src/analytics/index.ts index e84c8b068b..eb3b842c0d 100644 --- a/packages/angular_devkit/core/src/analytics/index.ts +++ b/packages/angular_devkit/core/src/analytics/index.ts @@ -10,3 +10,32 @@ export * from './forwarder'; export * from './logging'; export * from './multi'; export * from './noop'; + + +/** + * MAKE SURE TO KEEP THIS IN SYNC WITH THE TABLE AND CONTENT IN `/docs/design/analytics.md`. + * WE LIST THOSE DIMENSIONS (AND MORE). + */ +export enum NgCliAnalyticsDimensions { + NgAddCollection = 6, + NgBuildBuildEventLog = 7, + BuildErrors = 20, +} + +export enum NgCliAnalyticsMetrics { + CpuCount = 1, + CpuSpeed = 2, + RamInMegabytes = 3, + NodeVersion = 4, + BuildTime = 5, + NgOnInitCount = 6, + InitialChunkSize = 7, + TotalChunkCount = 8, + TotalChunkSize = 9, + LazyChunkCount = 10, + LazyChunkSize = 11, + AssetCount = 12, + AssetSize = 13, + PolyfillSize = 12, + CssSize = 13, +}