Commit dbf4a276 authored by charlie ablett's avatar charlie ablett

Merge branch 'jira-import-issues-count' into 'master'

Store statistics on jira imported issues counts

See merge request gitlab-org/gitlab!29406
parents e1e717c8 ff421f1e
...@@ -116,6 +116,7 @@ module Issuable ...@@ -116,6 +116,7 @@ module Issuable
# rubocop:enable GitlabSecurity/SqlInjection # rubocop:enable GitlabSecurity/SqlInjection
scope :without_label, -> { joins("LEFT OUTER JOIN label_links ON label_links.target_type = '#{name}' AND label_links.target_id = #{table_name}.id").where(label_links: { id: nil }) } scope :without_label, -> { joins("LEFT OUTER JOIN label_links ON label_links.target_type = '#{name}' AND label_links.target_id = #{table_name}.id").where(label_links: { id: nil }) }
scope :with_label_ids, ->(label_ids) { joins(:label_links).where(label_links: { label_id: label_ids }) }
scope :any_label, -> { joins(:label_links).group(:id) } scope :any_label, -> { joins(:label_links).group(:id) }
scope :join_project, -> { joins(:project) } scope :join_project, -> { joins(:project) }
scope :inc_notes_with_associations, -> { includes(notes: [:project, :author, :award_emoji]) } scope :inc_notes_with_associations, -> { includes(notes: [:project, :author, :award_emoji]) }
......
...@@ -53,6 +53,7 @@ class JiraImportState < ApplicationRecord ...@@ -53,6 +53,7 @@ class JiraImportState < ApplicationRecord
before_transition any => :finished do |state, _| before_transition any => :finished do |state, _|
InternalId.flush_records!(project: state.project) InternalId.flush_records!(project: state.project)
state.project.update_project_counter_caches state.project.update_project_counter_caches
state.store_issue_counts
end end
after_transition any => :finished do |state, _| after_transition any => :finished do |state, _|
...@@ -80,4 +81,20 @@ class JiraImportState < ApplicationRecord ...@@ -80,4 +81,20 @@ class JiraImportState < ApplicationRecord
def non_initial? def non_initial?
!initial? !initial?
end end
def store_issue_counts
import_label_id = Gitlab::JiraImport.get_import_label_id(project.id)
failed_to_import_count = Gitlab::JiraImport.issue_failures(project.id)
successfully_imported_count = project.issues.with_label_ids(import_label_id).count
total_issue_count = successfully_imported_count + failed_to_import_count
update(
{
failed_to_import_count: failed_to_import_count,
imported_issues_count: successfully_imported_count,
total_issue_count: total_issue_count
}
)
end
end end
...@@ -10,7 +10,7 @@ module Gitlab ...@@ -10,7 +10,7 @@ module Gitlab
def import(project) def import(project)
JiraImport.cache_cleanup(project.id) JiraImport.cache_cleanup(project.id)
project.latest_jira_import&.finish! project.latest_jira_import.finish!
end end
end end
end end
......
---
title: Track statistics per project for jira imported issues
merge_request: 29406
author:
type: changed
...@@ -34,6 +34,10 @@ module Gitlab ...@@ -34,6 +34,10 @@ module Gitlab
cache_class.increment(self.failed_issues_counter_cache_key(project_id)) cache_class.increment(self.failed_issues_counter_cache_key(project_id))
end end
def self.issue_failures(project_id)
cache_class.read(self.failed_issues_counter_cache_key(project_id)).to_i
end
def self.get_issues_next_start_at(project_id) def self.get_issues_next_start_at(project_id)
cache_class.read(self.jira_issues_next_page_cache_key(project_id)).to_i cache_class.read(self.jira_issues_next_page_cache_key(project_id)).to_i
end end
......
...@@ -130,8 +130,10 @@ describe JiraImportState do ...@@ -130,8 +130,10 @@ describe JiraImportState do
context 'after transition to finished' do context 'after transition to finished' do
let!(:jira_import) { build(:jira_import_state, :started, jid: 'some-other-jid', project: project)} let!(:jira_import) { build(:jira_import_state, :started, jid: 'some-other-jid', project: project)}
subject { jira_import.finish }
it 'triggers the import job' do it 'triggers the import job' do
jira_import.finish subject
expect(jira_import.jid).to be_nil expect(jira_import.jid).to be_nil
end end
...@@ -139,11 +141,25 @@ describe JiraImportState do ...@@ -139,11 +141,25 @@ describe JiraImportState do
it 'triggers the import job' do it 'triggers the import job' do
jira_import.update!(status: :scheduled) jira_import.update!(status: :scheduled)
jira_import.finish subject
expect(jira_import.status).to eq('scheduled') expect(jira_import.status).to eq('scheduled')
expect(jira_import.jid).to eq('some-other-jid') expect(jira_import.jid).to eq('some-other-jid')
end end
it 'updates the record with imported issues counts' do
import_label = create(:label, project: project, title: 'jira-import')
create_list(:labeled_issue, 3, project: project, labels: [import_label])
expect(Gitlab::JiraImport).to receive(:get_import_label_id).and_return(import_label.id)
expect(Gitlab::JiraImport).to receive(:issue_failures).and_return(2)
subject
expect(jira_import.total_issue_count).to eq(5)
expect(jira_import.failed_to_import_count).to eq(2)
expect(jira_import.imported_issues_count).to eq(3)
end
end end
end end
end end
...@@ -20,7 +20,7 @@ describe Gitlab::JiraImport::Stage::FinishImportWorker do ...@@ -20,7 +20,7 @@ describe Gitlab::JiraImport::Stage::FinishImportWorker do
end end
context 'when feature flag enabled' do context 'when feature flag enabled' do
let_it_be(:jira_import) { create(:jira_import_state, :scheduled, project: project) } let_it_be(:jira_import, reload: true) { create(:jira_import_state, :scheduled, project: project) }
before do before do
stub_feature_flags(jira_issue_import: true) stub_feature_flags(jira_issue_import: true)
...@@ -31,15 +31,27 @@ describe Gitlab::JiraImport::Stage::FinishImportWorker do ...@@ -31,15 +31,27 @@ describe Gitlab::JiraImport::Stage::FinishImportWorker do
end end
context 'when import started' do context 'when import started' do
let_it_be(:import_label) { create(:label, project: project, title: 'jira-import') }
let_it_be(:imported_issues) { create_list(:labeled_issue, 3, project: project, labels: [import_label]) }
before do before do
expect(Gitlab::JiraImport).to receive(:get_import_label_id).and_return(import_label.id)
expect(Gitlab::JiraImport).to receive(:issue_failures).and_return(2)
jira_import.start! jira_import.start!
worker.perform(project.id)
end end
it 'changes import state to finished' do it 'changes import state to finished' do
worker.perform(project.id)
expect(project.jira_import_status).to eq('finished') expect(project.jira_import_status).to eq('finished')
end end
it 'saves imported issues counts' do
latest_jira_import = project.latest_jira_import
expect(latest_jira_import.total_issue_count).to eq(5)
expect(latest_jira_import.failed_to_import_count).to eq(2)
expect(latest_jira_import.imported_issues_count).to eq(3)
end
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