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

andytaylor pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/artemis-console.git

commit f20d624a09f5f4ae7abff739bf490444965a71a5
Author: gchuf <[email protected]>
AuthorDate: Fri Apr 10 13:59:58 2026 +0200

    ARTEMIS-5998 - Add disk usage donut chart
---
 .../artemis-console-plugin/src/artemis-service.ts  | 14 ++++++-
 .../artemis-console-plugin/src/status/Status.tsx   | 47 +++++++++++++++++++++-
 2 files changed, 59 insertions(+), 2 deletions(-)

diff --git 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
index cc2ca74..3dbfdd0 100644
--- 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
+++ 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/artemis-service.ts
@@ -48,6 +48,8 @@ export type BrokerInfo = {
     globalMaxSizeMB: number
     addressMemoryUsage: number
     addressMemoryUsed: number
+    diskStoreUsagePercentage: number
+    maxDiskUsage: number
     haPolicy: string | InaccessibleValue
     networkTopology: BrokerNetworkTopology
 }
@@ -174,7 +176,9 @@ const jolokiaAttributes = [
     "Uptime",
     "GlobalMaxSize",
     "AddressMemoryUsage",
-    "HAPolicy"
+    "HAPolicy",
+    "DiskStoreUsage",
+    "MaxDiskUsage"
 ];
 
 /**
@@ -256,6 +260,8 @@ class ArtemisService {
                 const addressMemoryUsage = response.AddressMemoryUsage as 
number;
                 const uptime = response.Uptime as string | InaccessibleValue;
                 const haPolicy = response.HAPolicy as string | 
InaccessibleValue;
+                const diskStoreUsage = response.DiskStoreUsage as number;
+                const maxDiskUsage = response.MaxDiskUsage as number;
                 const globalMaxSizeMB = globalMaxSize / 1048576;
                 let used = 0;
                 let addressMemoryUsageMB = 0;
@@ -263,6 +269,10 @@ class ArtemisService {
                     addressMemoryUsageMB = addressMemoryUsage / 1048576;
                     used = addressMemoryUsageMB / globalMaxSizeMB * 100
                 }
+                let diskStoreUsagePercentage = 0;
+                if (diskStoreUsage > 0) {
+                    diskStoreUsagePercentage = diskStoreUsage * 100;
+                }
                 const topology = await 
jolokiaService.execute(brokerObjectName, LIST_NETWORK_TOPOLOGY_SIG).catch(e => {
                     eventService.notify({type: 'warning', message: 
jolokiaService.errorMessage(e) })
                     return "{}"
@@ -277,6 +287,8 @@ class ArtemisService {
                     globalMaxSizeMB: globalMaxSizeMB,
                     addressMemoryUsage: addressMemoryUsageMB,
                     addressMemoryUsed: used,
+                    diskStoreUsagePercentage: diskStoreUsagePercentage,
+                    maxDiskUsage: maxDiskUsage,
                     haPolicy: haPolicy,
                     networkTopology: new 
BrokerNetworkTopology(JSON.parse(topology))
                 };
diff --git 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/status/Status.tsx
 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/status/Status.tsx
index 7d77844..27ddc00 100644
--- 
a/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/status/Status.tsx
+++ 
b/artemis-console-extension/artemis-extension/packages/artemis-console-plugin/src/status/Status.tsx
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import { ChartDonutUtilization } from "@patternfly/react-charts"
+import { ChartDonutUtilization,ChartDonutThreshold } from 
"@patternfly/react-charts"
 import {
     Alert,
     Card,
@@ -135,6 +135,10 @@ export const Status: React.FunctionComponent = () => {
         setShowOperationsDialog(true);
     }
 
+    const diskSpaceUsed = brokerInfo?.diskStoreUsagePercentage ?? 0;
+    const diskSpaceMax = brokerInfo?.maxDiskUsage ?? 0;
+    const diskSpaceRemaining = diskSpaceMax - diskSpaceUsed;
+
     const statusActions = (
         <Dropdown
             onSelect={onBrokerInfoSelect}
@@ -231,6 +235,47 @@ export const Status: React.FunctionComponent = () => {
                         </CardBody>
                     </Card>
                 </GridItem>
+                <GridItem span={3} rowSpan={3}>
+                    <Card isFullHeight={true}>
+                        <CardHeader>
+                            <CardTitle>Disk Used</CardTitle>
+                        </CardHeader>
+                        <CardBody>
+                            <Divider />
+                            <ChartDonutThreshold
+                                ariaDesc="Disk Used"
+                                ariaTitle="Disk Used"
+                                constrainToVisibleArea
+                                padding={{
+                                    bottom: 20,
+                                    left: 20,
+                                    right: 20,
+                                    top: 20
+                                }}
+                                data={[
+                                    { x: 'Usable at maxDiskUsage%', y: 
diskSpaceMax },
+                                    { x: 'Max at 100%', y: 100 }
+                                ]}
+                                labels={[
+                                    `Max disk usage: ${diskSpaceMax}%`,
+                                    `Reserved disk space: ${100 - 
diskSpaceMax}%`
+                                ]}
+                                name="chart101"
+                                width={350}>
+                                <ChartDonutUtilization
+                                    data={{ x: 'Used:', y: diskSpaceUsed }}
+                                    labels={[
+                                    diskSpaceRemaining < 0
+                                        ? "No space remaining, broker is 
blocking producers!"
+                                        : `Usable disk space remaining: 
${diskSpaceRemaining.toFixed(2)}/${diskSpaceMax}%`
+                                    ]}
+                                    thresholds={[{ value: (diskSpaceMax - 10) 
}, { value: diskSpaceMax }]} // warning on 10% disk remaining, critical on 0%
+                                    subTitle="Disk Used"
+                                    title={diskSpaceUsed.toFixed(2) + "%"}/>
+                            </ChartDonutThreshold>
+                        </CardBody>
+                    </Card>
+                </GridItem>
             </Grid>
             <ExpandableSection toggleTextExpanded="Acceptors" 
toggleTextCollapsed="Acceptors">
                 <Grid hasGutter span={4}>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to