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
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/bitbucket_import/importer.rb114
-rw-r--r--lib/gitlab/bitbucket_import/metrics.rb41
-rw-r--r--lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml2
-rw-r--r--lib/gitlab/danger/helper.rb6
-rw-r--r--lib/gitlab/import/metrics.rb60
5 files changed, 167 insertions, 56 deletions
diff --git a/lib/gitlab/bitbucket_import/importer.rb b/lib/gitlab/bitbucket_import/importer.rb
index 5af839d8a32..d8f9105d66d 100644
--- a/lib/gitlab/bitbucket_import/importer.rb
+++ b/lib/gitlab/bitbucket_import/importer.rb
@@ -3,6 +3,8 @@
module Gitlab
module BitbucketImport
class Importer
+ include Gitlab::BitbucketImport::Metrics
+
LABELS = [{ title: 'bug', color: '#FF0000' },
{ title: 'enhancement', color: '#428BCA' },
{ title: 'proposal', color: '#69D100' },
@@ -83,38 +85,42 @@ module Gitlab
errors << { type: :wiki, errors: e.message }
end
- # rubocop: disable CodeReuse/ActiveRecord
def import_issues
return unless repo.issues_enabled?
create_labels
client.issues(repo).each do |issue|
- description = ''
- description += @formatter.author_line(issue.author) unless find_user_id(issue.author)
- description += issue.description
-
- label_name = issue.kind
- milestone = issue.milestone ? project.milestones.find_or_create_by(title: issue.milestone) : nil
-
- gitlab_issue = project.issues.create!(
- iid: issue.iid,
- title: issue.title,
- description: description,
- state_id: Issue.available_states[issue.state],
- author_id: gitlab_user_id(project, issue.author),
- milestone: milestone,
- created_at: issue.created_at,
- updated_at: issue.updated_at
- )
-
- gitlab_issue.labels << @labels[label_name]
-
- import_issue_comments(issue, gitlab_issue) if gitlab_issue.persisted?
- rescue StandardError => e
- errors << { type: :issue, iid: issue.iid, errors: e.message }
+ import_issue(issue)
end
end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def import_issue(issue)
+ description = ''
+ description += @formatter.author_line(issue.author) unless find_user_id(issue.author)
+ description += issue.description
+
+ label_name = issue.kind
+ milestone = issue.milestone ? project.milestones.find_or_create_by(title: issue.milestone) : nil
+
+ gitlab_issue = project.issues.create!(
+ iid: issue.iid,
+ title: issue.title,
+ description: description,
+ state_id: Issue.available_states[issue.state],
+ author_id: gitlab_user_id(project, issue.author),
+ milestone: milestone,
+ created_at: issue.created_at,
+ updated_at: issue.updated_at
+ )
+
+ gitlab_issue.labels << @labels[label_name]
+
+ import_issue_comments(issue, gitlab_issue) if gitlab_issue.persisted?
+ rescue StandardError => e
+ errors << { type: :issue, iid: issue.iid, errors: e.message }
+ end
# rubocop: enable CodeReuse/ActiveRecord
def import_issue_comments(issue, gitlab_issue)
@@ -159,37 +165,41 @@ module Gitlab
pull_requests = client.pull_requests(repo)
pull_requests.each do |pull_request|
- description = ''
- description += @formatter.author_line(pull_request.author) unless find_user_id(pull_request.author)
- description += pull_request.description
-
- source_branch_sha = pull_request.source_branch_sha
- target_branch_sha = pull_request.target_branch_sha
- source_branch_sha = project.repository.commit(source_branch_sha)&.sha || source_branch_sha
- target_branch_sha = project.repository.commit(target_branch_sha)&.sha || target_branch_sha
-
- merge_request = project.merge_requests.create!(
- iid: pull_request.iid,
- title: pull_request.title,
- description: description,
- source_project: project,
- source_branch: pull_request.source_branch_name,
- source_branch_sha: source_branch_sha,
- target_project: project,
- target_branch: pull_request.target_branch_name,
- target_branch_sha: target_branch_sha,
- state: pull_request.state,
- author_id: gitlab_user_id(project, pull_request.author),
- created_at: pull_request.created_at,
- updated_at: pull_request.updated_at
- )
-
- import_pull_request_comments(pull_request, merge_request) if merge_request.persisted?
- rescue StandardError => e
- store_pull_request_error(pull_request, e)
+ import_pull_request(pull_request)
end
end
+ def import_pull_request(pull_request)
+ description = ''
+ description += @formatter.author_line(pull_request.author) unless find_user_id(pull_request.author)
+ description += pull_request.description
+
+ source_branch_sha = pull_request.source_branch_sha
+ target_branch_sha = pull_request.target_branch_sha
+ source_branch_sha = project.repository.commit(source_branch_sha)&.sha || source_branch_sha
+ target_branch_sha = project.repository.commit(target_branch_sha)&.sha || target_branch_sha
+
+ merge_request = project.merge_requests.create!(
+ iid: pull_request.iid,
+ title: pull_request.title,
+ description: description,
+ source_project: project,
+ source_branch: pull_request.source_branch_name,
+ source_branch_sha: source_branch_sha,
+ target_project: project,
+ target_branch: pull_request.target_branch_name,
+ target_branch_sha: target_branch_sha,
+ state: pull_request.state,
+ author_id: gitlab_user_id(project, pull_request.author),
+ created_at: pull_request.created_at,
+ updated_at: pull_request.updated_at
+ )
+
+ import_pull_request_comments(pull_request, merge_request) if merge_request.persisted?
+ rescue StandardError => e
+ store_pull_request_error(pull_request, e)
+ end
+
def import_pull_request_comments(pull_request, merge_request)
comments = client.pull_request_comments(repo, pull_request.iid)
diff --git a/lib/gitlab/bitbucket_import/metrics.rb b/lib/gitlab/bitbucket_import/metrics.rb
new file mode 100644
index 00000000000..25e2d9b211e
--- /dev/null
+++ b/lib/gitlab/bitbucket_import/metrics.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module BitbucketImport
+ module Metrics
+ extend ActiveSupport::Concern
+
+ IMPORTER = :bitbucket_importer
+
+ included do
+ prepend Gitlab::Import::Metrics
+
+ Gitlab::Import::Metrics.measure(:execute, metrics: {
+ "#{IMPORTER}_imported_projects": {
+ type: :counter,
+ description: 'The number of imported Bitbucket projects'
+ },
+ "#{IMPORTER}_total_duration_seconds": {
+ type: :histogram,
+ labels: { importer: IMPORTER },
+ description: 'Total time spent importing Bitbucket projects, in seconds'
+ }
+ })
+
+ Gitlab::Import::Metrics.measure(:import_issue, metrics: {
+ "#{IMPORTER}_imported_issues": {
+ type: :counter,
+ description: 'The number of imported Bitbucket issues'
+ }
+ })
+
+ Gitlab::Import::Metrics.measure(:import_pull_request, metrics: {
+ "#{IMPORTER}_imported_pull_requests": {
+ type: :counter,
+ description: 'The number of imported Bitbucket pull requests'
+ }
+ })
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml b/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml
index bb0de9df8bf..ceaa8115c3d 100644
--- a/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Jobs/Build.gitlab-ci.yml
@@ -1,6 +1,6 @@
build:
stage: build
- image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-build-image/master:stable"
+ image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-build-image:v0.2.0"
variables:
DOCKER_TLS_CERTDIR: ""
services:
diff --git a/lib/gitlab/danger/helper.rb b/lib/gitlab/danger/helper.rb
index 6bb46b1730f..aa2737262be 100644
--- a/lib/gitlab/danger/helper.rb
+++ b/lib/gitlab/danger/helper.rb
@@ -100,6 +100,7 @@ module Gitlab
test: "~test ~Quality for `spec/features/*`",
engineering_productivity: '~"Engineering Productivity" for CI, Danger'
}.freeze
+ # First-match win, so be sure to put more specific regex at the top...
CATEGORIES = {
%r{\Adoc/} => :none, # To reinstate roulette for documentation, set to `:docs`.
%r{\A(CONTRIBUTING|LICENSE|MAINTENANCE|PHILOSOPHY|PROCESS|README)(\.md)?\z} => :none, # To reinstate roulette for documentation, set to `:docs`.
@@ -145,9 +146,8 @@ module Gitlab
%r{\A(ee/)?app/(?!assets|views)[^/]+} => :backend,
%r{\A(ee/)?(bin|config|generator_templates|lib|rubocop)/} => :backend,
%r{\A(ee/)?spec/features/} => :test,
- %r{\A(ee/)?spec/(?!javascripts|frontend)[^/]+} => :backend,
- %r{\A(ee/)?vendor/(?!assets)[^/]+} => :backend,
- %r{\A(ee/)?vendor/(languages\.yml|licenses\.csv)\z} => :backend,
+ %r{\A(ee/)?spec/} => :backend,
+ %r{\A(ee/)?vendor/} => :backend,
%r{\A(Gemfile|Gemfile.lock|Rakefile)\z} => :backend,
%r{\A[A-Z_]+_VERSION\z} => :backend,
%r{\A\.rubocop(_todo)?\.yml\z} => :backend,
diff --git a/lib/gitlab/import/metrics.rb b/lib/gitlab/import/metrics.rb
new file mode 100644
index 00000000000..76638a8cf86
--- /dev/null
+++ b/lib/gitlab/import/metrics.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+# Prepend `Gitlab::Import::Metrics` to a class in order
+# to measure and emit `Gitlab::Metrics` metrics of specified methods.
+#
+# @example
+# class Importer
+# prepend Gitlab::Import::Metrics
+#
+# Gitlab::ImportExport::Metrics.measure :execute, metrics: {
+# importer_counter: {
+# type: :counter,
+# description: 'counter'
+# },
+# importer_histogram: {
+# type: :histogram,
+# labels: { importer: 'importer' },
+# description: 'histogram'
+# }
+# }
+#
+# def execute
+# ...
+# end
+# end
+#
+# Each call to `#execute` increments `importer_counter` as well as
+# measures `#execute` duration and reports histogram `importer_histogram`
+module Gitlab
+ module Import
+ module Metrics
+ def self.measure(method_name, metrics:)
+ define_method "#{method_name}" do |*args|
+ start_time = Time.zone.now
+
+ result = super(*args)
+
+ end_time = Time.zone.now
+
+ report_measurement_metrics(metrics, end_time - start_time)
+
+ result
+ end
+ end
+
+ def report_measurement_metrics(metrics, duration)
+ metrics.each do |metric_name, metric_value|
+ case metric_value[:type]
+ when :counter
+ Gitlab::Metrics.counter(metric_name, metric_value[:description]).increment
+ when :histogram
+ Gitlab::Metrics.histogram(metric_name, metric_value[:description]).observe(metric_value[:labels], duration)
+ else
+ nil
+ end
+ end
+ end
+ end
+ end
+end