mirror of
https://github.com/hcengineering/platform.git
synced 2025-06-09 09:20:54 +00:00
UBERF-7428: Fix memory issues (#5940)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
3394d1ad82
commit
51383caa92
@ -962,9 +962,6 @@ dependencies:
|
|||||||
'@tiptap/extension-mention':
|
'@tiptap/extension-mention':
|
||||||
specifier: ^2.2.4
|
specifier: ^2.2.4
|
||||||
version: 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(@tiptap/suggestion@2.2.4)
|
version: 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)(@tiptap/suggestion@2.2.4)
|
||||||
'@tiptap/extension-paragraph':
|
|
||||||
specifier: ^2.2.4
|
|
||||||
version: 2.2.4(@tiptap/core@2.2.4)
|
|
||||||
'@tiptap/extension-placeholder':
|
'@tiptap/extension-placeholder':
|
||||||
specifier: ^2.2.4
|
specifier: ^2.2.4
|
||||||
version: 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)
|
version: 2.2.4(@tiptap/core@2.2.4)(@tiptap/pm@2.2.4)
|
||||||
@ -1122,8 +1119,8 @@ dependencies:
|
|||||||
specifier: 4.21.5
|
specifier: 4.21.5
|
||||||
version: 4.21.5
|
version: 4.21.5
|
||||||
bson:
|
bson:
|
||||||
specifier: ^6.3.0
|
specifier: ^6.8.0
|
||||||
version: 6.3.0
|
version: 6.8.0
|
||||||
bufferutil:
|
bufferutil:
|
||||||
specifier: ^4.0.7
|
specifier: ^4.0.7
|
||||||
version: 4.0.8
|
version: 4.0.8
|
||||||
@ -1302,8 +1299,8 @@ dependencies:
|
|||||||
specifier: ^8.0.0
|
specifier: ^8.0.0
|
||||||
version: 8.0.0
|
version: 8.0.0
|
||||||
mongodb:
|
mongodb:
|
||||||
specifier: ^6.3.0
|
specifier: ^6.8.0
|
||||||
version: 6.3.0
|
version: 6.8.0
|
||||||
morgan:
|
morgan:
|
||||||
specifier: ^1.10.0
|
specifier: ^1.10.0
|
||||||
version: 1.10.0
|
version: 1.10.0
|
||||||
@ -4703,6 +4700,12 @@ packages:
|
|||||||
sparse-bitfield: 3.0.3
|
sparse-bitfield: 3.0.3
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@mongodb-js/saslprep@1.1.7:
|
||||||
|
resolution: {integrity: sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==}
|
||||||
|
dependencies:
|
||||||
|
sparse-bitfield: 3.0.3
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2:
|
/@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2:
|
||||||
resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==}
|
resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
@ -9114,6 +9117,11 @@ packages:
|
|||||||
engines: {node: '>=16.20.1'}
|
engines: {node: '>=16.20.1'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/bson@6.8.0:
|
||||||
|
resolution: {integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==}
|
||||||
|
engines: {node: '>=16.20.1'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/buffer-crc32@0.2.13:
|
/buffer-crc32@0.2.13:
|
||||||
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
|
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -14275,6 +14283,38 @@ packages:
|
|||||||
mongodb-connection-string-url: 3.0.0
|
mongodb-connection-string-url: 3.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/mongodb@6.8.0:
|
||||||
|
resolution: {integrity: sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==}
|
||||||
|
engines: {node: '>=16.20.1'}
|
||||||
|
peerDependencies:
|
||||||
|
'@aws-sdk/credential-providers': ^3.188.0
|
||||||
|
'@mongodb-js/zstd': ^1.1.0
|
||||||
|
gcp-metadata: ^5.2.0
|
||||||
|
kerberos: ^2.0.1
|
||||||
|
mongodb-client-encryption: '>=6.0.0 <7'
|
||||||
|
snappy: ^7.2.2
|
||||||
|
socks: ^2.7.1
|
||||||
|
peerDependenciesMeta:
|
||||||
|
'@aws-sdk/credential-providers':
|
||||||
|
optional: true
|
||||||
|
'@mongodb-js/zstd':
|
||||||
|
optional: true
|
||||||
|
gcp-metadata:
|
||||||
|
optional: true
|
||||||
|
kerberos:
|
||||||
|
optional: true
|
||||||
|
mongodb-client-encryption:
|
||||||
|
optional: true
|
||||||
|
snappy:
|
||||||
|
optional: true
|
||||||
|
socks:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@mongodb-js/saslprep': 1.1.7
|
||||||
|
bson: 6.8.0
|
||||||
|
mongodb-connection-string-url: 3.0.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/monitor-event-loop-delay@1.0.0:
|
/monitor-event-loop-delay@1.0.0:
|
||||||
resolution: {integrity: sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==}
|
resolution: {integrity: sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -18517,7 +18557,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/account-service.tgz:
|
file:projects/account-service.tgz:
|
||||||
resolution: {integrity: sha512-odoY6+BB+uYimKUlrE0R6U1U5Bjhlj0XfS9dqgLp1A3lgNipoUN3fWz5/uLEHWiW98dFD5uMGDgwqA6E2zV6CQ==, tarball: file:projects/account-service.tgz}
|
resolution: {integrity: sha512-6mRpNCi4FRpm+ks+wuuSDxGFA9Zvjn++OdmqzbwuOMYj6veUSWc3xwDNV/sf3uoqr9+XvGmcJ97iSIkmtGu+TA==, tarball: file:projects/account-service.tgz}
|
||||||
name: '@rush-temp/account-service'
|
name: '@rush-temp/account-service'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -18543,7 +18583,7 @@ packages:
|
|||||||
koa-bodyparser: 4.4.1
|
koa-bodyparser: 4.4.1
|
||||||
koa-morgan: 1.0.1
|
koa-morgan: 1.0.1
|
||||||
koa-router: 12.0.1
|
koa-router: 12.0.1
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
||||||
@ -18567,7 +18607,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/account.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
file:projects/account.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-yDFeuRyxP9j9kjNWqXpm15LTru2NtfkG5IAgPDjL9twaxPA5GFGVmYBgtRnIKH6HFEZ/GGg/X4OFhLKEXftqhA==, tarball: file:projects/account.tgz}
|
resolution: {integrity: sha512-JTnXiO6DfjRlbofOhtUcTRVJbvTjlVGRk+n1uFvLhQrH0JtaGxlpeeXRAtc49yVlMGr6PuEsiw64yl/HvXuIGQ==, tarball: file:projects/account.tgz}
|
||||||
id: file:projects/account.tgz
|
id: file:projects/account.tgz
|
||||||
name: '@rush-temp/account'
|
name: '@rush-temp/account'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -18583,7 +18623,7 @@ packages:
|
|||||||
eslint-plugin-n: 15.7.0(eslint@8.56.0)
|
eslint-plugin-n: 15.7.0(eslint@8.56.0)
|
||||||
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
||||||
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
node-fetch: 2.7.0
|
node-fetch: 2.7.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
@ -18892,7 +18932,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2):
|
file:projects/auth-providers.tgz(@types/node@20.11.19)(esbuild@0.20.1)(ts-node@10.9.2):
|
||||||
resolution: {integrity: sha512-4tWfWzmcPRnHOjt/ehG45iipHiGpDU/DTo++Ryn1L2XP2EiR3QbGoxwnndj+PUT9he+yz5cEwhqUWamI9eUyQA==, tarball: file:projects/auth-providers.tgz}
|
resolution: {integrity: sha512-PDpwpxlOBO4EtMwLUAdsxCl7tOsiiPSA5ob/54WvKYhaoADxg9VAZAEcuyPZgvjnRQFOiRicaSjtNl8gKvfhGw==, tarball: file:projects/auth-providers.tgz}
|
||||||
id: file:projects/auth-providers.tgz
|
id: file:projects/auth-providers.tgz
|
||||||
name: '@rush-temp/auth-providers'
|
name: '@rush-temp/auth-providers'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -18918,7 +18958,7 @@ packages:
|
|||||||
koa-passport: 6.0.0
|
koa-passport: 6.0.0
|
||||||
koa-router: 12.0.1
|
koa-router: 12.0.1
|
||||||
koa-session: 6.4.0
|
koa-session: 6.4.0
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
passport-github2: 0.1.12
|
passport-github2: 0.1.12
|
||||||
passport-google-oauth20: 2.0.0
|
passport-google-oauth20: 2.0.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
@ -19546,7 +19586,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/collaborator.tgz(@tiptap/pm@2.2.4)(bufferutil@4.0.8)(prosemirror-model@1.19.4)(utf-8-validate@6.0.3):
|
file:projects/collaborator.tgz(@tiptap/pm@2.2.4)(bufferutil@4.0.8)(prosemirror-model@1.19.4)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-yJ1/DLdH3G4e0CN73FplVGAE5smf+ajGx9AEu6DsfH3AAt7BWyzRqko0Ruhg+p8oqQloOXDnsEW+wWGEvfir1g==, tarball: file:projects/collaborator.tgz}
|
resolution: {integrity: sha512-RHYlR+704EhdJDPooKU+D4BzSDC0Ov00TritI4GOFPnTBbbVkQHCWLqowr1om/rTE/lJ3oHTGPwMBkkfNvAkpw==, tarball: file:projects/collaborator.tgz}
|
||||||
id: file:projects/collaborator.tgz
|
id: file:projects/collaborator.tgz
|
||||||
name: '@rush-temp/collaborator'
|
name: '@rush-temp/collaborator'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -19576,7 +19616,7 @@ packages:
|
|||||||
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
||||||
express: 4.18.3
|
express: 4.18.3
|
||||||
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
||||||
@ -22571,7 +22611,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/mongo.tgz(esbuild@0.20.1)(ts-node@10.9.2):
|
file:projects/mongo.tgz(esbuild@0.20.1)(ts-node@10.9.2):
|
||||||
resolution: {integrity: sha512-EDE13Vc6CSTARNf3Iz3F2hyTzJeZxqbh9H/+lnFoP9c2qnuf9xFiYVbvTY+Id8uiA7wRZscXJctVX3j+I4Z7iw==, tarball: file:projects/mongo.tgz}
|
resolution: {integrity: sha512-KZpBO9U1lb9A5pxEVDhez06AEKqg9YKivXmefDmsW53CBgqV9so2eprzgsRlxIQvPz/aMTI7s0bMGL9WUjseRQ==, tarball: file:projects/mongo.tgz}
|
||||||
id: file:projects/mongo.tgz
|
id: file:projects/mongo.tgz
|
||||||
name: '@rush-temp/mongo'
|
name: '@rush-temp/mongo'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -22580,14 +22620,14 @@ packages:
|
|||||||
'@types/node': 20.11.19
|
'@types/node': 20.11.19
|
||||||
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
|
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3)
|
||||||
'@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
|
'@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3)
|
||||||
bson: 6.3.0
|
bson: 6.8.0
|
||||||
eslint: 8.56.0
|
eslint: 8.56.0
|
||||||
eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3)
|
eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint-plugin-import@2.29.1)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.56.0)(typescript@5.3.3)
|
||||||
eslint-plugin-import: 2.29.1(eslint@8.56.0)
|
eslint-plugin-import: 2.29.1(eslint@8.56.0)
|
||||||
eslint-plugin-n: 15.7.0(eslint@8.56.0)
|
eslint-plugin-n: 15.7.0(eslint@8.56.0)
|
||||||
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
||||||
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
|
prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
@ -22854,7 +22894,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/pod-account.tgz:
|
file:projects/pod-account.tgz:
|
||||||
resolution: {integrity: sha512-UhnxVrB84T40bimL1lr3Hli/dEfC9K3Y0QYBSUFpeNBx65UO59xq+unu77ej1Ckzbs7GebTvpyZ2kLoKVVnCwQ==, tarball: file:projects/pod-account.tgz}
|
resolution: {integrity: sha512-R8dx0uU9jPZ0AmS23UqoxKen0+94WDDHy8YfwhIVuZge+FMUwSBR/7nKBry0bNIyHA2C8yl8AxfJa/o2YedxzQ==, tarball: file:projects/pod-account.tgz}
|
||||||
name: '@rush-temp/pod-account'
|
name: '@rush-temp/pod-account'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -22878,7 +22918,7 @@ packages:
|
|||||||
koa: 2.15.0
|
koa: 2.15.0
|
||||||
koa-bodyparser: 4.4.1
|
koa-bodyparser: 4.4.1
|
||||||
koa-router: 12.0.1
|
koa-router: 12.0.1
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
|
prettier-plugin-svelte: 3.2.1(prettier@3.2.5)(svelte@4.2.11)
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
@ -23019,7 +23059,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/pod-server.tgz:
|
file:projects/pod-server.tgz:
|
||||||
resolution: {integrity: sha512-Vy2bP0Fg4MFSkPnvyF22PH478ApgBINqguIOp0CJFsYsGYxv90V53Iahb4qh91qvnPXFrnvKf/+HlsHvuQ/0Bg==, tarball: file:projects/pod-server.tgz}
|
resolution: {integrity: sha512-wPRlkGQX23QexM6xt1m5VtJVyxJ4TlT87nVR6Ibf/ty1nrpKTqCYTS/7xxPB6cSC/S8hCb1VheKNkR4+vXXM0Q==, tarball: file:projects/pod-server.tgz}
|
||||||
name: '@rush-temp/pod-server'
|
name: '@rush-temp/pod-server'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -25554,7 +25594,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/server-tool.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
file:projects/server-tool.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-jeVFP2yShqCe43VHZ/JqRQNQ7aodz0hc+K5KjeHwGqQsgVwPNjoGiJ+oTn95J8Q4SRjK7B99a5IRUPrPv4QxnA==, tarball: file:projects/server-tool.tgz}
|
resolution: {integrity: sha512-ErBexvPUdBHDpLANxgrqNef832SQXZicJp7U+UDiqr9EsTjKjJ71ZgTYlGtj7unI6XfBEoUlH19cAu7ExV3veA==, tarball: file:projects/server-tool.tgz}
|
||||||
id: file:projects/server-tool.tgz
|
id: file:projects/server-tool.tgz
|
||||||
name: '@rush-temp/server-tool'
|
name: '@rush-temp/server-tool'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -25570,7 +25610,7 @@ packages:
|
|||||||
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
|
||||||
fast-equals: 5.0.1
|
fast-equals: 5.0.1
|
||||||
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
typescript: 5.3.3
|
typescript: 5.3.3
|
||||||
@ -26649,7 +26689,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/text-editor.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(prosemirror-model@1.19.4)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
file:projects/text-editor.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(postcss-load-config@4.0.2)(postcss@8.4.35)(prosemirror-model@1.19.4)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-3aKZP0apJWozq0ASwe8mC88l4hBYcng8TcFcs1V3iIZe1VIeXWjbsq/6uvLv9XxXZ3AkYyv8O3/aq3k+ryFxRQ==, tarball: file:projects/text-editor.tgz}
|
resolution: {integrity: sha512-5pyb9OAuqNH5EmM6Rd84uVwSbvRgHkix21JoILDHzeAxmRmJk9yfYD7gXGq9nO8iMIawt0Uz4v0pLNvgQAUX6Q==, tarball: file:projects/text-editor.tgz}
|
||||||
id: file:projects/text-editor.tgz
|
id: file:projects/text-editor.tgz
|
||||||
name: '@rush-temp/text-editor'
|
name: '@rush-temp/text-editor'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -26725,6 +26765,7 @@ packages:
|
|||||||
- node-notifier
|
- node-notifier
|
||||||
- postcss
|
- postcss
|
||||||
- postcss-load-config
|
- postcss-load-config
|
||||||
|
- prosemirror-inputrules
|
||||||
- prosemirror-model
|
- prosemirror-model
|
||||||
- prosemirror-state
|
- prosemirror-state
|
||||||
- prosemirror-view
|
- prosemirror-view
|
||||||
@ -26738,7 +26779,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
file:projects/text.tgz(@types/node@20.11.19)(bufferutil@4.0.8)(esbuild@0.20.1)(ts-node@10.9.2)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-uaQ+Vil4GXGbC16mXmAz/h3Iwy6QNfCOr85nf/C1c5Zwg0h1rNvC9bu+8sYGXfFGfLeqEo/4l/NrQkZ7/QRVJg==, tarball: file:projects/text.tgz}
|
resolution: {integrity: sha512-mUWWTKZWMvUURAcxKRJaO/G5XdwdP7eAOACU3VU2qA2/RTtHGCREgKMpFFK/LwXXqwx0x+LBwfuozf6jLdyjBg==, tarball: file:projects/text.tgz}
|
||||||
id: file:projects/text.tgz
|
id: file:projects/text.tgz
|
||||||
name: '@rush-temp/text'
|
name: '@rush-temp/text'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -26957,7 +26998,7 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
file:projects/tool.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.3):
|
file:projects/tool.tgz(bufferutil@4.0.8)(utf-8-validate@6.0.3):
|
||||||
resolution: {integrity: sha512-tGU/3qdh3K0tpzxidNbITJoDtEWk6BQu7uxkCjR52j8fwpNq1rx62CYkNz6yzUda+RWKjLjMFivrpBcmLJ2s4w==, tarball: file:projects/tool.tgz}
|
resolution: {integrity: sha512-F0XCwnJslL0DElYI9UUk1wMDaby1XQWa4pP7g8OjdAawPHI7VfhpyIO+IKMUuZiKn58pYFtWW4sNMAJwAEOlBg==, tarball: file:projects/tool.tgz}
|
||||||
id: file:projects/tool.tgz
|
id: file:projects/tool.tgz
|
||||||
name: '@rush-temp/tool'
|
name: '@rush-temp/tool'
|
||||||
version: 0.0.0
|
version: 0.0.0
|
||||||
@ -26986,7 +27027,7 @@ packages:
|
|||||||
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2)
|
||||||
libphonenumber-js: 1.10.56
|
libphonenumber-js: 1.10.56
|
||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
mongodb: 6.3.0
|
mongodb: 6.8.0
|
||||||
prettier: 3.2.5
|
prettier: 3.2.5
|
||||||
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
ts-jest: 29.1.2(esbuild@0.20.1)(jest@29.7.0)(typescript@5.3.3)
|
||||||
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3)
|
||||||
|
@ -144,7 +144,7 @@
|
|||||||
"got": "^11.8.3",
|
"got": "^11.8.3",
|
||||||
"libphonenumber-js": "^1.9.46",
|
"libphonenumber-js": "^1.9.46",
|
||||||
"mime-types": "~2.1.34",
|
"mime-types": "~2.1.34",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"ws": "^8.16.0"
|
"ws": "^8.16.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import { Worker, isMainThread, parentPort } from 'worker_threads'
|
|||||||
import { CSVWriter } from './csv'
|
import { CSVWriter } from './csv'
|
||||||
|
|
||||||
interface StartMessage {
|
interface StartMessage {
|
||||||
|
email: string
|
||||||
workspaceId: WorkspaceId
|
workspaceId: WorkspaceId
|
||||||
transactorUrl: string
|
transactorUrl: string
|
||||||
id: number
|
id: number
|
||||||
@ -54,6 +55,7 @@ interface StartMessage {
|
|||||||
// If enabled, will perform write tx for same values and Derived format.
|
// If enabled, will perform write tx for same values and Derived format.
|
||||||
write: boolean
|
write: boolean
|
||||||
sleep: number
|
sleep: number
|
||||||
|
mode: 'find-all' | 'connect-only'
|
||||||
}
|
}
|
||||||
binary: boolean
|
binary: boolean
|
||||||
compression: boolean
|
compression: boolean
|
||||||
@ -75,8 +77,17 @@ interface PendingMsg extends Msg {
|
|||||||
|
|
||||||
export async function benchmark (
|
export async function benchmark (
|
||||||
workspaceId: WorkspaceId[],
|
workspaceId: WorkspaceId[],
|
||||||
|
users: Map<string, string[]>,
|
||||||
transactorUrl: string,
|
transactorUrl: string,
|
||||||
cmd: { from: number, steps: number, sleep: number, binary: boolean, write: boolean, compression: boolean }
|
cmd: {
|
||||||
|
from: number
|
||||||
|
steps: number
|
||||||
|
sleep: number
|
||||||
|
binary: boolean
|
||||||
|
write: boolean
|
||||||
|
compression: boolean
|
||||||
|
mode: 'find-all' | 'connect-only'
|
||||||
|
}
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
const operating = new Set<string>()
|
const operating = new Set<string>()
|
||||||
const workers: Worker[] = []
|
const workers: Worker[] = []
|
||||||
@ -278,7 +289,9 @@ export async function benchmark (
|
|||||||
.map((it) => {
|
.map((it) => {
|
||||||
const wsid = workspaceId[randNum(workspaceId.length)]
|
const wsid = workspaceId[randNum(workspaceId.length)]
|
||||||
const workId = 'w-' + i + '-' + it
|
const workId = 'w-' + i + '-' + it
|
||||||
|
const wsUsers = users.get(wsid.name) ?? []
|
||||||
const msg: StartMessage = {
|
const msg: StartMessage = {
|
||||||
|
email: wsUsers[randNum(wsUsers.length)],
|
||||||
workspaceId: wsid,
|
workspaceId: wsid,
|
||||||
transactorUrl,
|
transactorUrl,
|
||||||
id: i,
|
id: i,
|
||||||
@ -293,7 +306,8 @@ export async function benchmark (
|
|||||||
rand: 512
|
rand: 512
|
||||||
},
|
},
|
||||||
sleep: cmd.sleep,
|
sleep: cmd.sleep,
|
||||||
write: cmd.write
|
write: cmd.write,
|
||||||
|
mode: cmd.mode
|
||||||
},
|
},
|
||||||
binary: cmd.binary,
|
binary: cmd.binary,
|
||||||
compression: cmd.compression
|
compression: cmd.compression
|
||||||
@ -339,81 +353,91 @@ export function benchmarkWorker (): void {
|
|||||||
setMetadata(client.metadata.UseProtocolCompression, msg.compression)
|
setMetadata(client.metadata.UseProtocolCompression, msg.compression)
|
||||||
console.log('connecting to', msg.workspaceId)
|
console.log('connecting to', msg.workspaceId)
|
||||||
|
|
||||||
connection = await connect(msg.transactorUrl, msg.workspaceId, undefined)
|
connection = await connect(msg.transactorUrl, msg.workspaceId, msg.email)
|
||||||
const opt = new TxOperations(connection, (core.account.System + '_benchmark') as Ref<Account>)
|
|
||||||
parentPort?.postMessage({
|
|
||||||
type: 'operate',
|
|
||||||
workId: msg.workId
|
|
||||||
})
|
|
||||||
|
|
||||||
const rateLimiter = new RateLimiter(msg.options.rate)
|
if (msg.options.mode === 'find-all') {
|
||||||
|
const opt = new TxOperations(connection, (core.account.System + '_benchmark') as Ref<Account>)
|
||||||
let bigRunning = 0
|
|
||||||
|
|
||||||
while (msg.options.smallRequests + msg.options.bigRequests > 0) {
|
|
||||||
const variant = Math.random()
|
|
||||||
// console.log(`Thread ${msg.workId} ${msg.options.smallRequests} ${msg.options.bigRequests}`)
|
|
||||||
if (msg.options.bigRequests > 0 && variant < 0.5 && bigRunning === 0) {
|
|
||||||
await rateLimiter.add(async () => {
|
|
||||||
bigRunning = 1
|
|
||||||
await connection?.findAll(core.class.BenchmarkDoc, {
|
|
||||||
source: msg.workId,
|
|
||||||
request: {
|
|
||||||
documents: {
|
|
||||||
from: 1024,
|
|
||||||
to: 1000
|
|
||||||
},
|
|
||||||
size: {
|
|
||||||
// 1kb to 5kb
|
|
||||||
from: 1 * 1024,
|
|
||||||
to: 4 * 1024
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
bigRunning = 0
|
|
||||||
msg.options.bigRequests--
|
|
||||||
}
|
|
||||||
if (msg.options.smallRequests > 0 && variant > 0.5) {
|
|
||||||
await rateLimiter.add(async () => {
|
|
||||||
await connection?.findAll(core.class.BenchmarkDoc, {
|
|
||||||
source: msg.workId,
|
|
||||||
request: {
|
|
||||||
documents: {
|
|
||||||
from: msg.options.limit.min,
|
|
||||||
to: msg.options.limit.min + msg.options.limit.rand
|
|
||||||
},
|
|
||||||
size: {
|
|
||||||
from: 4,
|
|
||||||
to: 16
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
msg.options.smallRequests--
|
|
||||||
}
|
|
||||||
if (msg.options.write) {
|
|
||||||
await opt.updateDoc(core.class.BenchmarkDoc, core.space.DerivedTx, '' as Ref<BenchmarkDoc>, {
|
|
||||||
response: 'qwe'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if (msg.options.sleep > 0) {
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, randNum(msg.options.sleep)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// clearInterval(infoInterval)
|
|
||||||
await rateLimiter.waitProcessing()
|
|
||||||
const to1 = setTimeout(() => {
|
|
||||||
parentPort?.postMessage({
|
parentPort?.postMessage({
|
||||||
type: 'log',
|
type: 'operate',
|
||||||
workId: msg.workId,
|
workId: msg.workId
|
||||||
msg: `timeout waiting processing${msg.workId}`
|
|
||||||
})
|
})
|
||||||
}, 5000)
|
|
||||||
clearTimeout(to1)
|
const rateLimiter = new RateLimiter(msg.options.rate)
|
||||||
//
|
|
||||||
// console.log(`${msg.idd} perform complete`)
|
let bigRunning = 0
|
||||||
|
|
||||||
|
while (msg.options.smallRequests + msg.options.bigRequests > 0) {
|
||||||
|
const variant = Math.random()
|
||||||
|
// console.log(`Thread ${msg.workId} ${msg.options.smallRequests} ${msg.options.bigRequests}`)
|
||||||
|
if (msg.options.bigRequests > 0 && variant < 0.5 && bigRunning === 0) {
|
||||||
|
await rateLimiter.add(async () => {
|
||||||
|
bigRunning = 1
|
||||||
|
await connection?.findAll(core.class.BenchmarkDoc, {
|
||||||
|
source: msg.workId,
|
||||||
|
request: {
|
||||||
|
documents: {
|
||||||
|
from: 1024,
|
||||||
|
to: 1000
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
// 1kb to 5kb
|
||||||
|
from: 1 * 1024,
|
||||||
|
to: 4 * 1024
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
bigRunning = 0
|
||||||
|
msg.options.bigRequests--
|
||||||
|
}
|
||||||
|
if (msg.options.smallRequests > 0 && variant > 0.5) {
|
||||||
|
await rateLimiter.add(async () => {
|
||||||
|
await connection?.findAll(core.class.BenchmarkDoc, {
|
||||||
|
source: msg.workId,
|
||||||
|
request: {
|
||||||
|
documents: {
|
||||||
|
from: msg.options.limit.min,
|
||||||
|
to: msg.options.limit.min + msg.options.limit.rand
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
from: 4,
|
||||||
|
to: 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
msg.options.smallRequests--
|
||||||
|
}
|
||||||
|
if (msg.options.write) {
|
||||||
|
await opt.updateDoc(core.class.BenchmarkDoc, core.space.DerivedTx, '' as Ref<BenchmarkDoc>, {
|
||||||
|
response: 'qwe'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (msg.options.sleep > 0) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, randNum(msg.options.sleep)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// clearInterval(infoInterval)
|
||||||
|
await rateLimiter.waitProcessing()
|
||||||
|
const to1 = setTimeout(() => {
|
||||||
|
parentPort?.postMessage({
|
||||||
|
type: 'log',
|
||||||
|
workId: msg.workId,
|
||||||
|
msg: `timeout waiting processing${msg.workId}`
|
||||||
|
})
|
||||||
|
}, 5000)
|
||||||
|
clearTimeout(to1)
|
||||||
|
//
|
||||||
|
// console.log(`${msg.idd} perform complete`)
|
||||||
|
} else if (msg.options.mode === 'connect-only') {
|
||||||
|
parentPort?.postMessage({
|
||||||
|
type: 'operate',
|
||||||
|
workId: msg.workId
|
||||||
|
})
|
||||||
|
// Just a huge timeout
|
||||||
|
await new Promise<void>((resolve) => setTimeout(resolve, 50000000))
|
||||||
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
console.error(msg.workspaceId, err)
|
console.error(msg.workspaceId, err)
|
||||||
} finally {
|
} finally {
|
||||||
@ -427,6 +451,7 @@ export function benchmarkWorker (): void {
|
|||||||
await connection?.close()
|
await connection?.close()
|
||||||
clearTimeout(to)
|
clearTimeout(to)
|
||||||
}
|
}
|
||||||
|
|
||||||
parentPort?.postMessage({
|
parentPort?.postMessage({
|
||||||
type: 'complete',
|
type: 'complete',
|
||||||
workId: msg.workId
|
workId: msg.workId
|
||||||
|
@ -1018,6 +1018,7 @@ export function devTool (
|
|||||||
.option('--compression <compression>', 'Use protocol compression', false)
|
.option('--compression <compression>', 'Use protocol compression', false)
|
||||||
.option('--write <write>', 'Perform write operations', false)
|
.option('--write <write>', 'Perform write operations', false)
|
||||||
.option('--workspaces <workspaces>', 'Workspaces to test on, comma separated', '')
|
.option('--workspaces <workspaces>', 'Workspaces to test on, comma separated', '')
|
||||||
|
.option('--mode <mode>', 'A benchmark mode. Supported values: `find-all`, `connect-only` ', 'find-all')
|
||||||
.action(
|
.action(
|
||||||
async (cmd: {
|
async (cmd: {
|
||||||
from: string
|
from: string
|
||||||
@ -1027,20 +1028,50 @@ export function devTool (
|
|||||||
binary: string
|
binary: string
|
||||||
compression: string
|
compression: string
|
||||||
write: string
|
write: string
|
||||||
|
mode: 'find-all' | 'connect-only'
|
||||||
}) => {
|
}) => {
|
||||||
console.log(JSON.stringify(cmd))
|
const { mongodbUri } = prepareTools()
|
||||||
await benchmark(
|
await withDatabase(mongodbUri, async (db, client) => {
|
||||||
cmd.workspaces.split(',').map((it) => getWorkspaceId(it, productId)),
|
console.log(JSON.stringify(cmd))
|
||||||
transactorUrl,
|
if (!['find-all', 'connect-only'].includes(cmd.mode)) {
|
||||||
{
|
console.log('wrong mode')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const allWorkspacesPure = Array.from(await listWorkspacesPure(db, productId))
|
||||||
|
const allWorkspaces = new Map(allWorkspacesPure.map((it) => [it.workspace, it]))
|
||||||
|
|
||||||
|
let workspaces = cmd.workspaces
|
||||||
|
.split(',')
|
||||||
|
.map((it) => it.trim())
|
||||||
|
.filter((it) => it.length > 0)
|
||||||
|
.map((it) => getWorkspaceId(it, productId))
|
||||||
|
|
||||||
|
if (cmd.workspaces.length === 0) {
|
||||||
|
workspaces = allWorkspacesPure.map((it) => getWorkspaceId(it.workspace, productId))
|
||||||
|
}
|
||||||
|
const accounts = new Map(Array.from(await listAccounts(db)).map((it) => [it._id.toString(), it.email]))
|
||||||
|
|
||||||
|
const accountWorkspaces = new Map<string, string[]>()
|
||||||
|
for (const ws of workspaces) {
|
||||||
|
const wsInfo = allWorkspaces.get(ws.name)
|
||||||
|
if (wsInfo !== undefined) {
|
||||||
|
accountWorkspaces.set(
|
||||||
|
ws.name,
|
||||||
|
wsInfo.accounts.map((it) => accounts.get(it.toString()) as string)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await benchmark(workspaces, accountWorkspaces, transactorUrl, {
|
||||||
steps: parseInt(cmd.steps),
|
steps: parseInt(cmd.steps),
|
||||||
from: parseInt(cmd.from),
|
from: parseInt(cmd.from),
|
||||||
sleep: parseInt(cmd.sleep),
|
sleep: parseInt(cmd.sleep),
|
||||||
binary: cmd.binary === 'true',
|
binary: cmd.binary === 'true',
|
||||||
compression: cmd.compression === 'true',
|
compression: cmd.compression === 'true',
|
||||||
write: cmd.write === 'true'
|
write: cmd.write === 'true',
|
||||||
}
|
mode: cmd.mode
|
||||||
)
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
program
|
program
|
||||||
|
@ -101,8 +101,8 @@ export function childMetrics (root: Metrics, path: string[]): Metrics {
|
|||||||
/**
|
/**
|
||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
export function metricsAggregate (m: Metrics): Metrics {
|
export function metricsAggregate (m: Metrics, limit: number = -1): Metrics {
|
||||||
const ms = aggregateMetrics(m.measurements)
|
const ms = aggregateMetrics(m.measurements, limit)
|
||||||
|
|
||||||
// Use child overage, if there is no top level value specified.
|
// Use child overage, if there is no top level value specified.
|
||||||
const me = Object.entries(ms)
|
const me = Object.entries(ms)
|
||||||
@ -115,6 +115,21 @@ export function metricsAggregate (m: Metrics): Metrics {
|
|||||||
return p + v.value
|
return p + v.value
|
||||||
}, 0)
|
}, 0)
|
||||||
|
|
||||||
|
if (limit !== -1) {
|
||||||
|
// We need to keep only top limit items in ms
|
||||||
|
if (Object.keys(ms).length > 0) {
|
||||||
|
const newMs: typeof ms = {}
|
||||||
|
let added = 0
|
||||||
|
for (const [k, v] of Object.entries(ms)) {
|
||||||
|
newMs[k] = v
|
||||||
|
added++
|
||||||
|
if (added >= limit) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
operations: m.operations,
|
operations: m.operations,
|
||||||
measurements: ms,
|
measurements: ms,
|
||||||
@ -124,10 +139,10 @@ export function metricsAggregate (m: Metrics): Metrics {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function aggregateMetrics (m: Record<string, Metrics>): Record<string, Metrics> {
|
function aggregateMetrics (m: Record<string, Metrics>, limit: number = -1): Record<string, Metrics> {
|
||||||
const result: Record<string, Metrics> = {}
|
const result: Record<string, Metrics> = {}
|
||||||
for (const [k, v] of Object.entries(m).sort((a, b) => b[1].value - a[1].value)) {
|
for (const [k, v] of Object.entries(m).sort((a, b) => b[1].value - a[1].value)) {
|
||||||
result[k] = metricsAggregate(v)
|
result[k] = metricsAggregate(v, limit)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
@ -184,7 +199,7 @@ function toString (name: string, m: Metrics, offset: number, length: number): st
|
|||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
export function metricsToString (metrics: Metrics, name = 'System', length: number): string {
|
export function metricsToString (metrics: Metrics, name = 'System', length: number): string {
|
||||||
return toString(name, metricsAggregate(metrics), 0, length)
|
return toString(name, metricsAggregate(metrics, 50), 0, length)
|
||||||
}
|
}
|
||||||
|
|
||||||
function printMetricsParamsRows (
|
function printMetricsParamsRows (
|
||||||
@ -234,5 +249,5 @@ function toStringRows (name: string, m: Metrics, offset: number): (number | stri
|
|||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
export function metricsToRows (metrics: Metrics, name = 'System'): (number | string)[][] {
|
export function metricsToRows (metrics: Metrics, name = 'System'): (number | string)[][] {
|
||||||
return toStringRows(name, metricsAggregate(metrics), 0)
|
return toStringRows(name, metricsAggregate(metrics, 50), 0)
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
<div class="p-6">
|
<div class="p-6">
|
||||||
<div class="flex-row-center">
|
<div class="flex-row-center">
|
||||||
Uniq users: {Object.keys(activeSessions).length}
|
Uniq users: {Object.keys(activeSessions).length} of {data?.statistics?.totalClients} connections
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-row-center">
|
<div class="flex-row-center">
|
||||||
<CheckBox bind:checked={realUsers} />
|
<CheckBox bind:checked={realUsers} />
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
"@hcengineering/platform": "^0.6.11",
|
"@hcengineering/platform": "^0.6.11",
|
||||||
"@hcengineering/auth-providers": "^0.6.0",
|
"@hcengineering/auth-providers": "^0.6.0",
|
||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"koa": "^2.13.1",
|
"koa": "^2.13.1",
|
||||||
"koa-router": "^12.0.1",
|
"koa-router": "^12.0.1",
|
||||||
"koa-bodyparser": "^4.3.0",
|
"koa-bodyparser": "^4.3.0",
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
"@types/passport-github2": "^1.2.9"
|
"@types/passport-github2": "^1.2.9"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"@hcengineering/account": "^0.6.0",
|
"@hcengineering/account": "^0.6.0",
|
||||||
"passport-google-oauth20": "~2.0.0",
|
"passport-google-oauth20": "~2.0.0",
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
"@hcengineering/platform": "^0.6.11",
|
"@hcengineering/platform": "^0.6.11",
|
||||||
"@hcengineering/auth-providers": "^0.6.0",
|
"@hcengineering/auth-providers": "^0.6.0",
|
||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"koa": "^2.13.1",
|
"koa": "^2.13.1",
|
||||||
"koa-router": "^12.0.1",
|
"koa-router": "^12.0.1",
|
||||||
"koa-bodyparser": "^4.3.0",
|
"koa-bodyparser": "^4.3.0",
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
"@types/jest": "^29.5.5"
|
"@types/jest": "^29.5.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"@hcengineering/platform": "^0.6.11",
|
"@hcengineering/platform": "^0.6.11",
|
||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"@hcengineering/contact": "^0.6.24",
|
"@hcengineering/contact": "^0.6.24",
|
||||||
|
@ -1782,10 +1782,14 @@ export async function removeWorkspace (
|
|||||||
const { workspace, account } = await getWorkspaceAndAccount(ctx, db, productId, email, workspaceId)
|
const { workspace, account } = await getWorkspaceAndAccount(ctx, db, productId, email, workspaceId)
|
||||||
|
|
||||||
// Add account into workspace.
|
// Add account into workspace.
|
||||||
await db.collection(WORKSPACE_COLLECTION).updateOne({ _id: workspace._id }, { $pull: { accounts: account._id } })
|
await db
|
||||||
|
.collection<Workspace>(WORKSPACE_COLLECTION)
|
||||||
|
.updateOne({ _id: workspace._id }, { $pull: { accounts: account._id } })
|
||||||
|
|
||||||
// Add account a workspace
|
// Add account a workspace
|
||||||
await db.collection(ACCOUNT_COLLECTION).updateOne({ _id: account._id }, { $pull: { workspaces: workspace._id } })
|
await db
|
||||||
|
.collection<Account>(ACCOUNT_COLLECTION)
|
||||||
|
.updateOne({ _id: account._id }, { $pull: { workspaces: workspace._id } })
|
||||||
ctx.info('Workspace removed', { email, workspace })
|
ctx.info('Workspace removed', { email, workspace })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@
|
|||||||
"@hocuspocus/transformer": "^2.9.0",
|
"@hocuspocus/transformer": "^2.9.0",
|
||||||
"@tiptap/core": "^2.2.4",
|
"@tiptap/core": "^2.2.4",
|
||||||
"@tiptap/html": "^2.2.4",
|
"@tiptap/html": "^2.2.4",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"yjs": "^13.5.52",
|
"yjs": "^13.5.52",
|
||||||
"y-prosemirror": "^1.2.1",
|
"y-prosemirror": "^1.2.1",
|
||||||
"express": "^4.18.3",
|
"express": "^4.18.3",
|
||||||
|
@ -19,7 +19,6 @@ import { Token, decodeToken } from '@hcengineering/server-token'
|
|||||||
import { ServerKit } from '@hcengineering/text'
|
import { ServerKit } from '@hcengineering/text'
|
||||||
import { Hocuspocus } from '@hocuspocus/server'
|
import { Hocuspocus } from '@hocuspocus/server'
|
||||||
import bp from 'body-parser'
|
import bp from 'body-parser'
|
||||||
import compression from 'compression'
|
|
||||||
import cors from 'cors'
|
import cors from 'cors'
|
||||||
import express from 'express'
|
import express from 'express'
|
||||||
import { IncomingMessage, createServer } from 'http'
|
import { IncomingMessage, createServer } from 'http'
|
||||||
@ -58,22 +57,6 @@ export async function start (
|
|||||||
const app = express()
|
const app = express()
|
||||||
app.use(cors())
|
app.use(cors())
|
||||||
app.use(bp.json())
|
app.use(bp.json())
|
||||||
app.use(
|
|
||||||
compression({
|
|
||||||
filter: (req, res) => {
|
|
||||||
if (req.headers['x-no-compression'] != null) {
|
|
||||||
// don't compress responses with this request header
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// fallback to standard filter function
|
|
||||||
return compression.filter(req, res)
|
|
||||||
},
|
|
||||||
level: 1,
|
|
||||||
memLevel: 9
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
const extensions = [
|
const extensions = [
|
||||||
ServerKit.configure({
|
ServerKit.configure({
|
||||||
image: {
|
image: {
|
||||||
@ -208,22 +191,7 @@ export async function start (
|
|||||||
|
|
||||||
const wss = new WebSocketServer({
|
const wss = new WebSocketServer({
|
||||||
noServer: true,
|
noServer: true,
|
||||||
perMessageDeflate: {
|
perMessageDeflate: false
|
||||||
zlibDeflateOptions: {
|
|
||||||
chunkSize: 32 * 1024,
|
|
||||||
memLevel: 9,
|
|
||||||
level: 1
|
|
||||||
},
|
|
||||||
zlibInflateOptions: {
|
|
||||||
chunkSize: 32 * 1024,
|
|
||||||
memLevel: 9,
|
|
||||||
level: 1
|
|
||||||
},
|
|
||||||
// Below options specified as default values.
|
|
||||||
concurrencyLimit: 10, // Limits zlib concurrency for perf.
|
|
||||||
threshold: 1024 // Size (in bytes) below which messages
|
|
||||||
// should not be compressed if context takeover is disabled.
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
wss.on('connection', (incoming: WebSocket, request: IncomingMessage) => {
|
wss.on('connection', (incoming: WebSocket, request: IncomingMessage) => {
|
||||||
|
@ -66,14 +66,14 @@ export interface RawDBAdapter {
|
|||||||
workspace: WorkspaceId,
|
workspace: WorkspaceId,
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
query: DocumentQuery<T>,
|
query: DocumentQuery<T>,
|
||||||
options?: Omit<FindOptions<T>, 'projection' | 'lookup'>
|
options?: Omit<FindOptions<T>, 'projection' | 'lookup' | 'total'>
|
||||||
) => Promise<FindResult<T>>
|
) => Promise<FindResult<T>>
|
||||||
findStream: <T extends Doc>(
|
findStream: <T extends Doc>(
|
||||||
ctx: MeasureContext,
|
ctx: MeasureContext,
|
||||||
workspace: WorkspaceId,
|
workspace: WorkspaceId,
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
query: DocumentQuery<T>,
|
query: DocumentQuery<T>,
|
||||||
options?: Omit<FindOptions<T>, 'projection' | 'lookup'>
|
options?: Omit<FindOptions<T>, 'projection' | 'lookup' | 'total'>
|
||||||
) => Promise<RawDBAdapterStream<T>>
|
) => Promise<RawDBAdapterStream<T>>
|
||||||
upload: <T extends Doc>(ctx: MeasureContext, workspace: WorkspaceId, domain: Domain, docs: T[]) => Promise<void>
|
upload: <T extends Doc>(ctx: MeasureContext, workspace: WorkspaceId, domain: Domain, docs: T[]) => Promise<void>
|
||||||
update: <T extends Doc>(
|
update: <T extends Doc>(
|
||||||
|
@ -109,7 +109,17 @@ export class SpacePermissionsMiddleware extends BaseMiddleware implements Middle
|
|||||||
space,
|
space,
|
||||||
spaceType.targetClass
|
spaceType.targetClass
|
||||||
) as unknown as RolesAssignment
|
) as unknown as RolesAssignment
|
||||||
this.assignmentBySpace[space._id] = asMixin
|
|
||||||
|
const allPossibleRoles = this.storage.modelDb.findAllSync(core.class.Role, {})
|
||||||
|
const requiredValues: Record<string, any> = {}
|
||||||
|
for (const role of allPossibleRoles) {
|
||||||
|
const v = asMixin[role._id]
|
||||||
|
if (v !== undefined) {
|
||||||
|
requiredValues[role._id] = asMixin[role._id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.assignmentBySpace[space._id] = requiredValues
|
||||||
|
|
||||||
await this.setPermissions(space._id, await this.getRoles(spaceType._id), asMixin)
|
await this.setPermissions(space._id, await this.getRoles(spaceType._id), asMixin)
|
||||||
}
|
}
|
||||||
@ -193,7 +203,17 @@ export class SpacePermissionsMiddleware extends BaseMiddleware implements Middle
|
|||||||
// Note: currently the whole assignment is always included into the mixin update
|
// Note: currently the whole assignment is always included into the mixin update
|
||||||
// so we can just rebuild the permissions
|
// so we can just rebuild the permissions
|
||||||
const assignment: RolesAssignment = mixinDoc.attributes as RolesAssignment
|
const assignment: RolesAssignment = mixinDoc.attributes as RolesAssignment
|
||||||
this.assignmentBySpace[spaceId] = assignment
|
|
||||||
|
const allPossibleRoles = this.storage.modelDb.findAllSync(core.class.Role, {})
|
||||||
|
const requiredValues: Record<string, any> = {}
|
||||||
|
for (const role of allPossibleRoles) {
|
||||||
|
const v = assignment[role._id]
|
||||||
|
if (v !== undefined) {
|
||||||
|
requiredValues[role._id] = assignment[role._id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.assignmentBySpace[spaceId] = requiredValues
|
||||||
|
|
||||||
this.permissionsBySpace[tx.objectId] = {}
|
this.permissionsBySpace[tx.objectId] = {}
|
||||||
await this.setPermissions(spaceId, await this.getRoles(spaceType._id), assignment)
|
await this.setPermissions(spaceId, await this.getRoles(spaceType._id), assignment)
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"@hcengineering/platform": "^0.6.11",
|
"@hcengineering/platform": "^0.6.11",
|
||||||
"@hcengineering/server-core": "^0.6.1",
|
"@hcengineering/server-core": "^0.6.1",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"bson": "^6.3.0"
|
"bson": "^6.8.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
workspace: WorkspaceId,
|
workspace: WorkspaceId,
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
query: DocumentQuery<T>,
|
query: DocumentQuery<T>,
|
||||||
options?: Omit<FindOptions<T>, 'projection' | 'lookup'>
|
options?: Omit<FindOptions<T>, 'projection' | 'lookup' | 'total'>
|
||||||
): Promise<{
|
): Promise<{
|
||||||
cursor: FindCursor<T>
|
cursor: FindCursor<T>
|
||||||
total: number
|
total: number
|
||||||
@ -54,7 +54,7 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
checkKeys: false
|
checkKeys: false
|
||||||
})
|
})
|
||||||
|
|
||||||
let total: number = -1
|
const total: number = -1
|
||||||
if (options != null) {
|
if (options != null) {
|
||||||
if (options.sort !== undefined) {
|
if (options.sort !== undefined) {
|
||||||
const sort = collectSort(options)
|
const sort = collectSort(options)
|
||||||
@ -63,9 +63,6 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (options.limit !== undefined || typeof query._id === 'string') {
|
if (options.limit !== undefined || typeof query._id === 'string') {
|
||||||
if (options.total === true) {
|
|
||||||
total = await coll.countDocuments(query)
|
|
||||||
}
|
|
||||||
cursor = cursor.limit(options.limit ?? 1)
|
cursor = cursor.limit(options.limit ?? 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -78,9 +75,9 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
workspace: WorkspaceId,
|
workspace: WorkspaceId,
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
query: DocumentQuery<T>,
|
query: DocumentQuery<T>,
|
||||||
options?: Omit<FindOptions<T>, 'projection' | 'lookup'>
|
options?: Omit<FindOptions<T>, 'projection' | 'lookup' | 'total'>
|
||||||
): Promise<FindResult<T>> {
|
): Promise<FindResult<T>> {
|
||||||
let { cursor, total } = await ctx.with(
|
const { cursor, total } = await ctx.with(
|
||||||
'get-cursor',
|
'get-cursor',
|
||||||
{},
|
{},
|
||||||
async () => await getCursor(workspace, domain, query, options)
|
async () => await getCursor(workspace, domain, query, options)
|
||||||
@ -92,9 +89,6 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
...query,
|
...query,
|
||||||
...options
|
...options
|
||||||
})
|
})
|
||||||
if (options?.total === true && options?.limit === undefined) {
|
|
||||||
total = res.length
|
|
||||||
}
|
|
||||||
return toFindResult(res, total)
|
return toFindResult(res, total)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('error during executing cursor in findAll', cutObjectArray(query), options, e)
|
console.error('error during executing cursor in findAll', cutObjectArray(query), options, e)
|
||||||
@ -106,7 +100,7 @@ export function createRawMongoDBAdapter (url: string): RawDBAdapter {
|
|||||||
workspace: WorkspaceId,
|
workspace: WorkspaceId,
|
||||||
domain: Domain,
|
domain: Domain,
|
||||||
query: DocumentQuery<T>,
|
query: DocumentQuery<T>,
|
||||||
options?: Omit<FindOptions<T>, 'projection' | 'lookup'>
|
options?: Omit<FindOptions<T>, 'projection' | 'lookup' | 'total'>
|
||||||
): Promise<RawDBAdapterStream<T>> {
|
): Promise<RawDBAdapterStream<T>> {
|
||||||
const { cursor } = await getCursor(workspace, domain, query, options)
|
const { cursor } = await getCursor(workspace, domain, query, options)
|
||||||
|
|
||||||
|
@ -155,9 +155,11 @@ abstract class MongoAdapterBase implements DbAdapter {
|
|||||||
try {
|
try {
|
||||||
const existingIndexes = await this.collection(domain).indexes()
|
const existingIndexes = await this.collection(domain).indexes()
|
||||||
for (const existingIndex of existingIndexes) {
|
for (const existingIndex of existingIndexes) {
|
||||||
const name: string = existingIndex.name
|
if (existingIndex.name !== undefined) {
|
||||||
if (deletePattern.test(name) && !keepPattern.test(name)) {
|
const name: string = existingIndex.name
|
||||||
await this.collection(domain).dropIndex(existingIndex.name)
|
if (deletePattern.test(name) && !keepPattern.test(name)) {
|
||||||
|
await this.collection(domain).dropIndex(name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
"@types/jest": "^29.5.5"
|
"@types/jest": "^29.5.5"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.8.0",
|
||||||
"@hcengineering/platform": "^0.6.11",
|
"@hcengineering/platform": "^0.6.11",
|
||||||
"@hcengineering/core": "^0.6.32",
|
"@hcengineering/core": "^0.6.32",
|
||||||
"@hcengineering/contact": "^0.6.24",
|
"@hcengineering/contact": "^0.6.24",
|
||||||
|
@ -23,12 +23,12 @@ import core, {
|
|||||||
versionToString,
|
versionToString,
|
||||||
withContext,
|
withContext,
|
||||||
type BaseWorkspaceInfo,
|
type BaseWorkspaceInfo,
|
||||||
|
type Branding,
|
||||||
|
type BrandingMap,
|
||||||
type MeasureContext,
|
type MeasureContext,
|
||||||
type Tx,
|
type Tx,
|
||||||
type TxWorkspaceEvent,
|
type TxWorkspaceEvent,
|
||||||
type WorkspaceId,
|
type WorkspaceId
|
||||||
type Branding,
|
|
||||||
type BrandingMap
|
|
||||||
} from '@hcengineering/core'
|
} from '@hcengineering/core'
|
||||||
import { unknownError, type Status } from '@hcengineering/platform'
|
import { unknownError, type Status } from '@hcengineering/platform'
|
||||||
import { type HelloRequest, type HelloResponse, type Request, type Response } from '@hcengineering/rpc'
|
import { type HelloRequest, type HelloResponse, type Request, type Response } from '@hcengineering/rpc'
|
||||||
@ -260,8 +260,19 @@ class TSessionManager implements SessionManager {
|
|||||||
> {
|
> {
|
||||||
const wsString = toWorkspaceString(token.workspace, '@')
|
const wsString = toWorkspaceString(token.workspace, '@')
|
||||||
|
|
||||||
let workspaceInfo =
|
let workspaceInfo: WorkspaceLoginInfo | undefined
|
||||||
accountsUrl !== '' ? await this.getWorkspaceInfo(ctx, accountsUrl, rawToken) : this.wsFromToken(token)
|
for (let i = 0; i < 5; i++) {
|
||||||
|
try {
|
||||||
|
workspaceInfo =
|
||||||
|
accountsUrl !== '' ? await this.getWorkspaceInfo(ctx, accountsUrl, rawToken) : this.wsFromToken(token)
|
||||||
|
break
|
||||||
|
} catch (err: any) {
|
||||||
|
if (i === 4) {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (workspaceInfo?.creating === true && token.email !== systemAccountEmail) {
|
if (workspaceInfo?.creating === true && token.email !== systemAccountEmail) {
|
||||||
// No access to workspace for token.
|
// No access to workspace for token.
|
||||||
@ -302,7 +313,7 @@ class TSessionManager implements SessionManager {
|
|||||||
const workspaceName = workspaceInfo.workspaceName ?? workspaceInfo.workspaceUrl ?? workspaceInfo.workspaceId
|
const workspaceName = workspaceInfo.workspaceName ?? workspaceInfo.workspaceUrl ?? workspaceInfo.workspaceId
|
||||||
const branding =
|
const branding =
|
||||||
(workspaceInfo.branding !== undefined
|
(workspaceInfo.branding !== undefined
|
||||||
? Object.values(this.brandingMap).find((b) => b.key === workspaceInfo.branding)
|
? Object.values(this.brandingMap).find((b) => b.key === (workspaceInfo as WorkspaceLoginInfo).branding)
|
||||||
: null) ?? null
|
: null) ?? null
|
||||||
|
|
||||||
if (workspace === undefined) {
|
if (workspace === undefined) {
|
||||||
@ -1007,7 +1018,7 @@ export function start (
|
|||||||
opt.pipelineFactory,
|
opt.pipelineFactory,
|
||||||
opt.port,
|
opt.port,
|
||||||
opt.productId,
|
opt.productId,
|
||||||
opt.enableCompression ?? true,
|
opt.enableCompression ?? false,
|
||||||
opt.accountsUrl,
|
opt.accountsUrl,
|
||||||
opt.externalStorage
|
opt.externalStorage
|
||||||
)
|
)
|
||||||
|
@ -250,13 +250,13 @@ export function startHttpServer (
|
|||||||
zlibDeflateOptions: {
|
zlibDeflateOptions: {
|
||||||
// See zlib defaults.
|
// See zlib defaults.
|
||||||
chunkSize: 32 * 1024,
|
chunkSize: 32 * 1024,
|
||||||
memLevel: 9,
|
memLevel: 1,
|
||||||
level: 1
|
level: 1
|
||||||
},
|
},
|
||||||
zlibInflateOptions: {
|
zlibInflateOptions: {
|
||||||
chunkSize: 32 * 1024,
|
chunkSize: 32 * 1024,
|
||||||
level: 1,
|
level: 1,
|
||||||
memLevel: 9
|
memLevel: 1
|
||||||
},
|
},
|
||||||
serverNoContextTakeover: true,
|
serverNoContextTakeover: true,
|
||||||
clientNoContextTakeover: true,
|
clientNoContextTakeover: true,
|
||||||
@ -327,7 +327,7 @@ export function startHttpServer (
|
|||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
Analytics.handleError(err)
|
Analytics.handleError(err)
|
||||||
if (LOGGING_ENABLED) {
|
if (LOGGING_ENABLED) {
|
||||||
ctx.error('message error', err)
|
ctx.error('message error', { err })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -14,7 +14,7 @@ import { type SessionManager } from './types'
|
|||||||
*/
|
*/
|
||||||
export function getStatistics (ctx: MeasureContext, sessions: SessionManager, admin: boolean): any {
|
export function getStatistics (ctx: MeasureContext, sessions: SessionManager, admin: boolean): any {
|
||||||
const data: Record<string, any> = {
|
const data: Record<string, any> = {
|
||||||
metrics: metricsAggregate((ctx as any).metrics),
|
metrics: metricsAggregate((ctx as any).metrics, 50),
|
||||||
statistics: {
|
statistics: {
|
||||||
activeSessions: {}
|
activeSessions: {}
|
||||||
}
|
}
|
||||||
@ -40,8 +40,9 @@ export function getStatistics (ctx: MeasureContext, sessions: SessionManager, ad
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data.statistics.memoryUsed = Math.round((process.memoryUsage().heapUsed / 1024 / 1024) * 100) / 100
|
const memU = process.memoryUsage()
|
||||||
data.statistics.memoryTotal = Math.round((process.memoryUsage().heapTotal / 1024 / 1024) * 100) / 100
|
data.statistics.memoryUsed = Math.round(((memU.heapUsed + memU.rss) / 1024 / 1024) * 100) / 100
|
||||||
|
data.statistics.memoryTotal = Math.round((memU.heapTotal / 1024 / 1024) * 100) / 100
|
||||||
data.statistics.cpuUsage = Math.round(os.loadavg()[0] * 100) / 100
|
data.statistics.cpuUsage = Math.round(os.loadavg()[0] * 100) / 100
|
||||||
data.statistics.freeMem = Math.round((os.freemem() / 1024 / 1024) * 100) / 100
|
data.statistics.freeMem = Math.round((os.freemem() / 1024 / 1024) * 100) / 100
|
||||||
data.statistics.totalMem = Math.round((os.totalmem() / 1024 / 1024) * 100) / 100
|
data.statistics.totalMem = Math.round((os.totalmem() / 1024 / 1024) * 100) / 100
|
||||||
|
Loading…
Reference in New Issue
Block a user