This is an automated email from the ASF dual-hosted git repository. marat pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit 8c36fec42bbaf0dcbf1bdcc9dbd1449ef0602ab4 Author: Marat Gubaidullin <[email protected]> AuthorDate: Mon Dec 8 11:00:51 2025 -0500 Prepare for 4.14.3 --- .../main/webui/src/karavan/api/DiagnosticsApi.tsx | 70 ---------------------- .../src/main/webui/src/karavan/api/SystemApi.tsx | 50 +++++++++++++++- .../features/system/app-props/AppPropsRow.tsx | 6 +- .../features/system/app-props/AppPropsTable.tsx | 4 +- .../karavan/features/system/env-vars/EnvVarRow.tsx | 4 +- .../features/system/env-vars/EnvVarsTable.tsx | 4 +- .../webui/src/karavan/models/DiagnosticsStore.ts | 28 --------- .../webui/src/karavan/services/SystemService.ts | 16 +++-- .../main/webui/src/karavan/stores/SystemStore.ts | 13 +++- 9 files changed, 81 insertions(+), 114 deletions(-) diff --git a/karavan-app/src/main/webui/src/karavan/api/DiagnosticsApi.tsx b/karavan-app/src/main/webui/src/karavan/api/DiagnosticsApi.tsx deleted file mode 100644 index aaf9a097..00000000 --- a/karavan-app/src/main/webui/src/karavan/api/DiagnosticsApi.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import axios from "axios"; -import {AuthApi} from "@api/auth/AuthApi"; -import {ErrorEventBus} from "@bus/ErrorEventBus"; -import {CamelStatus} from "@models/ProjectModels"; -import {Buffer} from "buffer"; - -axios.defaults.headers.common['Accept'] = 'application/json'; -axios.defaults.headers.common['Content-Type'] = 'application/json'; -const instance = AuthApi.getInstance(); - -export class DiagnosticsApi { - - static async getAllCamelStatuses(after: (statuses: CamelStatus[]) => void) { - instance.get('/ui/status/camel') - .then(res => { - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - ErrorEventBus.sendApiError(err); - }); - } - - // Env Vars - static async getEnvVars(after: (envVars: string[]) => void) { - instance.get('/ui/diagnostics/env-vars', {headers: {'Accept': 'application/json'}}) - .then(res => { - console.log(res) - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - ErrorEventBus.sendApiError(err); - }); - } - - static async getEnvVarValue(name: string, after: (val: string) => void) { - instance.get('/ui/diagnostics/env-vars/' + Buffer.from(name).toString('base64'), {headers: {'Accept': 'application/json'}}) - .then(res => { - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - ErrorEventBus.sendApiError(err); - }); - } - - // Application Properties - static async getAppProps(after: (envVars: string[]) => void) { - instance.get('/ui/diagnostics/app-props', {headers: {'Accept': 'application/json'}}) - .then(res => { - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - ErrorEventBus.sendApiError(err); - }); - } - - static async getAppPropValue(name: string, after: (val: string) => void) { - instance.get('/ui/diagnostics/app-props/' + Buffer.from(name).toString('base64'), {headers: {'Accept': 'application/json'}}) - .then(res => { - if (res.status === 200) { - after(res.data); - } - }).catch(err => { - ErrorEventBus.sendApiError(err); - }); - } -} diff --git a/karavan-app/src/main/webui/src/karavan/api/SystemApi.tsx b/karavan-app/src/main/webui/src/karavan/api/SystemApi.tsx index 3bdd3bee..ccacb098 100644 --- a/karavan-app/src/main/webui/src/karavan/api/SystemApi.tsx +++ b/karavan-app/src/main/webui/src/karavan/api/SystemApi.tsx @@ -1,7 +1,8 @@ import axios from "axios"; import {AuthApi} from "@api/auth/AuthApi"; import {ErrorEventBus} from "@bus/ErrorEventBus"; -import {KubernetesConfigMap, KubernetesSecret} from "../models/SystemModels"; +import {KubernetesConfigMap, KubernetesSecret} from "@models/SystemModels"; +import {Buffer} from 'buffer'; axios.defaults.headers.common['Accept'] = 'application/json'; axios.defaults.headers.common['Content-Type'] = 'application/json'; @@ -144,4 +145,51 @@ export class SystemApi { ErrorEventBus.sendApiError(err); }); } + + // Env Vars + static async getEnvVars(after: (envVars: string[]) => void) { + instance.get('/ui/diagnostics/env-vars', {headers: {'Accept': 'application/json'}}) + .then(res => { + console.log(res) + if (res.status === 200) { + after(res.data); + } + }).catch(err => { + ErrorEventBus.sendApiError(err); + }); + } + + static async getEnvVarValue(name: string, after: (val: string) => void) { + instance.get('/ui/diagnostics/env-vars/' + Buffer.from(name).toString('base64'), {headers: {'Accept': 'application/json'}}) + .then(res => { + if (res.status === 200) { + after(res.data); + } + }).catch(err => { + ErrorEventBus.sendApiError(err); + }); + } + + // Application Properties + static async getAppProps(after: (envVars: string[]) => void) { + instance.get('/ui/diagnostics/app-props', {headers: {'Accept': 'application/json'}}) + .then(res => { + if (res.status === 200) { + after(res.data); + } + }).catch(err => { + ErrorEventBus.sendApiError(err); + }); + } + + static async getAppPropValue(name: string, after: (val: string) => void) { + instance.get('/ui/diagnostics/app-props/' + Buffer.from(name).toString('base64'), {headers: {'Accept': 'application/json'}}) + .then(res => { + if (res.status === 200) { + after(res.data); + } + }).catch(err => { + ErrorEventBus.sendApiError(err); + }); + } } diff --git a/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsRow.tsx b/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsRow.tsx index c088f64e..a34d4068 100644 --- a/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsRow.tsx +++ b/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsRow.tsx @@ -1,10 +1,10 @@ -import {Buffer} from "buffer"; import React, {useState} from 'react'; import {Button, TextInput} from '@patternfly/react-core'; import {Td, Tr} from '@patternfly/react-table'; import ShowIcon from "@patternfly/react-icons/dist/esm/icons/eye-icon"; import HideIcon from "@patternfly/react-icons/dist/esm/icons/eye-slash-icon"; -import {DiagnosticsApi} from "@api/DiagnosticsApi"; +import {SystemApi} from "@api/SystemApi"; +import {Buffer} from 'buffer'; export interface Props { name: string @@ -19,7 +19,7 @@ export function AppPropsRow(props: Props) { if (showValue) { setShowValue(false) } else { - DiagnosticsApi.getAppPropValue(props.name, (val: string) => { + SystemApi.getAppPropValue(props.name, (val: string) => { setValue(Buffer.from(val, 'base64').toString('binary')); setShowValue(true); }); diff --git a/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsTable.tsx b/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsTable.tsx index ac36e229..8fc6cc21 100644 --- a/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsTable.tsx +++ b/karavan-app/src/main/webui/src/karavan/features/system/app-props/AppPropsTable.tsx @@ -3,11 +3,11 @@ import {Bullseye, EmptyState, Spinner} from '@patternfly/react-core'; import {InnerScrollContainer, OuterScrollContainer, Table, Td, Th, Thead, Tr} from '@patternfly/react-table'; import {shallow} from "zustand/shallow"; import {AppPropsRow} from "./AppPropsRow"; -import {useDiagnosticsStore} from "@models/DiagnosticsStore"; +import {useSystemStore} from "@stores/SystemStore"; export function AppPropsTable() { - const [appProps, filter] = useDiagnosticsStore((s) => [s.appProps, s.filter], shallow); + const [appProps, filter] = useSystemStore((s) => [s.appProps, s.filter], shallow); function getTableBody() { return ( diff --git a/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarRow.tsx b/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarRow.tsx index 92f039c0..0b5868a1 100644 --- a/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarRow.tsx +++ b/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarRow.tsx @@ -4,7 +4,7 @@ import {Button, TextInput} from '@patternfly/react-core'; import {Td, Tr} from '@patternfly/react-table'; import ShowIcon from "@patternfly/react-icons/dist/esm/icons/eye-icon"; import HideIcon from "@patternfly/react-icons/dist/esm/icons/eye-slash-icon"; -import {DiagnosticsApi} from "@api/DiagnosticsApi"; +import {SystemApi} from "@api/SystemApi"; const DEFAULT_VALUE = "**********************" @@ -21,7 +21,7 @@ export function EnvVarRow(props: Props) { if (showValue) { setShowValue(false) } else { - DiagnosticsApi.getEnvVarValue(props.name, (val: string) => { + SystemApi.getEnvVarValue(props.name, (val: string) => { setValue(Buffer.from(val, 'base64').toString('binary')); setShowValue(true); }); diff --git a/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarsTable.tsx b/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarsTable.tsx index ebe56ae1..0933e863 100644 --- a/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarsTable.tsx +++ b/karavan-app/src/main/webui/src/karavan/features/system/env-vars/EnvVarsTable.tsx @@ -3,11 +3,11 @@ import {Bullseye, EmptyState, Spinner} from '@patternfly/react-core'; import {InnerScrollContainer, OuterScrollContainer, Table, Td, Th, Thead, Tr} from '@patternfly/react-table'; import {shallow} from "zustand/shallow"; import {EnvVarRow} from "./EnvVarRow"; -import {useDiagnosticsStore} from "@models/DiagnosticsStore"; +import {useSystemStore} from "@stores/SystemStore"; export function EnvVarsTable() { - const [envVars, filter] = useDiagnosticsStore((s) => [s.envVars, s.filter], shallow); + const [envVars, filter] = useSystemStore((s) => [s.envVars, s.filter], shallow); function getTableBody() { return ( diff --git a/karavan-app/src/main/webui/src/karavan/models/DiagnosticsStore.ts b/karavan-app/src/main/webui/src/karavan/models/DiagnosticsStore.ts deleted file mode 100644 index c1d03167..00000000 --- a/karavan-app/src/main/webui/src/karavan/models/DiagnosticsStore.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {createWithEqualityFn} from "zustand/traditional"; -import {shallow} from "zustand/shallow"; - -interface DiagnosticsState { - filter: string; - setFilter: (filter: string) => void; - envVars: string[]; - setEnvVars: (envVars: string[]) => void; - appProps: string[]; - setAppProps: (appProps: string[]) => void; -} - -export const useDiagnosticsStore = createWithEqualityFn<DiagnosticsState>((set) => ({ - filter: '', - envVars: [], - appProps: [], - setFilter: (filter: string)=> { - set({filter: filter}); - }, - setEnvVars: (envVars: string[]) => { - set({envVars: envVars}); - }, - setAppProps: (appProps: string[]) => { - set({appProps: appProps}); - } -}), shallow) - - diff --git a/karavan-app/src/main/webui/src/karavan/services/SystemService.ts b/karavan-app/src/main/webui/src/karavan/services/SystemService.ts index bfb1a5ec..5e97ee9c 100644 --- a/karavan-app/src/main/webui/src/karavan/services/SystemService.ts +++ b/karavan-app/src/main/webui/src/karavan/services/SystemService.ts @@ -1,15 +1,21 @@ -import {useSystemStore} from "../stores/SystemStore"; -import {SystemApi} from "../api/SystemApi"; -import {KubernetesConfigMap, KubernetesSecret} from "../models/SystemModels"; +import {useSystemStore} from "@stores/SystemStore"; +import {SystemApi} from "@api/SystemApi"; +import {KubernetesConfigMap, KubernetesSecret} from "@models/SystemModels"; export class SystemService { public static refresh() { SystemApi.getSecrets((secrets: KubernetesSecret[]) => { - useSystemStore.setState({secrets: secrets.sort((a, b) => a.name.localeCompare(b.name))}); + useSystemStore.setState({secrets: [...secrets].sort((a, b) => a.name.localeCompare(b.name))}); }); SystemApi.getConfigMaps((configmaps: KubernetesConfigMap[]) => { - useSystemStore.setState({configmaps: configmaps.sort((a, b) => a.name.localeCompare(b.name))}); + useSystemStore.setState({configmaps: [...configmaps].sort((a, b) => a.name.localeCompare(b.name))}); + }); + SystemApi.getEnvVars((envVars: string[]) => { + useSystemStore.setState({envVars: [...envVars].sort()}); + }); + SystemApi.getAppProps((appProps: string[]) => { + useSystemStore.setState({appProps: [...appProps].sort()}); }); } } \ No newline at end of file diff --git a/karavan-app/src/main/webui/src/karavan/stores/SystemStore.ts b/karavan-app/src/main/webui/src/karavan/stores/SystemStore.ts index bf10b36a..bd3ea094 100644 --- a/karavan-app/src/main/webui/src/karavan/stores/SystemStore.ts +++ b/karavan-app/src/main/webui/src/karavan/stores/SystemStore.ts @@ -2,7 +2,6 @@ import {createWithEqualityFn} from "zustand/traditional"; import {shallow} from "zustand/shallow"; import {KubernetesConfigMap, KubernetesSecret} from "@models/SystemModels"; - export const SystemMenus = ['containers', 'deployments', 'secrets', 'configMaps', 'envVars', 'appProps', 'log'] as const; export type SystemMenu = typeof SystemMenus[number] ; @@ -15,6 +14,10 @@ interface SystemState { setConfigMaps: (configmaps: KubernetesConfigMap[]) => void; tabIndex: SystemMenu; setTabIndex: (tabIndex: SystemMenu | number) => void; + envVars: string[]; + setEnvVars: (envVars: string[]) => void; + appProps: string[]; + setAppProps: (appProps: string[]) => void; } export const useSystemStore = createWithEqualityFn<SystemState>((set) => ({ @@ -35,6 +38,14 @@ export const useSystemStore = createWithEqualityFn<SystemState>((set) => ({ const tab = typeof tabIndex === 'number' ? SystemMenus[tabIndex] : tabIndex; set({tabIndex: tab}); }, + envVars: [], + appProps: [], + setEnvVars: (envVars: string[]) => { + set({envVars: envVars}); + }, + setAppProps: (appProps: string[]) => { + set({appProps: appProps}); + } }), shallow)
