Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/analytics/shared/constants.js15
-rw-r--r--app/assets/javascripts/gfm_auto_complete.js2
-rw-r--r--app/models/bulk_imports/entity.rb10
-rw-r--r--app/models/bulk_imports/export_status.rb4
-rw-r--r--app/models/bulk_imports/tracker.rb37
-rw-r--r--app/models/concerns/time_trackable.rb8
-rw-r--r--app/services/bulk_imports/relation_export_service.rb7
7 files changed, 80 insertions, 3 deletions
diff --git a/app/assets/javascripts/analytics/shared/constants.js b/app/assets/javascripts/analytics/shared/constants.js
index e48281a7453..1d4a0e07051 100644
--- a/app/assets/javascripts/analytics/shared/constants.js
+++ b/app/assets/javascripts/analytics/shared/constants.js
@@ -122,6 +122,12 @@ export const MERGE_REQUEST_METRICS = {
THROUGHPUT: MERGE_REQUEST_THROUGHPUT_TYPE,
};
+export const CONTRIBUTOR_COUNT_TYPE = 'contributor_count';
+
+export const CONTRIBUTOR_METRICS = {
+ COUNT: CONTRIBUTOR_COUNT_TYPE,
+};
+
export const METRIC_TOOLTIPS = {
[DORA_METRICS.DEPLOYMENT_FREQUENCY]: {
description: s__(
@@ -193,6 +199,15 @@ export const METRIC_TOOLTIPS = {
projectLink: '-/analytics/merge_request_analytics',
docsLink: helpPagePath('user/analytics/merge_request_analytics'),
},
+ [CONTRIBUTOR_METRICS.COUNT]: {
+ description: s__(
+ 'ValueStreamAnalytics|Number of monthly unique users with contributions in the group.',
+ ),
+ groupLink: '-/contribution_analytics',
+ docsLink: helpPagePath('user/profile/contributions_calendar.html', {
+ anchor: 'user-contribution-events',
+ }),
+ },
[VULNERABILITY_METRICS.CRITICAL]: {
description: s__('ValueStreamAnalytics|Critical vulnerabilities over time.'),
groupLink: '-/security/vulnerabilities?severity=CRITICAL',
diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js
index 57c82d34548..f08cccc1865 100644
--- a/app/assets/javascripts/gfm_auto_complete.js
+++ b/app/assets/javascripts/gfm_auto_complete.js
@@ -219,7 +219,7 @@ class GfmAutoComplete {
let tpl = '/${name} ';
let referencePrefix = null;
if (value.params.length > 0) {
- const regexp = /\[[a-z]+:/;
+ const regexp = /^<\[[a-z]+:/;
const match = regexp.exec(value.params);
if (match) {
[referencePrefix] = match;
diff --git a/app/models/bulk_imports/entity.rb b/app/models/bulk_imports/entity.rb
index a6969ce6f76..5e4990b0bc9 100644
--- a/app/models/bulk_imports/entity.rb
+++ b/app/models/bulk_imports/entity.rb
@@ -207,6 +207,16 @@ class BulkImports::Entity < ApplicationRecord
@source_version ||= bulk_import.source_version_info
end
+ def checksums
+ trackers.each_with_object({}) do |tracker, checksums|
+ next unless tracker.file_extraction_pipeline?
+ next if tracker.skipped?
+ next if tracker.checksums_empty?
+
+ checksums.merge!(tracker.checksums)
+ end
+ end
+
private
def validate_parent_is_a_group
diff --git a/app/models/bulk_imports/export_status.rb b/app/models/bulk_imports/export_status.rb
index 9e3815e7569..5da9298e489 100644
--- a/app/models/bulk_imports/export_status.rb
+++ b/app/models/bulk_imports/export_status.rb
@@ -46,6 +46,10 @@ module BulkImports
status['batches'].find { |item| item['batch_number'] == batch_number }
end
+ def total_objects_count
+ status['total_objects_count']
+ end
+
private
attr_reader :client, :entity, :relation, :pipeline_tracker
diff --git a/app/models/bulk_imports/tracker.rb b/app/models/bulk_imports/tracker.rb
index b5092591019..334438c74cd 100644
--- a/app/models/bulk_imports/tracker.rb
+++ b/app/models/bulk_imports/tracker.rb
@@ -86,5 +86,42 @@ class BulkImports::Tracker < ApplicationRecord
event :cleanup_stale do
transition [:created, :started] => :timeout
end
+
+ after_transition any => [:finished, :failed] do |tracker|
+ BulkImports::ObjectCounter.persist!(tracker)
+ end
+ end
+
+ def checksums
+ return unless file_extraction_pipeline?
+
+ # Return cached counters until they expire
+ { importing_relation => cached_checksums || persisted_checksums }
+ end
+
+ def checksums_empty?
+ return true unless checksums
+
+ sums = checksums[importing_relation]
+
+ sums[:source] == 0 && sums[:fetched] == 0 && sums[:imported] == 0
+ end
+
+ def importing_relation
+ pipeline_class.relation.to_sym
+ end
+
+ private
+
+ def cached_checksums
+ BulkImports::ObjectCounter.summary(self)
+ end
+
+ def persisted_checksums
+ {
+ source: source_objects_count,
+ fetched: fetched_objects_count,
+ imported: imported_objects_count
+ }
end
end
diff --git a/app/models/concerns/time_trackable.rb b/app/models/concerns/time_trackable.rb
index 70bc45b382a..b90c938c5f8 100644
--- a/app/models/concerns/time_trackable.rb
+++ b/app/models/concerns/time_trackable.rb
@@ -32,6 +32,7 @@ module TimeTrackable
@spent_at = options[:spent_at]
@summary = options[:summary]
@original_total_time_spent = nil
+ @category_id = category_id(options[:category])
return if @time_spent == 0
@@ -94,7 +95,8 @@ module TimeTrackable
note_id: @time_spent_note_id,
user: @time_spent_user,
spent_at: @spent_at,
- summary: @summary
+ summary: @summary,
+ timelog_category_id: @category_id
)
end
# rubocop:enable Gitlab/ModuleWithInstanceVariables
@@ -119,4 +121,8 @@ module TimeTrackable
errors.add(:time_estimate, _('must have a valid format and be greater than or equal to zero.'))
end
+
+ def category_id(category)
+ TimeTracking::TimelogCategory.find_by_name(project.root_namespace, category).first&.id
+ end
end
diff --git a/app/services/bulk_imports/relation_export_service.rb b/app/services/bulk_imports/relation_export_service.rb
index 6db5ef3e9ec..ea3b8adad74 100644
--- a/app/services/bulk_imports/relation_export_service.rb
+++ b/app/services/bulk_imports/relation_export_service.rb
@@ -82,7 +82,12 @@ module BulkImports
end
def finish_export!(export)
- export.update!(status_event: 'finish', batched: false, error: nil)
+ export.update!(
+ status_event: 'finish',
+ batched: false,
+ error: nil,
+ total_objects_count: export_service.exported_objects_count
+ )
end
def exported_filepath