diff --git a/.markdownlint.yml b/.markdownlint.yml index e1143511b64..6e6cd235092 100644 --- a/.markdownlint.yml +++ b/.markdownlint.yml @@ -103,7 +103,6 @@ proper-names: "OAuth", "OAuth 2", "OmniAuth", - "Omnibus GitLab", "OpenID", "OpenShift", "PgBouncer", diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index bb5327cc9ce..c2fe47363ad 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -1065,7 +1065,6 @@ Layout/ArgumentAlignment: - 'ee/spec/features/groups/settings/protected_environments_spec.rb' - 'ee/spec/features/groups/usage_quotas/pipelines_tab_spec.rb' - 'ee/spec/features/markdown/metrics_spec.rb' - - 'ee/spec/features/merge_request/user_merges_with_namespace_storage_limits_spec.rb' - 'ee/spec/features/merge_request/user_sees_approval_widget_spec.rb' - 'ee/spec/features/namespace_user_cap_reached_alert_spec.rb' - 'ee/spec/features/projects/environments/environment_spec.rb' @@ -1665,30 +1664,6 @@ Layout/ArgumentAlignment: - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/purchase/user_registration_billing_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/saas_user_limit_experience_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/11_fulfillment/utilization/free_namespace_storage_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/database_delete_replication_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_ci_job_log_artifacts_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_maven_package_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_npm_registry_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/geo_replication_project_snippets_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/http_push_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/http_push_to_secondary_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/ssh_push_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/ssh_push_to_secondary_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_http_push_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_http_push_to_secondary_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_ssh_push_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/12_systems/geo/wiki_ssh_push_to_secondary_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/13_secure/merge_request_license_widget_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/15_growth/free_trial_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_git_access_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/1_manage/group/restrict_by_ip_address_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/3_create/group_wiki/delete_group_wiki_page_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/project_templates_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/4_verify/job_trace_archival_spec.rb' - - 'qa/qa/specs/features/ee/browser_ui/5_package/dependency_proxy_sso_spec.rb' - 'qa/qa/vendor/jira/jira_api.rb' - 'qa/spec/support/loglinking_spec.rb' - 'rubocop/cop/gitlab/finder_with_find_by.rb' diff --git a/app/assets/javascripts/diffs/components/tree_list.vue b/app/assets/javascripts/diffs/components/tree_list.vue index 4cc60df0ecb..b9bfceee6b4 100644 --- a/app/assets/javascripts/diffs/components/tree_list.vue +++ b/app/assets/javascripts/diffs/components/tree_list.vue @@ -170,7 +170,7 @@ export default { > diff --git a/app/assets/javascripts/environments/components/kubernetes_overview.vue b/app/assets/javascripts/environments/components/kubernetes_overview.vue index a849adfc755..b9e6548f640 100644 --- a/app/assets/javascripts/environments/components/kubernetes_overview.vue +++ b/app/assets/javascripts/environments/components/kubernetes_overview.vue @@ -6,6 +6,7 @@ import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import KubernetesAgentInfo from './kubernetes_agent_info.vue'; import KubernetesPods from './kubernetes_pods.vue'; import KubernetesTabs from './kubernetes_tabs.vue'; +import KubernetesStatusBar from './kubernetes_status_bar.vue'; export default { components: { @@ -15,6 +16,7 @@ export default { KubernetesAgentInfo, KubernetesPods, KubernetesTabs, + KubernetesStatusBar, }, inject: ['kasTunnelUrl'], props: { @@ -32,6 +34,9 @@ export default { return { isVisible: false, error: '', + hasFailedState: false, + podsLoading: false, + workloadTypesLoading: false, }; }, computed: { @@ -52,6 +57,14 @@ export default { }, }; }, + clusterHealthStatus() { + const clusterDataLoading = this.podsLoading || this.workloadTypesLoading; + if (clusterDataLoading) { + return ''; + } + + return this.hasFailedState ? 'error' : 'success'; + }, }, methods: { toggleCollapse() { @@ -82,6 +95,7 @@ export default {

diff --git a/app/assets/javascripts/environments/components/kubernetes_pods.vue b/app/assets/javascripts/environments/components/kubernetes_pods.vue index a153331ee58..aded3a4d0c4 100644 --- a/app/assets/javascripts/environments/components/kubernetes_pods.vue +++ b/app/assets/javascripts/environments/components/kubernetes_pods.vue @@ -3,6 +3,7 @@ import { GlLoadingIcon } from '@gitlab/ui'; import { GlSingleStat } from '@gitlab/ui/dist/charts'; import { s__ } from '~/locale'; import k8sPodsQuery from '../graphql/queries/k8s_pods.query.graphql'; +import { PHASE_RUNNING, PHASE_PENDING, PHASE_SUCCEEDED, PHASE_FAILED } from '../constants'; export default { components: { @@ -25,6 +26,9 @@ export default { this.error = error; this.$emit('cluster-error', this.error); }, + watchLoading(isLoading) { + this.$emit('loading', isLoading); + }, }, }, props: { @@ -42,41 +46,39 @@ export default { error: '', }; }, - computed: { podStats() { if (!this.k8sPods) return null; return [ { - // eslint-disable-next-line @gitlab/require-i18n-strings - value: this.getPodsByPhase('Running'), + value: this.countPodsByPhase(PHASE_RUNNING), title: this.$options.i18n.runningPods, }, { - // eslint-disable-next-line @gitlab/require-i18n-strings - value: this.getPodsByPhase('Pending'), + value: this.countPodsByPhase(PHASE_PENDING), title: this.$options.i18n.pendingPods, }, { - // eslint-disable-next-line @gitlab/require-i18n-strings - value: this.getPodsByPhase('Succeeded'), + value: this.countPodsByPhase(PHASE_SUCCEEDED), title: this.$options.i18n.succeededPods, }, { - // eslint-disable-next-line @gitlab/require-i18n-strings - value: this.getPodsByPhase('Failed'), + value: this.countPodsByPhase(PHASE_FAILED), title: this.$options.i18n.failedPods, }, ]; }, loading() { - return this.$apollo.queries.k8sPods.loading; + return this.$apollo?.queries?.k8sPods?.loading; }, }, methods: { - getPodsByPhase(phase) { + countPodsByPhase(phase) { const filteredPods = this.k8sPods.filter((item) => item.status.phase === phase); + if (phase === PHASE_FAILED && filteredPods.length) { + this.$emit('failed'); + } return filteredPods.length; }, }, diff --git a/app/assets/javascripts/environments/components/kubernetes_status_bar.vue b/app/assets/javascripts/environments/components/kubernetes_status_bar.vue new file mode 100644 index 00000000000..94cd7438e46 --- /dev/null +++ b/app/assets/javascripts/environments/components/kubernetes_status_bar.vue @@ -0,0 +1,39 @@ + + diff --git a/app/assets/javascripts/environments/components/kubernetes_summary.vue b/app/assets/javascripts/environments/components/kubernetes_summary.vue index 85fc1c1a07d..b00e82809f6 100644 --- a/app/assets/javascripts/environments/components/kubernetes_summary.vue +++ b/app/assets/javascripts/environments/components/kubernetes_summary.vue @@ -32,6 +32,12 @@ export default { error(error) { this.$emit('cluster-error', error); }, + result() { + this.checkFailed(); + }, + watchLoading(isLoading) { + this.$emit('loading', isLoading); + }, }, }, props: { @@ -46,7 +52,7 @@ export default { }, computed: { summaryLoading() { - return this.$apollo.queries.k8sWorkloads.loading; + return this.$apollo?.queries?.k8sWorkloads?.loading; }, summaryCount() { return this.k8sWorkloads ? Object.values(this.k8sWorkloads).flat().length : 0; @@ -128,6 +134,17 @@ export default { }; }, }, + methods: { + checkFailed() { + const failed = this.summaryObjects.some((workloadType) => { + return workloadType.items?.failed?.length > 0; + }); + + if (failed) { + this.$emit('failed'); + } + }, + }, i18n: { summaryTitle: s__('Environment|Summary'), deployments: s__('Environment|Deployments'), diff --git a/app/assets/javascripts/environments/components/kubernetes_tabs.vue b/app/assets/javascripts/environments/components/kubernetes_tabs.vue index b900c23b2b7..4492d209e3b 100644 --- a/app/assets/javascripts/environments/components/kubernetes_tabs.vue +++ b/app/assets/javascripts/environments/components/kubernetes_tabs.vue @@ -134,7 +134,12 @@ export default {