Commit 434acbc7 authored by Stan Hu's avatar Stan Hu

Merge branch '231539-send-a-copy-of-one-snowplow-event-to-local-collector' into 'master'

Send a copy of one Snowplow event to Product Analytics collector

See merge request gitlab-org/gitlab!39270
parents 9aeb8a05 ab084438
......@@ -34,6 +34,10 @@ module Epics
::Gitlab::Tracking.event(
'epics', 'promote', property: 'issue_id', value: original_entity.id
)
::ProductAnalytics::Tracker.event(
'epics', 'promote', property: 'issue_id', value: original_entity.id
)
end
def create_new_entity
......
......@@ -60,6 +60,7 @@ RSpec.describe Epics::IssuePromoteService do
before do
allow(Gitlab::Tracking).to receive(:event).with('epics', 'promote', an_instance_of(Hash))
allow(ProductAnalytics::Tracker).to receive(:event).with('epics', 'promote', an_instance_of(Hash))
subject.execute(issue)
end
......@@ -145,6 +146,7 @@ RSpec.describe Epics::IssuePromoteService do
context 'when issue has notes' do
before do
allow(Gitlab::Tracking).to receive(:event).with('epics', 'promote', an_instance_of(Hash))
allow(ProductAnalytics::Tracker).to receive(:event).with('epics', 'promote', an_instance_of(Hash))
issue.reload
end
......
......@@ -7,5 +7,36 @@ module ProductAnalytics
# The collector URL minus protocol and /i
COLLECTOR_URL = Gitlab.config.gitlab.url.sub(/\Ahttps?\:\/\//, '') + '/-/collector'
class << self
include Gitlab::Utils::StrongMemoize
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_f * 1000).to_i)
end
private
def enabled?
Gitlab::CurrentSettings.usage_ping_enabled?
end
def project_id
Gitlab::CurrentSettings.self_monitoring_project_id
end
def snowplow
strong_memoize(:snowplow) do
SnowplowTracker::Tracker.new(
SnowplowTracker::AsyncEmitter.new(COLLECTOR_URL, protocol: Gitlab.config.gitlab.protocol),
SnowplowTracker::Subject.new,
Gitlab::Tracking::SNOWPLOW_NAMESPACE,
project_id.to_s
)
end
end
end
end
end
# frozen_string_literal: true
require "spec_helper"
require 'spec_helper'
RSpec.describe ProductAnalytics::Tracker do
it { expect(described_class::URL).to eq('http://localhost/-/sp.js') }
it { expect(described_class::COLLECTOR_URL).to eq('localhost/-/collector') }
describe '.event' do
after do
described_class.clear_memoization(:snowplow)
end
context 'when usage ping is enabled' do
let(:tracker) { double }
let(:project_id) { 1 }
before do
stub_application_setting(usage_ping_enabled: true, self_monitoring_project_id: project_id)
end
it 'sends an event to Product Analytics snowplow collector' do
expect(SnowplowTracker::AsyncEmitter)
.to receive(:new)
.with(described_class::COLLECTOR_URL, { protocol: 'http' })
.and_return('_emitter_')
expect(SnowplowTracker::Tracker)
.to receive(:new)
.with('_emitter_', an_instance_of(SnowplowTracker::Subject), 'gl', project_id.to_s)
.and_return(tracker)
freeze_time do
expect(tracker)
.to receive(:track_struct_event)
.with('category', 'action', '_label_', '_property_', '_value_', nil, (Time.current.to_f * 1000).to_i)
described_class.event('category', 'action', label: '_label_', property: '_property_',
value: '_value_', context: nil)
end
end
end
context 'when usage ping is disabled' do
before do
stub_application_setting(usage_ping_enabled: false)
end
it 'does not send an event' do
expect(SnowplowTracker::Tracker).not_to receive(:new)
described_class.event('category', 'action', label: '_label_', property: '_property_',
value: '_value_', context: nil)
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment