This is an automated email from the ASF dual-hosted git repository.
zitadombi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 932c520622 HDDS-9076. Recon UI OMDB Insights Changes and Improvements
(#5176)
932c520622 is described below
commit 932c52062225f16328e1a553cf1ee43afff4447d
Author: Smita <[email protected]>
AuthorDate: Fri Sep 15 20:51:52 2023 +0530
HDDS-9076. Recon UI OMDB Insights Changes and Improvements (#5176)
---
.../webapps/recon/ozone-recon-web/api/db.json | 142 +++++++++++----------
.../webapps/recon/ozone-recon-web/api/routes.json | 15 +--
.../src/components/overviewCard/overviewCard.tsx | 37 +++++-
.../ozone-recon-web/src/views/insights/om/om.tsx | 56 ++++----
.../src/views/overview/overview.tsx | 12 +-
5 files changed, 146 insertions(+), 116 deletions(-)
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
index ed7e1a617c..74673e48e0 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
@@ -4858,11 +4858,11 @@
"containerDiscrepancyInfo": []
},
"nonFSO": {
- "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/1105696238501917",
+ "lastKey": "11",
"keysSummary": {
- "totalUnreplicatedDataSize": 1000,
- "totalReplicatedDataSize": 3000,
- "totalOpenKeys": 0
+ "totalUnreplicatedDataSize": 10485760,
+ "totalReplicatedDataSize": 31457280,
+ "totalOpenKeys": 10
},
"nonFSO": [
{
@@ -4893,7 +4893,7 @@
"status": "OK"
},
"nonFSO1": {
- "lastKey":
"1/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/1105696238501917",
+ "lastKey": "21",
"nonFSO": [
{
"key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2440/110569623850191713",
@@ -4923,11 +4923,48 @@
"status": "OK"
},
"nonFSO2": {
+ "lastKey": "31",
+ "nonFSO": [
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2440/110569623850191713",
+ "path": "nonfso 21",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ },
+ {
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2441/110569623850191713",
+ "path": "nonfso 22",
+ "inStateSince": 1686156886632,
+ "size": 268435456,
+ "replicatedSize": 268435456,
+ "replicationInfo": {
+ "replicationFactor": "ONE",
+ "requiredNodes": 1,
+ "replicationType": "RATIS"
+ }
+ }
+ ],
+ "status": "OK"
+ },
+ "nonFSO3": {
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 10485760,
+ "totalReplicatedDataSize": 31457280,
+ "totalOpenKeys": 10
+ },
"lastKey": "",
- "nonFSO": []
+ "replicatedDataSize": 0,
+ "unreplicatedDataSize": 0,
+ "status": "OK"
},
"fso": {
- "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713",
+ "lastKey": "11",
"fso": [
{
"key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2401/110569623850191713",
@@ -5061,7 +5098,7 @@
"status": "OK"
},
"fso1": {
- "lastKey":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191713",
+ "lastKey": "21",
"fso": [
{
"key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713",
@@ -5170,21 +5207,15 @@
"requiredNodes": 1,
"replicationType": "RATIS"
}
- },
- {
- "key": "fso 20 key",
- "path": "20",
- "inStateSince": 1686156887186,
- "size": 268435456,
- "replicatedSize": 268435456,
- "replicationInfo": {
- "replicationFactor": "ONE",
- "requiredNodes": 1,
- "replicationType": "RATIS"
- }
- },
+ }
+ ],
+ "status": "OK"
+ },
+ "fso2": {
+ "lastKey": "31",
+ "fso": [
{
- "key": "fso 21",
+ "key":
"/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713",
"path": "21",
"inStateSince": 1686156886632,
"size": 268435456,
@@ -5210,7 +5241,7 @@
{
"key": "fso 23",
"path": "23",
- "inStateSince": 1686156887186,
+ "inStateSince": 1686156886632,
"size": 268435456,
"replicatedSize": 268435456,
"replicationInfo": {
@@ -5234,7 +5265,7 @@
{
"key": "fso 25",
"path": "25",
- "inStateSince": 1686156887186,
+ "inStateSince": 1686156886632,
"size": 268435456,
"replicatedSize": 268435456,
"replicationInfo": {
@@ -5244,7 +5275,7 @@
}
},
{
- "key": "fso 26",
+ "key": "fso 26 key",
"path": "26",
"inStateSince": 1686156887186,
"size": 268435456,
@@ -5256,9 +5287,9 @@
}
},
{
- "key": "fso 27",
+ "key": "fso 17 key",
"path": "27",
- "inStateSince": 1686156887186,
+ "inStateSince": 1686156886632,
"size": 268435456,
"replicatedSize": 268435456,
"replicationInfo": {
@@ -5268,7 +5299,7 @@
}
},
{
- "key": "fso 28",
+ "key": "fso 18 key",
"path": "28",
"inStateSince": 1686156887186,
"size": 268435456,
@@ -5280,45 +5311,9 @@
}
},
{
- "key": "fso 29",
+ "key": "fso 19 key",
"path": "29",
- "inStateSince": 1686156887186,
- "size": 268435456,
- "replicatedSize": 268435456,
- "replicationInfo": {
- "replicationFactor": "ONE",
- "requiredNodes": 1,
- "replicationType": "RATIS"
- }
- },
- {
- "key": "fso 30",
- "path": "30",
- "inStateSince": 1686156887186,
- "size": 268435456,
- "replicatedSize": 268435456,
- "replicationInfo": {
- "replicationFactor": "ONE",
- "requiredNodes": 1,
- "replicationType": "RATIS"
- }
- },
- {
- "key": "fso 31",
- "path": "31",
- "inStateSince": 1686156887186,
- "size": 268435456,
- "replicatedSize": 268435456,
- "replicationInfo": {
- "replicationFactor": "ONE",
- "requiredNodes": 1,
- "replicationType": "RATIS"
- }
- },
- {
- "key": "fso 32",
- "path": "32",
- "inStateSince": 1686156887186,
+ "inStateSince": 1686156886632,
"size": 268435456,
"replicatedSize": 268435456,
"replicationInfo": {
@@ -5328,8 +5323,8 @@
}
},
{
- "key": "fso 33",
- "path": "33",
+ "key": "fso 20 key",
+ "path": "20",
"inStateSince": 1686156887186,
"size": 268435456,
"replicatedSize": 268435456,
@@ -5342,9 +5337,16 @@
],
"status": "OK"
},
- "fso2": {
+ "fso3": {
+ "keysSummary": {
+ "totalUnreplicatedDataSize": 10485760,
+ "totalReplicatedDataSize": 31457280,
+ "totalOpenKeys": 10
+ },
"lastKey": "",
- "fso": []
+ "replicatedDataSize": 0,
+ "unreplicatedDataSize": 0,
+ "status": "OK"
},
"keydeletePending":{
"lastKey": "/volume/bucket1/rcmeevblsf/106/-9223372036843950335",
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
index 5dc3c0d310..45d7815ee6 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/routes.json
@@ -47,21 +47,20 @@
"/containers/mismatch?limit=*&prevKey=*&missingIn=SCM" : "/scmMismatch",
- "/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey": "/nonFSO",
-
"/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/1105696238501917":
"/nonFSO1",
+ "/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=11":
"/nonFSO1",
"/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=21":
"/nonFSO2",
"/keys/open?includeFso=false&includeNonFso=true&limit=*&prevKey=31":
"/nonFSO3",
+ "/keys/open?includeFso=false&includeNonFso=true&limit=*": "/nonFSO",
-
- "/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey": "/fso",
-
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2411/110569623850191713":
"/fso1",
-
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191713":
"/fso2",
-
"/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2431/110569623850191713":
"/fso3",
+ "/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=11": "/fso1",
+ "/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=21": "/fso2",
+ "/keys/open?includeFso=true&includeNonFso=false&limit=*&prevKey=31": "/fso3",
+ "/keys/open?includeFso=true&includeNonFso=false&limit=*": "/fso",
- "/keys/deletePending?limit=*&prevKey" : "/keydeletePending",
"/keys/deletePending?limit=*&prevKey=/volume/bucket1/rcmeevblsf/106/-9223372036843950335"
: "/keydeletePending1",
"/keys/deletePending?limit=*&prevKey=/-9223372036854775552/-9223372036854775040/-9223372036852420095/2421/110569623850191"
: "/keydeletePending2",
"/keys/deletePending?limit=*&prevKey=31" : "/keydeletePending3",
+ "/keys/deletePending?limit=*" : "/keydeletePending",
"/containers/mismatch/deleted?limit=*&prevKey": "/deleted",
"/containers/mismatch/deleted?limit=*&prevKey=11": "/deleted1",
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/overviewCard/overviewCard.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/overviewCard/overviewCard.tsx
index df15f8a588..c6fdb0a257 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/overviewCard/overviewCard.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/components/overviewCard/overviewCard.tsx
@@ -46,17 +46,44 @@ const defaultProps = {
interface IOverviewCardWrapperProps {
linkToUrl: string;
+ title: string
}
class OverviewCardWrapper extends React.Component<IOverviewCardWrapperProps> {
+ // To set Current ACtive Tab for OM DB Insights
+ setCurrentActiveTab = (title: any) => {
+ if (title === "Open Keys Summary") {
+ return {
+ active: '2'
+ }
+ }
+ else if (title === "Pending Deleted Keys Summary") {
+ return {
+ active: '3'
+ }
+ }
+ };
+
render() {
const {linkToUrl, children} = this.props;
if (linkToUrl) {
- return (
- <Link to={linkToUrl}>
- {children}
- </Link>
- );
+ if (linkToUrl === '/Om') {
+ return (
+ <Link to={{
+ pathname: linkToUrl,
+ state: { activeTab: children._owner.stateNode.props ?
this.setCurrentActiveTab(children._owner.stateNode.props.title).active : '1' }
+ }} >
+ {children}
+ </Link>
+ )
+ }
+ else {
+ return (
+ <Link to={linkToUrl}>
+ {children}
+ </Link>
+ )
+ }
}
return children;
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
index b9c40be0cb..0ccbee3fff 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/insights/om/om.tsx
@@ -302,10 +302,10 @@ interface IOmdbInsightsState {
prevKeyDeletePending: string;
activeTab: string;
DEFAULT_LIMIT: number,
- clickable: boolean;
+ nextClickable: boolean;
includeFso: boolean;
includeNonFso: boolean;
- prevClickable :boolean
+ prevClickable: boolean
}
let cancelMismatchedEndpointSignal: AbortController;
@@ -332,12 +332,12 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
prevKeyDeletePending: "",
prevKeyDeleted: 0,
expandedRowData: {},
- activeTab: '1',
+ activeTab: props.location.state ? props.location.state.activeTab : '1',
DEFAULT_LIMIT: 10,
- clickable: true,
+ nextClickable: true,
includeFso: true,
includeNonFso: false,
- prevClickable:false
+ prevClickable: false
};
}
@@ -438,7 +438,6 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
);
handlefsoNonfsoMenuChange = (e: any) => {
- console.log("handlefsoNonfsoMenuChange", e.key);
if (e.key === 'fso') {
openPrevKeyList =[""];
this.fetchOpenKeys(true, false, this.state.DEFAULT_LIMIT, "");
@@ -450,8 +449,16 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
};
componentDidMount(): void {
- // Fetch mismatch containers on component mount
- this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,
this.state.prevKeyMismatch, this.state.mismatchMissingState);
+ if (this.state.activeTab === '1') {
+ this.fetchMismatchContainers(this.state.DEFAULT_LIMIT,
this.state.prevKeyMismatch, this.state.mismatchMissingState);
+ } else if (this.state.activeTab === '2') {
+ this.fetchOpenKeys(this.state.includeFso, this.state.includeNonFso,
this.state.DEFAULT_LIMIT, this.state.prevKeyOpen);
+ } else if (this.state.activeTab === '3') {
+ keysPendingExpanded =[];
+ this.fetchDeletePendingKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeletePending);
+ } else if (this.state.activeTab === '4') {
+ this.fetchDeletedKeys(this.state.DEFAULT_LIMIT,
this.state.prevKeyDeleted);
+ }
};
componentWillUnmount(): void {
@@ -465,8 +472,9 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
fetchMismatchContainers = (limit: number, prevKeyMismatch: number,
mismatchMissingState: any) => {
this.setState({
loading: true,
- clickable: true,
- prevClickable: true
+ nextClickable: true,
+ prevClickable: true,
+ mismatchMissingState
});
//Cancel any previous pending request
@@ -488,7 +496,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
mismatchPrevKeyList = [0];
this.setState({
loading: false,
- clickable: false,
+ nextClickable: false,
mismatchDataSource: mismatchContainers,
expandedRowData: {},
})
@@ -519,8 +527,10 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
fetchOpenKeys = (includeFso: boolean, includeNonFso: boolean, limit: number,
prevKeyOpen: string) => {
this.setState({
loading: true,
- clickable: true,
- prevClickable:true
+ nextClickable: true,
+ prevClickable: true,
+ includeFso,
+ includeNonFso
});
//Cancel any previous pending request
@@ -534,7 +544,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
let openKeysEndpoint;
if (prevKeyOpen === "") {
- openKeysEndpoint =
`/api/v1/keys/open?includeFso=${includeFso}&includeNonFso=${includeNonFso}&limit=${limit}&prevKey`;
+ openKeysEndpoint =
`/api/v1/keys/open?includeFso=${includeFso}&includeNonFso=${includeNonFso}&limit=${limit}`;
}
else {
openKeysEndpoint =
`/api/v1/keys/open?includeFso=${includeFso}&includeNonFso=${includeNonFso}&limit=${limit}&prevKey=${prevKeyOpen}`;
@@ -556,7 +566,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
openPrevKeyList = [""];
this.setState({
loading: false,
- clickable: false,
+ nextClickable: false,
openKeysDataSource: allopenKeysResponse
})
}
@@ -587,7 +597,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
fetchDeletePendingKeys = (limit: number, prevKeyDeletePending: string) => {
this.setState({
loading: true,
- clickable: true,
+ nextClickable: true,
prevClickable :true
});
@@ -603,7 +613,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
keysPendingExpanded =[];
let deletePendingKeysEndpoint;
if (prevKeyDeletePending === "" || prevKeyDeletePending === undefined ) {
- deletePendingKeysEndpoint =
`/api/v1/keys/deletePending?limit=${limit}&prevKey`;
+ deletePendingKeysEndpoint = `/api/v1/keys/deletePending?limit=${limit}`;
}
else {
deletePendingKeysEndpoint =
`/api/v1/keys/deletePending?limit=${limit}&prevKey=${prevKeyDeletePending}`;
@@ -641,7 +651,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
keysPendingPrevList =[""];
this.setState({
loading: false,
- clickable: false,
+ nextClickable: false,
pendingDeleteKeyDataSource: deletedKeyInfoData
})
}
@@ -714,7 +724,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
fetchDeletedKeys = (limit: number, prevKeyDeleted: number) => {
this.setState({
loading: true,
- clickable: true,
+ nextClickable: true,
prevClickable: true
});
@@ -738,7 +748,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
deletedKeysPrevList = [0];
this.setState({
loading: false,
- clickable: false,
+ nextClickable: false,
deletedContainerKeysDataSource: deletedContainerKeys,
expandedRowData: {},
})
@@ -852,14 +862,12 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
return <div>{this.state.prevClickable ? <Link to="/Om"
onClick={this.fetchPreviousRecords}> Prev</Link>: <Link to="/Om" style={{
pointerEvents: 'none' }}>No Records</Link>}</div>;
}
if (type === 'next') {
- return <div> {this.state.clickable ? <Link to="/Om"
onClick={this.fetchNextRecords}> {'>>'} </Link> : <Link to="/Om" style={{
pointerEvents: 'none' }}>No More Further Records</Link>}</div>;
+ return <div> {this.state.nextClickable ? <Link to="/Om"
onClick={this.fetchNextRecords}> {'>>'} </Link> : <Link to="/Om" style={{
pointerEvents: 'none' }}>No More Further Records</Link>}</div>;
}
return originalElement;
};
onShowSizeChange = (current: number, pageSize: number) => {
- console.log("onShowSizeChange",pageSize, this.state);
- console.log("Open Keys Array", keysPendingPrevList);
if (this.state.activeTab === '2') {
//open keys
this.setState({
@@ -1085,7 +1093,7 @@ export class Om extends React.Component<Record<string,
object>, IOmdbInsightsSta
OM DB Insights
</div>
<div className='content-div'>
- <Tabs defaultActiveKey='1' onChange={this.changeTab}>
+ <Tabs defaultActiveKey={this.state.activeTab}
onChange={this.changeTab}>
<TabPane key='1' tab={`Container Mismatch Info`}>
{generateMismatchTable(mismatchDataSource)}
</TabPane>
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
index 8d212cbdbb..56c756d1d0 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/overview/overview.tsx
@@ -62,7 +62,6 @@ interface IOverviewState {
omStatus: string;
openContainers: number;
deletedContainers: number;
- keysPendingDeletion: number;
openSummarytotalUnrepSize: number,
openSummarytotalRepSize: number,
openSummarytotalOpenKeys: number,
@@ -100,7 +99,6 @@ export class Overview extends React.Component<Record<string,
object>, IOverviewS
omStatus: '',
openContainers: 0,
deletedContainers: 0,
- keysPendingDeletion: 0,
openSummarytotalUnrepSize: 0,
openSummarytotalRepSize: 0,
openSummarytotalOpenKeys: 0,
@@ -149,7 +147,6 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
keys: clusterState.keys,
missingContainersCount,
openContainers: clusterState.openContainers,
- keysPendingDeletion: clusterState.keysPendingDeletion,
deletedContainers: clusterState.deletedContainers,
lastRefreshed: Number(moment()),
lastUpdatedOMDBDelta: omDBDeltaObject &&
omDBDeltaObject.lastUpdatedTimestamp,
@@ -211,7 +208,7 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
render() {
const {loading, datanodes, pipelines, storageReport, containers, volumes,
buckets, openSummarytotalUnrepSize, openSummarytotalRepSize,
openSummarytotalOpenKeys,
-
deletePendingSummarytotalUnrepSize,deletePendingSummarytotalRepSize,deletePendingSummarytotalDeletedKeys,keysPendingDeletion,
+
deletePendingSummarytotalUnrepSize,deletePendingSummarytotalRepSize,deletePendingSummarytotalDeletedKeys,
keys, missingContainersCount, lastRefreshed, lastUpdatedOMDBDelta,
lastUpdatedOMDBFull, omStatus, openContainers, deletedContainers } = this.state;
const datanodesElement = (
@@ -298,14 +295,11 @@ export class Overview extends
React.Component<Record<string, object>, IOverviewS
<Col xs={24} sm={18} md={12} lg={12} xl={6}>
<OverviewCard loading={loading} title='Deleted Containers'
data={deletedContainers.toString()} icon='delete' />
</Col>
- <Col xs={24} sm={18} md={12} lg={12} xl={6}>
- <OverviewCard loading={loading} title='Pending Key Deletions'
data={keysPendingDeletion.toString()} icon='delete' />
- </Col>
<Col xs={24} sm={18} md={12} lg={12} xl={6} className='summary-font'>
- <OverviewCard loading={loading} title='Open Keys Summary'
data={openSummaryData} icon='file-text' />
+ <OverviewCard loading={loading} title='Open Keys Summary'
data={openSummaryData} icon='file-text' linkToUrl='/Om' />
</Col>
<Col xs={24} sm={18} md={12} lg={12} xl={6} className='summary-font'>
- <OverviewCard loading={loading} title='Pending Deleted Keys
Summary' data={deletePendingSummaryData} icon='delete' />
+ <OverviewCard loading={loading} title='Pending Deleted Keys
Summary' data={deletePendingSummaryData} icon='delete' linkToUrl='/Om'/>
</Col>
</Row>
</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]