From 4a3f07d4842bf613252bd031fa5871d5f04e5673 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Fri, 17 Feb 2023 11:59:49 +0530 Subject: [PATCH 1/4] chore(noco): avoid replacing __dirname when taking prod build Signed-off-by: Pranav C --- packages/nocodb/docker/webpack.config.js | 5 ++++- packages/nocodb/webpack.config.js | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/nocodb/docker/webpack.config.js b/packages/nocodb/docker/webpack.config.js index 9513b6e73a..87675b32be 100644 --- a/packages/nocodb/docker/webpack.config.js +++ b/packages/nocodb/docker/webpack.config.js @@ -56,4 +56,7 @@ module.exports = { // }) ], target: 'node', -}; \ No newline at end of file + node: { + __dirname: false, + }, +}; diff --git a/packages/nocodb/webpack.config.js b/packages/nocodb/webpack.config.js index 9c189cc430..c5c927d79f 100644 --- a/packages/nocodb/webpack.config.js +++ b/packages/nocodb/webpack.config.js @@ -40,7 +40,8 @@ module.exports = { globalObject: "typeof self !== 'undefined' ? self : this" }, node: { - fs: 'empty' + fs: 'empty', + __dirname: false, }, plugins: [ new webpack.EnvironmentPlugin([ @@ -58,5 +59,5 @@ module.exports = { // }, []), ], - target: 'node', -}; \ No newline at end of file + target: 'node' +}; From 677126933ebf14e5d6bca660d0480ea4fa1fbc98 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Fri, 17 Feb 2023 15:42:45 +0530 Subject: [PATCH 2/4] chore: copy static files relative to build file Signed-off-by: Pranav C --- packages/nocodb/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nocodb/Dockerfile b/packages/nocodb/Dockerfile index 43b257df5c..1d82b0f199 100644 --- a/packages/nocodb/Dockerfile +++ b/packages/nocodb/Dockerfile @@ -31,9 +31,9 @@ COPY ./package*.json ./ COPY ./docker/main.js ./docker/main.js #COPY ./docker/start.sh /usr/src/appEntry/start.sh COPY ./docker/start-litestream.sh /usr/src/appEntry/start.sh -COPY ./src/lib/public/css/*.css /usr/src/appEntry/public/css/ -COPY ./src/lib/public/js/*.js /usr/src/appEntry/public/js/ -COPY ./src/lib/public/favicon.ico /usr/src/appEntry/public/ +COPY ./src/lib/public/css/*.css ./docker/public/css/ +COPY ./src/lib/public/js/*.js ./docker/public/js/ +COPY ./src/lib/public/favicon.ico ./docker/public/ # install production dependencies, # reduce node_module size with modclean & removing sqlite deps, From 40c72d15ed777856d8b3f8b1e605f2c4a9c27db9 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Fri, 17 Feb 2023 16:29:25 +0530 Subject: [PATCH 3/4] chore: exclude nocodb package from modclean to avoid removing public assets Signed-off-by: Pranav C --- .github/workflows/release-executables.yml | 2 +- .github/workflows/release-timely-executables.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-executables.yml b/.github/workflows/release-executables.yml index c05211abe8..02e26036ee 100644 --- a/.github/workflows/release-executables.yml +++ b/.github/workflows/release-executables.yml @@ -87,7 +87,7 @@ jobs: ./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=linux --fallback-to-build --target_arch=arm64 --target_libc=musl # clean up code to optimize size - npx modclean --patterns="default:*" --ignore="nc-lib-gui/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + npx modclean --patterns="default:*" --ignore="nc-lib-gui/**,nocodb/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run # build executables npm run build diff --git a/.github/workflows/release-timely-executables.yml b/.github/workflows/release-timely-executables.yml index b8da4543e3..ab7706709c 100644 --- a/.github/workflows/release-timely-executables.yml +++ b/.github/workflows/release-timely-executables.yml @@ -103,7 +103,7 @@ jobs: # clean up code to optimize size - npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,nocodb-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run # build executables npm run build From 6b827c0bf77e5e14c615f4a5a5c89ce445880f99 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Fri, 17 Feb 2023 17:00:30 +0530 Subject: [PATCH 4/4] chore: add response time header Signed-off-by: Pranav C --- .../src/lib/meta/api/dataApis/dataAliasApis.ts | 13 +++++++++++-- .../nocodb/src/lib/meta/api/helpers/apiHelpers.ts | 4 ++++ packages/nocodb/src/lib/meta/api/helpers/index.ts | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/nocodb/src/lib/meta/api/helpers/apiHelpers.ts diff --git a/packages/nocodb/src/lib/meta/api/dataApis/dataAliasApis.ts b/packages/nocodb/src/lib/meta/api/dataApis/dataAliasApis.ts index e3a340268b..4ef4b7ce5e 100644 --- a/packages/nocodb/src/lib/meta/api/dataApis/dataAliasApis.ts +++ b/packages/nocodb/src/lib/meta/api/dataApis/dataAliasApis.ts @@ -10,11 +10,16 @@ import ncMetaAclMw from '../../helpers/ncMetaAclMw'; import { getViewAndModelFromRequestByAliasOrId } from './helpers'; import apiMetrics from '../../helpers/apiMetrics'; import getAst from '../../../db/sql-data-mapper/lib/sql/helpers/getAst'; +import { parseHrtimeToSeconds } from '../helpers'; // todo: Handle the error case where view doesnt belong to model async function dataList(req: Request, res: Response) { + const startTime = process.hrtime(); const { model, view } = await getViewAndModelFromRequestByAliasOrId(req); - res.json(await getDataList(model, view, req)); + const responseData = await getDataList(model, view, req); + const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(startTime)); + res.setHeader('xc-db-response', elapsedSeconds); + res.json(responseData); } async function dataFindOne(req: Request, res: Response) { @@ -226,8 +231,12 @@ async function dataExist(req: Request, res: Response) { // todo: Handle the error case where view doesnt belong to model async function groupedDataList(req: Request, res: Response) { + const startTime = process.hrtime(); const { model, view } = await getViewAndModelFromRequestByAliasOrId(req); - res.json(await getGroupedDataList(model, view, req)); + const groupedData = await getGroupedDataList(model, view, req); + const elapsedSeconds = parseHrtimeToSeconds(process.hrtime(startTime)); + res.setHeader('xc-db-response', elapsedSeconds); + res.json(groupedData); } async function getGroupedDataList(model, view: View, req) { diff --git a/packages/nocodb/src/lib/meta/api/helpers/apiHelpers.ts b/packages/nocodb/src/lib/meta/api/helpers/apiHelpers.ts new file mode 100644 index 0000000000..4ffeeb82b6 --- /dev/null +++ b/packages/nocodb/src/lib/meta/api/helpers/apiHelpers.ts @@ -0,0 +1,4 @@ +export function parseHrtimeToSeconds(hrtime) { + const seconds = (hrtime[0] + hrtime[1] / 1e6).toFixed(3); + return seconds; +} diff --git a/packages/nocodb/src/lib/meta/api/helpers/index.ts b/packages/nocodb/src/lib/meta/api/helpers/index.ts index 1b1e81ecfa..1fd8d4367b 100644 --- a/packages/nocodb/src/lib/meta/api/helpers/index.ts +++ b/packages/nocodb/src/lib/meta/api/helpers/index.ts @@ -1,4 +1,5 @@ import { populateMeta } from './populateMeta'; export * from './columnHelpers'; +export * from './apiHelpers'; export { populateMeta };