Commit 0abe5393 authored by Stan Hu's avatar Stan Hu

Merge branch 'id-source-code-smau' into 'master'

Add usage pings for source code pushes

See merge request gitlab-org/gitlab-ce!31734
parents 383a1840 04598039
...@@ -77,6 +77,7 @@ class PostReceive ...@@ -77,6 +77,7 @@ class PostReceive
def after_project_changes_hooks(post_received, user, refs, changes) def after_project_changes_hooks(post_received, user, refs, changes)
hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, user, changes, refs) hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, user, changes, refs)
SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks) SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks)
Gitlab::UsageDataCounters::SourceCodeCounter.count(:pushes)
end end
def process_wiki_changes(post_received) def process_wiki_changes(post_received)
......
---
title: Add usage pings for source code pushes
merge_request: 31734
author:
type: added
...@@ -142,7 +142,8 @@ module Gitlab ...@@ -142,7 +142,8 @@ module Gitlab
Gitlab::UsageDataCounters::WebIdeCounter, Gitlab::UsageDataCounters::WebIdeCounter,
Gitlab::UsageDataCounters::NoteCounter, Gitlab::UsageDataCounters::NoteCounter,
Gitlab::UsageDataCounters::SnippetCounter, Gitlab::UsageDataCounters::SnippetCounter,
Gitlab::UsageDataCounters::SearchCounter Gitlab::UsageDataCounters::SearchCounter,
Gitlab::UsageDataCounters::SourceCodeCounter
] ]
end end
......
# frozen_string_literal: true
module Gitlab::UsageDataCounters
class SourceCodeCounter < BaseCounter
KNOWN_EVENTS = %w[pushes].freeze
PREFIX = 'source_code'
end
end
# 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
...@@ -71,7 +71,8 @@ describe Gitlab::UsageData do ...@@ -71,7 +71,8 @@ describe Gitlab::UsageData do
web_ide_views: a_kind_of(Integer), web_ide_views: a_kind_of(Integer),
web_ide_commits: a_kind_of(Integer), web_ide_commits: a_kind_of(Integer),
web_ide_merge_requests: 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 end
......
...@@ -14,6 +14,10 @@ describe PostReceive do ...@@ -14,6 +14,10 @@ describe PostReceive do
create(:project, :repository, auto_cancel_pending_pipelines: 'disabled') create(:project, :repository, auto_cancel_pending_pipelines: 'disabled')
end end
def perform(changes: base64_changes)
described_class.new.perform(gl_repository, key_id, changes)
end
context "as a sidekiq worker" do context "as a sidekiq worker" do
it "responds to #perform" do it "responds to #perform" do
expect(described_class.new).to respond_to(:perform) expect(described_class.new).to respond_to(:perform)
...@@ -28,7 +32,7 @@ describe PostReceive do ...@@ -28,7 +32,7 @@ describe PostReceive do
it "returns false and logs an error" do it "returns false and logs an error" do
expect(Gitlab::GitLogger).to receive(:error).with("POST-RECEIVE: #{error_message}") 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
end end
...@@ -39,7 +43,7 @@ describe PostReceive do ...@@ -39,7 +43,7 @@ describe PostReceive do
expect(Git::TagPushService).not_to receive(:new) expect(Git::TagPushService).not_to receive(:new)
expect_next_instance_of(SystemHooksService) { |service| expect(service).to receive(:execute_hooks) } expect_next_instance_of(SystemHooksService) { |service| expect(service).to receive(:execute_hooks) }
described_class.new.perform(gl_repository, key_id, "") perform(changes: "")
end end
end end
...@@ -50,7 +54,7 @@ describe PostReceive do ...@@ -50,7 +54,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new) expect(Git::BranchPushService).not_to receive(:new)
expect(Git::TagPushService).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
end end
...@@ -81,7 +85,7 @@ describe PostReceive do ...@@ -81,7 +85,7 @@ describe PostReceive do
expect(Git::TagPushService).not_to receive(:new) expect(Git::TagPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes) perform
end end
end end
...@@ -123,7 +127,7 @@ describe PostReceive do ...@@ -123,7 +127,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new) expect(Git::BranchPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes) perform
end end
end end
...@@ -134,7 +138,7 @@ describe PostReceive do ...@@ -134,7 +138,7 @@ describe PostReceive do
expect(Git::BranchPushService).not_to receive(:new) expect(Git::BranchPushService).not_to receive(:new)
expect(Git::TagPushService).not_to receive(:new) expect(Git::TagPushService).not_to receive(:new)
described_class.new.perform(gl_repository, key_id, base64_changes) perform
end end
end end
...@@ -151,7 +155,7 @@ describe PostReceive do ...@@ -151,7 +155,7 @@ describe PostReceive do
let(:changes_count) { changes.lines.count } 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 context "with valid .gitlab-ci.yml" do
before do before do
...@@ -220,7 +224,13 @@ describe PostReceive do ...@@ -220,7 +224,13 @@ describe PostReceive do
it 'calls SystemHooksService' do it 'calls SystemHooksService' do
expect_any_instance_of(SystemHooksService).to receive(:execute_hooks).with(fake_hook_data, :repository_update_hooks).and_return(true) 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 end
end end
...@@ -237,7 +247,7 @@ describe PostReceive do ...@@ -237,7 +247,7 @@ describe PostReceive do
# a second to ensure we see changes. # a second to ensure we see changes.
Timecop.freeze(1.second.from_now) do Timecop.freeze(1.second.from_now) do
expect do expect do
described_class.new.perform(gl_repository, key_id, base64_changes) perform
project.reload project.reload
end.to change(project, :last_activity_at) end.to change(project, :last_activity_at)
.and change(project, :last_repository_updated_at) .and change(project, :last_repository_updated_at)
...@@ -248,7 +258,8 @@ describe PostReceive do ...@@ -248,7 +258,8 @@ describe PostReceive do
context "webhook" do context "webhook" do
it "fetches the correct project" do it "fetches the correct project" do
expect(Project).to receive(:find_by).with(id: project.id.to_s) expect(Project).to receive(:find_by).with(id: project.id.to_s)
described_class.new.perform(gl_repository, key_id, base64_changes)
perform
end end
it "does not run if the author is not in the project" do it "does not run if the author is not in the project" do
...@@ -258,7 +269,7 @@ describe PostReceive do ...@@ -258,7 +269,7 @@ describe PostReceive do
expect(project).not_to receive(:execute_hooks) 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 end
it "asks the project to trigger all hooks" do it "asks the project to trigger all hooks" do
...@@ -267,7 +278,7 @@ describe PostReceive do ...@@ -267,7 +278,7 @@ describe PostReceive do
expect(project).to receive(:execute_hooks).twice expect(project).to receive(:execute_hooks).twice
expect(project).to receive(:execute_services).twice expect(project).to receive(:execute_services).twice
described_class.new.perform(gl_repository, key_id, base64_changes) perform
end end
it "enqueues a UpdateMergeRequestsWorker job" do it "enqueues a UpdateMergeRequestsWorker job" do
...@@ -275,7 +286,7 @@ describe PostReceive do ...@@ -275,7 +286,7 @@ describe PostReceive do
expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args) 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 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