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/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/github_import/importer/pull_request_merged_by_importer.rb6
-rw-r--r--lib/gitlab/github_import/importer/pull_request_review_importer.rb6
-rw-r--r--lib/gitlab/github_import/user_finder.rb20
-rw-r--r--lib/gitlab/harbor/client.rb6
-rw-r--r--lib/sidebars/admin/base_menu.rb14
-rw-r--r--lib/sidebars/admin/menus/abuse_reports_menu.rb39
-rw-r--r--lib/sidebars/admin/menus/admin_overview_menu.rb94
-rw-r--r--lib/sidebars/admin/menus/admin_settings_menu.rb146
-rw-r--r--lib/sidebars/admin/menus/analytics_menu.rb53
-rw-r--r--lib/sidebars/admin/menus/applications_menu.rb29
-rw-r--r--lib/sidebars/admin/menus/ci_cd_menu.rb47
-rw-r--r--lib/sidebars/admin/menus/deploy_keys_menu.rb29
-rw-r--r--lib/sidebars/admin/menus/kubernetes_menu.rb34
-rw-r--r--lib/sidebars/admin/menus/labels_menu.rb29
-rw-r--r--lib/sidebars/admin/menus/messages_menu.rb29
-rw-r--r--lib/sidebars/admin/menus/monitoring_menu.rb73
-rw-r--r--lib/sidebars/admin/menus/spam_logs_menu.rb34
-rw-r--r--lib/sidebars/admin/menus/system_hooks_menu.rb29
-rw-r--r--lib/sidebars/admin/panel.rb48
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')