summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-11-15 09:39:45 +0100
committerJames Lopez <james@jameslopez.es>2016-11-17 08:22:58 +0100
commit6a2737e6a82875311f71f451939b2732562533d4 (patch)
tree00ea2627d1103ba0c15375a570ff923b0296c790
parent0ddf825ddf7bc480004919762b187390d0b900e9 (diff)
downloadgitlab-ce-6a2737e6a82875311f71f451939b2732562533d4.tar.gz
WIP - refactor events to use a generic build entity for some of the hybrid events
-rw-r--r--app/serializers/analytics_generic_entity.rb2
-rw-r--r--lib/gitlab/cycle_analytics/events.rb14
-rw-r--r--lib/gitlab/cycle_analytics/events_fetcher.rb10
-rw-r--r--lib/gitlab/cycle_analytics/query_config.rb16
-rw-r--r--spec/serializers/analytics_build_entity_spec.rb6
-rw-r--r--spec/serializers/analytics_build_serializer_spec.rb6
-rw-r--r--spec/serializers/analytics_generic_serializer_spec.rb18
7 files changed, 28 insertions, 44 deletions
diff --git a/app/serializers/analytics_generic_entity.rb b/app/serializers/analytics_generic_entity.rb
index b007d9056d0..2692e9f21f1 100644
--- a/app/serializers/analytics_generic_entity.rb
+++ b/app/serializers/analytics_generic_entity.rb
@@ -23,7 +23,7 @@ class AnalyticsGenericEntity < Grape::Entity
private
def url_to(route, id = nil)
- public_send("#{route}_url", options[:project].namespace, options[:project], id)
+ public_send("#{route}_url", request.project.namespace, request.project, id)
end
def interval_in_words(diff)
diff --git a/lib/gitlab/cycle_analytics/events.rb b/lib/gitlab/cycle_analytics/events.rb
index f2fa54f208f..8be102c9fa0 100644
--- a/lib/gitlab/cycle_analytics/events.rb
+++ b/lib/gitlab/cycle_analytics/events.rb
@@ -1,8 +1,6 @@
module Gitlab
module CycleAnalytics
class Events
- include ActionView::Helpers::DateHelper
-
def initialize(project:, options:)
@project = project
@fetcher = EventsFetcher.new(project: project, options: options)
@@ -51,20 +49,16 @@ module Gitlab
private
- def parse_event(event, entity: :issue)
- event['url'] = Gitlab::LightUrlBuilder.build(entity: entity, project: @project, id: event['iid'].to_s)
- event['total_time'] = distance_of_time_in_words(event['total_time'].to_f)
- event['created_at'] = interval_in_words(event['created_at'])
- event['author_profile_url'] = Gitlab::LightUrlBuilder.build(entity: :user, id: event['author_username'])
- event['author_avatar_url'] = Gitlab::LightUrlBuilder.build(entity: :user_avatar, id: event['author_id'])
+ def parse_event(event)
+ event['author'] = User.find(event.remove('author_id'))
- event.except!('author_id', 'author_username')
+ AnalyticsGenericSerializer.new(project: @project).represent(event).as_json
end
def parse_build_event(event)
build = ::Ci::Build.find(event['id'])
- AnalyticsBuildSerializer.new(project: @project).represent(build).as_json
+ AnalyticsBuildSerializer.new.represent(build).as_json
end
def first_time_reference_commit(commits, event)
diff --git a/lib/gitlab/cycle_analytics/events_fetcher.rb b/lib/gitlab/cycle_analytics/events_fetcher.rb
index 5631867d451..c12fdd58a47 100644
--- a/lib/gitlab/cycle_analytics/events_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/events_fetcher.rb
@@ -15,24 +15,14 @@ module Gitlab
end
end
- def issue_custom_query(base_query)
- base_query.join(user_table).on(issue_table[:author_id].eq(user_table[:id]))
- end
-
def plan_custom_query(base_query)
base_query.join(mr_diff_table).on(mr_diff_table[:merge_request_id].eq(mr_table[:id]))
end
- def review_custom_query(base_query)
- base_query.join(user_table).on(mr_table[:author_id].eq(user_table[:id]))
- end
-
def test_custom_query(base_query)
base_query.join(build_table).on(mr_metrics_table[:ci_commit_id].eq(build_table[:commit_id]))
end
- alias_method :code_custom_query, :issue_custom_query
- alias_method :production_custom_query, :issue_custom_query
alias_method :staging_custom_query, :test_custom_query
end
end
diff --git a/lib/gitlab/cycle_analytics/query_config.rb b/lib/gitlab/cycle_analytics/query_config.rb
index 0393567378f..d077a3e1a14 100644
--- a/lib/gitlab/cycle_analytics/query_config.rb
+++ b/lib/gitlab/cycle_analytics/query_config.rb
@@ -24,9 +24,7 @@ module Gitlab
issue_table[:iid],
issue_table[:id],
issue_table[:created_at],
- user_table[:name].as('author_name'),
- user_table[:username].as('author_username'),
- user_table[:id].as('author_id')]
+ issue_table[:author_id]]
}
end
@@ -48,9 +46,7 @@ module Gitlab
mr_table[:id],
mr_table[:created_at],
mr_table[:state],
- user_table[:name].as('author_name'),
- user_table[:username].as('author_username'),
- user_table[:id].as('author_id')],
+ mr_table[:author_id]],
order: mr_table[:created_at]
}
end
@@ -73,9 +69,7 @@ module Gitlab
mr_table[:id],
mr_table[:created_at].as('opened_at'),
mr_table[:state],
- user_table[:name].as('author_name'),
- user_table[:username].as('author_username'),
- user_table[:id].as('author_id')]
+ mr_table[:author_id]]
}
end
@@ -96,9 +90,7 @@ module Gitlab
issue_table[:iid],
issue_table[:id],
issue_table[:created_at],
- user_table[:name].as('author_name'),
- user_table[:username].as('author_username'),
- user_table[:id].as('author_id')]
+ issue_table[:author_id]]
}
end
end
diff --git a/spec/serializers/analytics_build_entity_spec.rb b/spec/serializers/analytics_build_entity_spec.rb
index 24040034f68..9ac6f20fd3c 100644
--- a/spec/serializers/analytics_build_entity_spec.rb
+++ b/spec/serializers/analytics_build_entity_spec.rb
@@ -5,14 +5,14 @@ describe AnalyticsBuildEntity do
described_class.new(build, request: double)
end
- context 'when build is a regular job' do
+ context 'build with an author' do
let(:user) { create(:user) }
let(:build) { create(:ci_build, author: user) }
subject { entity.as_json }
- it 'contains URLs' do
- expect(subject).to include(:url, :branch_url, :commit_url)
+ it 'contains the URL' do
+ expect(subject).to include(:url)
end
it 'contains the author' do
diff --git a/spec/serializers/analytics_build_serializer_spec.rb b/spec/serializers/analytics_build_serializer_spec.rb
index 24fd94810d4..a0a9d9a5f12 100644
--- a/spec/serializers/analytics_build_serializer_spec.rb
+++ b/spec/serializers/analytics_build_serializer_spec.rb
@@ -3,12 +3,10 @@ require 'spec_helper'
describe AnalyticsBuildSerializer do
let(:serializer) do
described_class
- .new(project: project)
- .represent(resource)
+ .new.represent(resource)
end
let(:json) { serializer.as_json }
- let(:project) { create(:project) }
let(:resource) { create(:ci_build) }
context 'when there is a single object provided' do
@@ -18,7 +16,7 @@ describe AnalyticsBuildSerializer do
it 'contains important elements of analyticsBuild' do
expect(json)
- .to include(:name, :branch, :short_sha, :date, :total_time, :url, :branch_url, :commit_url, :author)
+ .to include(:name, :branch, :short_sha, :date, :total_time, :url, :author)
end
end
end
diff --git a/spec/serializers/analytics_generic_serializer_spec.rb b/spec/serializers/analytics_generic_serializer_spec.rb
index 24fd94810d4..4d523878015 100644
--- a/spec/serializers/analytics_generic_serializer_spec.rb
+++ b/spec/serializers/analytics_generic_serializer_spec.rb
@@ -1,15 +1,26 @@
require 'spec_helper'
-describe AnalyticsBuildSerializer do
+describe AnalyticsGenericSerializer do
let(:serializer) do
described_class
.new(project: project)
.represent(resource)
end
+ let(:user) { create(:user) }
let(:json) { serializer.as_json }
let(:project) { create(:project) }
- let(:resource) { create(:ci_build) }
+ let(:resource) {
+ {
+ total_time: "172802.724419",
+ title: "Eos voluptatem inventore in sed.",
+ iid: "1",
+ id: "1",
+ created_at: "2016-11-12 15:04:02.948604",
+ author: user,
+ entity: :merge_request
+ }
+ }
context 'when there is a single object provided' do
it 'it generates payload for single object' do
@@ -17,8 +28,7 @@ describe AnalyticsBuildSerializer do
end
it 'contains important elements of analyticsBuild' do
- expect(json)
- .to include(:name, :branch, :short_sha, :date, :total_time, :url, :branch_url, :commit_url, :author)
+ expect(json).to include(:title, :iid, :date, :total_time, :url, :author)
end
end
end