summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMayra Cabrera <mcabrera@gitlab.com>2019-08-26 22:16:24 +0000
committerMayra Cabrera <mcabrera@gitlab.com>2019-08-26 22:16:24 +0000
commit0f8058bc580ae09df71563c83fca2cc3ceb751fa (patch)
tree9c1d60ebc1e38689428b7579d1932203a1e70a3c
parent1d83240beb08aaaa240efbc8f63293019603a744 (diff)
parent92b723db956e2b75b4bdcfb4d94c3c3cff8bf639 (diff)
downloadgitlab-ce-0f8058bc580ae09df71563c83fca2cc3ceb751fa.tar.gz
Merge branch 'revert-e2251a09' into 'master'
Revert "Merge branch 'user-tracking-settings' into 'master'" See merge request gitlab-org/gitlab-ce!32235
-rw-r--r--app/assets/javascripts/main.js2
-rw-r--r--app/assets/javascripts/tracking.js28
-rw-r--r--app/views/layouts/_snowplow.html.haml21
-rw-r--r--lib/gitlab/snowplow_tracker.rb35
-rw-r--r--lib/gitlab/tracking.rb44
-rw-r--r--spec/frontend/tracking_spec.js46
-rw-r--r--spec/lib/gitlab/snowplow_tracker_spec.rb45
-rw-r--r--spec/lib/gitlab/tracking_spec.rb88
8 files changed, 105 insertions, 204 deletions
diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js
index 0ddf40b0405..39f2097c174 100644
--- a/app/assets/javascripts/main.js
+++ b/app/assets/javascripts/main.js
@@ -35,7 +35,6 @@ import initPerformanceBar from './performance_bar';
import initSearchAutocomplete from './search_autocomplete';
import GlFieldErrors from './gl_field_errors';
import initUserPopovers from './user_popovers';
-import { initUserTracking } from './tracking';
import { __ } from './locale';
import 'ee_else_ce/main_ee';
@@ -95,7 +94,6 @@ function deferredInitialisation() {
initLogoAnimation();
initUsagePingConsent();
initUserPopovers();
- initUserTracking();
if (document.querySelector('.search')) initSearchAutocomplete();
diff --git a/app/assets/javascripts/tracking.js b/app/assets/javascripts/tracking.js
index 03281b5ef49..a852f937eec 100644
--- a/app/assets/javascripts/tracking.js
+++ b/app/assets/javascripts/tracking.js
@@ -1,23 +1,5 @@
import $ from 'jquery';
-const DEFAULT_SNOWPLOW_OPTIONS = {
- namespace: 'gl',
- hostname: window.location.hostname,
- cookieDomain: window.location.hostname,
- appId: '',
- userFingerprint: false,
- respectDoNotTrack: true,
- forceSecureTracker: true,
- eventMethod: 'post',
- contexts: { webPage: true },
- // Page tracking tracks a single event when the page loads.
- pageTrackingEnabled: false,
- // Activity tracking tracks when a user is still interacting with the page.
- // Events like scrolling and mouse movements are used to determine if the
- // user has the tab active and is still actively engaging.
- activityTrackingEnabled: false,
-};
-
const extractData = (el, opts = {}) => {
const { trackEvent, trackLabel = '', trackProperty = '' } = el.dataset;
let trackValue = el.dataset.trackValue || el.value || '';
@@ -89,13 +71,3 @@ export default class Tracking {
};
}
}
-
-export function initUserTracking() {
- if (!Tracking.enabled()) return;
-
- const opts = Object.assign({}, DEFAULT_SNOWPLOW_OPTIONS, window.snowplowOptions);
- window.snowplow('newTracker', opts.namespace, opts.hostname, opts);
-
- if (opts.activityTrackingEnabled) window.snowplow('enableActivityTracking', 30, 30);
- if (opts.pageTrackingEnabled) window.snowplow('trackPageView'); // must be after enableActivityTracking
-}
diff --git a/app/views/layouts/_snowplow.html.haml b/app/views/layouts/_snowplow.html.haml
index d7ff5ad1094..5f5c5e984c5 100644
--- a/app/views/layouts/_snowplow.html.haml
+++ b/app/views/layouts/_snowplow.html.haml
@@ -7,4 +7,23 @@
};p[i].q=p[i].q||[];n=l.createElement(o);g=l.getElementsByTagName(o)[0];n.async=1;
n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","#{asset_url('snowplow/sp.js')}","snowplow"));
- window.snowplowOptions = #{Gitlab::Tracking.snowplow_options(@group).to_json}
+ window.snowplow('newTracker', '#{Gitlab::SnowplowTracker::NAMESPACE}', '#{Gitlab::CurrentSettings.snowplow_collector_hostname}', {
+ appId: '#{Gitlab::CurrentSettings.snowplow_site_id}',
+ cookieDomain: '#{Gitlab::CurrentSettings.snowplow_cookie_domain}',
+ userFingerprint: false,
+ respectDoNotTrack: true,
+ forceSecureTracker: true,
+ post: true,
+ contexts: { webPage: true },
+ stateStorageStrategy: "localStorage"
+ });
+
+ window.snowplow('enableActivityTracking', 30, 30);
+ window.snowplow('trackPageView');
+
+- return unless Feature.enabled?(:additional_snowplow_tracking, @group)
+
+= javascript_tag nonce: true do
+ :plain
+ window.snowplow('enableFormTracking');
+ window.snowplow('enableLinkClickTracking');
diff --git a/lib/gitlab/snowplow_tracker.rb b/lib/gitlab/snowplow_tracker.rb
new file mode 100644
index 00000000000..9f12513e09e
--- /dev/null
+++ b/lib/gitlab/snowplow_tracker.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+require 'snowplow-tracker'
+
+module Gitlab
+ module SnowplowTracker
+ NAMESPACE = 'cf'
+
+ class << self
+ def track_event(category, action, label: nil, property: nil, value: nil, context: nil)
+ tracker&.track_struct_event(category, action, label, property, value, context, Time.now.to_i)
+ end
+
+ private
+
+ def tracker
+ return unless enabled?
+
+ @tracker ||= ::SnowplowTracker::Tracker.new(emitter, subject, NAMESPACE, Gitlab::CurrentSettings.snowplow_site_id)
+ end
+
+ def subject
+ ::SnowplowTracker::Subject.new
+ end
+
+ def emitter
+ ::SnowplowTracker::Emitter.new(Gitlab::CurrentSettings.snowplow_collector_hostname)
+ end
+
+ def enabled?
+ Gitlab::CurrentSettings.snowplow_enabled?
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/tracking.rb b/lib/gitlab/tracking.rb
deleted file mode 100644
index ef669b03c87..00000000000
--- a/lib/gitlab/tracking.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-require 'snowplow-tracker'
-
-module Gitlab
- module Tracking
- SNOWPLOW_NAMESPACE = 'gl'
-
- class << self
- def enabled?
- Gitlab::CurrentSettings.snowplow_enabled?
- end
-
- def event(category, action, label: nil, property: nil, value: nil, context: nil)
- return unless enabled?
-
- snowplow.track_struct_event(category, action, label, property, value, context, Time.now.to_i)
- end
-
- def snowplow_options(group)
- additional_features = Feature.enabled?(:additional_snowplow_tracking, group)
- {
- namespace: SNOWPLOW_NAMESPACE,
- hostname: Gitlab::CurrentSettings.snowplow_collector_hostname,
- cookie_domain: Gitlab::CurrentSettings.snowplow_cookie_domain,
- app_id: Gitlab::CurrentSettings.snowplow_site_id,
- page_tracking_enabled: additional_features,
- activity_tracking_enabled: additional_features
- }.transform_keys! { |key| key.to_s.camelize(:lower).to_sym }
- end
-
- private
-
- def snowplow
- @snowplow ||= SnowplowTracker::Tracker.new(
- SnowplowTracker::Emitter.new(Gitlab::CurrentSettings.snowplow_collector_hostname),
- SnowplowTracker::Subject.new,
- SNOWPLOW_NAMESPACE,
- Gitlab::CurrentSettings.snowplow_site_id
- )
- end
- end
- end
-end
diff --git a/spec/frontend/tracking_spec.js b/spec/frontend/tracking_spec.js
index 7c98a1a66c9..0e862c683d3 100644
--- a/spec/frontend/tracking_spec.js
+++ b/spec/frontend/tracking_spec.js
@@ -1,56 +1,20 @@
import $ from 'jquery';
import { setHTMLFixture } from './helpers/fixtures';
-import Tracking, { initUserTracking } from '~/tracking';
+import Tracking from '~/tracking';
describe('Tracking', () => {
- let snowplowSpy;
-
beforeEach(() => {
window.snowplow = window.snowplow || (() => {});
- window.snowplowOptions = {
- namespace: '_namespace_',
- hostname: 'app.gitfoo.com',
- cookieDomain: '.gitfoo.com',
- };
- snowplowSpy = jest.spyOn(window, 'snowplow');
});
- describe('initUserTracking', () => {
- it('calls through to get a new tracker with the expected options', () => {
- initUserTracking();
- expect(snowplowSpy).toHaveBeenCalledWith('newTracker', '_namespace_', 'app.gitfoo.com', {
- namespace: '_namespace_',
- hostname: 'app.gitfoo.com',
- cookieDomain: '.gitfoo.com',
- appId: '',
- userFingerprint: false,
- respectDoNotTrack: true,
- forceSecureTracker: true,
- eventMethod: 'post',
- contexts: { webPage: true },
- activityTrackingEnabled: false,
- pageTrackingEnabled: false,
- });
- });
-
- it('should activate features based on what has been enabled', () => {
- initUserTracking();
- expect(snowplowSpy).not.toHaveBeenCalledWith('enableActivityTracking', 30, 30);
- expect(snowplowSpy).not.toHaveBeenCalledWith('trackPageView');
-
- window.snowplowOptions = Object.assign({}, window.snowplowOptions, {
- activityTrackingEnabled: true,
- pageTrackingEnabled: true,
- });
+ describe('.event', () => {
+ let snowplowSpy = null;
- initUserTracking();
- expect(snowplowSpy).toHaveBeenCalledWith('enableActivityTracking', 30, 30);
- expect(snowplowSpy).toHaveBeenCalledWith('trackPageView');
+ beforeEach(() => {
+ snowplowSpy = jest.spyOn(window, 'snowplow');
});
- });
- describe('.event', () => {
afterEach(() => {
window.doNotTrack = undefined;
navigator.doNotTrack = undefined;
diff --git a/spec/lib/gitlab/snowplow_tracker_spec.rb b/spec/lib/gitlab/snowplow_tracker_spec.rb
new file mode 100644
index 00000000000..073a33e5973
--- /dev/null
+++ b/spec/lib/gitlab/snowplow_tracker_spec.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+require 'spec_helper'
+
+describe Gitlab::SnowplowTracker do
+ let(:timestamp) { Time.utc(2017, 3, 22) }
+
+ around do |example|
+ Timecop.freeze(timestamp) { example.run }
+ end
+
+ subject { described_class.track_event('epics', 'action', property: 'what', value: 'doit') }
+
+ context '.track_event' do
+ context 'when Snowplow tracker is disabled' do
+ it 'does not track the event' do
+ expect(SnowplowTracker::Tracker).not_to receive(:new)
+
+ subject
+ end
+ end
+
+ context 'when Snowplow tracker is enabled' do
+ before do
+ stub_application_setting(snowplow_enabled: true)
+ stub_application_setting(snowplow_site_id: 'awesome gitlab')
+ stub_application_setting(snowplow_collector_hostname: 'url.com')
+ end
+
+ it 'tracks the event' do
+ tracker = double
+
+ expect(::SnowplowTracker::Tracker).to receive(:new)
+ .with(
+ an_instance_of(::SnowplowTracker::Emitter),
+ an_instance_of(::SnowplowTracker::Subject),
+ 'cf', 'awesome gitlab'
+ ).and_return(tracker)
+ expect(tracker).to receive(:track_struct_event)
+ .with('epics', 'action', nil, 'what', 'doit', nil, timestamp.to_i)
+
+ subject
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/tracking_spec.rb b/spec/lib/gitlab/tracking_spec.rb
deleted file mode 100644
index f14e74427e1..00000000000
--- a/spec/lib/gitlab/tracking_spec.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-# frozen_string_literal: true
-require 'spec_helper'
-
-describe Gitlab::Tracking do
- let(:timestamp) { Time.utc(2017, 3, 22) }
-
- before do
- stub_application_setting(snowplow_enabled: true)
- stub_application_setting(snowplow_collector_hostname: 'gitfoo.com')
- stub_application_setting(snowplow_cookie_domain: '.gitfoo.com')
- stub_application_setting(snowplow_site_id: '_abc123_')
- end
-
- describe '.snowplow_options' do
- subject(&method(:described_class))
-
- it 'returns useful client options' do
- expect(subject.snowplow_options(nil)).to eq(
- namespace: 'gl',
- hostname: 'gitfoo.com',
- cookieDomain: '.gitfoo.com',
- appId: '_abc123_',
- pageTrackingEnabled: true,
- activityTrackingEnabled: true
- )
- end
-
- it 'enables features using feature flags' do
- stub_feature_flags(additional_snowplow_tracking: true)
- allow(Feature).to receive(:enabled?).with(
- :additional_snowplow_tracking,
- '_group_'
- ).and_return(false)
-
- expect(subject.snowplow_options('_group_')).to include(
- pageTrackingEnabled: false,
- activityTrackingEnabled: false
- )
- end
- end
-
- describe '.event' do
- subject(&method(:described_class))
-
- around do |example|
- Timecop.freeze(timestamp) { example.run }
- end
-
- it 'can track events' do
- tracker = double
-
- expect(SnowplowTracker::Emitter).to receive(:new).with(
- 'gitfoo.com'
- ).and_return('_emitter_')
-
- expect(SnowplowTracker::Tracker).to receive(:new).with(
- '_emitter_',
- an_instance_of(SnowplowTracker::Subject),
- 'gl',
- '_abc123_'
- ).and_return(tracker)
-
- expect(tracker).to receive(:track_struct_event).with(
- 'category',
- 'action',
- '_label_',
- '_property_',
- '_value_',
- '_context_',
- timestamp.to_i
- )
-
- subject.event('category', 'action',
- label: '_label_',
- property: '_property_',
- value: '_value_',
- context: '_context_'
- )
- end
-
- it 'does not track when not enabled' do
- stub_application_setting(snowplow_enabled: false)
- expect(SnowplowTracker::Tracker).not_to receive(:new)
-
- subject.event('epics', 'action', property: 'what', value: 'doit')
- end
- end
-end