Commit 01685eed authored by Francisco Javier López's avatar Francisco Javier López Committed by Nick Thomas

Added Usage Data for some Web IDE actions

The actions tracked in the web IDE are:
- creation of commits
- creation of merge requests
- projects loaded
parent 550ac6ef
...@@ -159,7 +159,7 @@ export const createCommitPayload = ({ ...@@ -159,7 +159,7 @@ export const createCommitPayload = ({
}); });
export const createNewMergeRequestUrl = (projectUrl, source, target) => export const createNewMergeRequestUrl = (projectUrl, source, target) =>
`${projectUrl}/merge_requests/new?merge_request[source_branch]=${source}&merge_request[target_branch]=${target}`; `${projectUrl}/merge_requests/new?merge_request[source_branch]=${source}&merge_request[target_branch]=${target}&nav_source=webide`;
const sortTreesByTypeAndName = (a, b) => { const sortTreesByTypeAndName = (a, b) => {
if (a.type === 'tree' && b.type === 'blob') { if (a.type === 'tree' && b.type === 'blob') {
......
...@@ -4,5 +4,6 @@ class IdeController < ApplicationController ...@@ -4,5 +4,6 @@ class IdeController < ApplicationController
layout 'fullscreen' layout 'fullscreen'
def index def index
Gitlab::UsageDataCounters::WebIdeCounter.increment_views_count
end end
end end
...@@ -23,6 +23,8 @@ class Projects::MergeRequests::CreationsController < Projects::MergeRequests::Ap ...@@ -23,6 +23,8 @@ class Projects::MergeRequests::CreationsController < Projects::MergeRequests::Ap
@merge_request = ::MergeRequests::CreateService.new(project, current_user, merge_request_params).execute @merge_request = ::MergeRequests::CreateService.new(project, current_user, merge_request_params).execute
if @merge_request.valid? if @merge_request.valid?
incr_count_webide_merge_request
redirect_to(merge_request_path(@merge_request)) redirect_to(merge_request_path(@merge_request))
else else
@source_project = @merge_request.source_project @source_project = @merge_request.source_project
...@@ -135,4 +137,10 @@ class Projects::MergeRequests::CreationsController < Projects::MergeRequests::Ap ...@@ -135,4 +137,10 @@ class Projects::MergeRequests::CreationsController < Projects::MergeRequests::Ap
def whitelist_query_limiting def whitelist_query_limiting
Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-ce/issues/42384') Gitlab::QueryLimiting.whitelist('https://gitlab.com/gitlab-org/gitlab-ce/issues/42384')
end end
def incr_count_webide_merge_request
return if params[:nav_source] != 'webide'
Gitlab::UsageDataCounters::WebIdeCounter.increment_merge_requests_count
end
end end
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
New Merge Request New Merge Request
= form_for [@project.namespace.becomes(Namespace), @project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f| = form_for [@project.namespace.becomes(Namespace), @project, @merge_request], url: project_new_merge_request_path(@project), method: :get, html: { class: "merge-request-form js-requires-input" } do |f|
- if params[:nav_source].present?
= hidden_field_tag(:nav_source, params[:nav_source])
.hide.alert.alert-danger.mr-compare-errors .hide.alert.alert-danger.mr-compare-errors
.js-merge-request-new-compare.row{ 'data-source-branch-url': project_new_merge_request_branch_from_path(@source_project), 'data-target-branch-url': project_new_merge_request_branch_to_path(@source_project) } .js-merge-request-new-compare.row{ 'data-source-branch-url': project_new_merge_request_branch_from_path(@source_project), 'data-target-branch-url': project_new_merge_request_branch_to_path(@source_project) }
.col-lg-6 .col-lg-6
......
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
= f.hidden_field :target_project_id = f.hidden_field :target_project_id
= f.hidden_field :target_branch, id: '' = f.hidden_field :target_branch, id: ''
- if params[:nav_source].present?
= hidden_field_tag(:nav_source, params[:nav_source])
.mr-compare.merge-request.js-merge-request-new-submit{ 'data-mr-submit-action': "#{j params[:tab].presence || 'new'}" } .mr-compare.merge-request.js-merge-request-new-submit{ 'data-mr-submit-action': "#{j params[:tab].presence || 'new'}" }
- if @commits.empty? - if @commits.empty?
.commits-empty .commits-empty
......
---
title: Add Web IDE Usage Ping for Create SMAU
merge_request: 30800
author:
type: changed
...@@ -130,7 +130,9 @@ module Gitlab ...@@ -130,7 +130,9 @@ module Gitlab
def usage_counters def usage_counters
{ {
web_ide_commits: Gitlab::UsageDataCounters::WebIdeCounter.total_commits_count web_ide_commits: Gitlab::UsageDataCounters::WebIdeCounter.total_commits_count,
web_ide_merge_requests: Gitlab::UsageDataCounters::WebIdeCounter.total_merge_requests_count,
web_ide_views: Gitlab::UsageDataCounters::WebIdeCounter.total_views_count
} }
end end
......
...@@ -6,6 +6,8 @@ module Gitlab ...@@ -6,6 +6,8 @@ module Gitlab
extend RedisCounter extend RedisCounter
COMMITS_COUNT_KEY = 'WEB_IDE_COMMITS_COUNT' COMMITS_COUNT_KEY = 'WEB_IDE_COMMITS_COUNT'
MERGE_REQUEST_COUNT_KEY = 'WEB_IDE_MERGE_REQUESTS_COUNT'
VIEWS_COUNT_KEY = 'WEB_IDE_VIEWS_COUNT'
class << self class << self
def increment_commits_count def increment_commits_count
...@@ -15,6 +17,22 @@ module Gitlab ...@@ -15,6 +17,22 @@ module Gitlab
def total_commits_count def total_commits_count
total_count(COMMITS_COUNT_KEY) total_count(COMMITS_COUNT_KEY)
end end
def increment_merge_requests_count
increment(MERGE_REQUEST_COUNT_KEY)
end
def total_merge_requests_count
total_count(MERGE_REQUEST_COUNT_KEY)
end
def increment_views_count
increment(VIEWS_COUNT_KEY)
end
def total_views_count
total_count(VIEWS_COUNT_KEY)
end
end end
end end
end end
......
# frozen_string_literal: true
require 'spec_helper'
describe IdeController do
let(:user) { create(:user) }
before do
sign_in(user)
end
it 'increases the views counter' do
expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:increment_views_count)
get :index
end
end
...@@ -212,4 +212,46 @@ describe Projects::MergeRequests::CreationsController do ...@@ -212,4 +212,46 @@ describe Projects::MergeRequests::CreationsController do
expect(response).to have_gitlab_http_status(200) expect(response).to have_gitlab_http_status(200)
end end
end end
describe 'POST create' do
let(:params) do
{
namespace_id: fork_project.namespace.to_param,
project_id: fork_project,
merge_request: {
title: 'Test merge request',
source_branch: 'remove-submodule',
target_branch: 'master'
}
}
end
it 'creates merge request' do
expect do
post_request(params)
end.to change { MergeRequest.count }.by(1)
end
context 'when the merge request is not created from the web ide' do
it 'counter is not increased' do
expect(Gitlab::UsageDataCounters::WebIdeCounter).not_to receive(:increment_merge_requests_count)
post_request(params)
end
end
context 'when the merge request is created from the web ide' do
let(:nav_source) { { nav_source: 'webide' } }
it 'counter is increased' do
expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:increment_merge_requests_count)
post_request(params.merge(nav_source))
end
end
def post_request(merge_request_params)
post :create, params: merge_request_params
end
end
end end
...@@ -411,7 +411,7 @@ describe('IDE commit module actions', () => { ...@@ -411,7 +411,7 @@ describe('IDE commit module actions', () => {
expect(visitUrl).toHaveBeenCalledWith( expect(visitUrl).toHaveBeenCalledWith(
`webUrl/merge_requests/new?merge_request[source_branch]=${ `webUrl/merge_requests/new?merge_request[source_branch]=${
store.getters['commit/placeholderBranchName'] store.getters['commit/placeholderBranchName']
}&merge_request[target_branch]=master`, }&merge_request[target_branch]=master&nav_source=webide`,
); );
done(); done();
......
...@@ -3,19 +3,34 @@ ...@@ -3,19 +3,34 @@
require 'spec_helper' require 'spec_helper'
describe Gitlab::UsageDataCounters::WebIdeCounter, :clean_gitlab_redis_shared_state do describe Gitlab::UsageDataCounters::WebIdeCounter, :clean_gitlab_redis_shared_state do
describe '.increment_commits_count' do shared_examples 'counter examples' do
it 'increments the web ide commits counter by 1' do it 'increments counter and return the total count' do
expect do expect(described_class.public_send(total_counter_method)).to eq(0)
described_class.increment_commits_count
end.to change { described_class.total_commits_count }.by(1) 2.times { described_class.public_send(increment_counter_method) }
expect(described_class.public_send(total_counter_method)).to eq(2)
end end
end end
describe '.total_commits_count' do describe 'commits counter' do
it 'returns the total amount of web ide commits' do let(:increment_counter_method) { :increment_commits_count }
2.times { described_class.increment_commits_count } let(:total_counter_method) { :total_commits_count }
expect(described_class.total_commits_count).to eq(2) it_behaves_like 'counter examples'
end end
describe 'merge requests counter' do
let(:increment_counter_method) { :increment_merge_requests_count }
let(:total_counter_method) { :total_merge_requests_count }
it_behaves_like 'counter examples'
end
describe 'views counter' do
let(:increment_counter_method) { :increment_views_count }
let(:total_counter_method) { :total_views_count }
it_behaves_like 'counter examples'
end end
end end
...@@ -57,12 +57,22 @@ describe Gitlab::UsageData do ...@@ -57,12 +57,22 @@ describe Gitlab::UsageData do
gitaly gitaly
database database
avg_cycle_analytics avg_cycle_analytics
web_ide_views
web_ide_commits web_ide_commits
web_ide_merge_requests
influxdb_metrics_enabled influxdb_metrics_enabled
prometheus_metrics_enabled prometheus_metrics_enabled
)) ))
end end
it 'calls expected usage data methods' do
expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_commits_count)
expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_merge_requests_count)
expect(Gitlab::UsageDataCounters::WebIdeCounter).to receive(:total_views_count)
subject
end
it "gathers usage counts" do it "gathers usage counts" do
expected_keys = %i( expected_keys = %i(
assignee_lists assignee_lists
......
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