Add usage pings for source code pushes

Source Code Usage Ping for Create SMAU
This commit is contained in:
Igor 2019-08-13 22:33:16 +00:00 committed by Stan Hu
parent 383a18403f
commit 04598039a5
7 changed files with 51 additions and 15 deletions

View file

@ -77,6 +77,7 @@ class PostReceive
def after_project_changes_hooks(post_received, user, refs, changes)
hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, user, changes, refs)
SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks)
Gitlab::UsageDataCounters::SourceCodeCounter.count(:pushes)
end
def process_wiki_changes(post_received)

View file

@ -0,0 +1,5 @@
---
title: Add usage pings for source code pushes
merge_request: 31734
author:
type: added

View file

@ -142,7 +142,8 @@ module Gitlab
Gitlab::UsageDataCounters::WebIdeCounter,
Gitlab::UsageDataCounters::NoteCounter,
Gitlab::UsageDataCounters::SnippetCounter,
Gitlab::UsageDataCounters::SearchCounter
Gitlab::UsageDataCounters::SearchCounter,
Gitlab::UsageDataCounters::SourceCodeCounter
]
end

View file

@ -0,0 +1,8 @@
# frozen_string_literal: true
module Gitlab::UsageDataCounters
class SourceCodeCounter < BaseCounter
KNOWN_EVENTS = %w[pushes].freeze
PREFIX = 'source_code'
end
end

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::UsageDataCounters::SourceCodeCounter do
it_behaves_like 'a redis usage counter', 'Source Code', :pushes
it_behaves_like 'a redis usage counter with totals', :source_code, pushes: 5
end

View file

@ -71,7 +71,8 @@ describe Gitlab::UsageData do
web_ide_views: a_kind_of(Integer),
web_ide_commits: a_kind_of(Integer),
web_ide_merge_requests: a_kind_of(Integer),
navbar_searches: a_kind_of(Integer)
navbar_searches: a_kind_of(Integer),
source_code_pushes: a_kind_of(Integer)
)
end

View file

@ -14,6 +14,10 @@ describe PostReceive do
create(:project, :repository, auto_cancel_pending_pipelines: 'disabled')
end
def perform(changes: base64_changes)
described_class.new.perform(gl_repository, key_id, changes)
end
context "as a sidekiq worker" do
it "responds to #perform" do
expect(described_class.new).to respond_to(:perform)
@ -28,7 +32,7 @@ describe PostReceive do
it "returns false and logs an error" do
expect(Gitlab::GitLogger).to receive(:error).with("POST-RECEIVE: #{error_message}")
expect(described_class.new.perform(gl_repository, key_id, base64_changes)).to be(false)
expect(perform).to be(false)
end
end
@ -39,7 +43,7 @@ describe PostReceive do
expect(Git::TagPushService).not_to receive(:new)
expect_next_instance_of(SystemHooksService) { |service| expect(service).to receive(:execute_hooks) }
described_class.new.perform(gl_repository, key_id, "")
perform(changes: "")
end
end
@ -50,7 +54,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new)
expect(Git::TagPushService).not_to receive(:new)
expect(described_class.new.perform(gl_repository, key_id, base64_changes)).to be false
expect(perform).to be false
end
end
@ -81,7 +85,7 @@ describe PostReceive do
expect(Git::TagPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
end
@ -123,7 +127,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
end
@ -134,7 +138,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new)
expect(Git::TagPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
end
@ -151,7 +155,7 @@ describe PostReceive do
let(:changes_count) { changes.lines.count }
subject { described_class.new.perform(gl_repository, key_id, base64_changes) }
subject { perform }
context "with valid .gitlab-ci.yml" do
before do
@ -220,7 +224,13 @@ describe PostReceive do
it 'calls SystemHooksService' do
expect_any_instance_of(SystemHooksService).to receive(:execute_hooks).with(fake_hook_data, :repository_update_hooks).and_return(true)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
it 'increments the usage data counter of pushes event' do
counter = Gitlab::UsageDataCounters::SourceCodeCounter
expect { perform }.to change { counter.read(:pushes) }.by(1)
end
end
end
@ -237,7 +247,7 @@ describe PostReceive do
# a second to ensure we see changes.
Timecop.freeze(1.second.from_now) do
expect do
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
project.reload
end.to change(project, :last_activity_at)
.and change(project, :last_repository_updated_at)
@ -248,7 +258,8 @@ describe PostReceive do
context "webhook" do
it "fetches the correct project" do
expect(Project).to receive(:find_by).with(id: project.id.to_s)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
it "does not run if the author is not in the project" do
@ -258,7 +269,7 @@ describe PostReceive do
expect(project).not_to receive(:execute_hooks)
expect(described_class.new.perform(gl_repository, key_id, base64_changes)).to be_falsey
expect(perform).to be_falsey
end
it "asks the project to trigger all hooks" do
@ -267,7 +278,7 @@ describe PostReceive do
expect(project).to receive(:execute_hooks).twice
expect(project).to receive(:execute_services).twice
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
it "enqueues a UpdateMergeRequestsWorker job" do
@ -275,7 +286,7 @@ describe PostReceive do
expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end
end
end