Skip to content

Commit 82b2ca1

Browse files
committed
feat: add onContextsHealth to api
Signed-off-by: Philippe Martin <[email protected]>
1 parent 9f30eb0 commit 82b2ca1

13 files changed

+40
-69
lines changed

packages/api/src/kubernetes-dashboard-extension-api.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,24 @@
1818

1919
import type { Disposable } from '@podman-desktop/api';
2020

21+
export interface ContextHealth {
22+
contextName: string;
23+
// is the health of the cluster being checked?
24+
checking: boolean;
25+
// was the health check successful?
26+
reachable: boolean;
27+
// is one of the informers marked offline (disconnect after being connected, the cache still being populated)
28+
offline: boolean;
29+
// description in case of error (other than health check)
30+
// currently detected errors:
31+
// - user.exec.command not found
32+
errorMessage?: string;
33+
}
34+
35+
export interface ContextsHealthsInfo {
36+
healths: ContextHealth[];
37+
}
38+
2139
export interface AvailableContextsInfo {
2240
contextNames: string[];
2341
}
@@ -31,6 +49,7 @@ export interface CurrentContextInfo {
3149
* The subscriber for the events emitted by the Kubernetes Dashboard extension.
3250
*/
3351
export interface KubernetesDashboardSubscriber {
52+
onContextsHealth(listener: (event: ContextsHealthsInfo) => void): Disposable;
3453
onAvailableContexts(listener: (event: AvailableContextsInfo) => void): Disposable;
3554
onCurrentContext(listener: (event: CurrentContextInfo) => void): Disposable;
3655
/**

packages/channels/src/channels.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import type { PortForwardApi } from './interface/port-forward-api';
2424
import type { SubscribeApi } from './interface/subscribe-api';
2525
import type { SystemApi } from './interface/system-api';
2626
import type { ActiveResourcesCountInfo } from './model/active-resources-count-info';
27-
import type { ContextsHealthsInfo } from './model/contexts-healths-info';
2827
import type { ContextsPermissionsInfo } from './model/contexts-permissions-info';
2928
import type { EndpointsInfo } from './model/endpoints-info';
3029
import type { KubernetesProvidersInfo } from './model/kubernetes-providers-info';
@@ -36,7 +35,11 @@ import type { ResourceEventsInfo } from './model/resource-events-info';
3635
import type { ResourcesCountInfo } from './model/resources-count-info';
3736
import type { UpdateResourceInfo } from './model/update-resource-info';
3837
import { createRpcChannel } from '@kubernetes-dashboard/rpc';
39-
import type { AvailableContextsInfo, CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
38+
import type {
39+
AvailableContextsInfo,
40+
ContextsHealthsInfo,
41+
CurrentContextInfo,
42+
} from '@podman-desktop/kubernetes-dashboard-extension-api';
4043

4144
// RPC channels (used by the webview to send requests to the extension)
4245
export const API_CONTEXTS = createRpcChannel<ContextsApi>('ContextsApi');

packages/channels/src/model/contexts-healths-info.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

packages/channels/src/model/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ export * from './active-resources-count-info';
2020
export * from './context-resource-events';
2121
export * from './context-resources-details';
2222
export * from './context-resources-items';
23-
export * from './contexts-healths-info';
2423
export * from './contexts-permissions-info';
2524
export * from './endpoint';
2625
export * from './endpoints-info';
2726
export * from './endpoints-options';
28-
export * from './kubernetes-contexts-healths';
2927
export * from './kubernetes-contexts-permissions';
3028
export * from './kubernetes-providers-info';
3129
export * from './kubernetes-resource-count';

packages/channels/src/model/kubernetes-contexts-healths.ts

Lines changed: 0 additions & 31 deletions
This file was deleted.

packages/extension/src/dashboard-extension.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
API_SUBSCRIBE,
3838
API_SYSTEM,
3939
AVAILABLE_CONTEXTS,
40+
CONTEXTS_HEALTHS,
4041
CURRENT_CONTEXT,
4142
IDisposable,
4243
} from '@kubernetes-dashboard/channels';
@@ -50,6 +51,7 @@ import { KubernetesProvidersManager } from '/@/manager/kubernetes-providers';
5051
import { ChannelSubscriber } from '/@/subscriber/channel-subscriber';
5152
import type {
5253
AvailableContextsInfo,
54+
ContextsHealthsInfo,
5355
CurrentContextInfo,
5456
KubernetesDashboardExtensionApi,
5557
KubernetesDashboardSubscriber,
@@ -135,6 +137,9 @@ export class DashboardExtension {
135137
const subscriber = new ApiSubscriber();
136138
this.#contextsStatesDispatcher.addSubscriber(subscriber);
137139
return {
140+
onContextsHealth: (listener: (event: ContextsHealthsInfo) => void): IDisposable => {
141+
return subscriber.subscribe(CONTEXTS_HEALTHS, undefined, listener);
142+
},
138143
onAvailableContexts: (listener: (event: AvailableContextsInfo) => void): IDisposable => {
139144
return subscriber.subscribe(AVAILABLE_CONTEXTS, undefined, listener);
140145
},

packages/extension/src/dispatcher/contexts-healths-dispatcher.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ import { inject, injectable } from 'inversify';
2020
import type { DispatcherObject } from './util/dispatcher-object';
2121
import { AbsDispatcherObjectImpl } from './util/dispatcher-object';
2222
import { ContextsManager } from '/@/manager/contexts-manager';
23-
import { CONTEXTS_HEALTHS, type ContextHealth, type ContextsHealthsInfo } from '@kubernetes-dashboard/channels';
23+
import { CONTEXTS_HEALTHS } from '@kubernetes-dashboard/channels';
24+
import { ContextHealth, ContextsHealthsInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
2425

2526
@injectable()
2627
export class ContextsHealthsDispatcher

packages/webview/src/component/connection/CheckConnection.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ import { assert, beforeEach, expect, test, vi } from 'vitest';
2323

2424
import { StatesMocks } from '/@/tests/state-mocks';
2525
import { FakeStateObject } from '/@/state/util/fake-state-object.svelte';
26-
import { type ContextsHealthsInfo, API_CONTEXTS, type ContextsApi } from '@kubernetes-dashboard/channels';
26+
import { API_CONTEXTS, type ContextsApi } from '@kubernetes-dashboard/channels';
2727
import CheckConnection from './CheckConnection.svelte';
2828
import userEvent from '@testing-library/user-event';
2929
import { RemoteMocks } from '/@/tests/remote-mocks';
30-
import type { CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
30+
import type { ContextsHealthsInfo, CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
3131

3232
const statesMocks = new StatesMocks();
3333
const remoteMocks = new RemoteMocks();

packages/webview/src/component/connection/CurrentContextConnectionBadge.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ import '@testing-library/jest-dom/vitest';
2121
import { render, screen } from '@testing-library/svelte';
2222
import { tick } from 'svelte';
2323
import { beforeEach, describe, expect, test, vi } from 'vitest';
24-
import type { ContextsHealthsInfo } from '@kubernetes-dashboard/channels';
2524
import { StatesMocks } from '/@/tests/state-mocks';
2625
import { FakeStateObject } from '/@/state/util/fake-state-object.svelte';
2726
import CurrentContextConnectionBadge from './CurrentContextConnectionBadge.svelte';
28-
import type { CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
27+
import type { ContextsHealthsInfo, CurrentContextInfo } from '@podman-desktop/kubernetes-dashboard-extension-api';
2928

3029
const statesMocks = new StatesMocks();
3130

packages/webview/src/component/connection/CurrentContextConnectionBadge.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import type { Unsubscriber } from 'svelte/store';
44
55
import Label from '/@/component/label/Label.svelte';
66
import { States } from '/@/state/states';
7-
import type { ContextHealth } from '@kubernetes-dashboard/channels';
87
import { Spinner } from '@podman-desktop/ui-svelte';
8+
import type { ContextHealth } from '@podman-desktop/kubernetes-dashboard-extension-api';
99
1010
const states = getContext<States>(States);
1111
const currentContext = states.stateCurrentContextInfoUI;

0 commit comments

Comments
 (0)