skuba 13.0.0-subpath-imports-20250730060533 → 13.0.0-subpath-imports-20251003052152
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/README.md +1 -2
- package/config/tsconfig.json +2 -1
- package/jest/moduleNameMapper.js +3 -11
- package/lib/cli/build/assets.js +4 -8
- package/lib/cli/build/assets.js.map +2 -2
- package/lib/cli/build/esbuild.d.ts +2 -1
- package/lib/cli/build/esbuild.js +5 -4
- package/lib/cli/build/esbuild.js.map +2 -2
- package/lib/cli/build/index.js +9 -5
- package/lib/cli/build/index.js.map +2 -2
- package/lib/cli/build/tsc.d.ts +9 -2
- package/lib/cli/build/tsc.js +76 -40
- package/lib/cli/build/tsc.js.map +3 -3
- package/lib/cli/configure/analyseDependencies.d.ts +2 -2
- package/lib/cli/configure/analyseDependencies.js.map +1 -1
- package/lib/cli/configure/analysis/package.d.ts +1 -1
- package/lib/cli/configure/analysis/package.js +1 -1
- package/lib/cli/configure/analysis/package.js.map +2 -2
- package/lib/cli/configure/ensureTemplateCompletion.d.ts +2 -2
- package/lib/cli/configure/ensureTemplateCompletion.js.map +1 -1
- package/lib/cli/configure/getEntryPoint.d.ts +2 -2
- package/lib/cli/configure/getEntryPoint.js.map +1 -1
- package/lib/cli/configure/getProjectType.d.ts +2 -2
- package/lib/cli/configure/getProjectType.js.map +1 -1
- package/lib/cli/configure/processing/configFile.d.ts +1 -1
- package/lib/cli/configure/processing/configFile.js +48 -6
- package/lib/cli/configure/processing/configFile.js.map +2 -2
- package/lib/cli/configure/processing/package.js +8 -2
- package/lib/cli/configure/processing/package.js.map +2 -2
- package/lib/cli/init/getConfig.js +1 -1
- package/lib/cli/init/getConfig.js.map +2 -2
- package/lib/cli/init/git.js +1 -1
- package/lib/cli/init/git.js.map +2 -2
- package/lib/cli/init/index.js +4 -4
- package/lib/cli/init/index.js.map +3 -3
- package/lib/cli/lint/annotate/buildkite/eslint.js +1 -1
- package/lib/cli/lint/annotate/buildkite/eslint.js.map +2 -2
- package/lib/cli/lint/annotate/buildkite/index.js +1 -1
- package/lib/cli/lint/annotate/buildkite/index.js.map +2 -2
- package/lib/cli/lint/annotate/buildkite/internal.js +1 -1
- package/lib/cli/lint/annotate/buildkite/internal.js.map +2 -2
- package/lib/cli/lint/annotate/buildkite/prettier.js +1 -1
- package/lib/cli/lint/annotate/buildkite/prettier.js.map +2 -2
- package/lib/cli/lint/annotate/buildkite/tsc.js +1 -1
- package/lib/cli/lint/annotate/buildkite/tsc.js.map +2 -2
- package/lib/cli/lint/annotate/github/eslint.d.ts +1 -1
- package/lib/cli/lint/annotate/github/eslint.js.map +2 -2
- package/lib/cli/lint/annotate/github/index.js +3 -4
- package/lib/cli/lint/annotate/github/index.js.map +2 -2
- package/lib/cli/lint/annotate/github/internal.d.ts +1 -1
- package/lib/cli/lint/annotate/github/internal.js.map +2 -2
- package/lib/cli/lint/annotate/github/prettier.d.ts +1 -1
- package/lib/cli/lint/annotate/github/prettier.js.map +2 -2
- package/lib/cli/lint/annotate/github/tsc.d.ts +1 -1
- package/lib/cli/lint/annotate/github/tsc.js.map +2 -2
- package/lib/cli/lint/autofix.d.ts +1 -1
- package/lib/cli/lint/autofix.js +3 -3
- package/lib/cli/lint/autofix.js.map +2 -2
- package/lib/cli/lint/internal.js +1 -1
- package/lib/cli/lint/internal.js.map +2 -2
- package/lib/cli/lint/internalLints/patchRenovateConfig.js +3 -3
- package/lib/cli/lint/internalLints/patchRenovateConfig.js.map +2 -2
- package/lib/cli/lint/internalLints/refreshConfigFiles.js +5 -3
- package/lib/cli/lint/internalLints/refreshConfigFiles.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/index.d.ts +2 -2
- package/lib/cli/lint/internalLints/upgrade/index.js.map +1 -1
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/index.js +3 -3
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/index.js.map +2 -2
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/unhandledRejections.d.ts +4 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/unhandledRejections.js +162 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/unhandledRejections.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.1.1/index.d.ts +2 -0
- package/lib/{api/buildkite → cli/lint/internalLints/upgrade/patches/12.1.1}/index.js +12 -9
- package/lib/cli/lint/internalLints/upgrade/patches/12.1.1/index.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.1.1/patchJestSnapshots.d.ts +3 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.1.1/patchJestSnapshots.js +105 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.1.1/patchJestSnapshots.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/index.d.ts +2 -0
- package/lib/{api/git/statusMatrix.js → cli/lint/internalLints/upgrade/patches/12.3.0/index.js} +18 -25
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/index.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchApiTokenFromEnvironment.d.ts +3 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchApiTokenFromEnvironment.js +100 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchApiTokenFromEnvironment.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchDockerfileSyntaxDirective.d.ts +3 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchDockerfileSyntaxDirective.js +99 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.3.0/patchDockerfileSyntaxDirective.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.0/index.d.ts +2 -0
- package/lib/{api/buildkite/md.js → cli/lint/internalLints/upgrade/patches/12.4.0/index.js} +13 -11
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.0/index.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.0/patchDockerfileCIVariable.d.ts +3 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.0/patchDockerfileCIVariable.js +101 -0
- package/lib/cli/lint/internalLints/upgrade/patches/12.4.0/patchDockerfileCIVariable.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/13.0.0/index.d.ts +2 -0
- package/lib/{api/net → cli/lint/internalLints/upgrade/patches/13.0.0}/index.js +12 -6
- package/lib/cli/lint/internalLints/upgrade/patches/13.0.0/index.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/13.0.0/rewriteSrcImports.d.ts +13 -0
- package/lib/cli/lint/internalLints/upgrade/patches/13.0.0/rewriteSrcImports.js +221 -0
- package/lib/cli/lint/internalLints/upgrade/patches/13.0.0/rewriteSrcImports.js.map +7 -0
- package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/upgradeESLint.js +1 -1
- package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/upgradeESLint.js.map +2 -2
- package/lib/cli/node/index.js +6 -0
- package/lib/cli/node/index.js.map +2 -2
- package/lib/cli/start/index.js +6 -0
- package/lib/cli/start/index.js.map +2 -2
- package/lib/cli/test/index.d.ts +1 -1
- package/lib/cli/test/index.js +18 -4
- package/lib/cli/test/index.js.map +2 -2
- package/lib/cli/test/reporters/github/annotations.d.ts +1 -1
- package/lib/cli/test/reporters/github/annotations.js.map +1 -1
- package/lib/cli/test/reporters/github/index.js +3 -4
- package/lib/cli/test/reporters/github/index.js.map +2 -2
- package/lib/index.d.ts +4 -4
- package/lib/index.js +4 -4
- package/lib/index.js.map +2 -2
- package/lib/utils/args.d.ts +2 -0
- package/lib/utils/args.js +5 -0
- package/lib/utils/args.js.map +2 -2
- package/lib/utils/dir.js +2 -2
- package/lib/utils/dir.js.map +3 -3
- package/lib/utils/manifest.d.ts +6 -2
- package/lib/utils/manifest.js +17 -8
- package/lib/utils/manifest.js.map +2 -2
- package/lib/utils/template.d.ts +1 -1
- package/package.json +19 -21
- package/template/base/_.prettierrc.js +1 -1
- package/template/base/_eslint.config.js +1 -1
- package/template/base/_pnpm-workspace.yaml +11 -0
- package/template/base/jest.config.ts +4 -0
- package/template/base/jest.setup.ts +1 -1
- package/template/express-rest-api/.buildkite/pipeline.yml +6 -0
- package/template/express-rest-api/.env +1 -1
- package/template/express-rest-api/.gantry/dev.yml +5 -1
- package/template/express-rest-api/.gantry/prod.yml +5 -1
- package/template/express-rest-api/Dockerfile +2 -2
- package/template/express-rest-api/Dockerfile.dev-deps +0 -2
- package/template/express-rest-api/README.md +5 -5
- package/template/express-rest-api/gantry.apply.yml +17 -1
- package/template/express-rest-api/package.json +11 -5
- package/template/express-rest-api/src/api/healthCheck.ts +2 -2
- package/template/express-rest-api/src/config.ts +7 -7
- package/template/express-rest-api/src/framework/logging.ts +11 -7
- package/template/express-rest-api/src/framework/metrics.ts +1 -1
- package/template/express-rest-api/src/listen.ts +6 -0
- package/template/express-rest-api/src/tracing.ts +56 -0
- package/template/greeter/Dockerfile +0 -2
- package/template/greeter/README.md +2 -2
- package/template/greeter/package.json +2 -2
- package/template/koa-rest-api/.buildkite/pipeline.yml +6 -0
- package/template/koa-rest-api/.env +1 -1
- package/template/koa-rest-api/.gantry/dev.yml +3 -3
- package/template/koa-rest-api/.gantry/prod.yml +3 -3
- package/template/koa-rest-api/Dockerfile +1 -1
- package/template/koa-rest-api/Dockerfile.dev-deps +0 -2
- package/template/koa-rest-api/README.md +6 -6
- package/template/koa-rest-api/gantry.apply.yml +15 -3
- package/template/koa-rest-api/package.json +10 -11
- package/template/koa-rest-api/src/api/healthCheck.ts +2 -2
- package/template/koa-rest-api/src/config.ts +7 -7
- package/template/koa-rest-api/src/framework/logging.ts +12 -8
- package/template/koa-rest-api/src/framework/metrics.ts +1 -1
- package/template/koa-rest-api/src/framework/server.test.ts +7 -8
- package/template/koa-rest-api/src/framework/server.ts +1 -4
- package/template/koa-rest-api/src/listen.ts +6 -0
- package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +6 -2
- package/template/lambda-sqs-worker-cdk/.env +1 -1
- package/template/lambda-sqs-worker-cdk/Dockerfile +0 -2
- package/template/lambda-sqs-worker-cdk/README.md +8 -8
- package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +54 -26
- package/template/lambda-sqs-worker-cdk/infra/appStack.test.ts +5 -22
- package/template/lambda-sqs-worker-cdk/infra/appStack.ts +16 -9
- package/template/lambda-sqs-worker-cdk/infra/config.ts +34 -20
- package/template/lambda-sqs-worker-cdk/infra/index.ts +1 -1
- package/template/lambda-sqs-worker-cdk/package.json +7 -9
- package/template/lambda-sqs-worker-cdk/src/app.test.ts +91 -51
- package/template/lambda-sqs-worker-cdk/src/app.ts +10 -9
- package/template/lambda-sqs-worker-cdk/src/config.ts +11 -16
- package/template/lambda-sqs-worker-cdk/src/framework/handler.test.ts +10 -5
- package/template/lambda-sqs-worker-cdk/src/framework/handler.ts +48 -24
- package/template/lambda-sqs-worker-cdk/src/framework/logging.ts +23 -11
- package/template/lambda-sqs-worker-cdk/src/framework/metrics.ts +1 -4
- package/template/lambda-sqs-worker-cdk/src/testing/handler.ts +4 -1
- package/template/oss-npm-package/.github/workflows/release.yml +7 -8
- package/template/oss-npm-package/.github/workflows/validate.yml +6 -6
- package/template/oss-npm-package/README.md +1 -1
- package/template/oss-npm-package/_package.json +0 -3
- package/template/oss-npm-package/skuba.template.js +1 -1
- package/lib/api/buildkite/annotate.d.ts +0 -28
- package/lib/api/buildkite/annotate.js +0 -62
- package/lib/api/buildkite/annotate.js.map +0 -7
- package/lib/api/buildkite/index.d.ts +0 -3
- package/lib/api/buildkite/index.js.map +0 -7
- package/lib/api/buildkite/md.d.ts +0 -6
- package/lib/api/buildkite/md.js.map +0 -7
- package/lib/api/git/commit.d.ts +0 -15
- package/lib/api/git/commit.js +0 -52
- package/lib/api/git/commit.js.map +0 -7
- package/lib/api/git/commitAllChanges.d.ts +0 -19
- package/lib/api/git/commitAllChanges.js +0 -83
- package/lib/api/git/commitAllChanges.js.map +0 -7
- package/lib/api/git/currentBranch.d.ts +0 -10
- package/lib/api/git/currentBranch.js +0 -59
- package/lib/api/git/currentBranch.js.map +0 -7
- package/lib/api/git/findRoot.d.ts +0 -9
- package/lib/api/git/findRoot.js +0 -52
- package/lib/api/git/findRoot.js.map +0 -7
- package/lib/api/git/getChangedFiles.d.ts +0 -20
- package/lib/api/git/getChangedFiles.js +0 -81
- package/lib/api/git/getChangedFiles.js.map +0 -7
- package/lib/api/git/index.d.ts +0 -12
- package/lib/api/git/index.js +0 -61
- package/lib/api/git/index.js.map +0 -7
- package/lib/api/git/isFileGitIgnored.d.ts +0 -4
- package/lib/api/git/isFileGitIgnored.js +0 -49
- package/lib/api/git/isFileGitIgnored.js.map +0 -7
- package/lib/api/git/log.d.ts +0 -19
- package/lib/api/git/log.js +0 -71
- package/lib/api/git/log.js.map +0 -7
- package/lib/api/git/pull.d.ts +0 -35
- package/lib/api/git/pull.js +0 -69
- package/lib/api/git/pull.js.map +0 -7
- package/lib/api/git/push.d.ts +0 -52
- package/lib/api/git/push.js +0 -70
- package/lib/api/git/push.js.map +0 -7
- package/lib/api/git/remote.d.ts +0 -20
- package/lib/api/git/remote.js +0 -73
- package/lib/api/git/remote.js.map +0 -7
- package/lib/api/git/reset.d.ts +0 -12
- package/lib/api/git/reset.js +0 -62
- package/lib/api/git/reset.js.map +0 -7
- package/lib/api/git/statusMatrix.d.ts +0 -7
- package/lib/api/git/statusMatrix.js.map +0 -7
- package/lib/api/github/checkRun.d.ts +0 -44
- package/lib/api/github/checkRun.js +0 -81
- package/lib/api/github/checkRun.js.map +0 -7
- package/lib/api/github/environment.d.ts +0 -17
- package/lib/api/github/environment.js +0 -48
- package/lib/api/github/environment.js.map +0 -7
- package/lib/api/github/index.d.ts +0 -7
- package/lib/api/github/index.js +0 -48
- package/lib/api/github/index.js.map +0 -7
- package/lib/api/github/issueComment.d.ts +0 -61
- package/lib/api/github/issueComment.js +0 -99
- package/lib/api/github/issueComment.js.map +0 -7
- package/lib/api/github/octokit.d.ts +0 -6
- package/lib/api/github/octokit.js +0 -42
- package/lib/api/github/octokit.js.map +0 -7
- package/lib/api/github/pullRequest.d.ts +0 -21
- package/lib/api/github/pullRequest.js +0 -69
- package/lib/api/github/pullRequest.js.map +0 -7
- package/lib/api/github/push.d.ts +0 -85
- package/lib/api/github/push.js +0 -166
- package/lib/api/github/push.js.map +0 -7
- package/lib/api/net/compose.d.ts +0 -4
- package/lib/api/net/compose.js +0 -51
- package/lib/api/net/compose.js.map +0 -7
- package/lib/api/net/index.d.ts +0 -1
- package/lib/api/net/index.js.map +0 -7
- package/lib/api/net/socket.d.ts +0 -5
- package/lib/api/net/socket.js +0 -68
- package/lib/api/net/socket.js.map +0 -7
- package/lib/api/net/waitFor.d.ts +0 -22
- package/lib/api/net/waitFor.js +0 -40
- package/lib/api/net/waitFor.js.map +0 -7
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/rewriteSrcImports.d.ts +0 -6
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/rewriteSrcImports.js +0 -104
- package/lib/cli/lint/internalLints/upgrade/patches/12.0.2/rewriteSrcImports.js.map +0 -7
|
@@ -8,7 +8,7 @@ COPY . .
|
|
|
8
8
|
|
|
9
9
|
RUN pnpm install --offline
|
|
10
10
|
RUN pnpm build
|
|
11
|
-
RUN pnpm install --offline --prod
|
|
11
|
+
RUN CI=true pnpm install --offline --prod
|
|
12
12
|
|
|
13
13
|
###
|
|
14
14
|
|
|
@@ -28,4 +28,4 @@ ARG PORT=8001
|
|
|
28
28
|
ENV PORT=${PORT}
|
|
29
29
|
EXPOSE ${PORT}
|
|
30
30
|
|
|
31
|
-
CMD ["lib/listen.js"]
|
|
31
|
+
CMD ["--require", "./lib/tracing.js", "./lib/listen.js"]
|
|
@@ -70,19 +70,19 @@ pnpm start:debug
|
|
|
70
70
|
|
|
71
71
|
This project is deployed through a [Buildkite pipeline](.buildkite/pipeline.yml).
|
|
72
72
|
|
|
73
|
-
- Commits to a feature branch can be deployed to the
|
|
74
|
-
- Commits to the default branch are automatically deployed to the
|
|
73
|
+
- Commits to a feature branch can be deployed to the development environment by unblocking a step in the Buildkite UI
|
|
74
|
+
- Commits to the default branch are automatically deployed to the development and production environments in sequence
|
|
75
75
|
|
|
76
76
|
To rapidly roll back a change,
|
|
77
77
|
retry an individual deployment step from the previous build in Buildkite.
|
|
78
|
-
Note that this will introduce drift between the head of the default Git branch and the live
|
|
78
|
+
Note that this will introduce drift between the head of the default Git branch and the live deployments;
|
|
79
79
|
use with caution and always follow up with a proper revert or fix in Git history.
|
|
80
80
|
|
|
81
81
|
## Support
|
|
82
82
|
|
|
83
83
|
### Dev
|
|
84
84
|
|
|
85
|
-
TODO: add support links for the dev
|
|
85
|
+
TODO: add support links for the dev deployment.
|
|
86
86
|
|
|
87
87
|
<!--
|
|
88
88
|
- CloudWatch dashboard
|
|
@@ -92,7 +92,7 @@ TODO: add support links for the dev environment.
|
|
|
92
92
|
|
|
93
93
|
### Prod
|
|
94
94
|
|
|
95
|
-
TODO: add support links for the prod
|
|
95
|
+
TODO: add support links for the prod deployment.
|
|
96
96
|
|
|
97
97
|
<!--
|
|
98
98
|
- CloudWatch dashboard
|
|
@@ -9,9 +9,14 @@ owner: '{{values "owner"}}'
|
|
|
9
9
|
image: '{{values "image"}}'
|
|
10
10
|
|
|
11
11
|
env:
|
|
12
|
-
|
|
12
|
+
DEPLOYMENT: '{{values "deployment"}}'
|
|
13
13
|
SERVICE: '{{values "service"}}'
|
|
14
14
|
|
|
15
|
+
DD_ENV: '{{values "env"}}'
|
|
16
|
+
DD_SERVICE: '{{values "service"}}'
|
|
17
|
+
|
|
18
|
+
OPENTELEMETRY_ENABLED: '{{values "openTelemetry.enabled"}}'
|
|
19
|
+
|
|
15
20
|
{{if .Values.cloudwatchDashboardDisabled}}
|
|
16
21
|
cloudwatchDashboardDisabled: {{values "cloudwatchDashboardDisabled"}}
|
|
17
22
|
{{end}}
|
|
@@ -20,6 +25,17 @@ cloudwatchDashboardDisabled: {{values "cloudwatchDashboardDisabled"}}
|
|
|
20
25
|
datadogSecretId: '{{values "datadogSecretId"}}'
|
|
21
26
|
{{end}}
|
|
22
27
|
|
|
28
|
+
# Uncomment if the `tin` tier is acceptable for your SEEK Auth Sidecar logs
|
|
29
|
+
# The eeeoh log forwarder bypasses Amazon CloudWatch for cost savings
|
|
30
|
+
# logSink:
|
|
31
|
+
# forwarder: eeeoh
|
|
32
|
+
# splunkIndex: '{{values "logSink.splunkIndex"}}'
|
|
33
|
+
|
|
34
|
+
openTelemetry:
|
|
35
|
+
datadogEnvironmentName: '{{values "env"}}'
|
|
36
|
+
enabled: {{values "openTelemetry.enabled"}}
|
|
37
|
+
useGantryServiceName: true
|
|
38
|
+
|
|
23
39
|
{{if .Values.pagerDutyEndpoint}}
|
|
24
40
|
pagerDutyEndpoint: '{{values "pagerDutyEndpoint"}}'
|
|
25
41
|
{{end}}
|
|
@@ -19,22 +19,28 @@
|
|
|
19
19
|
"test:watch": "skuba test --watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@
|
|
22
|
+
"@opentelemetry/api": "^1.9.0",
|
|
23
|
+
"@opentelemetry/core": "^2.0.0",
|
|
24
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.205.0",
|
|
25
|
+
"@opentelemetry/instrumentation-aws-sdk": "^0.60.0",
|
|
26
|
+
"@opentelemetry/instrumentation-http": "^0.205.0",
|
|
27
|
+
"@opentelemetry/propagator-b3": "^2.0.0",
|
|
28
|
+
"@opentelemetry/sdk-node": "^0.205.0",
|
|
29
|
+
"@seek/logger": "^11.1.0",
|
|
23
30
|
"express": "^5.0.0",
|
|
24
|
-
"hot-shots": "^
|
|
25
|
-
"seek-datadog-custom-metrics": "^
|
|
31
|
+
"hot-shots": "^11.0.0",
|
|
32
|
+
"seek-datadog-custom-metrics": "^6.0.0",
|
|
26
33
|
"skuba-dive": "^2.0.0"
|
|
27
34
|
},
|
|
28
35
|
"devDependencies": {
|
|
29
36
|
"@types/express": "^5.0.0",
|
|
30
37
|
"@types/node": "^22.13.10",
|
|
31
38
|
"@types/supertest": "^6.0.0",
|
|
32
|
-
"mime": "^4.0.1",
|
|
33
39
|
"pino-pretty": "^13.0.0",
|
|
34
40
|
"skuba": "*",
|
|
35
41
|
"supertest": "^7.0.0"
|
|
36
42
|
},
|
|
37
|
-
"packageManager": "pnpm@10.
|
|
43
|
+
"packageManager": "pnpm@10.17.1",
|
|
38
44
|
"engines": {
|
|
39
45
|
"node": ">=22"
|
|
40
46
|
}
|
|
@@ -3,8 +3,8 @@ import type { Handler } from 'express';
|
|
|
3
3
|
/**
|
|
4
4
|
* Signifies that the API is available to serve requests.
|
|
5
5
|
*
|
|
6
|
-
* The
|
|
7
|
-
* unhealthy and needs to be recycled.
|
|
6
|
+
* The workload hosting environment calls this endpoint to see if the container
|
|
7
|
+
* is unhealthy and needs to be recycled.
|
|
8
8
|
*/
|
|
9
9
|
export const healthCheckHandler: Handler = (_req, res) => {
|
|
10
10
|
res.send('');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Env } from 'skuba-dive';
|
|
2
2
|
|
|
3
3
|
interface Config {
|
|
4
|
-
|
|
4
|
+
deployment: Deployment;
|
|
5
5
|
|
|
6
6
|
logLevel: string;
|
|
7
7
|
name: string;
|
|
@@ -11,17 +11,17 @@ interface Config {
|
|
|
11
11
|
port: number | null;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
type
|
|
14
|
+
type Deployment = (typeof deployments)[number];
|
|
15
15
|
|
|
16
16
|
const dev = '<%- devGantryEnvironmentName %>';
|
|
17
17
|
const prod = '<%- prodGantryEnvironmentName %>';
|
|
18
18
|
|
|
19
|
-
const
|
|
19
|
+
const deployments = ['local', 'test', dev, prod] as const;
|
|
20
20
|
|
|
21
|
-
const
|
|
21
|
+
const deployment = Env.oneOf(deployments)('DEPLOYMENT');
|
|
22
22
|
|
|
23
23
|
/* istanbul ignore next: config verification makes more sense in a smoke test */
|
|
24
|
-
const configs: Record<
|
|
24
|
+
const configs: Record<Deployment, () => Omit<Config, 'deployment'>> = {
|
|
25
25
|
local: () => ({
|
|
26
26
|
logLevel: 'debug',
|
|
27
27
|
name: '<%- serviceName %>',
|
|
@@ -60,6 +60,6 @@ const configs: Record<Environment, () => Omit<Config, 'environment'>> = {
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
export const config: Config = {
|
|
63
|
-
...configs[
|
|
64
|
-
|
|
63
|
+
...configs[deployment](),
|
|
64
|
+
deployment,
|
|
65
65
|
};
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import createLogger from '@seek/logger';
|
|
1
|
+
import { createLogger } from '@seek/logger';
|
|
2
2
|
|
|
3
3
|
import { config } from '#src/config.js';
|
|
4
4
|
|
|
5
5
|
export const logger = createLogger({
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
eeeoh: {
|
|
7
|
+
/**
|
|
8
|
+
* TODO: choose an appropriate Datadog log tier.
|
|
9
|
+
*
|
|
10
|
+
* https://github.com/seek-oss/logger/blob/master/docs/eeeoh.md#datadog-log-tiers
|
|
11
|
+
*/
|
|
12
|
+
datadog: 'tin',
|
|
13
|
+
team: '<%- teamName %>',
|
|
14
|
+
use: 'environment',
|
|
9
15
|
},
|
|
10
16
|
|
|
11
17
|
level: config.logLevel,
|
|
12
18
|
|
|
13
|
-
name: config.name,
|
|
14
|
-
|
|
15
19
|
transport:
|
|
16
|
-
config.
|
|
20
|
+
config.deployment === 'local' ? { target: 'pino-pretty' } : undefined,
|
|
17
21
|
});
|
|
@@ -7,5 +7,5 @@ import { config } from '#src/config.js';
|
|
|
7
7
|
|
|
8
8
|
/* istanbul ignore next: StatsD client is not our responsibility */
|
|
9
9
|
export const metricsClient = createStatsDClient(StatsD, config, (err) =>
|
|
10
|
-
logger.error(
|
|
10
|
+
logger.error(err, 'StatsD error'),
|
|
11
11
|
);
|
|
@@ -19,3 +19,9 @@ const listener = app.listen(config.port, () => {
|
|
|
19
19
|
// https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#connection-idle-timeout
|
|
20
20
|
// AWS recommends setting an application timeout larger than the load balancer
|
|
21
21
|
listener.keepAliveTimeout = 31000;
|
|
22
|
+
|
|
23
|
+
// Report unhandled rejections instead of crashing the process
|
|
24
|
+
// Make sure to monitor these reports and alert as appropriate
|
|
25
|
+
process.on('unhandledRejection', (err) =>
|
|
26
|
+
logger.error(err, 'Unhandled promise rejection'),
|
|
27
|
+
);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry tracing initialisation. This is a standalone TS/JS module that is not
|
|
3
|
+
* referenced by application source code directly. It is required at runtime using the
|
|
4
|
+
* node command's `--require` argument, see Dockerfile for details.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { propagation } from '@opentelemetry/api';
|
|
8
|
+
import { CompositePropagator } from '@opentelemetry/core';
|
|
9
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
|
|
10
|
+
import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk';
|
|
11
|
+
import { HttpInstrumentation } from '@opentelemetry/instrumentation-http';
|
|
12
|
+
import { B3InjectEncoding, B3Propagator } from '@opentelemetry/propagator-b3';
|
|
13
|
+
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
14
|
+
|
|
15
|
+
const app = 'opentelemetry';
|
|
16
|
+
const log = (level: string, msg: string, extra = {}) => {
|
|
17
|
+
const toLog = { msg, level, app, time: new Date().toISOString(), ...extra };
|
|
18
|
+
console.log(JSON.stringify(toLog)); // eslint-disable-line no-console
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const main = () => {
|
|
22
|
+
// Use B3 propagation to ensure proper propagation between systems that use
|
|
23
|
+
// OpenTelemetry and native Datadog APM, such as Istio/Envoy.
|
|
24
|
+
propagation.setGlobalPropagator(
|
|
25
|
+
new CompositePropagator({
|
|
26
|
+
propagators: [
|
|
27
|
+
new B3Propagator(),
|
|
28
|
+
new B3Propagator({ injectEncoding: B3InjectEncoding.MULTI_HEADER }),
|
|
29
|
+
],
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const sdk = new NodeSDK({
|
|
34
|
+
traceExporter: new OTLPTraceExporter(),
|
|
35
|
+
autoDetectResources: false,
|
|
36
|
+
instrumentations: [new HttpInstrumentation(), new AwsInstrumentation()],
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
sdk.start();
|
|
40
|
+
|
|
41
|
+
process.on('SIGTERM', () => {
|
|
42
|
+
sdk
|
|
43
|
+
.shutdown()
|
|
44
|
+
.then(() => log('info', 'OpenTelemetry successfully terminated'))
|
|
45
|
+
.catch((err: Error) =>
|
|
46
|
+
log('error', 'OpenTelemetry failed to terminate', { err }),
|
|
47
|
+
)
|
|
48
|
+
.finally(() => process.exit(0)); // eslint-disable-line no-process-exit
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
if (process.env.OPENTELEMETRY_ENABLED === 'true') {
|
|
53
|
+
main();
|
|
54
|
+
} else {
|
|
55
|
+
log('info', 'OpenTelemetry not enabled');
|
|
56
|
+
}
|
|
@@ -75,7 +75,7 @@ For inspiration in this space, check out:
|
|
|
75
75
|
|
|
76
76
|
### Dev
|
|
77
77
|
|
|
78
|
-
TODO: add support links for the dev
|
|
78
|
+
TODO: add support links for the dev deployment.
|
|
79
79
|
|
|
80
80
|
<!--
|
|
81
81
|
- CloudWatch dashboard
|
|
@@ -85,7 +85,7 @@ TODO: add support links for the dev environment.
|
|
|
85
85
|
|
|
86
86
|
### Prod
|
|
87
87
|
|
|
88
|
-
TODO: add support links for the prod
|
|
88
|
+
TODO: add support links for the prod deployment.
|
|
89
89
|
|
|
90
90
|
<!--
|
|
91
91
|
- CloudWatch dashboard
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.13.10",
|
|
26
|
-
"skuba": "13.0.0-subpath-imports-
|
|
26
|
+
"skuba": "13.0.0-subpath-imports-20251003052152"
|
|
27
27
|
},
|
|
28
|
-
"packageManager": "pnpm@10.
|
|
28
|
+
"packageManager": "pnpm@10.17.1",
|
|
29
29
|
"engines": {
|
|
30
30
|
"node": ">=22"
|
|
31
31
|
}
|
|
@@ -77,6 +77,9 @@ steps:
|
|
|
77
77
|
queue: <%- devBuildkiteQueueName %>
|
|
78
78
|
label: 🤞 Deploy Dev
|
|
79
79
|
concurrency_group: <%- teamName %>/deploy/gantry/<%- devGantryEnvironmentName %>
|
|
80
|
+
env:
|
|
81
|
+
DD_DEPLOYMENT_ENVIRONMENT: development
|
|
82
|
+
DD_DEPLOYMENT_SERVICE: <%- serviceName %>
|
|
80
83
|
key: deploy-dev
|
|
81
84
|
plugins:
|
|
82
85
|
- seek-jobs/gantry#v4.0.0:
|
|
@@ -93,6 +96,9 @@ steps:
|
|
|
93
96
|
branches: ${BUILDKITE_PIPELINE_DEFAULT_BRANCH}
|
|
94
97
|
concurrency_group: <%- teamName %>/deploy/gantry/<%- prodGantryEnvironmentName %>
|
|
95
98
|
depends_on: deploy-dev
|
|
99
|
+
env:
|
|
100
|
+
DD_DEPLOYMENT_ENVIRONMENT: production
|
|
101
|
+
DD_DEPLOYMENT_SERVICE: <%- serviceName %>
|
|
96
102
|
plugins:
|
|
97
103
|
- seek-jobs/gantry#v4.0.0:
|
|
98
104
|
command: apply
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
DEPLOYMENT=local
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
deployment: dev
|
|
2
|
+
env: development
|
|
2
3
|
|
|
3
4
|
maxInstanceCount: 1
|
|
4
5
|
minInstanceCount: 1
|
|
@@ -7,5 +8,4 @@ minInstanceCount: 1
|
|
|
7
8
|
cloudwatchDashboardDisabled: true
|
|
8
9
|
|
|
9
10
|
openTelemetry:
|
|
10
|
-
|
|
11
|
-
enabled: false
|
|
11
|
+
enabled: true
|
|
@@ -29,7 +29,7 @@ It uses the [Koa] middleware framework and common SEEK packages.
|
|
|
29
29
|
Resource APIs enable synchronous interactions and serve as the backbone of SEEK's general service architecture.
|
|
30
30
|
|
|
31
31
|
The `koa-rest-api` template is modelled after a hypothetical service for posting and retrieving job advertisements.
|
|
32
|
-
It's stubbed out with in-memory [storage](src/storage) which can observed by standing up
|
|
32
|
+
It's stubbed out with in-memory [storage](src/storage) which can observed by standing up a deployment with multiple instances.
|
|
33
33
|
Storage is local to each instance, so load balancing across the instances may render a read inconsistent with a previous write.
|
|
34
34
|
This would be replaced with an external data store in production.
|
|
35
35
|
|
|
@@ -75,19 +75,19 @@ pnpm start:debug
|
|
|
75
75
|
|
|
76
76
|
This project is deployed through a [Buildkite pipeline](.buildkite/pipeline.yml).
|
|
77
77
|
|
|
78
|
-
- Commits to a feature branch can be deployed to the
|
|
79
|
-
- Commits to the default branch are automatically deployed to the
|
|
78
|
+
- Commits to a feature branch can be deployed to the development environment by unblocking a step in the Buildkite UI
|
|
79
|
+
- Commits to the default branch are automatically deployed to the development and production environments in sequence
|
|
80
80
|
|
|
81
81
|
To rapidly roll back a change,
|
|
82
82
|
retry an individual deployment step from the previous build in Buildkite.
|
|
83
|
-
Note that this will introduce drift between the head of the default Git branch and the live
|
|
83
|
+
Note that this will introduce drift between the head of the default Git branch and the live deployment;
|
|
84
84
|
use with caution and always follow up with a proper revert or fix in Git history.
|
|
85
85
|
|
|
86
86
|
## Support
|
|
87
87
|
|
|
88
88
|
### Dev
|
|
89
89
|
|
|
90
|
-
TODO: add support links for the dev
|
|
90
|
+
TODO: add support links for the dev deployment.
|
|
91
91
|
|
|
92
92
|
<!--
|
|
93
93
|
- CloudWatch dashboard
|
|
@@ -97,7 +97,7 @@ TODO: add support links for the dev environment.
|
|
|
97
97
|
|
|
98
98
|
### Prod
|
|
99
99
|
|
|
100
|
-
TODO: add support links for the prod
|
|
100
|
+
TODO: add support links for the prod deployment.
|
|
101
101
|
|
|
102
102
|
<!--
|
|
103
103
|
- CloudWatch dashboard
|
|
@@ -9,10 +9,14 @@ owner: '{{values "owner"}}'
|
|
|
9
9
|
image: '{{values "image"}}'
|
|
10
10
|
|
|
11
11
|
env:
|
|
12
|
-
|
|
13
|
-
OPENTELEMETRY_ENABLED: '{{.Values.openTelemetry.enabled | default false}}'
|
|
12
|
+
DEPLOYMENT: '{{values "deployment"}}'
|
|
14
13
|
SERVICE: '{{values "service"}}'
|
|
15
14
|
|
|
15
|
+
DD_ENV: '{{values "env"}}'
|
|
16
|
+
DD_SERVICE: '{{values "service"}}'
|
|
17
|
+
|
|
18
|
+
OPENTELEMETRY_ENABLED: '{{values "openTelemetry.enabled"}}'
|
|
19
|
+
|
|
16
20
|
{{if .Values.cloudwatchDashboardDisabled}}
|
|
17
21
|
cloudwatchDashboardDisabled: {{values "cloudwatchDashboardDisabled"}}
|
|
18
22
|
{{end}}
|
|
@@ -21,9 +25,17 @@ cloudwatchDashboardDisabled: {{values "cloudwatchDashboardDisabled"}}
|
|
|
21
25
|
datadogSecretId: '{{values "datadogSecretId"}}'
|
|
22
26
|
{{end}}
|
|
23
27
|
|
|
28
|
+
# Uncomment if the `tin` tier is acceptable for your SEEK Auth Sidecar logs
|
|
29
|
+
# The eeeoh log forwarder bypasses Amazon CloudWatch for cost savings
|
|
30
|
+
# logSink:
|
|
31
|
+
# forwarder: eeeoh
|
|
32
|
+
# splunkIndex: '{{values "logSink.splunkIndex"}}'
|
|
33
|
+
|
|
24
34
|
openTelemetry:
|
|
25
|
-
datadogEnvironmentName: '{{values "
|
|
35
|
+
datadogEnvironmentName: '{{values "env"}}'
|
|
26
36
|
enabled: {{values "openTelemetry.enabled"}}
|
|
37
|
+
useGantryServiceName: true
|
|
38
|
+
|
|
27
39
|
{{if .Values.pagerDutyEndpoint}}
|
|
28
40
|
pagerDutyEndpoint: '{{values "pagerDutyEndpoint"}}'
|
|
29
41
|
{{end}}
|
|
@@ -20,22 +20,22 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@koa/bodyparser": "^6.0.0",
|
|
23
|
-
"@koa/router": "^
|
|
23
|
+
"@koa/router": "^14.0.0",
|
|
24
24
|
"@opentelemetry/api": "^1.9.0",
|
|
25
25
|
"@opentelemetry/core": "^2.0.0",
|
|
26
|
-
"@opentelemetry/exporter-trace-otlp-grpc": "^0.
|
|
27
|
-
"@opentelemetry/instrumentation-aws-sdk": "^0.
|
|
28
|
-
"@opentelemetry/instrumentation-http": "^0.
|
|
26
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.205.0",
|
|
27
|
+
"@opentelemetry/instrumentation-aws-sdk": "^0.60.0",
|
|
28
|
+
"@opentelemetry/instrumentation-http": "^0.205.0",
|
|
29
29
|
"@opentelemetry/propagator-b3": "^2.0.0",
|
|
30
|
-
"@opentelemetry/sdk-node": "^0.
|
|
31
|
-
"@seek/logger": "^
|
|
32
|
-
"hot-shots": "^
|
|
30
|
+
"@opentelemetry/sdk-node": "^0.205.0",
|
|
31
|
+
"@seek/logger": "^11.1.0",
|
|
32
|
+
"hot-shots": "^11.0.0",
|
|
33
33
|
"koa": "^3.0.1",
|
|
34
34
|
"koa-compose": "^4.1.0",
|
|
35
|
-
"seek-datadog-custom-metrics": "^
|
|
35
|
+
"seek-datadog-custom-metrics": "^6.0.0",
|
|
36
36
|
"seek-koala": "^7.1.0",
|
|
37
37
|
"skuba-dive": "^2.0.0",
|
|
38
|
-
"zod": "^
|
|
38
|
+
"zod": "^4.0.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/chance": "^1.1.3",
|
|
@@ -45,12 +45,11 @@
|
|
|
45
45
|
"@types/node": "^22.13.10",
|
|
46
46
|
"@types/supertest": "^6.0.0",
|
|
47
47
|
"chance": "^1.1.8",
|
|
48
|
-
"mime": "^4.0.1",
|
|
49
48
|
"pino-pretty": "^13.0.0",
|
|
50
49
|
"skuba": "*",
|
|
51
50
|
"supertest": "^7.0.0"
|
|
52
51
|
},
|
|
53
|
-
"packageManager": "pnpm@10.
|
|
52
|
+
"packageManager": "pnpm@10.17.1",
|
|
54
53
|
"engines": {
|
|
55
54
|
"node": ">=22"
|
|
56
55
|
}
|
|
@@ -3,8 +3,8 @@ import type { Middleware } from '#src/types/koa.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Signifies that the API is available to serve requests.
|
|
5
5
|
*
|
|
6
|
-
* The
|
|
7
|
-
* unhealthy and needs to be recycled.
|
|
6
|
+
* The workload hosting environment calls this endpoint to see if the container
|
|
7
|
+
* is unhealthy and needs to be recycled.
|
|
8
8
|
*/
|
|
9
9
|
export const healthCheckHandler: Middleware = (ctx) => {
|
|
10
10
|
ctx.state.skipRequestLogging = true;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Env } from 'skuba-dive';
|
|
2
2
|
|
|
3
3
|
interface Config {
|
|
4
|
-
|
|
4
|
+
deployment: Deployment;
|
|
5
5
|
|
|
6
6
|
logLevel: string;
|
|
7
7
|
name: string;
|
|
@@ -11,17 +11,17 @@ interface Config {
|
|
|
11
11
|
port: number | null;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
type
|
|
14
|
+
type Deployment = (typeof deployments)[number];
|
|
15
15
|
|
|
16
16
|
const dev = '<%- devGantryEnvironmentName %>';
|
|
17
17
|
const prod = '<%- prodGantryEnvironmentName %>';
|
|
18
18
|
|
|
19
|
-
const
|
|
19
|
+
const deployments = ['local', 'test', dev, prod] as const;
|
|
20
20
|
|
|
21
|
-
const
|
|
21
|
+
const deployment = Env.oneOf(deployments)('DEPLOYMENT');
|
|
22
22
|
|
|
23
23
|
/* istanbul ignore next: config verification makes more sense in a smoke test */
|
|
24
|
-
const configs: Record<
|
|
24
|
+
const configs: Record<Deployment, () => Omit<Config, 'deployment'>> = {
|
|
25
25
|
local: () => ({
|
|
26
26
|
logLevel: 'debug',
|
|
27
27
|
name: '<%- serviceName %>',
|
|
@@ -62,6 +62,6 @@ const configs: Record<Environment, () => Omit<Config, 'environment'>> = {
|
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
export const config: Config = {
|
|
65
|
-
...configs[
|
|
66
|
-
|
|
65
|
+
...configs[deployment](),
|
|
66
|
+
deployment,
|
|
67
67
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createDestination, createLogger } from '@seek/logger';
|
|
2
2
|
import { RequestLogging } from 'seek-koala';
|
|
3
3
|
|
|
4
4
|
import { config } from '#src/config.js';
|
|
@@ -9,26 +9,30 @@ const { createContextMiddleware, mixin } =
|
|
|
9
9
|
export const contextMiddleware = createContextMiddleware();
|
|
10
10
|
|
|
11
11
|
const { destination, stdoutMock } = createDestination({
|
|
12
|
-
mock: config.
|
|
12
|
+
mock: config.deployment === 'test',
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
export { stdoutMock };
|
|
16
16
|
|
|
17
17
|
export const logger = createLogger(
|
|
18
18
|
{
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
eeeoh: {
|
|
20
|
+
/**
|
|
21
|
+
* TODO: choose an appropriate Datadog log tier.
|
|
22
|
+
*
|
|
23
|
+
* https://github.com/seek-oss/logger/blob/master/docs/eeeoh.md#datadog-log-tiers
|
|
24
|
+
*/
|
|
25
|
+
datadog: 'tin',
|
|
26
|
+
team: '<%- teamName %>',
|
|
27
|
+
use: 'environment',
|
|
22
28
|
},
|
|
23
29
|
|
|
24
30
|
mixin,
|
|
25
31
|
|
|
26
32
|
level: config.logLevel,
|
|
27
33
|
|
|
28
|
-
name: config.name,
|
|
29
|
-
|
|
30
34
|
transport:
|
|
31
|
-
config.
|
|
35
|
+
config.deployment === 'local' ? { target: 'pino-pretty' } : undefined,
|
|
32
36
|
},
|
|
33
37
|
destination,
|
|
34
38
|
);
|
|
@@ -7,5 +7,5 @@ import { config } from '#src/config.js';
|
|
|
7
7
|
|
|
8
8
|
/* istanbul ignore next: StatsD client is not our responsibility */
|
|
9
9
|
export const metricsClient = createStatsDClient(StatsD, config, (err) =>
|
|
10
|
-
logger.error(
|
|
10
|
+
logger.error(err, 'StatsD error'),
|
|
11
11
|
);
|