You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/05/12 21:54:54 UTC

[camel-karavan] branch main updated (e5b51352 -> 2920efed)

This is an automated email from the ASF dual-hosted git repository.

marat pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


    from e5b51352 Dev console JVM and Camel Contex  #757
     new 0276f037 One status interval poll instead of three #757
     new 274cae11 Show development pamel on running #757
     new 2920efed Single PVC for cache m2 and jbang #757

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../camel/karavan/service/KubernetesService.java   |  17 ++--
 .../main/webui/src/projects/ProjectDevelopment.tsx |  74 +++++++++++++--
 .../main/webui/src/projects/RunnerInfoContext.tsx  | 101 +++++++++-----------
 .../main/webui/src/projects/RunnerInfoMemory.tsx   | 104 ++++++++-------------
 .../src/main/webui/src/projects/RunnerInfoPod.tsx  |  99 ++++++++------------
 .../src/main/webui/src/projects/RunnerToolbar.tsx  |  47 ++++------
 karavan-runner/Dockerfile                          |   2 +-
 7 files changed, 212 insertions(+), 232 deletions(-)


[camel-karavan] 02/03: Show development pamel on running #757

Posted by ma...@apache.org.
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 274cae118075c846e3cf32ba8835a2e78f430dfc
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri May 12 17:13:53 2023 -0400

    Show development pamel on running #757
---
 .../main/webui/src/projects/ProjectDevelopment.tsx | 12 +++--
 .../main/webui/src/projects/RunnerInfoContext.tsx  | 55 ++++++++++++----------
 .../main/webui/src/projects/RunnerInfoMemory.tsx   | 53 +++++++++++----------
 .../src/main/webui/src/projects/RunnerInfoPod.tsx  | 51 ++++++++++----------
 .../src/main/webui/src/projects/RunnerToolbar.tsx  | 47 +++++++-----------
 5 files changed, 110 insertions(+), 108 deletions(-)

diff --git a/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx b/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
index a58b52bc..64f16999 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
@@ -76,6 +76,10 @@ export const ProjectDevelopment = (props: Props) => {
         })
     }
 
+    function showConsole(): boolean {
+        return podStatus.phase !== '' ;
+    }
+
     const {project, config} = props;
     return (
             <Card className="project-development">
@@ -83,19 +87,19 @@ export const ProjectDevelopment = (props: Props) => {
                     <Flex direction={{default: "row"}}
                           justifyContent={{default: "justifyContentSpaceBetween"}}>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoPod podStatus={podStatus} config={config} />
+                            <RunnerInfoPod podStatus={podStatus} config={config} showConsole={showConsole()} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoMemory jvm={jvm} memory={memory} config={config} />
+                            <RunnerInfoMemory jvm={jvm} memory={memory} config={config} showConsole={showConsole()} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoContext context={context} config={config} />
+                            <RunnerInfoContext context={context} config={config} showConsole={showConsole()} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem>
-                            <RunnerToolbar project={project} config={config} />
+                            <RunnerToolbar project={project} config={config} showConsole={showConsole()} />
                         </FlexItem>
                     </Flex>
                 </CardBody>
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
index 57ce057e..8f49c15b 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
@@ -19,6 +19,7 @@ import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
 interface Props {
     context: any,
     config: any,
+    showConsole: boolean
 }
 
 export const RunnerInfoContext = (props: Props) => {
@@ -127,7 +128,7 @@ export const RunnerInfoContext = (props: Props) => {
     }
 
     function getRunning(): boolean {
-        return isRunning(props.context);
+        return props.context ? isRunning(props.context) : false;
     }
 
 
@@ -138,35 +139,37 @@ export const RunnerInfoContext = (props: Props) => {
     return (
         <DescriptionList isHorizontal>
             <DescriptionListGroup>
-                <DescriptionListTerm>Camel Context</DescriptionListTerm>
+                <DescriptionListTerm>Camel</DescriptionListTerm>
                 <DescriptionListDescription>
                     {getContextInfo()}
                 </DescriptionListDescription>
             </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Version</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getVersionInfo()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>State</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getContextState()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Exchanges:</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getExchanges()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Processing Time</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getProcessingTime()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
+            {props.showConsole && <>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Version</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getVersionInfo()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>State</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getContextState()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Exchanges:</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getExchanges()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Processing Time</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getProcessingTime()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+            </>}
         </DescriptionList>
     );
 }
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
index 1e44a4c9..2511b79d 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
@@ -20,6 +20,7 @@ interface Props {
     jvm: any,
     memory: any,
     config: any,
+    showConsole: boolean
 }
 
 export const RunnerInfoMemory = (props: Props) => {
@@ -122,35 +123,37 @@ export const RunnerInfoMemory = (props: Props) => {
     return (
         <DescriptionList isHorizontal>
             <DescriptionListGroup>
-                <DescriptionListTerm>JVM Memory</DescriptionListTerm>
+                <DescriptionListTerm>JVM</DescriptionListTerm>
                 <DescriptionListDescription>
                     {getJvmInfo()}
                 </DescriptionListDescription>
             </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>PID</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getPid()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Uptime</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getJvmUptime()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Heap</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getHeapInfo()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Non-Heap</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getNonHeapInfo()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
+            {props.showConsole && <>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>PID</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getPid()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Uptime</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getJvmUptime()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Heap</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getHeapInfo()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Non-Heap</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getNonHeapInfo()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+            </>}
         </DescriptionList>
     );
 }
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
index 5590be7c..be606cd3 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
@@ -18,6 +18,7 @@ import {isRunning} from "./ProjectDevelopment";
 interface Props {
     podStatus: PodStatus,
     config: any,
+    showConsole: boolean
 }
 
 export const RunnerInfoPod = (props: Props) => {
@@ -97,30 +98,32 @@ export const RunnerInfoPod = (props: Props) => {
                     {getPodInfo()}
                 </DescriptionListDescription>
             </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Status</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getPodStatus()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Requests</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getPodRequests()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Limits</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getPodLimits()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
-            <DescriptionListGroup>
-                <DescriptionListTerm>Created</DescriptionListTerm>
-                <DescriptionListDescription>
-                    {getPodCreation()}
-                </DescriptionListDescription>
-            </DescriptionListGroup>
+            {props.showConsole && <>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Status</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getPodStatus()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Requests</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getPodRequests()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Limits</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getPodLimits()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+                <DescriptionListGroup>
+                    <DescriptionListTerm>Created</DescriptionListTerm>
+                    <DescriptionListDescription>
+                        {getPodCreation()}
+                    </DescriptionListDescription>
+                </DescriptionListGroup>
+            </>}
         </DescriptionList>
     );
 }
diff --git a/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx b/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx
index 532b91bb..cd972fe3 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerToolbar.tsx
@@ -16,6 +16,7 @@ import {ProjectEventBus} from "./ProjectEventBus";
 interface Props {
     project: Project,
     config: any,
+    showConsole: boolean
 }
 
 export const RunnerToolbar = (props: Props) => {
@@ -25,7 +26,7 @@ export const RunnerToolbar = (props: Props) => {
     const [isRunning, setIsRunning] = useState(false);
     const [isDeletingPod, setIsDeletingPod] = useState(false);
 
-    function jbangRun () {
+    function jbangRun() {
         setJbangIsRunning(true);
         KaravanApi.runProject(props.project, res => {
             if (res.status === 200 || res.status === 201) {
@@ -39,7 +40,7 @@ export const RunnerToolbar = (props: Props) => {
         });
     }
 
-    function deleteRunner () {
+    function deleteRunner() {
         setIsDeletingPod(true);
         KaravanApi.deleteRunner(podName, res => {
             if (res.status === 202) {
@@ -55,7 +56,7 @@ export const RunnerToolbar = (props: Props) => {
         <React.Fragment>
             <div className="runner-toolbar">
                 <div className="row">
-                    <Tooltip content="JBang run" position={TooltipPosition.left}>
+                    <Tooltip content="Run in development mode" position={TooltipPosition.left}>
                         <Button isLoading={isJbangRunning ? true : undefined}
                                 isSmall
                                 variant={"primary"}
@@ -66,32 +67,20 @@ export const RunnerToolbar = (props: Props) => {
                         </Button>
                     </Tooltip>
                 </div>
-                <div className="row">
-                    <Tooltip content="Runtime run" position={TooltipPosition.left}>
-                        <Button isLoading={isRunning ? true : undefined}
-                                isDisabled
-                                isSmall
-                                variant={"secondary"}
-                                className="project-button"
-                                icon={!isRunning ? <PlayIcon/> : <div></div>}
-                                onClick={() => {
-                                }}>
-                            {isRunning ? "..." : "Run"}
-                        </Button>
-                    </Tooltip>
-                </div>
-                <div className="row">
-                    <Tooltip content="Delete pod" position={TooltipPosition.left}>
-                        <Button isLoading={isDeletingPod ? true : undefined}
-                                isSmall
-                                variant={"secondary"}
-                                className="project-button"
-                                icon={!isRunning ? <DeleteIcon/> : <div></div>}
-                                onClick={() => deleteRunner()}>
-                            {isDeletingPod ? "..." : "Delete"}
-                        </Button>
-                    </Tooltip>
-                </div>
+                {props.showConsole && <>
+                    <div className="row">
+                        <Tooltip content="Delete pod" position={TooltipPosition.left}>
+                            <Button isLoading={isDeletingPod ? true : undefined}
+                                    isSmall
+                                    variant={"secondary"}
+                                    className="project-button"
+                                    icon={!isRunning ? <DeleteIcon/> : <div></div>}
+                                    onClick={() => deleteRunner()}>
+                                {isDeletingPod ? "..." : "Delete"}
+                            </Button>
+                        </Tooltip>
+                    </div>
+                </>}
             </div>
         </React.Fragment>
     );


[camel-karavan] 01/03: One status interval poll instead of three #757

Posted by ma...@apache.org.
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 0276f037b14916f1f4693335423f63094f99a05e
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri May 12 17:02:17 2023 -0400

    One status interval poll instead of three #757
---
 .../main/webui/src/projects/ProjectDevelopment.tsx | 68 ++++++++++++++++++++--
 .../main/webui/src/projects/RunnerInfoContext.tsx  | 48 +++++----------
 .../main/webui/src/projects/RunnerInfoMemory.tsx   | 51 ++++------------
 .../src/main/webui/src/projects/RunnerInfoPod.tsx  | 48 ++++-----------
 4 files changed, 99 insertions(+), 116 deletions(-)

diff --git a/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx b/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
index e065b315..a58b52bc 100644
--- a/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
+++ b/karavan-app/src/main/webui/src/projects/ProjectDevelopment.tsx
@@ -1,14 +1,20 @@
-import React from 'react';
+import React, {useEffect, useRef, useState} from 'react';
 import {
     Card,
     CardBody, Flex, FlexItem, Divider
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {Project} from "./ProjectModels";
+import {PodStatus, Project} from "./ProjectModels";
 import {RunnerToolbar} from "./RunnerToolbar";
 import {RunnerInfoPod} from "./RunnerInfoPod";
 import {RunnerInfoContext} from "./RunnerInfoContext";
 import {RunnerInfoMemory} from "./RunnerInfoMemory";
+import {KaravanApi} from "../api/KaravanApi";
+import {ProjectEventBus} from "./ProjectEventBus";
+
+export function isRunning(status: PodStatus): boolean {
+    return status.phase === 'Running' && !status.terminating;
+}
 
 
 interface Props {
@@ -18,6 +24,58 @@ interface Props {
 
 export const ProjectDevelopment = (props: Props) => {
 
+    const [podStatus, setPodStatus] = useState(new PodStatus());
+    const previousValue = useRef(new PodStatus());
+    const [memory, setMemory] = useState({});
+    const [jvm, setJvm] = useState({});
+    const [context, setContext] = useState({});
+
+
+    useEffect(() => {
+        previousValue.current = podStatus;
+        const interval = setInterval(() => {
+            onRefreshStatus();
+        }, 1000);
+        return () => clearInterval(interval);
+    }, [podStatus]);
+
+    function onRefreshStatus() {
+        const projectId = props.project.projectId;
+        const name = projectId + "-runner";
+        KaravanApi.getRunnerPodStatus(projectId, name, res => {
+            if (res.status === 200) {
+                setPodStatus(res.data);
+                if (isRunning(res.data) && !isRunning(previousValue.current)) {
+                    ProjectEventBus.showLog('container', res.data.name, props.config.environment);
+                }
+            } else {
+                ProjectEventBus.showLog('container', name, props.config.environment, false);
+                setPodStatus(new PodStatus({name: name}));
+            }
+        });
+        KaravanApi.getRunnerConsoleStatus(projectId, "memory", res => {
+            if (res.status === 200) {
+                setMemory(res.data);
+            } else {
+                setMemory({});
+            }
+        })
+        KaravanApi.getRunnerConsoleStatus(projectId, "jvm", res => {
+            if (res.status === 200) {
+                setJvm(res.data);
+            } else {
+                setJvm({});
+            }
+        })
+        KaravanApi.getRunnerConsoleStatus(projectId, "context", res => {
+            if (res.status === 200) {
+                setContext(res.data);
+            } else {
+                setContext({});
+            }
+        })
+    }
+
     const {project, config} = props;
     return (
             <Card className="project-development">
@@ -25,15 +83,15 @@ export const ProjectDevelopment = (props: Props) => {
                     <Flex direction={{default: "row"}}
                           justifyContent={{default: "justifyContentSpaceBetween"}}>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoPod project={project} config={config} />
+                            <RunnerInfoPod podStatus={podStatus} config={config} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoMemory project={project} config={config} />
+                            <RunnerInfoMemory jvm={jvm} memory={memory} config={config} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem flex={{default: "flex_1"}}>
-                            <RunnerInfoContext project={project} config={config} />
+                            <RunnerInfoContext context={context} config={config} />
                         </FlexItem>
                         <Divider orientation={{default: "vertical"}}/>
                         <FlexItem>
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
index 9bd7e333..57ce057e 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoContext.tsx
@@ -17,38 +17,18 @@ import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
 
 
 interface Props {
-    project: Project,
+    context: any,
     config: any,
 }
 
 export const RunnerInfoContext = (props: Props) => {
 
-    const [context, setContext] = useState({});
-
-    useEffect(() => {
-        const interval = setInterval(() => {
-            onRefreshStatus();
-        }, 1000);
-        return () => clearInterval(interval);
-    }, []);
-
-    function onRefreshStatus() {
-        const projectId = props.project.projectId;
-        KaravanApi.getRunnerConsoleStatus(projectId, "context", res => {
-            if (res.status === 200) {
-                setContext(res.data);
-            } else {
-                setContext({});
-            }
-        })
-    }
-
     function getContextInfo() {
         return (
             <LabelGroup numLabels={3}>
                 <Tooltip content="Name" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.name}
+                        {props.context?.context?.name}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -60,7 +40,7 @@ export const RunnerInfoContext = (props: Props) => {
             <LabelGroup numLabels={3}>
                 <Tooltip content="Version" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.version}
+                        {props.context?.context?.version}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -72,17 +52,17 @@ export const RunnerInfoContext = (props: Props) => {
             <LabelGroup numLabels={3}>
                 <Tooltip content="State" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.state}
+                        {props.context?.context?.state}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Uptime" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.uptime}
+                        {props.context?.context?.uptime}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Phase" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.phase}
+                        {props.context?.context?.phase}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -94,17 +74,17 @@ export const RunnerInfoContext = (props: Props) => {
             <LabelGroup numLabels={3}>
                 <Tooltip content="Total" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.exchangesTotal}
+                        {props.context?.context?.statistics?.exchangesTotal}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Failed" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.exchangesFailed}
+                        {props.context?.context?.statistics?.exchangesFailed}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Inflight" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.exchangesInflight}
+                        {props.context?.context?.statistics?.exchangesInflight}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -116,22 +96,22 @@ export const RunnerInfoContext = (props: Props) => {
             <LabelGroup numLabels={4}>
                 <Tooltip content="Min" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.minProcessingTime}
+                        {props.context?.context?.statistics?.minProcessingTime}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Mean" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.meanProcessingTime}
+                        {props.context?.context?.statistics?.meanProcessingTime}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Max" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.maxProcessingTime}
+                        {props.context?.context?.statistics?.maxProcessingTime}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Last" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(context as any)?.context?.statistics?.lastProcessingTime}
+                        {props.context?.context?.statistics?.lastProcessingTime}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -147,7 +127,7 @@ export const RunnerInfoContext = (props: Props) => {
     }
 
     function getRunning(): boolean {
-        return isRunning(context);
+        return isRunning(props.context);
     }
 
 
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
index 9558dc35..1e44a4c9 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoMemory.tsx
@@ -17,45 +17,18 @@ import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
 
 
 interface Props {
-    project: Project,
+    jvm: any,
+    memory: any,
     config: any,
 }
 
 export const RunnerInfoMemory = (props: Props) => {
 
-    const [memory, setMemory] = useState({});
-    const [jvm, setJvm] = useState({});
-
-    useEffect(() => {
-        const interval = setInterval(() => {
-            onRefreshStatus();
-        }, 1000);
-        return () => clearInterval(interval);
-    }, []);
-
-    function onRefreshStatus() {
-        const projectId = props.project.projectId;
-        KaravanApi.getRunnerConsoleStatus(projectId, "memory", res => {
-            if (res.status === 200) {
-                setMemory(res.data);
-            } else {
-                setMemory({});
-            }
-        })
-        KaravanApi.getRunnerConsoleStatus(projectId, "jvm", res => {
-            if (res.status === 200) {
-                setJvm(res.data);
-            } else {
-                setJvm({});
-            }
-        })
-    }
-
     function getJvmInfo() {
         return (
             <LabelGroup numLabels={2}>
                 <Label icon={getIcon()} color={getColor()}>
-                    {(jvm as any)?.jvm?.vmVendor} {(jvm as any)?.jvm?.vmVersion}
+                    {props.jvm?.jvm?.vmVendor} {props.jvm?.jvm?.vmVersion}
                 </Label>
             </LabelGroup>
         )
@@ -66,17 +39,17 @@ export const RunnerInfoMemory = (props: Props) => {
             <LabelGroup numLabels={3}>
                 <Tooltip content="Init" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.heapMemoryInit}
+                        {props.memory?.memory?.heapMemoryInit}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Max" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.heapMemoryMax}
+                        {props.memory?.memory?.heapMemoryMax}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Used" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.heapMemoryUsed}
+                        {props.memory?.memory?.heapMemoryUsed}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -88,7 +61,7 @@ export const RunnerInfoMemory = (props: Props) => {
             <LabelGroup numLabels={2}>
                 <Tooltip content="Uptime" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(jvm as any)?.jvm?.vmUptime}
+                        {props.jvm?.jvm?.vmUptime}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -100,7 +73,7 @@ export const RunnerInfoMemory = (props: Props) => {
             <LabelGroup numLabels={2}>
                 <Tooltip content="PID" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(jvm as any)?.jvm?.pid}
+                        {props.jvm?.jvm?.pid}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -112,17 +85,17 @@ export const RunnerInfoMemory = (props: Props) => {
             <LabelGroup numLabels={3}>
                 <Tooltip content="Init" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.nonHeapMemoryInit}
+                        {props.memory?.memory?.nonHeapMemoryInit}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Max" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.nonHeapMemoryMax}
+                        {props.memory?.memory?.nonHeapMemoryMax}
                     </Label>
                 </Tooltip>
                 <Tooltip content="Used" position={"bottom"}>
                     <Label icon={getIcon()} color={getColor()}>
-                        {(memory as any)?.memory?.nonHeapMemoryUsed}
+                        {props.memory?.memory?.nonHeapMemoryUsed}
                     </Label>
                 </Tooltip>
             </LabelGroup>
@@ -138,7 +111,7 @@ export const RunnerInfoMemory = (props: Props) => {
     }
 
     function getRunning(): boolean {
-        return isRunning(jvm);
+        return isRunning(props.jvm);
     }
 
 
diff --git a/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx b/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
index fb40b1da..5590be7c 100644
--- a/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
+++ b/karavan-app/src/main/webui/src/projects/RunnerInfoPod.tsx
@@ -1,4 +1,4 @@
-import React, {useEffect, useRef, useState} from 'react';
+import React from 'react';
 import {
     Button,
     DescriptionList,
@@ -9,49 +9,22 @@ import {
     Tooltip
 } from '@patternfly/react-core';
 import '../designer/karavan.css';
-import {PodStatus, Project} from "./ProjectModels";
-import {KaravanApi} from "../api/KaravanApi";
+import {PodStatus} from "./ProjectModels";
 import {ProjectEventBus} from "./ProjectEventBus";
 import DownIcon from "@patternfly/react-icons/dist/esm/icons/error-circle-o-icon";
 import UpIcon from "@patternfly/react-icons/dist/esm/icons/check-circle-icon";
-
+import {isRunning} from "./ProjectDevelopment";
 
 interface Props {
-    project: Project,
+    podStatus: PodStatus,
     config: any,
 }
 
 export const RunnerInfoPod = (props: Props) => {
 
-    const [podStatus, setPodStatus] = useState(new PodStatus());
-    const previousValue = useRef(new PodStatus());
-
-    useEffect(() => {
-        previousValue.current = podStatus;
-        const interval = setInterval(() => {
-            onRefreshStatus();
-        }, 1000);
-        return () => clearInterval(interval);
-    }, [podStatus]);
-
-    function onRefreshStatus() {
-        const projectId = props.project.projectId;
-        const name = projectId + "-runner";
-        KaravanApi.getRunnerPodStatus(projectId, name, res => {
-            if (res.status === 200) {
-                setPodStatus(res.data);
-                if (isRunning(res.data) && !isRunning(previousValue.current)) {
-                    ProjectEventBus.showLog('container', res.data.name, props.config.environment);
-                }
-            } else {
-                ProjectEventBus.showLog('container', name, props.config.environment, false);
-                setPodStatus(new PodStatus({name: name}));
-            }
-        })
-    }
-
     function getPodInfo() {
         const env = props.config.environment;
+        const podStatus = props.podStatus;
         return (
             <Label icon={getIcon()} color={getColor()}>
                 <Tooltip content={`Phase: ${JSON.stringify(podStatus)}`}>
@@ -65,6 +38,7 @@ export const RunnerInfoPod = (props: Props) => {
     }
 
     function getPodStatus() {
+        const podStatus = props.podStatus;
         const status = !podStatus.terminating ? podStatus.phase : "Terminating"
         return (
             <Label icon={getIcon()} color={getColor()}>
@@ -74,6 +48,7 @@ export const RunnerInfoPod = (props: Props) => {
     }
 
     function getPodRequests() {
+        const podStatus = props.podStatus;
         const text = podStatus.requestCpu !== '' ? podStatus.requestCpu + " : " + podStatus.requestMemory : "N/A";
         return (
             <Label icon={getIcon()} color={getColor()}>
@@ -83,6 +58,7 @@ export const RunnerInfoPod = (props: Props) => {
     }
 
     function getPodCreation() {
+        const podStatus = props.podStatus;
         const text = podStatus.creationTimestamp !== '' ? podStatus.creationTimestamp : "N/A";
         return (
             <Label icon={getIcon()} color={getColor()}>
@@ -92,6 +68,7 @@ export const RunnerInfoPod = (props: Props) => {
     }
 
     function getPodLimits() {
+        const podStatus = props.podStatus;
         const text = podStatus.limitCpu !== '' ? podStatus.limitCpu + " : " + podStatus.limitMemory : "N/A";
         return (
             <Label icon={getIcon()} color={getColor()}>
@@ -109,12 +86,7 @@ export const RunnerInfoPod = (props: Props) => {
     }
 
     function getRunning(): boolean {
-        return isRunning(podStatus);
-    }
-
-
-    function isRunning(status: PodStatus): boolean {
-        return status.phase === 'Running' && !status.terminating;
+        return isRunning(props.podStatus);
     }
 
     return (


[camel-karavan] 03/03: Single PVC for cache m2 and jbang #757

Posted by ma...@apache.org.
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 2920efed2f6b18d2318056f645e402c5b484ba1a
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Fri May 12 17:52:14 2023 -0400

    Single PVC for cache m2 and jbang #757
---
 .../apache/camel/karavan/service/KubernetesService.java | 17 ++++++-----------
 karavan-runner/Dockerfile                               |  2 +-
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
index d24b776e..77ddaed5 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
@@ -383,8 +383,7 @@ public class KubernetesService implements HealthCheck{
 
     public String tryCreateRunner(Project project, String runnerName) {
 
-        createPVC(runnerName + "-" + JBANG_CACHE_SUFFIX, runnerName);
-        createPVC(runnerName + "-" + M2_CACHE_SUFFIX, runnerName);
+        createPVC(runnerName);
         Pod old = kubernetesClient().pods().inNamespace(getNamespace()).withName(runnerName).get();
         if (old == null) {
             ProjectFile properties = infinispanService.getProjectFile(project.getProjectId(), APPLICATION_PROPERTIES_FILENAME);
@@ -444,18 +443,14 @@ public class KubernetesService implements HealthCheck{
                 .withPorts(port)
                 .withResources(resources)
                 .withVolumeMounts(
-                        new VolumeMountBuilder().withName(name + "-" + JBANG_CACHE_SUFFIX).withMountPath("/karavan/.jbang/cache").build(),
-                        new VolumeMountBuilder().withName(name + "-" + M2_CACHE_SUFFIX).withMountPath("/karavan/.m2").build())
+                        new VolumeMountBuilder().withName(name).withMountPath("/karavan/.jbang/cache").build())
                 .build();
 
         PodSpec spec = new PodSpecBuilder()
                 .withTerminationGracePeriodSeconds(0L)
                 .withContainers(container)
                 .withVolumes(
-                        new VolumeBuilder().withName(name + "-" + JBANG_CACHE_SUFFIX)
-                        .withNewPersistentVolumeClaim(name + "-" + JBANG_CACHE_SUFFIX, false).build(),
-                        new VolumeBuilder().withName(name + "-" + M2_CACHE_SUFFIX)
-                        .withNewPersistentVolumeClaim(name + "-" + M2_CACHE_SUFFIX, false).build())
+                        new VolumeBuilder().withName(name).withNewPersistentVolumeClaim(name, false).build())
                 .build();
 
         return new PodBuilder()
@@ -464,12 +459,12 @@ public class KubernetesService implements HealthCheck{
                 .build();
     }
 
-    private void createPVC(String pvcName, String runnerName) {
-        PersistentVolumeClaim old = kubernetesClient().persistentVolumeClaims().inNamespace(getNamespace()).withName(pvcName).get();
+    private void createPVC(String runnerName) {
+        PersistentVolumeClaim old = kubernetesClient().persistentVolumeClaims().inNamespace(getNamespace()).withName(runnerName).get();
         if (old == null) {
             PersistentVolumeClaim pvc = new PersistentVolumeClaimBuilder()
                     .withNewMetadata()
-                    .withName(pvcName)
+                    .withName(runnerName)
                     .withNamespace(getNamespace())
                     .withLabels(getKaravanRunnerLabels(runnerName))
                     .endMetadata()
diff --git a/karavan-runner/Dockerfile b/karavan-runner/Dockerfile
index d0d65761..e24b703d 100644
--- a/karavan-runner/Dockerfile
+++ b/karavan-runner/Dockerfile
@@ -2,7 +2,7 @@ FROM docker.io/jbangdev/jbang-action
 
 ENV CAMEL_VERSION=3.21.0-SNAPSHOT
 ENV KARAVAN="/karavan"
-ENV JBANG_REPO="$KARAVAN/.m2"
+ENV JBANG_REPO="$KARAVAN/.jbang/cache/.m2"
 ENV JBANG_DIR="$KARAVAN/.jbang"
 ENV KAMELETS_DIR="$KARAVAN/kamelets"
 ENV CODE_DIR="$KARAVAN/code"