optimalized connection ping

This commit is contained in:
Jan Prochazka
2021-01-28 08:16:31 +01:00
parent a3294950a4
commit ca4ff95316
3 changed files with 22 additions and 7 deletions

View File

@@ -8,6 +8,7 @@ const lock = new AsyncLock();
module.exports = { module.exports = {
opened: [], opened: [],
closed: {}, closed: {},
lastPinged: {},
handle_databases(conid, { databases }) { handle_databases(conid, { databases }) {
const existing = this.opened.find(x => x.conid == conid); const existing = this.opened.find(x => x.conid == conid);
@@ -88,7 +89,12 @@ module.exports = {
ping_meta: 'post', ping_meta: 'post',
async ping({ connections }) { async ping({ connections }) {
await Promise.all( await Promise.all(
connections.map(async conid => { _.uniq(connections).map(async conid => {
const last = this.lastPinged[conid];
if (last && new Date().getTime() - last < 30 * 1000) {
return Promise.resolve();
}
this.lastPinged[conid] = new Date().getTime();
const opened = await this.ensureOpened(conid); const opened = await this.ensureOpened(conid);
opened.subprocess.send({ msgtype: 'ping' }); opened.subprocess.send({ msgtype: 'ping' });
}) })

View File

@@ -40,7 +40,7 @@ function Menu({ data }) {
setOpenedConnections(list => list.filter(x => x != data._id)); setOpenedConnections(list => list.filter(x => x != data._id));
}; };
const handleConnect = () => { const handleConnect = () => {
setOpenedConnections(list => [...list, data._id]); setOpenedConnections(list => _.uniq([...list, data._id]));
}; };
return ( return (
<> <>
@@ -72,7 +72,7 @@ function ConnectionAppObject({ data, commonProps }) {
const extensions = useExtensions(); const extensions = useExtensions();
const isBold = _.get(currentDatabase, 'connection._id') == _id; const isBold = _.get(currentDatabase, 'connection._id') == _id;
const onClick = () => setOpenedConnections(c => [...c, _id]); const onClick = () => setOpenedConnections(c => _.uniq([...c, _id]));
let statusIcon = null; let statusIcon = null;
let statusTitle = null; let statusTitle = null;

View File

@@ -7,9 +7,11 @@ export default function ConnectionsPinger({ children }) {
const openedConnections = useOpenedConnections(); const openedConnections = useOpenedConnections();
const currentDatabase = useCurrentDatabase(); const currentDatabase = useCurrentDatabase();
const doPing = () => { const doServerPing = () => {
axios.post('server-connections/ping', { connections: openedConnections }); axios.post('server-connections/ping', { connections: openedConnections });
};
const doDatabasePing = () => {
const database = _.get(currentDatabase, 'name'); const database = _.get(currentDatabase, 'name');
const conid = _.get(currentDatabase, 'connection._id'); const conid = _.get(currentDatabase, 'connection._id');
if (conid && database) { if (conid && database) {
@@ -18,9 +20,16 @@ export default function ConnectionsPinger({ children }) {
}; };
React.useEffect(() => { React.useEffect(() => {
doPing(); doServerPing();
const handle = window.setInterval(doPing, 30 * 1000); const handle = window.setInterval(doServerPing, 30 * 1000);
return () => window.clearInterval(handle); return () => window.clearInterval(handle);
}, [openedConnections, currentDatabase]); }, [openedConnections]);
React.useEffect(() => {
doDatabasePing();
const handle = window.setInterval(doDatabasePing, 30 * 1000);
return () => window.clearInterval(handle);
}, [currentDatabase]);
return children; return children;
} }