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:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 18:44:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-19 18:44:42 +0300
commit4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch)
tree5423a1c7516cffe36384133ade12572cf709398d /lib/sidebars/projects/menus/monitor_menu.rb
parente570267f2f6b326480d284e0164a6464ba4081bc (diff)
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'lib/sidebars/projects/menus/monitor_menu.rb')
-rw-r--r--lib/sidebars/projects/menus/monitor_menu.rb246
1 files changed, 246 insertions, 0 deletions
diff --git a/lib/sidebars/projects/menus/monitor_menu.rb b/lib/sidebars/projects/menus/monitor_menu.rb
new file mode 100644
index 00000000000..18c990d0e1f
--- /dev/null
+++ b/lib/sidebars/projects/menus/monitor_menu.rb
@@ -0,0 +1,246 @@
+# frozen_string_literal: true
+
+module Sidebars
+ module Projects
+ module Menus
+ class MonitorMenu < ::Sidebars::Menu
+ override :configure_menu_items
+ def configure_menu_items
+ return false unless context.project.feature_available?(:operations, context.current_user)
+
+ add_item(metrics_dashboard_menu_item)
+ add_item(logs_menu_item)
+ add_item(tracing_menu_item)
+ add_item(error_tracking_menu_item)
+ add_item(alert_management_menu_item)
+ add_item(incidents_menu_item)
+ add_item(serverless_menu_item)
+ add_item(terraform_menu_item)
+ add_item(kubernetes_menu_item)
+ add_item(environments_menu_item)
+ add_item(feature_flags_menu_item)
+ add_item(product_analytics_menu_item)
+
+ true
+ end
+
+ override :link
+ def link
+ if can?(context.current_user, :read_environment, context.project)
+ metrics_project_environments_path(context.project)
+ else
+ project_feature_flags_path(context.project)
+ end
+ end
+
+ override :extra_container_html_options
+ def extra_container_html_options
+ {
+ class: Feature.enabled?(:sidebar_refactor, context.current_user, default_enabled: :yaml) ? 'shortcuts-monitor' : 'shortcuts-operations'
+ }
+ end
+
+ override :title
+ def title
+ Feature.enabled?(:sidebar_refactor, context.current_user, default_enabled: :yaml) ? _('Monitor') : _('Operations')
+ end
+
+ override :sprite_icon
+ def sprite_icon
+ Feature.enabled?(:sidebar_refactor, context.current_user, default_enabled: :yaml) ? 'monitor' : 'cloud-gear'
+ end
+
+ override :active_routes
+ def active_routes
+ { controller: [:user, :gcp] }
+ end
+
+ private
+
+ def metrics_dashboard_menu_item
+ unless can?(context.current_user, :metrics_dashboard, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :metrics)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Metrics'),
+ link: project_metrics_dashboard_path(context.project),
+ active_routes: { path: 'metrics_dashboard#show' },
+ container_html_options: { class: 'shortcuts-metrics' },
+ item_id: :metrics
+ )
+ end
+
+ def logs_menu_item
+ if !can?(context.current_user, :read_environment, context.project) ||
+ !can?(context.current_user, :read_pod_logs, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :logs)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Logs'),
+ link: project_logs_path(context.project),
+ active_routes: { path: 'logs#index' },
+ item_id: :logs
+ )
+ end
+
+ def tracing_menu_item
+ if !can?(context.current_user, :read_environment, context.project) ||
+ !can?(context.current_user, :admin_project, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :tracing)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Tracing'),
+ link: project_tracing_path(context.project),
+ active_routes: { path: 'tracings#show' },
+ item_id: :tracing
+ )
+ end
+
+ def error_tracking_menu_item
+ unless can?(context.current_user, :read_sentry_issue, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :error_tracking)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Error Tracking'),
+ link: project_error_tracking_index_path(context.project),
+ active_routes: { controller: :error_tracking },
+ item_id: :error_tracking
+ )
+ end
+
+ def alert_management_menu_item
+ unless can?(context.current_user, :read_alert_management_alert, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :alert_management)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Alerts'),
+ link: project_alert_management_index_path(context.project),
+ active_routes: { controller: :alert_management },
+ item_id: :alert_management
+ )
+ end
+
+ def incidents_menu_item
+ unless can?(context.current_user, :read_issue, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :incidents)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Incidents'),
+ link: project_incidents_path(context.project),
+ active_routes: { controller: [:incidents, :incident_management] },
+ item_id: :incidents
+ )
+ end
+
+ def serverless_menu_item
+ if Feature.enabled?(:sidebar_refactor, context.current_user) ||
+ !can?(context.current_user, :read_cluster, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :serverless)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Serverless'),
+ link: project_serverless_functions_path(context.project),
+ active_routes: { controller: :functions },
+ item_id: :serverless
+ )
+ end
+
+ def terraform_menu_item
+ if Feature.enabled?(:sidebar_refactor, context.current_user) ||
+ !can?(context.current_user, :read_terraform_state, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :terraform)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Terraform'),
+ link: project_terraform_index_path(context.project),
+ active_routes: { controller: :terraform },
+ item_id: :terraform
+ )
+ end
+
+ def kubernetes_menu_item
+ if Feature.enabled?(:sidebar_refactor, context.current_user) ||
+ !can?(context.current_user, :read_cluster, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :kubernetes)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Kubernetes'),
+ link: project_clusters_path(context.project),
+ active_routes: { controller: [:cluster_agents, :clusters] },
+ container_html_options: { class: 'shortcuts-kubernetes' },
+ hint_html_options: kubernetes_hint_html_options,
+ item_id: :kubernetes
+ )
+ end
+
+ def kubernetes_hint_html_options
+ return {} unless context.show_cluster_hint
+
+ { disabled: true,
+ data: { trigger: 'manual',
+ container: 'body',
+ placement: 'right',
+ highlight: UserCalloutsHelper::GKE_CLUSTER_INTEGRATION,
+ highlight_priority: UserCallout.feature_names[:GKE_CLUSTER_INTEGRATION],
+ dismiss_endpoint: user_callouts_path,
+ auto_devops_help_path: help_page_path('topics/autodevops/index.md') } }
+ end
+
+ def environments_menu_item
+ if Feature.enabled?(:sidebar_refactor, context.current_user, default_enabled: :yaml) ||
+ !can?(context.current_user, :read_environment, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :environments)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Environments'),
+ link: project_environments_path(context.project),
+ active_routes: { controller: :environments },
+ container_html_options: { class: 'shortcuts-environments' },
+ item_id: :environments
+ )
+ end
+
+ def feature_flags_menu_item
+ if Feature.enabled?(:sidebar_refactor, context.current_user, default_enabled: :yaml) ||
+ !can?(context.current_user, :read_feature_flag, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :feature_flags)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Feature Flags'),
+ link: project_feature_flags_path(context.project),
+ active_routes: { controller: :feature_flags },
+ container_html_options: { class: 'shortcuts-feature-flags' },
+ item_id: :feature_flags
+ )
+ end
+
+ def product_analytics_menu_item
+ if Feature.disabled?(:product_analytics, context.project) ||
+ !can?(context.current_user, :read_product_analytics, context.project)
+ return ::Sidebars::NilMenuItem.new(item_id: :product_analytics)
+ end
+
+ ::Sidebars::MenuItem.new(
+ title: _('Product Analytics'),
+ link: project_product_analytics_path(context.project),
+ active_routes: { controller: :product_analytics },
+ item_id: :product_analytics
+ )
+ end
+ end
+ end
+ end
+end
+
+Sidebars::Projects::Menus::MonitorMenu.prepend_mod_with('Sidebars::Projects::Menus::MonitorMenu')