@contember/engine-server 2.2.0-alpha.1 → 2.2.0-alpha.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,GAAI,IAAI,MAAM,qBAG/B,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,OAAQ,MAAM,qBAG/B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contember/engine-server",
3
- "version": "2.2.0-alpha.1",
3
+ "version": "2.2.0-alpha.10",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/production/index.js",
6
6
  "typings": "./dist/types/index.d.ts",
@@ -23,11 +23,12 @@
23
23
  }
24
24
  },
25
25
  "dependencies": {
26
- "@contember/engine-actions": "2.1.0-beta.2",
27
- "@contember/engine-http": "2.1.0-beta.2",
28
- "@contember/engine-plugins": "2.1.0-beta.2",
29
- "@contember/engine-s3-plugin": "2.1.0-beta.2",
30
- "@contember/engine-vimeo-plugin": "2.1.0-beta.2",
26
+ "@contember/engine-actions": "2.2.0-alpha.10",
27
+ "@contember/engine-http": "2.2.0-alpha.10",
28
+ "@contember/engine-panel": "2.2.0-alpha.10",
29
+ "@contember/engine-plugins": "2.2.0-alpha.10",
30
+ "@contember/engine-s3-plugin": "2.2.0-alpha.10",
31
+ "@contember/engine-vimeo-plugin": "2.2.0-alpha.10",
31
32
  "graphql": "^16.13.1",
32
33
  "pg": "^8.20.0",
33
34
  "uuid": "^13.0.0"
@@ -1,8 +1,9 @@
1
1
  import ActionsPlugin from '@contember/engine-actions'
2
+ import PanelPlugin from '@contember/engine-panel'
2
3
  import { Plugin } from '@contember/engine-plugins'
3
4
  import S3Plugin from '@contember/engine-s3-plugin'
4
5
  import VimeoPlugin from '@contember/engine-vimeo-plugin'
5
6
 
6
7
  export default function loadPlugins(): Promise<Plugin[]> {
7
- return Promise.resolve([new S3Plugin(), new VimeoPlugin(), new ActionsPlugin()])
8
+ return Promise.resolve([new S3Plugin(), new VimeoPlugin(), new ActionsPlugin(), new PanelPlugin()])
8
9
  }
package/src/start.ts CHANGED
@@ -4,6 +4,7 @@ import {
4
4
  createContainer,
5
5
  createDefaultLogger,
6
6
  createSentryLoggerHandler,
7
+ createTelemetry,
7
8
  getServerVersion,
8
9
  isDebugMode,
9
10
  listenOnProcessTermination,
@@ -28,7 +29,7 @@ process.on('warning', message => {
28
29
  const version = await getServerVersion()
29
30
  printStartInfo({ version, isDebug }, logger)
30
31
  const plugins = await loadPlugins()
31
- const { serverConfig, projectConfigResolver, tenantConfigResolver } = await resolveServerConfig({ plugins, serverConfigSchema })
32
+ const { serverConfig, projectConfigResolver, tenantConfigResolver, env } = await resolveServerConfig({ plugins, serverConfigSchema })
32
33
 
33
34
  if (process.argv[2] === 'validate') {
34
35
  process.exit(0)
@@ -39,6 +40,8 @@ process.on('warning', message => {
39
40
  logger.addHandler(sentryhandler)
40
41
  }
41
42
 
43
+ const telemetry = createTelemetry({ config: serverConfig.telemetry, logger, env })
44
+
42
45
  const workerConfig = serverConfig.workerCount || 1
43
46
 
44
47
  const workerCount = workerConfig === 'auto' ? os.cpus().length : Number(workerConfig)
@@ -51,15 +54,51 @@ process.on('warning', message => {
51
54
  serverConfig,
52
55
  projectConfigResolver,
53
56
  tenantConfigResolver,
57
+ env,
54
58
  plugins,
55
59
  processType,
56
60
  version,
57
61
  logger,
62
+ tracer: telemetry.tracer,
58
63
  })
59
64
 
60
65
  let initializedProjects: string[] = []
61
66
  const terminationJobs: TerminationJob[] = []
62
- listenOnProcessTermination(terminationJobs, logger)
67
+ const finalTerminationJobs: TerminationJob[] = []
68
+ // A cluster worker is signalled by the master, which has already served the delay.
69
+ listenOnProcessTermination(terminationJobs, logger, {
70
+ sigtermDelayMs: processType === 'clusterWorker' ? 0 : serverConfig.shutdownDelayMs,
71
+ finalJobs: finalTerminationJobs,
72
+ })
73
+
74
+ const spanProcessor = telemetry.processor
75
+ if (spanProcessor !== undefined) {
76
+ terminationJobs.push(async () => {
77
+ let timer: ReturnType<typeof setTimeout> | undefined
78
+ let flushed = false
79
+ try {
80
+ await Promise.race([
81
+ spanProcessor.forceFlush().then(() => {
82
+ flushed = true
83
+ }),
84
+ new Promise<void>(resolve => {
85
+ timer = setTimeout(resolve, 5000)
86
+ }),
87
+ ])
88
+ } finally {
89
+ if (timer !== undefined) {
90
+ clearTimeout(timer)
91
+ }
92
+ }
93
+ if (!flushed) {
94
+ logger.warn('Telemetry pre-shutdown flush timed out')
95
+ }
96
+ })
97
+ finalTerminationJobs.push(async () => {
98
+ await spanProcessor.shutdown()
99
+ logger.info('Telemetry shut down')
100
+ })
101
+ }
63
102
 
64
103
  if (cluster.isMaster) {
65
104
  const monitoringPort = serverConfig.monitoringPort
@@ -106,7 +145,7 @@ process.on('warning', message => {
106
145
  },
107
146
  })
108
147
  terminationJobs.push(async () => {
109
- ;(await runningWorker).end()
148
+ await (await runningWorker).end()
110
149
  })
111
150
  await runningWorker
112
151
  logger.info(`Contember Worker ${workerName} started.`)
package/src/tsconfig.json CHANGED
@@ -6,6 +6,7 @@
6
6
  "references": [
7
7
  { "path": "../../engine-actions/src" },
8
8
  { "path": "../../engine-http/src" },
9
+ { "path": "../../engine-panel/src" },
9
10
  { "path": "../../engine-plugins/src" },
10
11
  { "path": "../../engine-s3-plugin/src" },
11
12
  { "path": "../../engine-vimeo-plugin/src" }