summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-10-19 12:47:09 +0200
committerJames Lopez <james@jameslopez.es>2016-11-17 08:22:54 +0100
commit3b5d947730eb1f979bcb9033d63bdceb11fbb8ca (patch)
tree5dc77ef9249c188f5b4521fd08d1c705f273734c
parent1d6068a1c3c906e0e82f0dce884e59aa0da76506 (diff)
downloadgitlab-ce-3b5d947730eb1f979bcb9033d63bdceb11fbb8ca.tar.gz
commit events and spec
-rw-r--r--lib/gitlab/cycle_analytics/events.rb16
-rw-r--r--lib/gitlab/cycle_analytics/events_fetcher.rb25
-rw-r--r--lib/gitlab/cycle_analytics/metrics_fetcher.rb4
-rw-r--r--spec/lib/gitlab/cycle_analytics/events_spec.rb18
4 files changed, 53 insertions, 10 deletions
diff --git a/lib/gitlab/cycle_analytics/events.rb b/lib/gitlab/cycle_analytics/events.rb
index d7248b28527..bdd45e72000 100644
--- a/lib/gitlab/cycle_analytics/events.rb
+++ b/lib/gitlab/cycle_analytics/events.rb
@@ -9,15 +9,25 @@ module Gitlab
@fetcher = EventsFetcher.new(project: project, from: from)
end
+ #TODO: backend pagination - specially for commits, etc...
+
def issue_events
- @fetcher.fetch_issues.each do |event|
- event['issue_diff'] = interval_in_words(event['issue_diff'])
+ #TODO figure out what the frontend needs for displaying the avatar
+ @fetcher.fetch_issue_events.each do |event|
+ event['total_time'] = distance_of_time_in_words(event['total_time'].to_f)
event['created_at'] = interval_in_words(event['created_at'])
end
end
+ def plan_events
+ # TODO sort out 1st referenced commit and parse stuff
+ @fetcher.fetch_plan_events
+ end
+
+ private
+
def interval_in_words(diff)
- "#{distance_of_time_in_words( diff.to_f)} ago"
+ "#{distance_of_time_in_words(diff.to_f)} ago"
end
end
end
diff --git a/lib/gitlab/cycle_analytics/events_fetcher.rb b/lib/gitlab/cycle_analytics/events_fetcher.rb
index 0920ab73ae1..f676183f08c 100644
--- a/lib/gitlab/cycle_analytics/events_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/events_fetcher.rb
@@ -8,22 +8,39 @@ module Gitlab
@from = from
end
- def fetch_issues
+ def fetch_issue_events
base_query = base_query_for(:issue)
- diff_fn = subtract_datetimes_diff(base_query, issue_table[:created_at], metric_attributes)
+ diff_fn = subtract_datetimes_diff(base_query, issue_table[:created_at], issue_attributes)
query = base_query.join(user_table).on(issue_table[:author_id].eq(user_table[:id])).
- project(extract_epoch(diff_fn).as('issue_diff'), *issue_projections).
+ project(extract_epoch(diff_fn).as('total_time'), *issue_projections).
order(issue_table[:created_at].desc)
ActiveRecord::Base.connection.execute(query.to_sql).to_a
end
- def metric_attributes
+ def fetch_plan_events
+ base_query = base_query_for(:plan)
+ diff_fn = subtract_datetimes_diff(base_query, issue_table[:created_at], plan_attributes)
+
+ query = base_query.join(merge_request_diff_table).on(merge_request_diff_table[:merge_request_id].eq(merge_request_table[:id])).
+ project(merge_request_diff_table[:st_commits].as(:commits), extract_epoch(diff_fn).as('total_time')).
+ order(issue_table[:created_at].desc)
+
+ ActiveRecord::Base.connection.execute(query.to_sql).to_a
+ end
+
+ private
+
+ def issue_attributes
[issue_metrics_table[:first_associated_with_milestone_at],
issue_metrics_table[:first_added_to_board_at]]
end
+ def plan_attributes
+ issue_attributes + [issue_metrics_table[:first_mentioned_in_commit_at]]
+ end
+
def issue_projections
[issue_table[:title], issue_table[:iid], issue_table[:created_at], User.arel_table[:name]]
end
diff --git a/lib/gitlab/cycle_analytics/metrics_fetcher.rb b/lib/gitlab/cycle_analytics/metrics_fetcher.rb
index 97b55656d79..b5ff4c0ef5a 100644
--- a/lib/gitlab/cycle_analytics/metrics_fetcher.rb
+++ b/lib/gitlab/cycle_analytics/metrics_fetcher.rb
@@ -56,6 +56,10 @@ module Gitlab
MergeRequest.arel_table
end
+ def merge_request_diff_table
+ MergeRequestDiff.arel_table
+ end
+
def mr_closing_issues_table
MergeRequestsClosingIssues.arel_table
end
diff --git a/spec/lib/gitlab/cycle_analytics/events_spec.rb b/spec/lib/gitlab/cycle_analytics/events_spec.rb
index be62077f01b..ef59e8abc58 100644
--- a/spec/lib/gitlab/cycle_analytics/events_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/events_spec.rb
@@ -11,11 +11,11 @@ describe Gitlab::CycleAnalytics::Events do
setup(context)
end
- describe '#issue' do
+ describe '#issue_events' do
let!(:context) { create(:issue, project: project, created_at: 2.days.ago) }
- it 'has an issue diff' do
- expect(subject.issue_events.first['issue_diff']).to eq('2 days ago')
+ it 'has the total time' do
+ expect(subject.issue_events.first['total_time']).to eq('2 days')
end
it 'has a title' do
@@ -35,6 +35,18 @@ describe Gitlab::CycleAnalytics::Events do
end
end
+ describe '#plan_events' do
+ let!(:context) { create(:issue, project: project, created_at: 2.days.ago) }
+
+ xit 'has the first referenced commit' do
+ expect(subject.plan_events.first['commit']).to eq(project.commit)
+ end
+
+ it 'has the total time' do
+ expect(subject.plan_events.first['total_time']).to eq('2 days')
+ end
+ end
+
def setup(context)
milestone = create(:milestone, project: project)
context.update(milestone: milestone)