apps loading optimalization

This commit is contained in:
Jan Prochazka
2022-01-28 15:15:58 +01:00
parent 81ec0d4909
commit 20938fb6ce
5 changed files with 82 additions and 33 deletions

View File

@@ -53,12 +53,9 @@ module.exports = {
}, },
async emitChangedDbApp(folder) { async emitChangedDbApp(folder) {
for (const conn of await connections.list()) { const used = await this.getUsedAppFolders();
for (const db of conn.databases || []) { if (used.includes(folder)) {
if (db[`useApp:${folder}`]) { socket.emitChanged('used-apps-changed');
socket.emitChanged(`db-apps-changed-${conn._id}-${db.name}`);
}
}
} }
}, },
@@ -112,26 +109,55 @@ module.exports = {
return `${name}${index}`; return `${name}${index}`;
}, },
getAppsForDb_meta: true, getUsedAppFolders_meta: true,
async getAppsForDb({ conid, database }) { async getUsedAppFolders() {
const connection = await connections.get({ conid }); const list = await connections.list();
if (!connection) return [];
const db = (connection.databases || []).find(x => x.name == database);
const apps = []; const apps = [];
const res = [];
if (db) { for (const connection of list) {
for (const db of connection.databases || []) {
for (const key of _.keys(db || {})) { for (const key of _.keys(db || {})) {
if (key.startsWith('useApp:') && db[key]) { if (key.startsWith('useApp:') && db[key]) {
apps.push(key.substring('useApp:'.length)); apps.push(key.substring('useApp:'.length));
} }
} }
} }
}
return _.uniq(apps);
},
getUsedApps_meta: true,
async getUsedApps() {
const apps = await this.getUsedAppFolders();
const res = [];
for (const folder of apps) { for (const folder of apps) {
res.push(await this.loadApp({ folder })); res.push(await this.loadApp({ folder }));
} }
return res; return res;
}, },
// getAppsForDb_meta: true,
// async getAppsForDb({ conid, database }) {
// const connection = await connections.get({ conid });
// if (!connection) return [];
// const db = (connection.databases || []).find(x => x.name == database);
// const apps = [];
// const res = [];
// if (db) {
// for (const key of _.keys(db || {})) {
// if (key.startsWith('useApp:') && db[key]) {
// apps.push(key.substring('useApp:'.length));
// }
// }
// }
// for (const folder of apps) {
// res.push(await this.loadApp({ folder }));
// }
// return res;
// },
loadApp_meta: true, loadApp_meta: true,
async loadApp({ folder }) { async loadApp({ folder }) {
const res = { const res = {

View File

@@ -178,9 +178,10 @@ module.exports = {
res = await this.datastore.insert(encrypted); res = await this.datastore.insert(encrypted);
} }
socket.emitChanged('connection-list-changed'); socket.emitChanged('connection-list-changed');
for (const db of connection.databases || []) { socket.emitChanged('used-apps-changed');
socket.emitChanged(`db-apps-changed-${connection._id}-${db.name}`); // for (const db of connection.databases || []) {
} // socket.emitChanged(`db-apps-changed-${connection._id}-${db.name}`);
// }
return res; return res;
}, },
@@ -204,7 +205,8 @@ module.exports = {
} }
const res = await this.datastore.update({ _id: conid }, { $set: { databases } }); const res = await this.datastore.update({ _id: conid }, { $set: { databases } });
socket.emitChanged('connection-list-changed'); socket.emitChanged('connection-list-changed');
socket.emitChanged(`db-apps-changed-${conid}-${database}`); socket.emitChanged('used-apps-changed');
// socket.emitChanged(`db-apps-changed-${conid}-${database}`);
return res; return res;
}, },

View File

@@ -26,7 +26,7 @@
import { getDatabaseMenuItems } from './DatabaseAppObject.svelte'; import { getDatabaseMenuItems } from './DatabaseAppObject.svelte';
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import getConnectionLabel from '../utility/getConnectionLabel'; import getConnectionLabel from '../utility/getConnectionLabel';
import { getDatabaseList, useDbApps } from '../utility/metadataLoaders'; import { getDatabaseList, useUsedApps } from '../utility/metadataLoaders';
import { getLocalStorage } from '../utility/storageCache'; import { getLocalStorage } from '../utility/storageCache';
import { apiCall } from '../utility/api'; import { apiCall } from '../utility/api';
@@ -187,7 +187,7 @@
} }
} }
$: apps = useDbApps({ conid: data?._id, database: data.defaultDatabase }); $: apps = useUsedApps();
</script> </script>
<AppObjectCore <AppObjectCore

View File

@@ -1,7 +1,13 @@
<script lang="ts" context="module"> <script lang="ts" context="module">
export const extractKey = props => props.name; export const extractKey = props => props.name;
export function filterAppsForDatabase(connection, database, $apps) {
const db = (connection?.databases || []).find(x => x.name == database);
return $apps.filter(app => db && db[`useApp:${app.name}`]);
}
export function getDatabaseMenuItems(connection, name, $extensions, $currentDatabase, $apps) { export function getDatabaseMenuItems(connection, name, $extensions, $currentDatabase, $apps) {
const apps = filterAppsForDatabase(connection, name, $apps);
const handleNewQuery = () => { const handleNewQuery = () => {
const tooltip = `${getConnectionLabel(connection)}\n${name}`; const tooltip = `${getConnectionLabel(connection)}\n${name}`;
openNewTab({ openNewTab({
@@ -169,7 +175,7 @@
const driver = findEngineDriver(connection, getExtensions()); const driver = findEngineDriver(connection, getExtensions());
const commands = _.flatten(($apps || []).map(x => x.commands || [])); const commands = _.flatten((apps || []).map(x => x.commands || []));
return [ return [
{ onClick: handleNewQuery, text: 'New query', isNewQuery: true }, { onClick: handleNewQuery, text: 'New query', isNewQuery: true },
@@ -233,7 +239,7 @@
import { showSnackbarSuccess } from '../utility/snackbar'; import { showSnackbarSuccess } from '../utility/snackbar';
import { findEngineDriver } from 'dbgate-tools'; import { findEngineDriver } from 'dbgate-tools';
import InputTextModal from '../modals/InputTextModal.svelte'; import InputTextModal from '../modals/InputTextModal.svelte';
import { getDatabaseInfo, useDbApps } from '../utility/metadataLoaders'; import { getDatabaseInfo, useUsedApps } from '../utility/metadataLoaders';
import { openJsonDocument } from '../tabs/JsonTab.svelte'; import { openJsonDocument } from '../tabs/JsonTab.svelte';
import { apiCall } from '../utility/api'; import { apiCall } from '../utility/api';
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte'; import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
@@ -247,7 +253,7 @@
} }
$: isPinned = !!$pinnedDatabases.find(x => x.name == data.name && x.connection?._id == data.connection?._id); $: isPinned = !!$pinnedDatabases.find(x => x.name == data.name && x.connection?._id == data.connection?._id);
$: apps = useDbApps({ conid: data?.connection?._id, database: data?.name }); $: apps = useUsedApps();
</script> </script>
<AppObjectCore <AppObjectCore

View File

@@ -115,10 +115,16 @@ const appFilesLoader = ({ folder }) => ({
reloadTrigger: `app-files-changed-${folder}`, reloadTrigger: `app-files-changed-${folder}`,
}); });
const dbAppsLoader = ({ conid, database }) => ({ // const dbAppsLoader = ({ conid, database }) => ({
url: 'apps/get-apps-for-db', // url: 'apps/get-apps-for-db',
params: { conid, database }, // params: { conid, database },
reloadTrigger: `db-apps-changed-${conid}-${database}`, // reloadTrigger: `db-apps-changed-${conid}-${database}`,
// });
const usedAppsLoader = ({ conid, database }) => ({
url: 'apps/get-used-apps',
params: { },
reloadTrigger: `used-apps-changed`,
}); });
const serverStatusLoader = () => ({ const serverStatusLoader = () => ({
@@ -433,13 +439,22 @@ export function useAppFolders(args = {}) {
return useCore(appFoldersLoader, args); return useCore(appFoldersLoader, args);
} }
export function getDbApps(args = {}) {
return getCore(dbAppsLoader, args);
export function getUsedApps(args = {}) {
return getCore(usedAppsLoader, args);
} }
export function useDbApps(args = {}) { export function useUsedApps(args = {}) {
return useCore(dbAppsLoader, args); return useCore(usedAppsLoader, args);
} }
// export function getDbApps(args = {}) {
// return getCore(dbAppsLoader, args);
// }
// export function useDbApps(args = {}) {
// return useCore(dbAppsLoader, args);
// }
export function getInstalledPlugins(args = {}) { export function getInstalledPlugins(args = {}) {
return getCore(installedPluginsLoader, args) || []; return getCore(installedPluginsLoader, args) || [];
} }