volatile connection map

This commit is contained in:
Jan Prochazka
2024-08-05 14:03:48 +02:00
parent 97aa563fe7
commit f867cc5a1e
4 changed files with 46 additions and 17 deletions

View File

@@ -4,13 +4,17 @@
import { useDatabaseList } from '../utility/metadataLoaders'; import { useDatabaseList } from '../utility/metadataLoaders';
import AppObjectList from './AppObjectList.svelte'; import AppObjectList from './AppObjectList.svelte';
import * as databaseAppObject from './DatabaseAppObject.svelte'; import * as databaseAppObject from './DatabaseAppObject.svelte';
import { volatileConnectionMapStore } from '../utility/api';
export let filter; export let filter;
export let data; export let data;
export let passProps; export let passProps;
$: databases = useDatabaseList({ conid: data._id }); $: databases = useDatabaseList({ conid: data._id });
console.log('USED DATABASE LIST', data._id); $: console.log('USED DATABASE LIST', data._id);
// $: databases = useDatabaseList({ conid: $volatileConnectionMapStore[data._id] || data._id });
// $: console.log('USED DATABASE LIST', $volatileConnectionMapStore[data._id] || data._id);
</script> </script>
<AppObjectList <AppObjectList

View File

@@ -21,8 +21,20 @@ let apiLogging = false;
let apiDisabled = false; let apiDisabled = false;
const disabledOnOauth = isOauthCallback(); const disabledOnOauth = isOauthCallback();
const volatileConnectionMap = {}; export const volatileConnectionMapStore = writable({});
const volatileConnectionMapInv = {}; export const volatileConnectionMapInvStore = writable({});
let volatileConnectionMapValue = {};
volatileConnectionMapStore.subscribe(value => {
volatileConnectionMapValue = value;
});
export const getVolatileConnectionMap = () => volatileConnectionMapValue;
let volatileConnectionMapInvValue = {};
volatileConnectionMapInvStore.subscribe(value => {
volatileConnectionMapInvValue = value;
});
export const getVolatileConnectionInvMap = () => volatileConnectionMapInvValue;
export function disableApi() { export function disableApi() {
apiDisabled = true; apiDisabled = true;
@@ -33,23 +45,29 @@ export function enableApi() {
} }
export function setVolatileConnectionRemapping(existingConnectionId, volatileConnectionId) { export function setVolatileConnectionRemapping(existingConnectionId, volatileConnectionId) {
volatileConnectionMap[existingConnectionId] = volatileConnectionId; volatileConnectionMapStore.update(x => ({
volatileConnectionMapInv[volatileConnectionId] = existingConnectionId; ...x,
[existingConnectionId]: volatileConnectionId,
}));
volatileConnectionMapInvStore.update(x => ({
...x,
[volatileConnectionId]: existingConnectionId,
}));
} }
export function getVolatileRemapping(conid) { export function getVolatileRemapping(conid) {
return volatileConnectionMap[conid] || conid; return volatileConnectionMapValue[conid] || conid;
} }
export function getVolatileRemappingInv(conid) { export function getVolatileRemappingInv(conid) {
return volatileConnectionMapInv[conid] || conid; return volatileConnectionMapInvValue[conid] || conid;
} }
export function removeVolatileMapping(conid) { export function removeVolatileMapping(conid) {
const mapped = volatileConnectionMap[conid]; const mapped = volatileConnectionMapValue[conid];
if (mapped) { if (mapped) {
delete volatileConnectionMap[conid]; volatileConnectionMapStore.update(x => _.omit(x, conid));
delete volatileConnectionMapInv[mapped]; volatileConnectionMapInvStore.update(x => _.omit(x, mapped));
} }
} }
@@ -94,16 +112,16 @@ function processApiResponse(route, args, resp) {
export function transformApiArgs(args) { export function transformApiArgs(args) {
return _.mapValues(args, (v, k) => { return _.mapValues(args, (v, k) => {
if (k == 'conid' && v && volatileConnectionMap[v]) return volatileConnectionMap[v]; if (k == 'conid' && v && volatileConnectionMapValue[v]) return volatileConnectionMapValue[v];
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMap[x] || x); if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapValue[x] || x);
return v; return v;
}); });
} }
export function transformApiArgsInv(args) { export function transformApiArgsInv(args) {
return _.mapValues(args, (v, k) => { return _.mapValues(args, (v, k) => {
if (k == 'conid' && v && volatileConnectionMapInv[v]) return volatileConnectionMapInv[v]; if (k == 'conid' && v && volatileConnectionMapInvValue[v]) return volatileConnectionMapInvValue[v];
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInv[x] || x); if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInvValue[x] || x);
return v; return v;
}); });
} }
@@ -221,7 +239,7 @@ export function useApiCall(route, args, defaultValue) {
} }
export function getVolatileConnections() { export function getVolatileConnections() {
return Object.values(volatileConnectionMap); return Object.values(volatileConnectionMapValue);
} }
export function installNewVolatileConnectionListener() { export function installNewVolatileConnectionListener() {

View File

@@ -95,7 +95,9 @@ export async function subscribeCacheChange(reloadTrigger, cacheKey, reloadHandle
if (!subscriptionsByReloadTrigger[itemString]) { if (!subscriptionsByReloadTrigger[itemString]) {
subscriptionsByReloadTrigger[itemString] = []; subscriptionsByReloadTrigger[itemString] = [];
} }
console.log('+++++++++++++ SUBSCRIBE', itemString);
subscriptionsByReloadTrigger[itemString].push(reloadHandler); subscriptionsByReloadTrigger[itemString].push(reloadHandler);
console.log('SUBSCRIBED', subscriptionsByReloadTrigger[itemString]);
} }
} }
@@ -108,6 +110,7 @@ export async function unsubscribeCacheChange(reloadTrigger, cacheKey, reloadHand
); );
} }
if (subscriptionsByReloadTrigger[itemString].length == 0) { if (subscriptionsByReloadTrigger[itemString].length == 0) {
console.log('------------- UNSUBSCRIBE', itemString);
delete subscriptionsByReloadTrigger[itemString]; delete subscriptionsByReloadTrigger[itemString];
} }
} }
@@ -118,6 +121,7 @@ export function dispatchCacheChange(reloadTrigger) {
for (const item of getAsArray(reloadTrigger)) { for (const item of getAsArray(reloadTrigger)) {
const itemString = stableStringify(transformApiArgsInv(item)); const itemString = stableStringify(transformApiArgsInv(item));
console.log('@@@@@@@@@@@@@@@@@@@@@@@@@ NOTIFYING ', itemString, subscriptionsByReloadTrigger[itemString]);
if (subscriptionsByReloadTrigger[itemString]) { if (subscriptionsByReloadTrigger[itemString]) {
for (const handler of subscriptionsByReloadTrigger[itemString]) { for (const handler of subscriptionsByReloadTrigger[itemString]) {
handler(); handler();

View File

@@ -22,7 +22,7 @@
import { useConnectionColorFactory } from '../utility/useConnectionColor'; import { useConnectionColorFactory } from '../utility/useConnectionColor';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import CloseSearchButton from '../buttons/CloseSearchButton.svelte'; import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
import { apiCall, getVolatileRemapping } from '../utility/api'; import { apiCall, volatileConnectionMapStore } from '../utility/api';
import LargeButton from '../buttons/LargeButton.svelte'; import LargeButton from '../buttons/LargeButton.svelte';
import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons'; import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons';
import { safeJsonParse } from 'dbgate-tools'; import { safeJsonParse } from 'dbgate-tools';
@@ -37,7 +37,10 @@
$: connectionsWithStatus = $: connectionsWithStatus =
$connections && $serverStatus $connections && $serverStatus
? $connections.map(conn => ({ ...conn, status: $serverStatus[getVolatileRemapping(conn._id)] })) ? $connections.map(conn => ({
...conn,
status: $serverStatus[$volatileConnectionMapStore[conn._id] || conn._id],
}))
: $connections; : $connections;
$: connectionsWithStatusFiltered = connectionsWithStatus?.filter( $: connectionsWithStatusFiltered = connectionsWithStatus?.filter(