diff --git a/ui_src/src/components/partitionsFilter/index.js b/ui_src/src/components/partitionsFilter/index.js
index 4f6a84ade..aa81e38d6 100644
--- a/ui_src/src/components/partitionsFilter/index.js
+++ b/ui_src/src/components/partitionsFilter/index.js
@@ -12,8 +12,8 @@
import './style.scss';
-import React, { useContext, useState } from 'react';
-import { Divider, Popover } from 'antd';
+import React, { useContext, useState, useEffect } from 'react';
+import { Popover } from 'antd';
import { ReactComponent as PartitionIcon } from 'assets/images/partitionIcon.svg';
import { ReactComponent as CollapseArrowIcon } from 'assets/images/collapseArrow.svg';
import { StationStoreContext } from 'domain/stationOverview';
@@ -21,11 +21,14 @@ import { StationStoreContext } from 'domain/stationOverview';
const PartitionsFilter = ({ partitions_number }) => {
const [stationState, stationDispatch] = useContext(StationStoreContext);
const [isOpen, setIsOpen] = useState(false);
- const [selectedPartition, setSelectedPartition] = useState(-1);
+ const [selectedPartition, setSelectedPartition] = useState(1);
+ useEffect(() => {
+ setSelectedPartition(stationState?.stationPartition);
+ }, [stationState?.stationPartition]);
const handleApply = (i) => {
- setSelectedPartition(i === 0 ? -1 : i);
- stationDispatch({ type: 'SET_STATION_PARTITION', payload: i === 0 ? -1 : i });
+ setSelectedPartition(i);
+ stationDispatch({ type: 'SET_STATION_PARTITION', payload: i });
setIsOpen(false);
};
@@ -34,17 +37,14 @@ const PartitionsFilter = ({ partitions_number }) => {
};
const getItems = () => {
- let elements = [];
- for (let i = 0; i <= partitions_number; i++) {
- elements.push(
-
handleApply(i)}>
-
-
-
- );
- }
- return elements;
+ return Array.apply(null, { length: partitions_number }).map((_, index) => (
+ handleApply(index + 1)}>
+
+
+
+ ));
};
+
const getContent = () => {
return {getItems()}
;
};
@@ -54,7 +54,7 @@ const PartitionsFilter = ({ partitions_number }) => {
-
{selectedPartition == -1 ? `All partitions` : `Partition ${selectedPartition}`}
+
{`Partition ${selectedPartition}`}
diff --git a/ui_src/src/components/sideBar/index.js b/ui_src/src/components/sideBar/index.js
index d05690f04..ddb3336d3 100644
--- a/ui_src/src/components/sideBar/index.js
+++ b/ui_src/src/components/sideBar/index.js
@@ -464,7 +464,6 @@ function SideBar() {
return (
- {state.route !== 'overview' &&
}
+ {state.route !== 'overview' &&
}
{
const history = useHistory();
const [state, dispatch] = useContext(Context);
const [isLoading, setisLoading] = useState(false);
+ const [isReloading, setisReloading] = useState(false);
const [socketOn, setSocketOn] = useState(false);
const location = useLocation();
+ const [referredFunction, setReferredFunction] = useState(null);
+
+ useEffect(() => {
+ location?.selectedFunction && setReferredFunction(location?.selectedFunction);
+ }, [location?.selectedFunction]);
const sortData = (data) => {
data.audit_logs?.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
@@ -68,98 +74,100 @@ const StationOverview = () => {
};
const getStationDetails = async () => {
+ setisReloading(true);
try {
- const data = await httpRequest(
- 'GET',
- `${ApiEndpoints.GET_STATION_DATA}?station_name=${stationName}&partition_number=${stationState?.stationPartition || -1}`
- );
+ const data = await httpRequest('GET', `${ApiEndpoints.GET_STATION_DATA}?station_name=${stationName}&partition_number=${stationState?.stationPartition || 1}`);
await sortData(data);
stationDispatch({ type: 'SET_SOCKET_DATA', payload: data });
stationDispatch({ type: 'SET_SCHEMA_TYPE', payload: data.schema.schema_type });
setisLoading(false);
+ setisReloading(false);
} catch (error) {
setisLoading(false);
+ setisReloading(false);
if (error.status === 404) {
history.push(pathDomains.stations);
}
}
};
+
useEffect(() => {
- if (socketOn) {
- getStationDetails();
- }
+ // if (socketOn) {
+ // getStationDetails();
+ // }
+ getStationDetails();
}, [stationState?.stationPartition || stationState?.stationSocketData?.total_messages || stationState?.stationSocketData?.total_dls_messages, stationName]);
+ // const startListen = async () => {
+ // const jc = JSONCodec();
+ // const sc = StringCodec();
+
+ // const listenForUpdates = async () => {
+ // try {
+ // if (sub) {
+ // for await (const msg of sub) {
+ // let data = jc.decode(msg.data);
+ // sortData(data);
+ // stationDispatch({ type: 'SET_SOCKET_DATA', payload: data });
+ // if (!socketOn) {
+ // setSocketOn(true);
+ // }
+ // }
+ // }
+ // } catch (err) {
+ // console.error(`Error receiving data updates for station overview:`, err);
+ // }
+ // };
+
+ // try {
+ // const rawBrokerName = await state.socket?.request(
+ // `$memphis_ws_subs.station_overview_data.${stationName}.${stationState?.stationPartition || -1}`,
+ // sc.encode('SUB')
+ // );
+ // if (rawBrokerName) {
+ // const brokerName = JSON.parse(sc.decode(rawBrokerName?._rdata))['name'];
+ // sub = state.socket?.subscribe(`$memphis_ws_pubs.station_overview_data.${stationName}.${stationState?.stationPartition || -1}.${brokerName}`);
+ // listenForUpdates();
+ // }
+ // } catch (err) {
+ // console.error('Error subscribing to station overview data:', err);
+ // }
+ // };
+
+ // const stopListen = async () => {
+ // if (sub) {
+ // try {
+ // await sub.unsubscribe();
+ // } catch (err) {
+ // console.error('Error unsubscribing from station overview data:', err);
+ // }
+ // }
+ // };
+
+ // useEffect(() => {
+ // if (state.socket) {
+ // startListen();
+ // }
+ // return () => {
+ // stopListen();
+ // };
+ // }, [state.socket, stationName]);
+
+ // useEffect(() => {
+ // if (sub && socketOn) {
+ // stopListen();
+ // startListen();
+ // }
+ // }, [stationState?.stationPartition, stationName]);
+
useEffect(() => {
setisLoading(true);
dispatch({ type: 'SET_ROUTE', payload: 'stations' });
getStaionMetaData();
getStationDetails();
- stationDispatch({ type: 'SET_STATION_PARTITION', payload: -1 });
+ stationDispatch({ type: 'SET_STATION_PARTITION', payload: 1 });
}, [stationName]);
- const startListen = async () => {
- const jc = JSONCodec();
- const sc = StringCodec();
-
- const listenForUpdates = async () => {
- try {
- if (sub) {
- for await (const msg of sub) {
- let data = jc.decode(msg.data);
- sortData(data);
- stationDispatch({ type: 'SET_SOCKET_DATA', payload: data });
- if (!socketOn) {
- setSocketOn(true);
- }
- }
- }
- } catch (err) {
- console.error(`Error receiving data updates for station overview:`, err);
- }
- };
-
- try {
- const rawBrokerName = await state.socket?.request(
- `$memphis_ws_subs.station_overview_data.${stationName}.${stationState?.stationPartition || -1}`,
- sc.encode('SUB')
- );
- if (rawBrokerName) {
- const brokerName = JSON.parse(sc.decode(rawBrokerName?._rdata))['name'];
- sub = state.socket?.subscribe(`$memphis_ws_pubs.station_overview_data.${stationName}.${stationState?.stationPartition || -1}.${brokerName}`);
- listenForUpdates();
- }
- } catch (err) {
- console.error('Error subscribing to station overview data:', err);
- }
- };
-
- const stopListen = async () => {
- if (sub) {
- try {
- await sub.unsubscribe();
- } catch (err) {
- console.error('Error unsubscribing from station overview data:', err);
- }
- }
- };
-
- useEffect(() => {
- if (state.socket) {
- startListen();
- }
- return () => {
- stopListen();
- };
- }, [state.socket, stationName]);
-
- useEffect(() => {
- if (sub && socketOn) {
- stopListen();
- startListen();
- }
- }, [stationState?.stationPartition, stationName]);
-
return (
@@ -174,7 +182,7 @@ const StationOverview = () => {
getStationDetails()} />
-
+
)}
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionCard/index.js b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionCard/index.js
index d2c16aa52..8febd0f17 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionCard/index.js
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionCard/index.js
@@ -23,7 +23,7 @@ import { httpRequest } from 'services/http';
import { convertLongNumbers } from 'services/valueConvertor';
import { StationStoreContext } from 'domain/stationOverview';
import FunctionDetails from 'domain/functions/components/functionDetails';
-import Drawer from "components/drawer";
+import Drawer from 'components/drawer';
import Tooltip from 'components/tooltip/tooltip';
export default function FunctionCard({
@@ -77,7 +77,7 @@ export default function FunctionCard({
try {
const data = await httpRequest(
'GET',
- `${ApiEndpoints.GET_FUNCTIONS_OVERVIEW}?station_name=${stationState?.stationMetaData?.name}&partition=${stationState?.stationPartition || -1}`
+ `${ApiEndpoints.GET_FUNCTIONS_OVERVIEW}?station_name=${stationState?.stationMetaData?.name}&partition=${stationState?.stationPartition || 1}`
);
stationDispatch({ type: 'SET_STATION_FUNCTIONS', payload: data });
} catch (e) {
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionData/index.js b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionData/index.js
index a365d76dc..bac3dbd0b 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionData/index.js
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionData/index.js
@@ -30,7 +30,7 @@ import { ReactComponent as CodeGrayIcon } from 'assets/images/codeGrayIcon.svg';
import { ReactComponent as PurpleQuestionMark } from 'assets/images/purpleQuestionMark.svg';
import { parsingDate, messageParser } from 'services/valueConvertor';
import Spinner from 'components/spinner';
-import Drawer from "components/drawer";
+import Drawer from 'components/drawer';
import { IoClose } from 'react-icons/io5';
import OverflowTip from 'components/tooltip/overflowtip';
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionsOverview/index.js b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionsOverview/index.js
index 02f11416b..79d74c95b 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/components/functionsOverview/index.js
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/components/functionsOverview/index.js
@@ -21,7 +21,7 @@ import { ReactComponent as AddFunctionIcon } from 'assets/images/addFunction.svg
import { ReactComponent as PlusIcon } from 'assets/images/plusIcon.svg';
import { ReactComponent as ProcessedIcon } from 'assets/images/processIcon.svg';
import { IoClose } from 'react-icons/io5';
-import Drawer from "components/drawer";
+import Drawer from 'components/drawer';
import dataPassLineLottie from 'assets/lotties/dataPassLine.json';
import dataPassLineEmptyLottie from 'assets/lotties/dataPassLineEmpty.json';
import Lottie from 'lottie-react';
@@ -34,7 +34,7 @@ import Spinner from 'components/spinner';
let sub;
-const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView }) => {
+const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView, loading }) => {
const [stationState, stationDispatch] = useContext(StationStoreContext);
const [currentFunction, setCurrentFunction] = useState(null);
const [functionDetails, setFunctionDetails] = useState(null);
@@ -129,7 +129,7 @@ const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView
try {
const data = await httpRequest(
'GET',
- `${ApiEndpoints.GET_FUNCTIONS_OVERVIEW}?station_name=${stationState?.stationMetaData?.name}&partition=${stationState?.stationPartition || -1}`
+ `${ApiEndpoints.GET_FUNCTIONS_OVERVIEW}?station_name=${stationState?.stationMetaData?.name}&partition=${stationState?.stationPartition || 1}`
);
stationDispatch({ type: 'SET_STATION_FUNCTIONS', payload: data });
setLoading(false);
@@ -154,7 +154,7 @@ const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView
const handleAddFunction = async (requestBody) => {
requestBody.station_name = stationState?.stationMetaData?.name;
- requestBody.partition = stationState?.stationPartition || -1;
+ requestBody.partition = stationState?.stationPartition || 1;
try {
await httpRequest('POST', ApiEndpoints.ADD_FUNCTION, requestBody);
getFunctionsOverview();
@@ -212,12 +212,11 @@ const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView
- {isLoading && (
+ {isLoading || loading ? (
- )}
- {stationState?.stationFunctions?.functions && stationState?.stationFunctions?.functions?.length > 0 && (
+ ) : stationState?.stationFunctions?.functions && stationState?.stationFunctions?.functions?.length > 0 ? (
@@ -225,7 +224,7 @@ const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView
{
setCurrentFunction(functionItem);
setOpenBottomDetails(true);
@@ -251,14 +250,15 @@ const FunctionsOverview = ({ referredFunction, dismissFunction, moveToGenralView
- )}
- {stationState?.stationFunctions?.functions?.length === 0 && (
-
-
setOpenFunctionsModal(true)}>
-
-
Add Function
+ ) : (
+ stationState?.stationFunctions?.functions?.length === 0 && (
+
+
setOpenFunctionsModal(true)}>
+
+
Add Function
+
-
+ )
)}
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/index.js b/ui_src/src/domain/stationOverview/stationObservabilty/index.js
index 5c81e8670..304d67998 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/index.js
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/index.js
@@ -24,7 +24,7 @@ import ProduceConsumList from './ProduceConsumList';
import { StationStoreContext } from '..';
import Messages from './messages';
-const StationObservabilty = ({ referredFunction }) => {
+const StationObservabilty = ({ referredFunction, loading }) => {
const [stationState, stationDispatch] = useContext(StationStoreContext);
return (
@@ -46,7 +46,9 @@ const StationObservabilty = ({ referredFunction }) => {
)}
-
+
+
+
{stationState?.stationMetaData?.is_native ? (
<>
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/messages/index.js b/ui_src/src/domain/stationOverview/stationObservabilty/messages/index.js
index ece08ac45..da456290e 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/messages/index.js
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/messages/index.js
@@ -47,9 +47,10 @@ import { ReactComponent as DisableIcon } from 'assets/images/disableIcon.svg';
import { Divider } from 'antd';
import FunctionsOverview from '../components/functionsOverview';
import CloudModal from 'components/cloudModal';
+import Spinner from 'components/spinner';
import { ReactComponent as CleanDisconnectedProducersIcon } from 'assets/images/clean_disconnected_producers.svg';
-const Messages = ({ referredFunction }) => {
+const Messages = ({ referredFunction, loading }) => {
const [stationState, stationDispatch] = useContext(StationStoreContext);
const [selectedRowIndex, setSelectedRowIndex] = useState(null);
const [selectedRowPartition, setSelectedRowPartition] = useState(null);
@@ -106,6 +107,10 @@ const Messages = ({ referredFunction }) => {
};
}, []);
+ useEffect(() => {
+ activeTab === 'functions' && setSelectedRowIndex(null);
+ }, [activeTab]);
+
useEffect(() => {
referredFunction && setActiveTab('functions');
setChoseReferredFunction(referredFunction);
@@ -135,10 +140,7 @@ const Messages = ({ referredFunction }) => {
const getStationDetails = async () => {
try {
- const data = await httpRequest(
- 'GET',
- `${ApiEndpoints.GET_STATION_DATA}?station_name=${stationName}&partition_number=${stationState?.stationPartition || -1}`
- );
+ const data = await httpRequest('GET', `${ApiEndpoints.GET_STATION_DATA}?station_name=${stationName}&partition_number=${stationState?.stationPartition || 1}`);
stationDispatch({ type: 'SET_SOCKET_DATA', payload: data });
stationDispatch({ type: 'SET_SCHEMA_TYPE', payload: data.schema.schema_type });
} catch (error) {}
@@ -243,7 +245,6 @@ const Messages = ({ referredFunction }) => {
return item.id !== messageId;
});
});
- console.log(messages);
}
setTimeout(() => {
setIgnoreProcced(false);
@@ -310,9 +311,9 @@ const Messages = ({ referredFunction }) => {
>
{selectedRowIndex === id && selectedRowPartition === partition &&
}
- {tabValue === tabs[1] ? message?.id : message?.message_seq}
- {tabValue === tabs[1] ? parsingDate(message?.message?.time_sent, true) : parsingDate(message?.created_at, true)}
- {tabValue === tabs[1] ? messageParser('string', message?.message?.data) : messageParser('string', message?.data)}
+
+
+
@@ -343,23 +344,29 @@ const Messages = ({ referredFunction }) => {
-
- handleScroll()}
- overscan={100}
- itemContent={(index, message) => listGenerator(index, message)}
- />
-
+ {loading ? (
+
+
+
+ ) : (
+
+ handleScroll()}
+ overscan={100}
+ itemContent={(index, message) => listGenerator(index, message)}
+ />
+
+ )}
);
};
@@ -597,7 +604,7 @@ const Messages = ({ referredFunction }) => {
showDivider
>
- {!isCloud() && stationState?.stationPartition !== -1 && (
+ {!isCloud() && stationState?.stationPartition !== 1 && (
<>
}
@@ -616,7 +623,7 @@ const Messages = ({ referredFunction }) => {
>
)}
- {stationState?.stationSocketData?.followers?.length > 0 && !isCloud() && stationState?.stationPartition !== -1 && (
+ {stationState?.stationSocketData?.followers?.length > 0 && !isCloud() && stationState?.stationPartition !== 1 && (
<>
}
@@ -702,6 +709,7 @@ const Messages = ({ referredFunction }) => {
referredFunction={choseReferredFunction}
dismissFunction={() => setChoseReferredFunction(null)}
moveToGenralView={() => setActiveTab('general')}
+ loading={loading}
/>
)}
diff --git a/ui_src/src/domain/stationOverview/stationObservabilty/messages/style.scss b/ui_src/src/domain/stationOverview/stationObservabilty/messages/style.scss
index 3f722e732..48ba012a3 100644
--- a/ui_src/src/domain/stationOverview/stationObservabilty/messages/style.scss
+++ b/ui_src/src/domain/stationOverview/stationObservabilty/messages/style.scss
@@ -216,6 +216,11 @@
display: flex;
flex-direction: column;
position: relative;
+ .loading {
+ display: flex;
+ justify-content: center;
+ padding-top: 50px;
+ }
.coulmns-table {
border-bottom: 1px solid #e9e9e9;
diff --git a/ui_src/src/domain/stationOverview/stationOverviewHeader/index.js b/ui_src/src/domain/stationOverview/stationOverviewHeader/index.js
index 2a705d0c3..338e12d07 100644
--- a/ui_src/src/domain/stationOverview/stationOverviewHeader/index.js
+++ b/ui_src/src/domain/stationOverview/stationOverviewHeader/index.js
@@ -45,7 +45,6 @@ import Button from 'components/button';
import Modal from 'components/modal';
import Auditing from '../components/auditing';
import RefreshButton from 'components/refreshButton';
-import AsyncTasks from 'components/asyncTasks';
import pathDomains from 'router';
import { StationStoreContext } from '..';
import { TIERED_STORAGE_UPLOAD_INTERVAL, LOCAL_STORAGE_ACCOUNT_ID, LOCAL_STORAGE_ENV, LOCAL_STORAGE_BROKER_HOST } from 'const/localStorageConsts';
@@ -234,7 +233,7 @@ const StationOverviewHeader = ({ refresh }) => {
handleRefreshStationData()} isLoading={isLoading} />
{stationState?.stationMetaData?.partitions_number > 1 && (
-
+
)}