Commit 0dbb1063 authored by Mikolaj Wawrzyniak's avatar Mikolaj Wawrzyniak

Add namespace and project id to Snowplow context

To allow for more detailed analysis, we need to track project
and namespace ids accoring to
https://gitlab.com/gitlab-org/gitlab/-/issues/336779#considered-data-for-pseudonymization
those attributes are not subjected to anonymization or pseudonymization
parent 8fcaa836
---
name: add_namespace_and_project_to_snowplow_tracking
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68277
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/338670
milestone: '14.3'
type: development
group: group::product intelligence
default_enabled: false
...@@ -8,7 +8,8 @@ module Gitlab ...@@ -8,7 +8,8 @@ module Gitlab
def initialize(namespace: nil, project: nil, user: nil, **extra) def initialize(namespace: nil, project: nil, user: nil, **extra)
@namespace = namespace @namespace = namespace
@plan = @namespace&.actual_plan_name @plan = namespace&.actual_plan_name
@project = project
@extra = extra @extra = extra
end end
...@@ -34,14 +35,29 @@ module Gitlab ...@@ -34,14 +35,29 @@ module Gitlab
private private
attr_accessor :namespace, :project, :extra, :plan
def to_h def to_h
{ {
environment: environment, environment: environment,
source: source, source: source,
plan: @plan, plan: plan,
extra: @extra extra: extra
}.merge(project_and_namespace)
end
def project_and_namespace
return {} unless ::Feature.enabled?(:add_namespace_and_project_to_snowplow_tracking, default_enabled: :yaml)
{
namespace_id: namespace&.id,
project_id: project_id
} }
end end
def project_id
project.is_a?(Integer) ? project : project&.id
end
end end
end end
end end
...@@ -87,8 +87,26 @@ RSpec.describe Gitlab::Tracking::StandardContext do ...@@ -87,8 +87,26 @@ RSpec.describe Gitlab::Tracking::StandardContext do
end end
end end
it 'does not contain any ids' do it 'does not contain user id' do
expect(snowplow_context.to_json[:data].keys).not_to include(:user_id, :project_id, :namespace_id) expect(snowplow_context.to_json[:data].keys).not_to include(:user_id)
end
it 'contains namespace and project ids' do
expect(snowplow_context.to_json[:data].keys).to include(:project_id, :namespace_id)
end
it 'accepts just project id as integer' do
expect { described_class.new(project: 1).to_context }.not_to raise_error
end
context 'without add_namespace_and_project_to_snowplow_tracking feature' do
before do
stub_feature_flags(add_namespace_and_project_to_snowplow_tracking: false)
end
it 'does not contain any ids' do
expect(snowplow_context.to_json[:data].keys).not_to include(:user_id, :project_id, :namespace_id)
end
end end
end end
end end
...@@ -47,7 +47,7 @@ RSpec.describe Gitlab::Tracking do ...@@ -47,7 +47,7 @@ RSpec.describe Gitlab::Tracking do
it "delegates to #{klass} destination" do it "delegates to #{klass} destination" do
other_context = double(:context) other_context = double(:context)
project = double(:project) project = build_stubbed(:project)
user = double(:user) user = double(:user)
expect(Gitlab::Tracking::StandardContext) expect(Gitlab::Tracking::StandardContext)
......
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