diff options
Diffstat (limited to 'lib')
19 files changed, 751 insertions, 14 deletions
diff --git a/lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb b/lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb index f05aa26a449..51a72a80268 100644 --- a/lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb +++ b/lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb @@ -17,11 +17,7 @@ module Gitlab def execute user_finder = GithubImport::UserFinder.new(project, client) - gitlab_user_id = begin - user_finder.user_id_for(pull_request.merged_by) - rescue ::Octokit::NotFound - nil - end + gitlab_user_id = user_finder.user_id_for(pull_request.merged_by) metrics_upsert(gitlab_user_id) diff --git a/lib/gitlab/github_import/importer/pull_request_review_importer.rb b/lib/gitlab/github_import/importer/pull_request_review_importer.rb index b1e259fe940..a711f83ce92 100644 --- a/lib/gitlab/github_import/importer/pull_request_review_importer.rb +++ b/lib/gitlab/github_import/importer/pull_request_review_importer.rb @@ -17,11 +17,7 @@ module Gitlab def execute user_finder = GithubImport::UserFinder.new(project, client) - gitlab_user_id = begin - user_finder.user_id_for(review.author) - rescue ::Octokit::NotFound - nil - end + gitlab_user_id = user_finder.user_id_for(review.author) if gitlab_user_id add_review_note!(gitlab_user_id) diff --git a/lib/gitlab/github_import/user_finder.rb b/lib/gitlab/github_import/user_finder.rb index b8751def08f..dd71edbd205 100644 --- a/lib/gitlab/github_import/user_finder.rb +++ b/lib/gitlab/github_import/user_finder.rb @@ -28,6 +28,9 @@ module Gitlab EMAIL_FOR_USERNAME_CACHE_KEY = 'github-import/user-finder/email-for-username/%s' + # The base cache key to use for caching inexistence of GitHub usernames. + INEXISTENCE_OF_GITHUB_USERNAME_CACHE_KEY = 'github-import/user-finder/inexistence-of-username/%s' + # project - An instance of `Project` # client - An instance of `Gitlab::GithubImport::Client` def initialize(project, client) @@ -113,12 +116,15 @@ module Gitlab cache_key = EMAIL_FOR_USERNAME_CACHE_KEY % username email = Gitlab::Cache::Import::Caching.read(cache_key) - unless email + if email.blank? && !github_username_inexists?(username) user = client.user(username) email = Gitlab::Cache::Import::Caching.write(cache_key, user[:email], timeout: timeout(user[:email])) if user end email + rescue ::Octokit::NotFound + cache_github_username_inexistence(username) + nil end def cached_id_for_github_id(id) @@ -190,6 +196,18 @@ module Gitlab Gitlab::Cache::Import::Caching::SHORTER_TIMEOUT end end + + def github_username_inexists?(username) + cache_key = INEXISTENCE_OF_GITHUB_USERNAME_CACHE_KEY % username + + Gitlab::Cache::Import::Caching.read(cache_key) == 'true' + end + + def cache_github_username_inexistence(username) + cache_key = INEXISTENCE_OF_GITHUB_USERNAME_CACHE_KEY % username + + Gitlab::Cache::Import::Caching.write(cache_key, true) + end end end end diff --git a/lib/gitlab/harbor/client.rb b/lib/gitlab/harbor/client.rb index ee40725ba95..380e4e42bc7 100644 --- a/lib/gitlab/harbor/client.rb +++ b/lib/gitlab/harbor/client.rb @@ -14,9 +14,9 @@ module Gitlab @integration = integration end - def ping - options = { headers: headers.merge!('Accept': 'text/plain') } - response = Gitlab::HTTP.get(url('ping'), options) + def check_project_availability + options = { headers: headers.merge!('Accept': 'application/json') } + response = Gitlab::HTTP.head(url("projects?project_name=#{integration.project_name}"), options) { success: response.success? } end diff --git a/lib/sidebars/admin/base_menu.rb b/lib/sidebars/admin/base_menu.rb new file mode 100644 index 00000000000..897a193f672 --- /dev/null +++ b/lib/sidebars/admin/base_menu.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + class BaseMenu < ::Sidebars::Menu + override :render? + def render? + return false unless context.current_user + + context.current_user.can_admin_all_resources? + end + end + end +end diff --git a/lib/sidebars/admin/menus/abuse_reports_menu.rb b/lib/sidebars/admin/menus/abuse_reports_menu.rb new file mode 100644 index 00000000000..72f4d6e6590 --- /dev/null +++ b/lib/sidebars/admin/menus/abuse_reports_menu.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class AbuseReportsMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_abuse_reports_path + end + + override :title + def title + s_('Admin|Abuse Reports') + end + + override :sprite_icon + def sprite_icon + 'slight-frown' + end + + override :has_pill? + def has_pill? + true + end + + override :pill_count + def pill_count + @pill_count ||= AbuseReport.count(:all) + end + + override :active_routes + def active_routes + { controller: :abuse_reports } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/admin_overview_menu.rb b/lib/sidebars/admin/menus/admin_overview_menu.rb new file mode 100644 index 00000000000..57c9ff4dcb0 --- /dev/null +++ b/lib/sidebars/admin/menus/admin_overview_menu.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class AdminOverviewMenu < ::Sidebars::Admin::BaseMenu + override :configure_menu_items + def configure_menu_items + add_item(dashboard_menu_item) + add_item(projects_menu_item) + add_item(users_menu_item) + add_item(groups_menu_item) + add_item(topics_menu_item) + add_item(gitaly_servers_menu_item) + + true + end + + override :title + def title + s_('Admin|Overview') + end + + override :sprite_icon + def sprite_icon + 'overview' + end + + override :extra_container_html_options + def extra_container_html_options + { 'data-qa-selector': 'admin_overview_submenu_content' } + end + + private + + def dashboard_menu_item + ::Sidebars::MenuItem.new( + title: _('Dashboard'), + link: admin_root_path, + active_routes: { controller: 'dashboard' }, + item_id: :dashboard + ) + end + + def projects_menu_item + ::Sidebars::MenuItem.new( + title: _('Projects'), + link: admin_projects_path, + active_routes: { controller: 'admin/projects' }, + item_id: :projects + ) + end + + def users_menu_item + ::Sidebars::MenuItem.new( + title: _('Users'), + link: admin_users_path, + active_routes: { controller: 'users' }, + item_id: :users, + container_html_options: { 'data-qa-selector': 'admin_overview_users_link' } + ) + end + + def groups_menu_item + ::Sidebars::MenuItem.new( + title: _('Groups'), + link: admin_groups_path, + active_routes: { controller: 'groups' }, + item_id: :groups, + container_html_options: { 'data-qa-selector': 'admin_overview_groups_link' } + ) + end + + def topics_menu_item + ::Sidebars::MenuItem.new( + title: _('Topics'), + link: admin_topics_path, + active_routes: { controller: 'admin/topics' }, + item_id: :topics + ) + end + + def gitaly_servers_menu_item + ::Sidebars::MenuItem.new( + title: _('Gitaly Servers'), + link: admin_gitaly_servers_path, + active_routes: { controller: 'gitaly_servers' }, + item_id: :gitaly_servers + ) + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/admin_settings_menu.rb b/lib/sidebars/admin/menus/admin_settings_menu.rb new file mode 100644 index 00000000000..163c32ad0a9 --- /dev/null +++ b/lib/sidebars/admin/menus/admin_settings_menu.rb @@ -0,0 +1,146 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class AdminSettingsMenu < ::Sidebars::Admin::BaseMenu + override :configure_menu_items + def configure_menu_items + add_item(general_settings_menu_item) + add_item(integrations_menu_item) + add_item(repository_menu_item) + add_item(ci_cd_menu_item) + add_item(reporting_menu_item) + add_item(metrics_and_profiling_menu_item) + add_item(service_usage_data_menu_item) + add_item(network_settings_menu_item) + add_item(appearance_menu_item) + add_item(preferences_menu_item) + + true + end + + override :title + def title + s_('Admin|Settings') + end + + override :sprite_icon + def sprite_icon + 'settings' + end + + override :extra_container_html_options + def extra_container_html_options + { 'data-qa-selector': 'admin_settings_menu_link' } + end + + private + + def general_settings_menu_item + ::Sidebars::MenuItem.new( + title: _('General'), + link: general_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#general' }, + item_id: :general_settings, + container_html_options: { 'data-qa-selector': 'admin_settings_general_link' } + ) + end + + def integrations_menu_item + return ::Sidebars::NilMenuItem.new(item_id: :admin_integrations) unless instance_level_integrations? + + ::Sidebars::MenuItem.new( + title: _('Integrations'), + link: integrations_admin_application_settings_path, + active_routes: { path: %w[application_settings#integrations integrations#edit] }, + item_id: :admin_integrations, + container_html_options: { 'data-qa-selector': 'admin_settings_integrations_link' } + ) + end + + def repository_menu_item + ::Sidebars::MenuItem.new( + title: _('Repository'), + link: repository_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#repository' }, + item_id: :admin_repository, + container_html_options: { 'data-qa-selector': 'admin_settings_repository_link' } + ) + end + + def ci_cd_menu_item + ::Sidebars::MenuItem.new( + title: _('CI/CD'), + link: ci_cd_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#ci_cd' }, + item_id: :admin_ci_cd + ) + end + + def reporting_menu_item + ::Sidebars::MenuItem.new( + title: _('Reporting'), + link: reporting_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#reporting' }, + item_id: :admin_reporting + ) + end + + def metrics_and_profiling_menu_item + ::Sidebars::MenuItem.new( + title: _('Metrics and profiling'), + link: metrics_and_profiling_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#metrics_and_profiling' }, + item_id: :admin_metrics, + container_html_options: { 'data-qa-selector': 'admin_settings_metrics_and_profiling_link' } + ) + end + + def service_usage_data_menu_item + ::Sidebars::MenuItem.new( + title: _('Service usage data'), + link: service_usage_data_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#service_usage_data' }, + item_id: :admin_service_usage + ) + end + + def network_settings_menu_item + ::Sidebars::MenuItem.new( + title: _('Network'), + link: network_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#network' }, + item_id: :admin_network, + container_html_options: { 'data-qa-selector': 'admin_settings_network_link' } + ) + end + + def appearance_menu_item + ::Sidebars::MenuItem.new( + title: _('Appearance'), + link: admin_application_settings_appearances_path, + active_routes: { path: 'admin/application_settings/appearances#show' }, + item_id: :admin_appearance + ) + end + + def preferences_menu_item + ::Sidebars::MenuItem.new( + title: _('Preferences'), + link: preferences_admin_application_settings_path, + active_routes: { path: 'admin/application_settings#preferences' }, + item_id: :admin_preferences, + container_html_options: { 'data-qa-selector': 'admin_settings_preferences_link' } + ) + end + + def instance_level_integrations? + !Gitlab.com? + end + end + end + end +end + +Sidebars::Admin::Menus::AdminSettingsMenu.prepend_mod_with('Sidebars::Admin::Menus::AdminSettingsMenu') diff --git a/lib/sidebars/admin/menus/analytics_menu.rb b/lib/sidebars/admin/menus/analytics_menu.rb new file mode 100644 index 00000000000..944f7f6bba7 --- /dev/null +++ b/lib/sidebars/admin/menus/analytics_menu.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class AnalyticsMenu < ::Sidebars::Admin::BaseMenu + override :configure_menu_items + def configure_menu_items + add_item(dev_ops_reports_menu_item) + add_item(usage_trends_menu_item) + + true + end + + override :title + def title + s_('Admin|Analytics') + end + + override :sprite_icon + def sprite_icon + 'chart' + end + + override :extra_container_html_options + def extra_container_html_options + { 'data-qa-selector': 'admin_sidebar_analytics_submenu_content' } + end + + private + + def dev_ops_reports_menu_item + ::Sidebars::MenuItem.new( + title: _('DevOps Reports'), + link: admin_dev_ops_reports_path, + active_routes: { controller: 'dev_ops_report' }, + item_id: :dev_ops_reports, + container_html_options: { 'data-qa-selector': 'admin_analytics_link' } + ) + end + + def usage_trends_menu_item + ::Sidebars::MenuItem.new( + title: _('Usage Trends'), + link: admin_usage_trends_path, + active_routes: { controller: 'usage_trends' }, + item_id: :usage_trends + ) + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/applications_menu.rb b/lib/sidebars/admin/menus/applications_menu.rb new file mode 100644 index 00000000000..74116076735 --- /dev/null +++ b/lib/sidebars/admin/menus/applications_menu.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class ApplicationsMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_applications_path + end + + override :title + def title + s_('Admin|Applications') + end + + override :sprite_icon + def sprite_icon + 'applications' + end + + override :active_routes + def active_routes + { controller: :applications } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/ci_cd_menu.rb b/lib/sidebars/admin/menus/ci_cd_menu.rb new file mode 100644 index 00000000000..e6e8e77a448 --- /dev/null +++ b/lib/sidebars/admin/menus/ci_cd_menu.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class CiCdMenu < ::Sidebars::Admin::BaseMenu + override :configure_menu_items + def configure_menu_items + add_item(runners_menu_item) + add_item(jobs_menu_item) + + true + end + + override :title + def title + s_('Admin|CI/CD') + end + + override :sprite_icon + def sprite_icon + 'rocket' + end + + private + + def runners_menu_item + ::Sidebars::MenuItem.new( + title: _('Runners'), + link: admin_runners_path, + active_routes: { controller: 'runners' }, + item_id: :runners + ) + end + + def jobs_menu_item + ::Sidebars::MenuItem.new( + title: _('Jobs'), + link: admin_jobs_path, + active_routes: { controller: 'jobs' }, + item_id: :jobs + ) + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/deploy_keys_menu.rb b/lib/sidebars/admin/menus/deploy_keys_menu.rb new file mode 100644 index 00000000000..4ffc6635f27 --- /dev/null +++ b/lib/sidebars/admin/menus/deploy_keys_menu.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class DeployKeysMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_deploy_keys_path + end + + override :title + def title + s_('Admin|Deploy Keys') + end + + override :sprite_icon + def sprite_icon + 'key' + end + + override :active_routes + def active_routes + { controller: :deploy_keys } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/kubernetes_menu.rb b/lib/sidebars/admin/menus/kubernetes_menu.rb new file mode 100644 index 00000000000..88b184290f1 --- /dev/null +++ b/lib/sidebars/admin/menus/kubernetes_menu.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class KubernetesMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_clusters_path + end + + override :title + def title + s_('Admin|Kubernetes') + end + + override :sprite_icon + def sprite_icon + 'cloud-gear' + end + + override :render? + def render? + current_user && current_user.can_admin_all_resources? && instance_clusters_enabled? + end + + override :active_routes + def active_routes + { controller: :clusters } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/labels_menu.rb b/lib/sidebars/admin/menus/labels_menu.rb new file mode 100644 index 00000000000..32b4b53960a --- /dev/null +++ b/lib/sidebars/admin/menus/labels_menu.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class LabelsMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_labels_path + end + + override :title + def title + s_('Admin|Labels') + end + + override :sprite_icon + def sprite_icon + 'labels' + end + + override :active_routes + def active_routes + { controller: :labels } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/messages_menu.rb b/lib/sidebars/admin/menus/messages_menu.rb new file mode 100644 index 00000000000..0d7110f42bf --- /dev/null +++ b/lib/sidebars/admin/menus/messages_menu.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class MessagesMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_broadcast_messages_path + end + + override :title + def title + s_('Admin|Messages') + end + + override :sprite_icon + def sprite_icon + 'messages' + end + + override :active_routes + def active_routes + { controller: :broadcast_messages } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/monitoring_menu.rb b/lib/sidebars/admin/menus/monitoring_menu.rb new file mode 100644 index 00000000000..71a9d4b8a03 --- /dev/null +++ b/lib/sidebars/admin/menus/monitoring_menu.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class MonitoringMenu < ::Sidebars::Admin::BaseMenu + override :configure_menu_items + def configure_menu_items + add_item(system_info_menu_item) + add_item(background_migrations_menu_item) + add_item(background_jobs_menu_item) + add_item(health_check_menu_item) + true + end + + override :title + def title + s_('Admin|Monitoring') + end + + override :sprite_icon + def sprite_icon + 'monitor' + end + + override :extra_container_html_options + def extra_container_html_options + { 'data-qa-selector': 'admin_monitoring_menu_link' } + end + + private + + def system_info_menu_item + ::Sidebars::MenuItem.new( + title: _('System Info'), + link: admin_system_info_path, + active_routes: { controller: 'system_info' }, + item_id: :system_info + ) + end + + def background_migrations_menu_item + ::Sidebars::MenuItem.new( + title: _('Background Migrations'), + link: admin_background_migrations_path, + active_routes: { controller: 'background_migrations' }, + item_id: :usage_trends + ) + end + + def background_jobs_menu_item + ::Sidebars::MenuItem.new( + title: _('Background Jobs'), + link: admin_background_jobs_path, + active_routes: { controller: 'background_jobs' }, + item_id: :background_jobs + ) + end + + def health_check_menu_item + ::Sidebars::MenuItem.new( + title: _('Health Check'), + link: admin_health_check_path, + active_routes: { controller: 'health_check' }, + item_id: :health_check + ) + end + end + end + end +end + +Sidebars::Admin::Menus::MonitoringMenu.prepend_mod_with('Sidebars::Admin::Menus::MonitoringMenu') diff --git a/lib/sidebars/admin/menus/spam_logs_menu.rb b/lib/sidebars/admin/menus/spam_logs_menu.rb new file mode 100644 index 00000000000..d01cd636e13 --- /dev/null +++ b/lib/sidebars/admin/menus/spam_logs_menu.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class SpamLogsMenu < ::Sidebars::Menu + override :link + def link + admin_spam_logs_path + end + + override :title + def title + s_('Admin|Spam Logs') + end + + override :sprite_icon + def sprite_icon + 'spam' + end + + override :render? + def render? + current_user && current_user.can_admin_all_resources? && anti_spam_service_enabled? + end + + override :active_routes + def active_routes + { controller: :spam_logs } + end + end + end + end +end diff --git a/lib/sidebars/admin/menus/system_hooks_menu.rb b/lib/sidebars/admin/menus/system_hooks_menu.rb new file mode 100644 index 00000000000..494b0392400 --- /dev/null +++ b/lib/sidebars/admin/menus/system_hooks_menu.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + module Menus + class SystemHooksMenu < ::Sidebars::Admin::BaseMenu + override :link + def link + admin_hooks_path + end + + override :title + def title + s_('Admin|System Hooks') + end + + override :sprite_icon + def sprite_icon + 'hook' + end + + override :active_routes + def active_routes + { controller: :hooks } + end + end + end + end +end diff --git a/lib/sidebars/admin/panel.rb b/lib/sidebars/admin/panel.rb new file mode 100644 index 00000000000..95a5c183e96 --- /dev/null +++ b/lib/sidebars/admin/panel.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Sidebars + module Admin + class Panel < ::Sidebars::Panel + override :configure_menus + def configure_menus + super + add_menus + end + + override :render_raw_scope_menu_partial + def render_raw_scope_menu_partial + "shared/nav/admin_scope_header" + end + + override :aria_label + def aria_label + s_("Admin|Admin Area") + end + + override :super_sidebar_context_header + def super_sidebar_context_header + @super_sidebar_context_header ||= { + title: aria_label + } + end + + def add_menus + add_menu(Sidebars::Admin::Menus::AdminOverviewMenu.new(context)) + add_menu(Sidebars::Admin::Menus::CiCdMenu.new(context)) + add_menu(Sidebars::Admin::Menus::AnalyticsMenu.new(context)) + add_menu(Sidebars::Admin::Menus::MonitoringMenu.new(context)) + add_menu(Sidebars::Admin::Menus::MessagesMenu.new(context)) + add_menu(Sidebars::Admin::Menus::SystemHooksMenu.new(context)) + add_menu(Sidebars::Admin::Menus::ApplicationsMenu.new(context)) + add_menu(Sidebars::Admin::Menus::AbuseReportsMenu.new(context)) + add_menu(Sidebars::Admin::Menus::KubernetesMenu.new(context)) + add_menu(Sidebars::Admin::Menus::SpamLogsMenu.new(context)) + add_menu(Sidebars::Admin::Menus::DeployKeysMenu.new(context)) + add_menu(Sidebars::Admin::Menus::LabelsMenu.new(context)) + add_menu(Sidebars::Admin::Menus::AdminSettingsMenu.new(context)) + end + end + end +end + +Sidebars::Admin::Panel.prepend_mod_with('Sidebars::Admin::Panel') |