Skip to content

OCPNETUI-58: Add Health and Backend health columns to Services and Routes list pages - #457

Open
sjd78 wants to merge 1 commit into
openshift:mainfrom
sjd78:service_status_column
Open

OCPNETUI-58: Add Health and Backend health columns to Services and Routes list pages#457
sjd78 wants to merge 1 commit into
openshift:mainfrom
sjd78:service_status_column

Conversation

@sjd78

@sjd78 sjd78 commented Jul 30, 2026

Copy link
Copy Markdown

Summary of changes

  • Update the Service list page to show the health of the service endpoints based on EndpointSlices (discovery.k8s.io/v1).

  • Update the Route list page to show the health of the backend service endpoints based on the EndpointSlices (discovery.k8s.io/v1) of the Service the Route is targeting.

  • The useEndpointHealth hook watches EndpointSlices (discovery.k8s.io/v1) and aggregates endpoint readiness into a per-service health map.

  • Watch hooks that create an aggregated view object to include health status along with the base entity data are used to simplify the component code.

  • Specialized row cell components are used to display the health status in the list pages based on the aggregated view object.

  • Sorting on the health columns ascending is Healthy -> Degraded -> Down -> Unknown.

Demo Video

Screencast.From.2026-07-30.17-37-16.mp4

Screenshots

Service list with health:
image

image

Routes list with health:
image

image

Summary by CodeRabbit

  • New Features
    • Added backend health indicators to the routes and services lists.
    • Shows Healthy/Degraded/Down/Unknown endpoint readiness with ready/total counts, including support for external-name services.
    • Introduced sortable health columns and enhanced health status display with tooltips and accessible labels.
  • Localization
    • Added new localized strings for backend health and endpoint readiness (including “Unknown” states) across supported languages.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot

openshift-ci-robot commented Jul 30, 2026

Copy link
Copy Markdown

@sjd78: This pull request references OCPNETUI-58 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary of changes:

  • Update the Service list page to show the health of the service endpoints based on EndpointSlices (discovery.k8s.io/v1).

  • Update the Route list page to show the health of the backend service endpoints based on the EndpointSlices (discovery.k8s.io/v1) of the Service the Route is targeting.

  • The useEndpointHealth hook watches EndpointSlices (discovery.k8s.io/v1) and aggregates endpoint readiness into a per-service health map.

  • Watch hooks that create an aggregated view object to include health status along with the base entity data are used to simplify the component code.

  • Specialized row cell components are used to display the health status in the list pages based on the aggregated view object.

  • Sorting on the health columns ascending is Healthy -> Degraded -> Down -> Unknown.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 30, 2026
@sjd78
sjd78 requested a review from pcbailey July 30, 2026 01:22
@openshift-ci
openshift-ci Bot requested review from Parthivk100 and lkladnit July 30, 2026 01:22
@openshift-ci

openshift-ci Bot commented Jul 30, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: sjd78

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 30, 2026
@sjd78
sjd78 removed the request for review from lkladnit July 30, 2026 01:22
@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@sjd78, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 41 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: fc3b1bc1-6942-4be5-a0bf-5387ba65aedf

📥 Commits

Reviewing files that changed from the base of the PR and between a62f879 and aac371a.

📒 Files selected for processing (22)
  • locales/en/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json
  • locales/fr/plugin__networking-console-plugin.json
  • locales/ja/plugin__networking-console-plugin.json
  • locales/ko/plugin__networking-console-plugin.json
  • locales/zh/plugin__networking-console-plugin.json
  • src/utils/components/Icons/ServiceEndpointStatusIcon.tsx
  • src/utils/constants/services.ts
  • src/utils/hooks/useEndpointHealth.ts
  • src/utils/types.ts
  • src/utils/utils/endpointSlices.ts
  • src/utils/utils/sorting.ts
  • src/views/routes/list/RoutesList.tsx
  • src/views/routes/list/components/RouteBackendHealthCell.tsx
  • src/views/routes/list/components/RouteRow.tsx
  • src/views/routes/list/hooks/useRouteColumns.ts
  • src/views/routes/list/hooks/useRouteListViewData.ts
  • src/views/services/list/ServiceList.tsx
  • src/views/services/list/components/ServiceHealthCell.tsx
  • src/views/services/list/components/ServiceRow.tsx
  • src/views/services/list/hooks/useServiceColumn.tsx
  • src/views/services/list/hooks/useServiceListViewData.ts

Walkthrough

EndpointSlice readiness is aggregated per service and joined into route and service list data. New health columns render status, readiness counts, tooltips, sorting, and localized messages for Healthy, Degraded, Down, Unknown, and ExternalName states.

Changes

Endpoint health UI

Layer / File(s) Summary
Health model and aggregation
src/utils/types.ts, src/utils/utils/endpointSlices.ts, src/utils/hooks/useEndpointHealth.ts
EndpointSlice endpoint shapes and health status types are defined, then watched and aggregated into per-service readiness counts.
Health presentation and sorting
src/utils/components/Icons/ServiceEndpointStatusIcon.tsx, src/utils/utils/serviceEndpointStatus.tsx, src/utils/utils/sorting.ts, src/utils/constants/services.ts
Health states are mapped to localized status icons and readiness counts, with sortable status ordering and ExternalName support.
Service health data and table
src/views/services/list/...
Services are enriched with endpoint health and displayed in a sortable health column, including ExternalName handling.
Route health data and table
src/views/routes/list/...
Routes are enriched with backend health and displayed in a sortable health column with status icons, tooltips, and readiness counts.
Health status localization
locales/*/plugin__networking-console-plugin.json
Health, readiness, and unknown-state localization keys are added across six locale files.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested reviewers: parthivk100

Sequence Diagram(s)

sequenceDiagram
  participant EndpointSliceAPI
  participant useEndpointHealth
  participant useRouteListViewData
  participant useServiceListViewData
  participant RoutesList
  participant ServiceList

  EndpointSliceAPI->>useEndpointHealth: EndpointSliceKind[] readiness data
  useEndpointHealth-->>useRouteListViewData: healthMap
  useEndpointHealth-->>useServiceListViewData: healthMap
  useRouteListViewData-->>RoutesList: RouteWithHealth[]
  useServiceListViewData-->>ServiceList: ServiceWithHealth[]
  RoutesList-->>RoutesList: Render backend health column
  ServiceList-->>ServiceList: Render health column
Loading
🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed PR changes only locale and TS source files; diff shows no test files or Ginkgo titles, so there are no test names to evaluate.
Test Structure And Quality ✅ Passed No Ginkgo/spec test files were changed; the diff is source/locales only, so this test-structure check is not applicable.
Microshift Test Compatibility ✅ Passed No Ginkgo e2e test files or test definitions were added/changed in this PR, so MicroShift-specific test compatibility is not implicated.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No *_test.go files or Ginkgo declarations were added; the diff is limited to UI/data/localization code, so SNO test compatibility is not applicable.
Topology-Aware Scheduling Compatibility ✅ Passed The commit only changes frontend UI, hooks, utilities, and locale JSON; no manifests/controllers or pod-scheduling constraints were added.
Ote Binary Stdout Contract ✅ Passed Changed files are TS/JSON UI code only; no main/init/TestMain/suite setup or stdout logging found in PR files.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo/e2e test files were added; the changed files are UI/source/locales only and contain no IPv4 or external-connectivity assumptions.
No-Weak-Crypto ✅ Passed PASS: The PR only adds endpoint-health aggregation/UI code; no MD5/SHA1/DES/RC4/3DES/Blowfish/ECB, custom crypto, or secret/token comparisons found.
Container-Privileges ✅ Passed No container/K8s manifests changed in this PR, and the full diff has no privileged, hostPID, hostNetwork, hostIPC, or allowPrivilegeEscalation settings.
No-Sensitive-Data-In-Logs ✅ Passed No new logging calls or sensitive-data dumps appear in the changed files; the additions are UI labels, hooks, and helpers only.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding Health and Backend health columns to Services and Routes list pages.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@locales/es/plugin__networking-console-plugin.json`:
- Line 70: Translate the new endpoint-health labels and tooltips from English
into appropriate Spanish, French, and Japanese values. Update all listed entries
in locales/es/plugin__networking-console-plugin.json at lines 70, 123, 138,
174-175, and 423-425; locales/fr/plugin__networking-console-plugin.json at lines
70, 123, 138, 174-175, and 423-425; and
locales/ja/plugin__networking-console-plugin.json at lines 68, 121, 136,
172-173, and 421-423. Preserve the {{ready}} and {{total}} interpolation
placeholders exactly.

In `@locales/ko/plugin__networking-console-plugin.json`:
- Line 68: Translate every newly added health label and status in both locale
files: locales/ko/plugin__networking-console-plugin.json at lines 68, 121, 136,
172-173, and 421-423, and locales/zh/plugin__networking-console-plugin.json at
the same ranges. Replace English values with the appropriate Korean or Chinese
translations while preserving the {{ready}} and {{total}} placeholders exactly.

In `@src/utils/components/Icons/UnknownStatusIcon.tsx`:
- Around line 7-9: Replace the inline style in UnknownStatusIcon with a
stylesheet-backed class containing the existing gray color. Also update
RouteBackendHealthCell at
src/views/routes/list/components/RouteBackendHealthCell.tsx:87 to move its flex
layout declarations into a stylesheet-backed class, preserving the current
layout behavior and CSP compliance.

In `@src/utils/hooks/useEndpointHealth.ts`:
- Around line 31-35: Update the endpoint readiness check in useEndpointHealth so
an omitted endpoint.conditions.ready is treated as true, while explicitly false
remains not-ready. Preserve the existing total and ready counter updates for
each endpoint.

In `@src/views/routes/list/hooks/useRouteColumns.ts`:
- Around line 37-41: Update the backend-health column definition in
useRouteColumns to add a sortable transform that maps status values to the
required order: Healthy, Degraded, Down, then Unknown. Use the transformed
ranking for sorting instead of the raw _backendHealth.status string while
preserving the existing column metadata.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: f7e61a5e-0390-4b12-96af-70213127567d

📥 Commits

Reviewing files that changed from the base of the PR and between 2d8f85d and 77adc0a.

📒 Files selected for processing (19)
  • locales/en/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json
  • locales/fr/plugin__networking-console-plugin.json
  • locales/ja/plugin__networking-console-plugin.json
  • locales/ko/plugin__networking-console-plugin.json
  • locales/zh/plugin__networking-console-plugin.json
  • src/utils/components/Icons/UnknownStatusIcon.tsx
  • src/utils/hooks/useEndpointHealth.ts
  • src/utils/types.ts
  • src/views/routes/list/RoutesList.tsx
  • src/views/routes/list/components/RouteBackendHealthCell.tsx
  • src/views/routes/list/components/RouteRow.tsx
  • src/views/routes/list/hooks/useRouteColumns.ts
  • src/views/routes/list/hooks/useRouteListViewData.ts
  • src/views/services/list/ServiceList.tsx
  • src/views/services/list/components/ServiceHealthCell.tsx
  • src/views/services/list/components/ServiceRow.tsx
  • src/views/services/list/hooks/useServiceColumn.tsx
  • src/views/services/list/hooks/useServiceListViewData.ts

Comment thread locales/es/plugin__networking-console-plugin.json
Comment thread locales/ko/plugin__networking-console-plugin.json
Comment thread src/utils/components/Icons/UnknownStatusIcon.tsx Outdated
Comment thread src/utils/hooks/useEndpointHealth.ts Outdated
Comment thread src/views/routes/list/hooks/useRouteColumns.ts
@sjd78
sjd78 force-pushed the service_status_column branch from 77adc0a to 541ee10 Compare July 30, 2026 15:04

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@locales/fr/plugin__networking-console-plugin.json`:
- Line 70: Translate the newly added networking health-related values in the
French locale, including “Backend health” and the entries at the referenced
locations for the health column, tooltips, and accessible labels. Replace
English duplicates with accurate French translations while preserving the
existing JSON keys and structure.

In `@src/views/routes/list/hooks/useRouteListViewData.ts`:
- Around line 41-42: Update the returned state in useRouteListViewData so
healthError does not populate error; only routesError should block the Routes
list. Preserve health loading/unknown handling through the existing health data
and loaded state without treating endpoint-health watch failures as route-list
failures.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a7163d5c-a262-4936-b428-5e1ef76ae41b

📥 Commits

Reviewing files that changed from the base of the PR and between 77adc0a and 541ee10.

📒 Files selected for processing (18)
  • locales/en/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json
  • locales/fr/plugin__networking-console-plugin.json
  • locales/ja/plugin__networking-console-plugin.json
  • locales/ko/plugin__networking-console-plugin.json
  • locales/zh/plugin__networking-console-plugin.json
  • src/utils/hooks/useEndpointHealth.ts
  • src/utils/types.ts
  • src/views/routes/list/RoutesList.tsx
  • src/views/routes/list/components/RouteBackendHealthCell.tsx
  • src/views/routes/list/components/RouteRow.tsx
  • src/views/routes/list/hooks/useRouteColumns.ts
  • src/views/routes/list/hooks/useRouteListViewData.ts
  • src/views/services/list/ServiceList.tsx
  • src/views/services/list/components/ServiceHealthCell.tsx
  • src/views/services/list/components/ServiceRow.tsx
  • src/views/services/list/hooks/useServiceColumn.tsx
  • src/views/services/list/hooks/useServiceListViewData.ts
🚧 Files skipped from review as they are similar to previous changes (5)
  • locales/ja/plugin__networking-console-plugin.json
  • locales/zh/plugin__networking-console-plugin.json
  • locales/ko/plugin__networking-console-plugin.json
  • locales/en/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json

Comment thread locales/fr/plugin__networking-console-plugin.json
Comment thread src/views/routes/list/hooks/useRouteListViewData.ts Outdated
@sjd78
sjd78 force-pushed the service_status_column branch from 541ee10 to 0e7f447 Compare July 30, 2026 15:22

@pcbailey pcbailey left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your help!

Comment thread src/utils/hooks/useEndpointHealth.ts Outdated
* -> endpoints[].conditions.ready
* -> aggregate ready/total per service name
*/
const aggregateEndpointHealth = (

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Utility functions should go in a utils file.

* -> endpoints[].conditions.ready -> aggregate ready/total
*/

type HealthIconConfig = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Types other than the props type for a component should go in a types file and utility functions should go in a utils file. Those files should be inside a utils directory in the component directory.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm refactoring the Cells to use a new "ServiceEndpointStatusIcon". Should look better.


type HealthIconConfig = {
ariaLabel: string;
icon: React.ReactElement;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please import ReactElement directly.


const getHealthIconConfig = (
health: ServiceEndpointHealth | undefined,
t: ReturnType<typeof useNetworkingTranslation>['t'],

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a benefit to using this return type instead of TFunction?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really. It ends up being the same type anyway.

import { useEndpointHealth } from '@utils/hooks/useEndpointHealth';
import { RouteKind, ServiceEndpointHealth } from '@utils/types';

export type RouteWithHealth = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move to a types file.

* -> endpoints[].conditions.ready -> aggregate ready/total
*/

type HealthIconConfig = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If these are the same as the type and function in RouteBackendHealthCell please move them to centralized types and utils files. If not, move them to types and utils files for this component.

const ServiceHealthCell: FC<ServiceHealthCellProps> = ({ obj }) => {
const { t } = useNetworkingTranslation();

const health = obj.spec?.type === 'ExternalName' ? 'ExternalName' : obj._health;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please extract 'ExternalName' to a constant. I would create a services.ts file under src/utils/constants.

@sjd78 sjd78 Jul 30, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorting doesn't need to know about ExternalName

The Cell is supposed to display an 'ExternalName' type service as "Unknown".

Updated to handle both.


import { ServiceWithHealth } from './useServiceListViewData';

const HEALTH_SORT_ORDER: Record<EndpointHealthStatus, number> = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go in a constants file for this hook.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved to src/utils/utils/sorting.ts

[EndpointHealthStatus.Unknown]: 3,
};

const getHealthSortValue = (svc: ServiceWithHealth): number =>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should go in a utils file for this hook.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved to src/utils/utils/sorting.ts and am now sharing the status sort function between the service and route columns

import { getName } from '@utils/resources/shared';
import { ServiceEndpointHealth } from '@utils/types';

export type ServiceWithHealth = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go in a types file.

@sjd78
sjd78 force-pushed the service_status_column branch from 0e7f447 to a62f879 Compare July 30, 2026 21:32

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/utils/utils/serviceEndpointStatus.tsx`:
- Line 20: Export the getHealthIconConfig helper so ServiceEndpointStatusIcon
can import and use it, resolving the module-private and unused-helper issue
without changing its existing behavior.

In `@src/views/routes/list/components/RouteRow.tsx`:
- Line 16: Import RouteWithHealth from `@utils/types` in RouteRow.tsx and
RoutesList.tsx instead of the hook module, and update useRouteListViewData.ts to
export only useRouteListViewData.

In `@src/views/services/list/hooks/useServiceListViewData.ts`:
- Around line 48-54: Update the returned loaded state in useServiceListViewData
so Services readiness depends only on servicesLoaded, not healthLoaded. Keep
healthError and healthLoaded available for display handling, while ensuring
EndpointSlice health failures cannot leave the Services list loading
indefinitely.

In `@src/views/services/list/ServiceList.tsx`:
- Line 36: Update the useServiceListViewData destructuring in ServiceList to
retain healthError, then combine it with loadError when passing the error prop
to ListEmptyState so either service-watch or EndpointSlice watch failures are
surfaced.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c777bfd5-8271-4b1f-b426-7348f58292c2

📥 Commits

Reviewing files that changed from the base of the PR and between 541ee10 and a62f879.

📒 Files selected for processing (23)
  • locales/en/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json
  • locales/fr/plugin__networking-console-plugin.json
  • locales/ja/plugin__networking-console-plugin.json
  • locales/ko/plugin__networking-console-plugin.json
  • locales/zh/plugin__networking-console-plugin.json
  • src/utils/components/Icons/ServiceEndpointStatusIcon.tsx
  • src/utils/constants/services.ts
  • src/utils/hooks/useEndpointHealth.ts
  • src/utils/types.ts
  • src/utils/utils/endpointSlices.ts
  • src/utils/utils/serviceEndpointStatus.tsx
  • src/utils/utils/sorting.ts
  • src/views/routes/list/RoutesList.tsx
  • src/views/routes/list/components/RouteBackendHealthCell.tsx
  • src/views/routes/list/components/RouteRow.tsx
  • src/views/routes/list/hooks/useRouteColumns.ts
  • src/views/routes/list/hooks/useRouteListViewData.ts
  • src/views/services/list/ServiceList.tsx
  • src/views/services/list/components/ServiceHealthCell.tsx
  • src/views/services/list/components/ServiceRow.tsx
  • src/views/services/list/hooks/useServiceColumn.tsx
  • src/views/services/list/hooks/useServiceListViewData.ts
🚧 Files skipped from review as they are similar to previous changes (6)
  • locales/en/plugin__networking-console-plugin.json
  • src/utils/types.ts
  • locales/zh/plugin__networking-console-plugin.json
  • locales/fr/plugin__networking-console-plugin.json
  • locales/es/plugin__networking-console-plugin.json
  • locales/ja/plugin__networking-console-plugin.json

Comment thread src/utils/utils/serviceEndpointStatus.tsx Outdated
Comment thread src/views/routes/list/components/RouteRow.tsx Outdated
Comment thread src/views/services/list/hooks/useServiceListViewData.ts
Comment thread src/views/services/list/ServiceList.tsx
@sjd78
sjd78 force-pushed the service_status_column branch from a62f879 to 9943ce3 Compare July 30, 2026 21:46
…utes list pages

Summary of changes:

- Update the `Service` list page to show the health of the service endpoints
  based on `EndpointSlices` (discovery.k8s.io/v1).

- Update the `Route` list page to show the health of the backend service endpoints
  based on the `EndpointSlices` (discovery.k8s.io/v1) of the `Service` the `Route`
  is targeting.

- The `useEndpointHealth` hook watches `EndpointSlices` (discovery.k8s.io/v1)
  and aggregates endpoint readiness into a per-service health map.

- Watch hooks that create an aggregated view object to include health status
  along with the base entity data are used to simplify the component code.

- Specialized row cell components are used to display the health status in the list
  pages based on the aggregated view object.

- Sorting on the health columns ascending is Healthy -> Degraded -> Down -> Unknown.

Signed-off-by: Scott J Dickerson <sdickers@redhat.com>
@sjd78
sjd78 force-pushed the service_status_column branch from 9943ce3 to aac371a Compare July 30, 2026 21:51
@pcbailey

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jul 31, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling required tests:
/test e2e

@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

@sjd78: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 31, 2026
@openshift-ci

openshift-ci Bot commented Jul 31, 2026

Copy link
Copy Markdown

PR needs rebase.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants