@contember/engine-server 1.1.0-rc.3 → 1.2.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/MasterContainer.d.ts +27 -25
- package/dist/src/MasterContainer.d.ts.map +1 -1
- package/dist/src/MasterContainer.js +54 -80
- package/dist/src/MasterContainer.js.map +1 -1
- package/dist/src/bootstrap/Initializer.d.ts +3 -3
- package/dist/src/bootstrap/Initializer.d.ts.map +1 -1
- package/dist/src/bootstrap/Initializer.js +15 -6
- package/dist/src/bootstrap/Initializer.js.map +1 -1
- package/dist/src/config/config.d.ts +5 -4
- package/dist/src/config/config.d.ts.map +1 -1
- package/dist/src/config/config.js +2 -2
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/configSchema.d.ts +45 -11
- package/dist/src/config/configSchema.d.ts.map +1 -1
- package/dist/src/config/configSchema.js +20 -18
- package/dist/src/config/configSchema.js.map +1 -1
- package/dist/src/config/configTemplate.d.ts.map +1 -1
- package/dist/src/config/configTemplate.js +23 -0
- package/dist/src/config/configTemplate.js.map +1 -1
- package/dist/src/index.d.ts +9 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +23 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/project/ProjectContainer.js +1 -1
- package/dist/src/project/ProjectContainer.js.map +1 -1
- package/dist/src/project/ProjectContainerResolver.d.ts +6 -3
- package/dist/src/project/ProjectContainerResolver.d.ts.map +1 -1
- package/dist/src/project/ProjectContainerResolver.js +4 -16
- package/dist/src/project/ProjectContainerResolver.js.map +1 -1
- package/dist/src/projectGroup/ProjectGroupContainer.d.ts +2 -1
- package/dist/src/projectGroup/ProjectGroupContainer.d.ts.map +1 -1
- package/dist/src/projectGroup/ProjectGroupContainer.js +8 -4
- package/dist/src/projectGroup/ProjectGroupContainer.js.map +1 -1
- package/dist/src/projectGroup/ProjectGroupResolver.d.ts +7 -0
- package/dist/src/projectGroup/ProjectGroupResolver.d.ts.map +1 -0
- package/dist/src/projectGroup/ProjectGroupResolver.js +13 -0
- package/dist/src/projectGroup/ProjectGroupResolver.js.map +1 -0
- package/dist/src/start.js +15 -112
- package/dist/src/start.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/index.d.ts +0 -4
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +0 -4
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/sentry.d.ts +1 -1
- package/dist/src/utils/sentry.d.ts.map +1 -1
- package/dist/src/utils/sentry.js +1 -1
- package/dist/src/utils/sentry.js.map +1 -1
- package/dist/src/utils/serverStartup.d.ts +31 -0
- package/dist/src/utils/serverStartup.d.ts.map +1 -0
- package/dist/src/utils/serverStartup.js +42 -0
- package/dist/src/utils/serverStartup.js.map +1 -0
- package/dist/src/utils/serverTermination.d.ts +12 -0
- package/dist/src/utils/serverTermination.d.ts.map +1 -0
- package/dist/src/utils/serverTermination.js +26 -0
- package/dist/src/utils/serverTermination.js.map +1 -0
- package/dist/tests/e2e/acl-condition-variable.test.d.ts +2 -0
- package/dist/tests/e2e/acl-condition-variable.test.d.ts.map +1 -0
- package/dist/tests/e2e/acl-condition-variable.test.js +77 -0
- package/dist/tests/e2e/acl-condition-variable.test.js.map +1 -0
- package/dist/tests/e2e/assume-membership.test.d.ts +2 -0
- package/dist/tests/e2e/assume-membership.test.d.ts.map +1 -0
- package/dist/tests/e2e/assume-membership.test.js +58 -0
- package/dist/tests/e2e/assume-membership.test.js.map +1 -0
- package/dist/tests/e2e/content-api-basic.test.d.ts +2 -0
- package/dist/tests/e2e/content-api-basic.test.d.ts.map +1 -0
- package/dist/tests/e2e/content-api-basic.test.js +50 -0
- package/dist/tests/e2e/content-api-basic.test.js.map +1 -0
- package/dist/tests/e2e/content-invalid-schema.test.d.ts +2 -0
- package/dist/tests/e2e/content-invalid-schema.test.d.ts.map +1 -0
- package/dist/tests/e2e/content-invalid-schema.test.js +29 -0
- package/dist/tests/e2e/content-invalid-schema.test.js.map +1 -0
- package/dist/tests/e2e/homepage.test.d.ts +2 -0
- package/dist/tests/e2e/homepage.test.d.ts.map +1 -0
- package/dist/tests/e2e/homepage.test.js +15 -0
- package/dist/tests/e2e/homepage.test.js.map +1 -0
- package/dist/tests/e2e/tenant-member-access.test.d.ts +2 -0
- package/dist/tests/e2e/tenant-member-access.test.d.ts.map +1 -0
- package/dist/tests/e2e/tenant-member-access.test.js +43 -0
- package/dist/tests/e2e/tenant-member-access.test.js.map +1 -0
- package/dist/tests/e2e/x-contember-ref.test.d.ts +2 -0
- package/dist/tests/e2e/x-contember-ref.test.d.ts.map +1 -0
- package/dist/tests/e2e/x-contember-ref.test.js +63 -0
- package/dist/tests/e2e/x-contember-ref.test.js.map +1 -0
- package/dist/tests/src/requests.d.ts +5 -0
- package/dist/tests/src/requests.d.ts.map +1 -0
- package/dist/tests/src/requests.js +59 -0
- package/dist/tests/src/requests.js.map +1 -0
- package/dist/tests/src/tester.d.ts +19 -0
- package/dist/tests/src/tester.d.ts.map +1 -0
- package/dist/tests/src/tester.js +99 -0
- package/dist/tests/src/tester.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/esbuild.js +7 -14
- package/package.json +23 -23
- package/src/MasterContainer.ts +94 -110
- package/src/bootstrap/Initializer.ts +16 -6
- package/src/config/config.ts +7 -5
- package/src/config/configSchema.ts +30 -33
- package/src/config/configTemplate.ts +23 -0
- package/src/index.ts +15 -2
- package/src/project/ProjectContainer.ts +1 -1
- package/src/project/ProjectContainerResolver.ts +4 -17
- package/src/projectGroup/ProjectGroupContainer.ts +12 -3
- package/src/projectGroup/ProjectGroupResolver.ts +12 -0
- package/src/start.ts +18 -127
- package/src/utils/index.ts +0 -4
- package/src/utils/sentry.ts +1 -1
- package/src/utils/serverStartup.ts +42 -0
- package/src/utils/serverTermination.ts +20 -0
- package/tests/e2e/acl-condition-variable.test.ts +74 -0
- package/tests/e2e/assume-membership.test.ts +64 -0
- package/tests/e2e/content-api-basic.test.ts +51 -0
- package/tests/e2e/content-invalid-schema.test.ts +31 -0
- package/tests/e2e/homepage.test.ts +10 -0
- package/tests/e2e/tenant-member-access.test.ts +51 -0
- package/tests/e2e/x-contember-ref.test.ts +71 -0
- package/tests/src/requests.ts +72 -0
- package/tests/src/tester.ts +118 -0
- package/alpine.dockerfile +0 -30
- package/debian.dockerfile +0 -27
- package/dist/src/http/CollectHttpMetricsMiddelware.d.ts +0 -5
- package/dist/src/http/CollectHttpMetricsMiddelware.d.ts.map +0 -1
- package/dist/src/http/CollectHttpMetricsMiddelware.js +0 -36
- package/dist/src/http/CollectHttpMetricsMiddelware.js.map +0 -1
- package/dist/src/http/ShowMetricsMiddleware.d.ts +0 -4
- package/dist/src/http/ShowMetricsMiddleware.d.ts.map +0 -1
- package/dist/src/http/ShowMetricsMiddleware.js +0 -20
- package/dist/src/http/ShowMetricsMiddleware.js.map +0 -1
- package/dist/src/http/index.d.ts +0 -3
- package/dist/src/http/index.d.ts.map +0 -1
- package/dist/src/http/index.js +0 -19
- package/dist/src/http/index.js.map +0 -1
- package/dist/src/projectGroup/ProjectGroupContainerResolver.d.ts +0 -12
- package/dist/src/projectGroup/ProjectGroupContainerResolver.d.ts.map +0 -1
- package/dist/src/projectGroup/ProjectGroupContainerResolver.js +0 -36
- package/dist/src/projectGroup/ProjectGroupContainerResolver.js.map +0 -1
- package/dist/src/utils/cluster.d.ts +0 -9
- package/dist/src/utils/cluster.d.ts.map +0 -1
- package/dist/src/utils/cluster.js +0 -47
- package/dist/src/utils/cluster.js.map +0 -1
- package/dist/src/utils/dbMetrics.d.ts +0 -16
- package/dist/src/utils/dbMetrics.d.ts.map +0 -1
- package/dist/src/utils/dbMetrics.js +0 -98
- package/dist/src/utils/dbMetrics.js.map +0 -1
- package/dist/src/utils/timeout.d.ts +0 -2
- package/dist/src/utils/timeout.d.ts.map +0 -1
- package/dist/src/utils/timeout.js +0 -8
- package/dist/src/utils/timeout.js.map +0 -1
- package/dist/src/utils/tuple.d.ts +0 -2
- package/dist/src/utils/tuple.d.ts.map +0 -1
- package/dist/src/utils/tuple.js +0 -6
- package/dist/src/utils/tuple.js.map +0 -1
- package/dist/tests/e2e/http.test.d.ts +0 -2
- package/dist/tests/e2e/http.test.d.ts.map +0 -1
- package/dist/tests/e2e/http.test.js +0 -275
- package/dist/tests/e2e/http.test.js.map +0 -1
- package/jasmine.json +0 -7
- package/src/http/CollectHttpMetricsMiddelware.ts +0 -32
- package/src/http/ShowMetricsMiddleware.ts +0 -12
- package/src/http/index.ts +0 -2
- package/src/projectGroup/ProjectGroupContainerResolver.ts +0 -47
- package/src/utils/cluster.ts +0 -40
- package/src/utils/dbMetrics.ts +0 -111
- package/src/utils/timeout.ts +0 -4
- package/src/utils/tuple.ts +0 -1
- package/tests/e2e/http.test.ts +0 -303
- package/tslint.json +0 -14
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assert, test } from 'vitest'
|
|
2
|
+
import { createTester, gql } from '../src/tester'
|
|
3
|
+
import { createSchema, SchemaDefinition as def } from '@contember/schema-definition'
|
|
4
|
+
|
|
5
|
+
namespace TagModel {
|
|
6
|
+
export class Tag {
|
|
7
|
+
label = def.stringColumn()
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
test('Content API: X-Contember-Ref header', async () => {
|
|
13
|
+
|
|
14
|
+
const tester = await createTester(createSchema(TagModel))
|
|
15
|
+
|
|
16
|
+
await tester(
|
|
17
|
+
gql`
|
|
18
|
+
mutation {
|
|
19
|
+
createTag(data: { label: "typescript" }) {
|
|
20
|
+
ok
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
`,
|
|
24
|
+
).expect(200)
|
|
25
|
+
|
|
26
|
+
const response = await tester(
|
|
27
|
+
gql`
|
|
28
|
+
query {
|
|
29
|
+
listTag(filter: { label: { eq: "typescript" } }) {
|
|
30
|
+
label
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
`,
|
|
34
|
+
)
|
|
35
|
+
.set('X-Contember-Ref', 'None')
|
|
36
|
+
.expect(response => {
|
|
37
|
+
assert.deepStrictEqual(response.body.data, {
|
|
38
|
+
listTag: [
|
|
39
|
+
{
|
|
40
|
+
label: 'typescript',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
.expect(200)
|
|
46
|
+
const eventKey = response.get('X-Contember-Ref')
|
|
47
|
+
await tester(
|
|
48
|
+
gql`
|
|
49
|
+
query {
|
|
50
|
+
listTag {
|
|
51
|
+
label
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
`,
|
|
55
|
+
)
|
|
56
|
+
.set('X-Contember-Ref', eventKey)
|
|
57
|
+
.expect(304)
|
|
58
|
+
|
|
59
|
+
// ignored for mutation
|
|
60
|
+
await tester(
|
|
61
|
+
gql`
|
|
62
|
+
mutation {
|
|
63
|
+
createTag(data: { label: "typescript" }) {
|
|
64
|
+
ok
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
`,
|
|
68
|
+
)
|
|
69
|
+
.set('X-Contember-Ref', eventKey)
|
|
70
|
+
.expect(200)
|
|
71
|
+
})
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { executeGraphql, gql, loginToken } from './tester'
|
|
2
|
+
import { assert } from 'vitest'
|
|
3
|
+
import { Membership } from '@contember/engine-tenant-api'
|
|
4
|
+
|
|
5
|
+
export const signIn = async (email: string, password = '123456'): Promise<string> => {
|
|
6
|
+
const response = await executeGraphql(
|
|
7
|
+
'/tenant',
|
|
8
|
+
gql`
|
|
9
|
+
mutation ($email: String!, $password: String!) {
|
|
10
|
+
signIn(email: $email, password: $password) {
|
|
11
|
+
ok
|
|
12
|
+
result {
|
|
13
|
+
token
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
`,
|
|
18
|
+
{
|
|
19
|
+
variables: { email, password },
|
|
20
|
+
authorizationToken: loginToken,
|
|
21
|
+
},
|
|
22
|
+
).expect(200)
|
|
23
|
+
|
|
24
|
+
return response.body.data.signIn.result.token
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export const signUp = async (email: string, password = '123456') => {
|
|
29
|
+
const signUpResponse = await executeGraphql(
|
|
30
|
+
'/tenant',
|
|
31
|
+
gql`
|
|
32
|
+
mutation($email: String!, $password: String!) {
|
|
33
|
+
signUp(email: $email, password: $password) {
|
|
34
|
+
ok
|
|
35
|
+
result {
|
|
36
|
+
person {
|
|
37
|
+
identity {
|
|
38
|
+
id
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
`,
|
|
45
|
+
{
|
|
46
|
+
variables: { email, password },
|
|
47
|
+
},
|
|
48
|
+
).expect(200)
|
|
49
|
+
|
|
50
|
+
return signUpResponse.body.data.signUp.result.person.identity.id
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
export const addProjectMember = async (identityId: string, projectSlug: string, membership: Membership = { role: 'admin', variables: [] }) => {
|
|
55
|
+
await executeGraphql(
|
|
56
|
+
'/tenant',
|
|
57
|
+
gql`
|
|
58
|
+
mutation ($identity: String!, $projectSlug: String!, $membership: MembershipInput!) {
|
|
59
|
+
addProjectMember(identityId: $identity, projectSlug: $projectSlug, memberships: [$membership]) {
|
|
60
|
+
ok
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
`,
|
|
64
|
+
{
|
|
65
|
+
variables: { identity: identityId, projectSlug, membership },
|
|
66
|
+
},
|
|
67
|
+
)
|
|
68
|
+
.expect(200)
|
|
69
|
+
.expect(response => {
|
|
70
|
+
assert.deepStrictEqual(response.body.data, { addProjectMember: { ok: true } })
|
|
71
|
+
})
|
|
72
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import nodeAssert from 'assert'
|
|
2
|
+
import supertest from 'supertest'
|
|
3
|
+
import { Schema } from '@contember/schema'
|
|
4
|
+
import {
|
|
5
|
+
Migration,
|
|
6
|
+
MigrationVersionHelper,
|
|
7
|
+
ModificationHandlerFactory,
|
|
8
|
+
SchemaDiffer,
|
|
9
|
+
SchemaMigrator, VERSION_LATEST,
|
|
10
|
+
} from '@contember/schema-migrations'
|
|
11
|
+
import { emptySchema } from '@contember/schema-utils'
|
|
12
|
+
import { assert } from 'vitest'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export const rootToken = String(process.env.CONTEMBER_ROOT_TOKEN)
|
|
16
|
+
export const loginToken = String(process.env.CONTEMBER_LOGIN_TOKEN)
|
|
17
|
+
export const apiUrl = String(process.env.CONTEMBER_API_URL)
|
|
18
|
+
|
|
19
|
+
// Used to allow prettier formatting of GraphQL queries
|
|
20
|
+
export const gql = (strings: TemplateStringsArray) => {
|
|
21
|
+
nodeAssert.strictEqual(strings.length, 1)
|
|
22
|
+
return strings[0]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
export const executeGraphql = (
|
|
27
|
+
path: string,
|
|
28
|
+
query: string,
|
|
29
|
+
options: { authorizationToken?: string; variables?: Record<string, any> },
|
|
30
|
+
) => {
|
|
31
|
+
return supertest(apiUrl)
|
|
32
|
+
.post(path)
|
|
33
|
+
.set('Authorization', 'Bearer ' + (options.authorizationToken || rootToken))
|
|
34
|
+
.send({
|
|
35
|
+
query,
|
|
36
|
+
variables: options.variables || {},
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
const createMigrations = (schema: Schema) => {
|
|
42
|
+
const modificationHandlerFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
43
|
+
const differ = new SchemaDiffer(new SchemaMigrator(modificationHandlerFactory))
|
|
44
|
+
return differ.diffSchemas(emptySchema, schema)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const createProject = async (slug: string) => {
|
|
48
|
+
await executeGraphql(
|
|
49
|
+
'/tenant',
|
|
50
|
+
gql`
|
|
51
|
+
mutation($projectSlug: String!, $config: Json!) {
|
|
52
|
+
createProject(projectSlug: $projectSlug, config: $config) {
|
|
53
|
+
ok
|
|
54
|
+
error { code }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
`,
|
|
58
|
+
{
|
|
59
|
+
variables: {
|
|
60
|
+
projectSlug: slug,
|
|
61
|
+
config: {},
|
|
62
|
+
},
|
|
63
|
+
})
|
|
64
|
+
.expect(response => {
|
|
65
|
+
assert.isOk(response.body)
|
|
66
|
+
assert.isOk(response.body.data)
|
|
67
|
+
assert.isOk(response.body.data.createProject)
|
|
68
|
+
assert.isOk(response.body.data.createProject.ok)
|
|
69
|
+
})
|
|
70
|
+
.expect(200)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const executeMigrations = async (projectSlug: string, modifications: Migration.Modification[]) => {
|
|
74
|
+
const [version, fullName] = MigrationVersionHelper.createVersion('test')
|
|
75
|
+
await executeGraphql(
|
|
76
|
+
'/system/' + projectSlug,
|
|
77
|
+
gql`
|
|
78
|
+
mutation($migrations: [Migration!]!) {
|
|
79
|
+
migrate(migrations: $migrations) {
|
|
80
|
+
ok
|
|
81
|
+
error { code }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
`,
|
|
85
|
+
{
|
|
86
|
+
variables: {
|
|
87
|
+
migrations: [{
|
|
88
|
+
formatVersion: VERSION_LATEST,
|
|
89
|
+
modifications,
|
|
90
|
+
version,
|
|
91
|
+
name: fullName,
|
|
92
|
+
}],
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
.expect(response => {
|
|
96
|
+
assert.deepStrictEqual(response.body.data, {
|
|
97
|
+
migrate: {
|
|
98
|
+
error: null,
|
|
99
|
+
ok: true,
|
|
100
|
+
},
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export const createTester = async (schema: Schema) => {
|
|
106
|
+
const projectSlug = 'test_' + Date.now()
|
|
107
|
+
await createProject(projectSlug)
|
|
108
|
+
const migrations = createMigrations(schema)
|
|
109
|
+
await executeMigrations(projectSlug, migrations)
|
|
110
|
+
|
|
111
|
+
const queryCb = (
|
|
112
|
+
query: string,
|
|
113
|
+
options: { path?: string; authorizationToken?: string; variables?: Record<string, any> } = {}) => {
|
|
114
|
+
return executeGraphql(options.path ?? '/content/' + projectSlug + '/live', query, options)
|
|
115
|
+
}
|
|
116
|
+
queryCb.projectSlug = projectSlug
|
|
117
|
+
return queryCb
|
|
118
|
+
}
|
package/alpine.dockerfile
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
FROM node:14-alpine as builder
|
|
2
|
-
|
|
3
|
-
WORKDIR /src
|
|
4
|
-
RUN apk --no-cache add bash
|
|
5
|
-
RUN apk --no-cache add build-base python3
|
|
6
|
-
COPY ./ ./
|
|
7
|
-
|
|
8
|
-
RUN test ! -f yarn.tar.gz || tar xf yarn.tar.gz -C "$(yarn cache dir)" .
|
|
9
|
-
RUN /src/packages/engine-server/build.sh
|
|
10
|
-
|
|
11
|
-
FROM node:14-alpine
|
|
12
|
-
|
|
13
|
-
WORKDIR /src
|
|
14
|
-
RUN apk --no-cache add curl
|
|
15
|
-
|
|
16
|
-
COPY --from=builder /src/server/server.js /src/
|
|
17
|
-
COPY --from=builder /src/server/node_modules /src/node_modules
|
|
18
|
-
COPY --from=builder /src/packages/engine-system-api/src/migrations /src/system-migrations
|
|
19
|
-
COPY --from=builder /src/packages/engine-tenant-api/src/migrations /src/tenant-migrations
|
|
20
|
-
COPY --from=builder /src/packages/engine-server/package.json /src/package.json
|
|
21
|
-
COPY --from=builder /src/license.md /src/
|
|
22
|
-
|
|
23
|
-
ENV NODE_ENV "production"
|
|
24
|
-
ENV CONTEMBER_PORT 4000
|
|
25
|
-
ENV CONTEMBER_MONITORING_PORT 4001
|
|
26
|
-
ENV CONTEMBER_TENANT_MIGRATIONS_DIR /src/tenant-migrations
|
|
27
|
-
ENV CONTEMBER_SYSTEM_MIGRATIONS_DIR /src/system-migrations
|
|
28
|
-
ENV CONTEMBER_PACKAGE_JSON /src/package.json
|
|
29
|
-
|
|
30
|
-
CMD ["node", "./server.js"]
|
package/debian.dockerfile
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
FROM node:14 as builder
|
|
2
|
-
|
|
3
|
-
WORKDIR /src
|
|
4
|
-
COPY ./ ./
|
|
5
|
-
|
|
6
|
-
RUN test ! -f yarn.tar.gz || tar xf yarn.tar.gz -C "$(yarn cache dir)" .
|
|
7
|
-
RUN /src/packages/engine-server/build.sh
|
|
8
|
-
|
|
9
|
-
FROM node:14
|
|
10
|
-
|
|
11
|
-
WORKDIR /src
|
|
12
|
-
|
|
13
|
-
COPY --from=builder /src/server/server.js /src/
|
|
14
|
-
COPY --from=builder /src/server/node_modules /src/node_modules
|
|
15
|
-
COPY --from=builder /src/packages/engine-system-api/src/migrations /src/system-migrations
|
|
16
|
-
COPY --from=builder /src/packages/engine-tenant-api/src/migrations /src/tenant-migrations
|
|
17
|
-
COPY --from=builder /src/packages/engine-server/package.json /src/package.json
|
|
18
|
-
COPY --from=builder /src/license.md /src/
|
|
19
|
-
|
|
20
|
-
ENV NODE_ENV "production"
|
|
21
|
-
ENV CONTEMBER_PORT 4000
|
|
22
|
-
ENV CONTEMBER_MONITORING_PORT 4001
|
|
23
|
-
ENV CONTEMBER_TENANT_MIGRATIONS_DIR /src/tenant-migrations
|
|
24
|
-
ENV CONTEMBER_SYSTEM_MIGRATIONS_DIR /src/system-migrations
|
|
25
|
-
ENV CONTEMBER_PACKAGE_JSON /src/package.json
|
|
26
|
-
|
|
27
|
-
CMD ["node", "./server.js"]
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { KoaMiddleware, ModuleInfoMiddlewareState, ProjectInfoMiddlewareState } from '@contember/engine-http';
|
|
2
|
-
import prom from 'prom-client';
|
|
3
|
-
import { GraphQLKoaState } from '@contember/engine-http';
|
|
4
|
-
export declare const createColllectHttpMetricsMiddleware: (registry: prom.Registry) => KoaMiddleware<Partial<ProjectInfoMiddlewareState & ModuleInfoMiddlewareState & GraphQLKoaState>>;
|
|
5
|
-
//# sourceMappingURL=CollectHttpMetricsMiddelware.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CollectHttpMetricsMiddelware.d.ts","sourceRoot":"","sources":["../../../src/http/CollectHttpMetricsMiddelware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAC7G,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,eAAO,MAAM,mCAAmC,aACrC,KAAK,QAAQ,KACrB,cAAc,QAAQ,0BAA0B,GAAG,yBAAyB,GAAG,eAAe,CAAC,CAyBjG,CAAA"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createColllectHttpMetricsMiddleware = void 0;
|
|
7
|
-
const prom_client_1 = __importDefault(require("prom-client"));
|
|
8
|
-
const createColllectHttpMetricsMiddleware = (registry) => {
|
|
9
|
-
const requestSummary = new prom_client_1.default.Histogram({
|
|
10
|
-
name: 'contember_http_duration_seconds',
|
|
11
|
-
help: 'Incoming HTTP requests statistics by http_method (OPTIONS requests are ignored), http_code, contember_project (or "unknown" for undefined project), contember_project_group (or "unknown" for undefined project group), contember_module (system, tenant, content, unknown) and graphql_operation (query, mutation, unknown)',
|
|
12
|
-
registers: [registry],
|
|
13
|
-
labelNames: ['http_method', 'http_code', 'contember_project', 'contember_project_group', 'contember_module', 'graphql_operation'],
|
|
14
|
-
buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],
|
|
15
|
-
});
|
|
16
|
-
return async (ctx, next) => {
|
|
17
|
-
var _a;
|
|
18
|
-
const end = ctx.method === 'OPTIONS' ? () => null : requestSummary.startTimer();
|
|
19
|
-
try {
|
|
20
|
-
await next();
|
|
21
|
-
}
|
|
22
|
-
finally {
|
|
23
|
-
const labels = {
|
|
24
|
-
http_method: ctx.method,
|
|
25
|
-
http_code: ctx.status,
|
|
26
|
-
contember_project: ctx.state.project || 'unknown',
|
|
27
|
-
contember_project_group: ctx.state.projectGroup || 'unknown',
|
|
28
|
-
contember_module: ctx.state.module || 'unknown',
|
|
29
|
-
graphql_operation: ((_a = ctx.state.graphql) === null || _a === void 0 ? void 0 : _a.operationName) || 'unknown',
|
|
30
|
-
};
|
|
31
|
-
end(labels);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
exports.createColllectHttpMetricsMiddleware = createColllectHttpMetricsMiddleware;
|
|
36
|
-
//# sourceMappingURL=CollectHttpMetricsMiddelware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CollectHttpMetricsMiddelware.js","sourceRoot":"","sources":["../../../src/http/CollectHttpMetricsMiddelware.ts"],"names":[],"mappings":";;;;;;AACA,8DAA8B;AAGvB,MAAM,mCAAmC,GAAG,CAClD,QAAuB,EAC4E,EAAE;IACrG,MAAM,cAAc,GAAG,IAAI,qBAAI,CAAC,SAAS,CAAC;QACzC,IAAI,EAAE,iCAAiC;QACvC,IAAI,EAAE,8TAA8T;QACpU,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;QACjI,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;KAClE,CAAC,CAAA;IAEF,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA;QAC/E,IAAI;YACH,MAAM,IAAI,EAAE,CAAA;SACZ;gBAAS;YACT,MAAM,MAAM,GAAG;gBACd,WAAW,EAAE,GAAG,CAAC,MAAM;gBACvB,SAAS,EAAE,GAAG,CAAC,MAAM;gBACrB,iBAAiB,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,SAAS;gBACjD,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,SAAS;gBAC5D,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;gBAC/C,iBAAiB,EAAE,CAAA,MAAA,GAAG,CAAC,KAAK,CAAC,OAAO,0CAAE,aAAa,KAAI,SAAS;aAChE,CAAA;YACD,GAAG,CAAC,MAAM,CAAC,CAAA;SACX;IACF,CAAC,CAAA;AACF,CAAC,CAAA;AA3BY,QAAA,mCAAmC,uCA2B/C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShowMetricsMiddleware.d.ts","sourceRoot":"","sources":["../../../src/http/ShowMetricsMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAS,MAAM,wBAAwB,CAAA;AAC7D,OAAO,IAAI,MAAM,aAAa,CAAA;AAE9B,eAAO,MAAM,2BAA2B,aAAc,KAAK,QAAQ,KAAG,cAAc,GAAG,CAQtF,CAAA"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createShowMetricsMiddleware = void 0;
|
|
7
|
-
const engine_http_1 = require("@contember/engine-http");
|
|
8
|
-
const prom_client_1 = __importDefault(require("prom-client"));
|
|
9
|
-
const createShowMetricsMiddleware = (registry) => {
|
|
10
|
-
return (0, engine_http_1.route)('/metrics', async (ctx) => {
|
|
11
|
-
if (registry instanceof prom_client_1.default.AggregatorRegistry) {
|
|
12
|
-
ctx.body = await registry.clusterMetrics();
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
ctx.body = registry.metrics();
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
exports.createShowMetricsMiddleware = createShowMetricsMiddleware;
|
|
20
|
-
//# sourceMappingURL=ShowMetricsMiddleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShowMetricsMiddleware.js","sourceRoot":"","sources":["../../../src/http/ShowMetricsMiddleware.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA6D;AAC7D,8DAA8B;AAEvB,MAAM,2BAA2B,GAAG,CAAC,QAAuB,EAAsB,EAAE;IAC1F,OAAO,IAAA,mBAAK,EAAC,UAAU,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE;QACpC,IAAI,QAAQ,YAAY,qBAAI,CAAC,kBAAkB,EAAE;YAChD,GAAG,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAA;SAC1C;aAAM;YACN,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAA;SAC7B;IACF,CAAC,CAAC,CAAA;AACH,CAAC,CAAA;AARY,QAAA,2BAA2B,+BAQvC"}
|
package/dist/src/http/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA"}
|
package/dist/src/http/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./CollectHttpMetricsMiddelware"), exports);
|
|
18
|
-
__exportStar(require("./ShowMetricsMiddleware"), exports);
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA8C;AAC9C,0DAAuC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { TenantConfigResolver } from '../config/tenantConfigResolver';
|
|
2
|
-
import { ProjectGroupContainer, ProjectGroupContainerResolver as ProjectGroupContainerResolverInterface } from '@contember/engine-http';
|
|
3
|
-
import { ProjectGroupContainerFactory } from './ProjectGroupContainer';
|
|
4
|
-
export declare class ProjectGroupContainerResolver implements ProjectGroupContainerResolverInterface {
|
|
5
|
-
private readonly configResolver;
|
|
6
|
-
private readonly containerFactory;
|
|
7
|
-
private containers;
|
|
8
|
-
readonly onCreate: ((container: ProjectGroupContainer, slug: string | undefined) => void | (() => void))[];
|
|
9
|
-
constructor(configResolver: TenantConfigResolver, containerFactory: ProjectGroupContainerFactory);
|
|
10
|
-
getProjectGroupContainer(slug: string | undefined, config?: any): Promise<ProjectGroupContainer>;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=ProjectGroupContainerResolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGroupContainerResolver.d.ts","sourceRoot":"","sources":["../../../src/projectGroup/ProjectGroupContainerResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EACN,qBAAqB,EACrB,6BAA6B,IAAI,sCAAsC,EACvE,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAUtE,qBAAa,6BAA8B,YAAW,sCAAsC;IAM1F,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IANlC,OAAO,CAAC,UAAU,CAA0D;IAE5E,SAAgB,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAK;gBAGpG,cAAc,EAAE,oBAAoB,EACpC,gBAAgB,EAAE,4BAA4B;IAGnD,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,GAAE,GAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAqBjH"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ProjectGroupContainerResolver = void 0;
|
|
4
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
5
|
-
const util_1 = require("util");
|
|
6
|
-
class ProjectGroupContainerResolver {
|
|
7
|
-
constructor(configResolver, containerFactory) {
|
|
8
|
-
this.configResolver = configResolver;
|
|
9
|
-
this.containerFactory = containerFactory;
|
|
10
|
-
this.containers = new engine_common_1.PromiseMap();
|
|
11
|
-
this.onCreate = [];
|
|
12
|
-
}
|
|
13
|
-
async getProjectGroupContainer(slug, config = {}) {
|
|
14
|
-
const existing = this.containers.get(slug);
|
|
15
|
-
if (existing) {
|
|
16
|
-
const existingAwaited = await existing;
|
|
17
|
-
if ((0, util_1.isDeepStrictEqual)(config, existingAwaited.inputConfig)) {
|
|
18
|
-
return existingAwaited.container;
|
|
19
|
-
}
|
|
20
|
-
existingAwaited.cleanups.forEach(it => it());
|
|
21
|
-
this.containers.delete(slug);
|
|
22
|
-
}
|
|
23
|
-
return (await this.containers.fetch(slug, async (slug) => {
|
|
24
|
-
const container = this.containerFactory.create({
|
|
25
|
-
config: this.configResolver(slug, config),
|
|
26
|
-
slug,
|
|
27
|
-
});
|
|
28
|
-
const cleanups = this.onCreate.map(it => it(container, slug) || (() => null));
|
|
29
|
-
// eslint-disable-next-line no-console
|
|
30
|
-
await container.tenantContainer.migrationsRunner.run(console.log);
|
|
31
|
-
return { container, inputConfig: config, cleanups };
|
|
32
|
-
})).container;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.ProjectGroupContainerResolver = ProjectGroupContainerResolver;
|
|
36
|
-
//# sourceMappingURL=ProjectGroupContainerResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectGroupContainerResolver.js","sourceRoot":"","sources":["../../../src/projectGroup/ProjectGroupContainerResolver.ts"],"names":[],"mappings":";;;AAMA,4DAAqD;AACrD,+BAAwC;AAQxC,MAAa,6BAA6B;IAKzC,YACkB,cAAoC,EACpC,gBAA8C;QAD9C,mBAAc,GAAd,cAAc,CAAsB;QACpC,qBAAgB,GAAhB,gBAAgB,CAA8B;QANxD,eAAU,GAAG,IAAI,0BAAU,EAAyC,CAAA;QAE5D,aAAQ,GAA4F,EAAE,CAAA;IAKnH,CAAC;IAEG,KAAK,CAAC,wBAAwB,CAAC,IAAwB,EAAE,SAAc,EAAE;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE;YACb,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAA;YACtC,IAAI,IAAA,wBAAiB,EAAC,MAAM,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE;gBAC3D,OAAO,eAAe,CAAC,SAAS,CAAA;aAChC;YACD,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;SAC5B;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAC,IAAI,EAAC,EAAE;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAC9C,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;gBACzC,IAAI;aACJ,CAAC,CAAA;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;YAC7E,sCAAsC;YACtC,MAAM,SAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACjE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QACpD,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACd,CAAC;CACD;AA/BD,sEA+BC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const getClusterProcessType: (isClusterMode: boolean) => ProcessType;
|
|
2
|
-
export declare enum ProcessType {
|
|
3
|
-
singleNode = 0,
|
|
4
|
-
clusterMaster = 1,
|
|
5
|
-
clusterWorker = 2
|
|
6
|
-
}
|
|
7
|
-
export declare const waitForWorker: (timeoutMs: number) => Promise<unknown>;
|
|
8
|
-
export declare const notifyWorkerStarted: () => boolean | undefined;
|
|
9
|
-
//# sourceMappingURL=cluster.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../../../src/utils/cluster.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB,kBAAmB,OAAO,gBACuD,CAAA;AAEnH,oBAAY,WAAW;IACtB,UAAU,IAAA;IACV,aAAa,IAAA;IACb,aAAa,IAAA;CACb;AAID,eAAO,MAAM,aAAa,cAAe,MAAM,qBAoB9C,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAG7B,CAAA"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.notifyWorkerStarted = exports.waitForWorker = exports.ProcessType = exports.getClusterProcessType = void 0;
|
|
7
|
-
const cluster_1 = __importDefault(require("cluster"));
|
|
8
|
-
const timeout_1 = require("./timeout");
|
|
9
|
-
const getClusterProcessType = (isClusterMode) => !isClusterMode ? ProcessType.singleNode : cluster_1.default.isMaster ? ProcessType.clusterMaster : ProcessType.clusterWorker;
|
|
10
|
-
exports.getClusterProcessType = getClusterProcessType;
|
|
11
|
-
var ProcessType;
|
|
12
|
-
(function (ProcessType) {
|
|
13
|
-
ProcessType[ProcessType["singleNode"] = 0] = "singleNode";
|
|
14
|
-
ProcessType[ProcessType["clusterMaster"] = 1] = "clusterMaster";
|
|
15
|
-
ProcessType[ProcessType["clusterWorker"] = 2] = "clusterWorker";
|
|
16
|
-
})(ProcessType = exports.ProcessType || (exports.ProcessType = {}));
|
|
17
|
-
const MSG_WORKER_STARTED = 'msg_worker_started';
|
|
18
|
-
const waitForWorker = (timeoutMs) => {
|
|
19
|
-
let ok = false;
|
|
20
|
-
return Promise.race([
|
|
21
|
-
new Promise(async (resolve) => {
|
|
22
|
-
const listener = ({}, message) => {
|
|
23
|
-
if ('type' in message && message.type === MSG_WORKER_STARTED) {
|
|
24
|
-
ok = true;
|
|
25
|
-
resolve(null);
|
|
26
|
-
cluster_1.default.removeListener('message', listener);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
await cluster_1.default.on('message', listener);
|
|
30
|
-
}),
|
|
31
|
-
(0, timeout_1.timeout)(timeoutMs).then(() => {
|
|
32
|
-
if (!ok) {
|
|
33
|
-
throw new Error('Worker start timed out');
|
|
34
|
-
}
|
|
35
|
-
return true;
|
|
36
|
-
}),
|
|
37
|
-
]);
|
|
38
|
-
};
|
|
39
|
-
exports.waitForWorker = waitForWorker;
|
|
40
|
-
const notifyWorkerStarted = () => {
|
|
41
|
-
var _a;
|
|
42
|
-
return (_a = process.send) === null || _a === void 0 ? void 0 : _a.call(process, {
|
|
43
|
-
type: MSG_WORKER_STARTED,
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
exports.notifyWorkerStarted = notifyWorkerStarted;
|
|
47
|
-
//# sourceMappingURL=cluster.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cluster.js","sourceRoot":"","sources":["../../../src/utils/cluster.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA6B;AAC7B,uCAAmC;AAE5B,MAAM,qBAAqB,GAAG,CAAC,aAAsB,EAAE,EAAE,CAC/D,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAA;AADtG,QAAA,qBAAqB,yBACiF;AAEnH,IAAY,WAIX;AAJD,WAAY,WAAW;IACtB,yDAAU,CAAA;IACV,+DAAa,CAAA;IACb,+DAAa,CAAA;AACd,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAED,MAAM,kBAAkB,GAAG,oBAAoB,CAAA;AAExC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,EAAE;IAClD,IAAI,EAAE,GAAG,KAAK,CAAA;IACd,OAAO,OAAO,CAAC,IAAI,CAAC;QACnB,IAAI,OAAO,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;YAC3B,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,OAAY,EAAE,EAAE;gBACrC,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE;oBAC7D,EAAE,GAAG,IAAI,CAAA;oBACT,OAAO,CAAC,IAAI,CAAC,CAAA;oBACb,iBAAO,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;iBAC3C;YACF,CAAC,CAAA;YACD,MAAM,iBAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QACtC,CAAC,CAAC;QACF,IAAA,iBAAO,EAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,EAAE,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;aACzC;YACD,OAAO,IAAI,CAAA;QACZ,CAAC,CAAC;KACF,CAAC,CAAA;AACH,CAAC,CAAA;AApBY,QAAA,aAAa,iBAoBzB;AAEM,MAAM,mBAAmB,GAAG,GAAG,EAAE;;IACvC,OAAA,MAAA,OAAO,CAAC,IAAI,wDAAG;QACd,IAAI,EAAE,kBAAkB;KACxB,CAAC,CAAA;CAAA,CAAA;AAHU,QAAA,mBAAmB,uBAG7B"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import prom from 'prom-client';
|
|
2
|
-
import { Connection } from '@contember/database';
|
|
3
|
-
declare const labelNames: ("contember_project" | "contember_module" | "contember_project_group")[];
|
|
4
|
-
declare type LabelNames = typeof labelNames[number];
|
|
5
|
-
declare type Labels = {
|
|
6
|
-
[K in LabelNames]: string;
|
|
7
|
-
};
|
|
8
|
-
declare type DatabaseMetricsEntry = {
|
|
9
|
-
connection: Connection.PoolStatusProvider & Connection.Queryable;
|
|
10
|
-
labels: Labels;
|
|
11
|
-
};
|
|
12
|
-
declare type Unregistrar = () => void;
|
|
13
|
-
declare type DatabaseMetricsRegistrar = (entry: DatabaseMetricsEntry) => Unregistrar;
|
|
14
|
-
export declare const createDbMetricsRegistrar: (registry: prom.Registry) => DatabaseMetricsRegistrar;
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=dbMetrics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dbMetrics.d.ts","sourceRoot":"","sources":["../../../src/utils/dbMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,aAAa,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAgB,MAAM,qBAAqB,CAAA;AAE9D,QAAA,MAAM,UAAU,0EAAkG,CAAA;AAClH,aAAK,UAAU,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3C,aAAK,MAAM,GAAG;KAAG,CAAC,IAAI,UAAU,GAAG,MAAM;CAAE,CAAA;AAC3C,aAAK,oBAAoB,GAAG;IAC3B,UAAU,EAAE,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAA;IAChE,MAAM,EAAE,MAAM,CAAA;CACd,CAAA;AACD,aAAK,WAAW,GAAG,MAAM,IAAI,CAAA;AAC7B,aAAK,wBAAwB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,WAAW,CAAA;AAE5E,eAAO,MAAM,wBAAwB,aAAc,KAAK,QAAQ,KAAG,wBAkBlE,CAAA"}
|