From 704235786ac813150a80b75367a816e33d2cf221 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Wed, 1 Dec 2021 12:32:43 -0500 Subject: [PATCH 1/2] feat(analytics-module-ga): support self hosted analytics.js Signed-off-by: Phil Kuang --- .changeset/sixty-files-talk.md | 5 +++++ plugins/analytics-module-ga/config.d.ts | 7 +++++++ .../implementations/AnalyticsApi/GoogleAnalytics.ts | 13 ++++++++++++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 .changeset/sixty-files-talk.md diff --git a/.changeset/sixty-files-talk.md b/.changeset/sixty-files-talk.md new file mode 100644 index 0000000000..b19e1d0820 --- /dev/null +++ b/.changeset/sixty-files-talk.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-analytics-module-ga': patch +--- + +Support self hosted analytics.js script via `gaAddress` config option diff --git a/plugins/analytics-module-ga/config.d.ts b/plugins/analytics-module-ga/config.d.ts index 4ccd66e1dd..ac4202fff8 100644 --- a/plugins/analytics-module-ga/config.d.ts +++ b/plugins/analytics-module-ga/config.d.ts @@ -27,6 +27,13 @@ export interface Config { */ trackingId: string; + /** + * URL to Google Analytics analytics.js script + * Defaults to https://www.google-analytics.com/analytics.js + * @visibility frontend + */ + gaAddress?: string; + /** * Whether or not to log analytics debug statements to the console. * Defaults to false. diff --git a/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts b/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts index 1e6216936c..7db2ac1926 100644 --- a/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts +++ b/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts @@ -42,18 +42,25 @@ export class GoogleAnalytics implements AnalyticsApi { private constructor({ cdmConfig, trackingId, + gaAddress, testMode, debug, }: { cdmConfig: CustomDimensionOrMetricConfig[]; trackingId: string; + gaAddress: string; testMode: boolean; debug: boolean; }) { this.cdmConfig = cdmConfig; // Initialize Google Analytics. - ReactGA.initialize(trackingId, { testMode, debug, titleCase: false }); + ReactGA.initialize(trackingId, { + gaAddress, + testMode, + debug, + titleCase: false, + }); } /** @@ -62,6 +69,9 @@ export class GoogleAnalytics implements AnalyticsApi { static fromConfig(config: Config) { // Get all necessary configuration. const trackingId = config.getString('app.analytics.ga.trackingId'); + const gaAddress = + config.getOptionalString('app.analytics.ga.gaAddress') ?? + 'https://www.google-analytics.com/analytics.js'; const debug = config.getOptionalBoolean('app.analytics.ga.debug') ?? false; const testMode = config.getOptionalBoolean('app.analytics.ga.testMode') ?? false; @@ -82,6 +92,7 @@ export class GoogleAnalytics implements AnalyticsApi { // Return an implementation instance. return new GoogleAnalytics({ trackingId, + gaAddress, cdmConfig, testMode, debug, From 33a93b634e77de728527f631a0e8eb6d84c99181 Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Thu, 2 Dec 2021 08:54:00 -0500 Subject: [PATCH 2/2] refactor(analytics-module-ga): rename gaAddress option to scriptSrc Signed-off-by: Phil Kuang --- .changeset/sixty-files-talk.md | 2 +- plugins/analytics-module-ga/config.d.ts | 4 ++-- .../implementations/AnalyticsApi/GoogleAnalytics.ts | 12 +++++------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.changeset/sixty-files-talk.md b/.changeset/sixty-files-talk.md index b19e1d0820..67d8c48b7e 100644 --- a/.changeset/sixty-files-talk.md +++ b/.changeset/sixty-files-talk.md @@ -2,4 +2,4 @@ '@backstage/plugin-analytics-module-ga': patch --- -Support self hosted analytics.js script via `gaAddress` config option +Support self hosted analytics.js script via `scriptSrc` config option diff --git a/plugins/analytics-module-ga/config.d.ts b/plugins/analytics-module-ga/config.d.ts index ac4202fff8..ac534daae8 100644 --- a/plugins/analytics-module-ga/config.d.ts +++ b/plugins/analytics-module-ga/config.d.ts @@ -29,10 +29,10 @@ export interface Config { /** * URL to Google Analytics analytics.js script - * Defaults to https://www.google-analytics.com/analytics.js + * Defaults to fetching from GA source (eg. https://www.google-analytics.com/analytics.js) * @visibility frontend */ - gaAddress?: string; + scriptSrc?: string; /** * Whether or not to log analytics debug statements to the console. diff --git a/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts b/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts index 7db2ac1926..23da7c8589 100644 --- a/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts +++ b/plugins/analytics-module-ga/src/apis/implementations/AnalyticsApi/GoogleAnalytics.ts @@ -42,13 +42,13 @@ export class GoogleAnalytics implements AnalyticsApi { private constructor({ cdmConfig, trackingId, - gaAddress, + scriptSrc, testMode, debug, }: { cdmConfig: CustomDimensionOrMetricConfig[]; trackingId: string; - gaAddress: string; + scriptSrc?: string; testMode: boolean; debug: boolean; }) { @@ -56,9 +56,9 @@ export class GoogleAnalytics implements AnalyticsApi { // Initialize Google Analytics. ReactGA.initialize(trackingId, { - gaAddress, testMode, debug, + gaAddress: scriptSrc, titleCase: false, }); } @@ -69,9 +69,7 @@ export class GoogleAnalytics implements AnalyticsApi { static fromConfig(config: Config) { // Get all necessary configuration. const trackingId = config.getString('app.analytics.ga.trackingId'); - const gaAddress = - config.getOptionalString('app.analytics.ga.gaAddress') ?? - 'https://www.google-analytics.com/analytics.js'; + const scriptSrc = config.getOptionalString('app.analytics.ga.scriptSrc'); const debug = config.getOptionalBoolean('app.analytics.ga.debug') ?? false; const testMode = config.getOptionalBoolean('app.analytics.ga.testMode') ?? false; @@ -92,7 +90,7 @@ export class GoogleAnalytics implements AnalyticsApi { // Return an implementation instance. return new GoogleAnalytics({ trackingId, - gaAddress, + scriptSrc, cdmConfig, testMode, debug,