- breadcrumb_title _("Dashboard") - page_title _("Dashboard") - billable_users_url = help_page_path('subscriptions/self_managed/index', anchor: 'billable-users') - billable_users_link_start = ''.html_safe % { url: billable_users_url } = render_if_exists 'shared/manual_quarterly_reconciliation_banner' = render_if_exists 'shared/submit_license_usage_data_banner' = render_if_exists 'shared/qrtly_reconciliation_alert' = render 'admin/dashboard/security_newsletter_callout' - if @notices - @notices.each do |notice| .js-vue-alert{ 'v-cloak': true, data: { variant: notice[:type], dismissible: true.to_s } } = notice[:message].html_safe - if @license.present? .license-panel.gl-mt-5 = render_if_exists 'admin/licenses/summary' = render_if_exists 'admin/licenses/breakdown' .admin-dashboard.gl-mt-3 .h3.gl-mb-5.gl-mt-0= _('Instance overview') .row - component_params = { body_options: { class: 'gl-display-flex gl-justify-content-space-between gl-align-items-center gl-p-6' }, footer_options: { class: 'gl-bg-transparent'} } .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new(**component_params) do |c| = c.body do %span .d-flex.align-items-center = sprite_icon('project', size: 16, css_class: 'gl-text-gray-700') %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, Project) .gl-mt-3.text-uppercase= s_('AdminArea|Projects') = link_to(s_('AdminArea|New project'), new_project_path, class: "btn gl-button btn-default") = c.footer do .d-flex.align-items-center = link_to(s_('AdminArea|View latest projects'), admin_projects_path(sort: 'created_desc')) = sprite_icon('chevron-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2') .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new(**component_params) do |c| = c.body do %span .d-flex.align-items-center = sprite_icon('users', size: 16, css_class: 'gl-text-gray-700') %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, User) %span.gl-outline-0.gl-ml-3{ tabindex: "0", data: { container: "body", toggle: "popover", placement: "top", html: "true", trigger: "focus", content: s_("AdminArea|All users created in the instance, including users who are not %{billable_users_link_start}billable users%{billable_users_link_end}.").html_safe % { billable_users_link_start: billable_users_link_start, billable_users_link_end: ''.html_safe }, } } = sprite_icon('question-o', size: 16, css_class: 'gl-text-blue-600') .gl-mt-3.text-uppercase = s_('AdminArea|Users') = link_to(s_('AdminArea|Users statistics'), admin_dashboard_stats_path, class: "text-capitalize gl-ml-2") = link_to(s_('AdminArea|New user'), new_admin_user_path, class: "btn gl-button btn-default") = c.footer do .d-flex.align-items-center = link_to(s_('AdminArea|View latest users'), admin_users_path({ sort: 'created_desc' })) = sprite_icon('chevron-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2') .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new(**component_params) do |c| = c.body do %span .d-flex.align-items-center = sprite_icon('group', size: 16, css_class: 'gl-text-gray-700') %h3.gl-m-0.gl-ml-3= approximate_count_with_delimiters(@counts, Group) .gl-mt-3.text-uppercase= s_('AdminArea|Groups') = link_to(s_('AdminArea|New group'), new_admin_group_path, class: "btn gl-button btn-default") = c.footer do .d-flex.align-items-center = link_to(s_('AdminArea|View latest groups'), admin_groups_path(sort: 'created_desc')) = sprite_icon('chevron-right', size: 12, css_class: 'gl-text-gray-700 gl-ml-2') .row .col-md-4.gl-mb-6 #js-admin-statistics-container .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new do |c| = c.body do %h4= s_('AdminArea|Features') = feature_entry(_('Sign up'), href: general_admin_application_settings_path(anchor: 'js-signup-settings'), enabled: allow_signup?) = feature_entry(_('LDAP'), enabled: Gitlab.config.ldap.enabled, doc_href: help_page_path('administration/auth/ldap/index.md')) = feature_entry(_('Gravatar'), href: general_admin_application_settings_path(anchor: 'js-account-settings'), enabled: gravatar_enabled?) = feature_entry(_('OmniAuth'), href: general_admin_application_settings_path(anchor: 'js-signin-settings'), enabled: Gitlab::Auth.omniauth_enabled?, doc_href: help_page_path('integration/omniauth')) = feature_entry(_('Reply by email'), enabled: Gitlab::IncomingEmail.enabled?, doc_href: help_page_path('administration/reply_by_email')) = render_if_exists 'admin/dashboard/elastic_and_geo' = feature_entry(_('Container Registry'), href: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'), enabled: Gitlab.config.registry.enabled, doc_href: help_page_path('user/packages/container_registry/index')) = feature_entry(_('GitLab Pages'), enabled: Gitlab.config.pages.enabled, doc_href: help_instance_configuration_url) = feature_entry(_('Shared Runners'), href: admin_runners_path, enabled: Gitlab.config.gitlab_ci.shared_runners_enabled) .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new do |c| = c.body do %h4 = s_('AdminArea|Components') - if show_version_check? .float-right .js-gitlab-version-check-badge{ data: { "size": "lg", "actionable": "true" } } = link_to(sprite_icon('question'), "https://gitlab.com/gitlab-org/gitlab/-/blob/master/CHANGELOG.md", class: 'gl-ml-2', target: '_blank', rel: 'noopener noreferrer') %p = link_to _('GitLab'), general_admin_application_settings_path %span.float-right = link_to_version %p = _('GitLab Shell') %span.float-right = Gitlab::Shell.version %p = _('GitLab Workhorse') %span.float-right = gitlab_workhorse_version %p = _('GitLab API') %span.float-right = API::API::version - if Gitlab.config.pages.enabled %p = _('GitLab Pages') %span.float-right = Gitlab::Pages::VERSION - if Gitlab::Kas.enabled? %p = _('GitLab KAS') %span.gl-float-right = Gitlab::Kas.version = render_if_exists 'admin/dashboard/geo' %p = _('Ruby') %span.float-right #{RUBY_VERSION}p#{RUBY_PATCHLEVEL} %p = _('Rails') %span.float-right #{Rails::VERSION::STRING} %p = ApplicationRecord.database.human_adapter_name %span.float-right = ApplicationRecord.database.version %p = _('Redis') %span.float-right = @redis_versions&.join(", ") %p = link_to _("Gitaly Servers"), admin_gitaly_servers_path .row .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new do |c| = c.body do %h4= s_('AdminArea|Latest projects') - @projects.each do |project| .gl-display-flex.gl-py-3 .gl-mr-auto.gl-overflow-hidden.gl-text-overflow-ellipsis = link_to project.full_name, admin_project_path(project) %span.gl-white-space-nowrap.gl-text-right #{time_ago_with_tooltip(project.created_at)} .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new do |c| = c.body do %h4= s_('AdminArea|Latest users') - @users.each do |user| .gl-display-flex.gl-py-3 .gl-mr-auto.gl-overflow-hidden.gl-text-overflow-ellipsis = link_to [:admin, user] do = user.name %span.gl-white-space-nowrap.gl-text-right #{time_ago_with_tooltip(user.created_at)} .col-md-4.gl-mb-6 = render Pajamas::CardComponent.new do |c| = c.body do %h4= s_('AdminArea|Latest groups') - @groups.each do |group| .gl-display-flex.gl-py-3 .gl-mr-auto.gl-overflow-hidden.gl-text-overflow-ellipsis = link_to [:admin, group] do = group.full_name %span.gl-white-space-nowrap.gl-text-right #{time_ago_with_tooltip(group.created_at)}