Skip to content

Commit 698f667

Browse files
committedJan 15, 2025·
Support AWS X-Ray
1 parent d85db19 commit 698f667

File tree

5 files changed

+242
-3
lines changed

5 files changed

+242
-3
lines changed
 

‎package.json

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"license": "MIT",
66
"dependencies": {
77
"@godaddy/terminus": "^4.12.1",
8+
"aws-xray-sdk": "^3.10.2",
89
"cls-hooked": "^4.2.2",
910
"dataloader": "^2.0.0",
1011
"express": "^5.0.1",

‎src/app.ts

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import cors from './middlewares/cors';
55
import trace from './middlewares/trace';
66
import context from './context';
77
import schema from './schema';
8+
import AWSXRay from './logger/AWSXRay';
89

910
const app = express();
1011

@@ -15,9 +16,11 @@ app.use(trace);
1516
app.use(responseTime);
1617
app.use(cors);
1718

19+
if (process.env.AWS_XRAY_ENABLED === 'true') app.use(AWSXRay.express.openSegment('express-graphql-example'));
1820
app.all('/graphql', createHandler({
1921
schema,
2022
context: context as any,
2123
}));
24+
if (process.env.AWS_XRAY_ENABLED === 'true') app.use(AWSXRay.express.closeSegment());
2225

2326
export default app;

‎src/logger/AWSXRay.ts

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import AWSXRay from 'aws-xray-sdk';
2+
// import http from 'http';
3+
// import https from 'https';
4+
5+
AWSXRay.config([AWSXRay.plugins.ECSPlugin]);
6+
7+
if (typeof process.env.AWS_XRAY_DAEMON_ADDRESS !== 'undefined') {
8+
AWSXRay.setDaemonAddress(process.env.AWS_XRAY_DAEMON_ADDRESS);
9+
}
10+
11+
// AWSXRay.captureHTTPsGlobal(http);
12+
// AWSXRay.captureHTTPsGlobal(https);
13+
// AWSXRay.capturePromise();
14+
15+
export default AWSXRay;

‎src/middlewares/trace.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export default function trace(req: Request, res: Response, next: NextFunction):
88
return;
99
}
1010

11-
namespace.bind(req);
12-
namespace.bind(res);
11+
namespace.bind<any>(req);
12+
namespace.bind<any>(res);
1313

1414
const traceId = uuidv7();
1515

‎yarn.lock

+221-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ __metadata:
1515
languageName: node
1616
linkType: hard
1717

18+
"@aws-sdk/types@npm:^3.4.1":
19+
version: 3.723.0
20+
resolution: "@aws-sdk/types@npm:3.723.0"
21+
dependencies:
22+
"@smithy/types": "npm:^4.0.0"
23+
tslib: "npm:^2.6.2"
24+
checksum: 10c0/b13f2ef66a0de96df9a6ff227531579483b0d7a735ca3a936ba881d528ccae8b36d568f69914c343c972c0b84057366947980ed2ab60c642443564c2ad3739fe
25+
languageName: node
26+
linkType: hard
27+
1828
"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0":
1929
version: 7.26.2
2030
resolution: "@babel/code-frame@npm:7.26.2"
@@ -874,6 +884,33 @@ __metadata:
874884
languageName: node
875885
linkType: hard
876886

887+
"@smithy/service-error-classification@npm:^2.0.4":
888+
version: 2.1.5
889+
resolution: "@smithy/service-error-classification@npm:2.1.5"
890+
dependencies:
891+
"@smithy/types": "npm:^2.12.0"
892+
checksum: 10c0/e3fb24af5a3a60bf6479bc057bc832f89a0b427650ea2f262220a9627d60d2ab455ad766a2fcceb55fba1b15eddb82b25775fb781c254d2031768f5f8e131e15
893+
languageName: node
894+
linkType: hard
895+
896+
"@smithy/types@npm:^2.12.0":
897+
version: 2.12.0
898+
resolution: "@smithy/types@npm:2.12.0"
899+
dependencies:
900+
tslib: "npm:^2.6.2"
901+
checksum: 10c0/3530ba5b4f4e52a4028679f73e133af928cf6ea22a16d29669b8c67ea540ed46ab15dc6d391598fbdfd476884cdc57881c480168e2dbe7c5bb007f5afad01531
902+
languageName: node
903+
linkType: hard
904+
905+
"@smithy/types@npm:^4.0.0":
906+
version: 4.1.0
907+
resolution: "@smithy/types@npm:4.1.0"
908+
dependencies:
909+
tslib: "npm:^2.6.2"
910+
checksum: 10c0/d8817145ea043c5b29783df747ed47c3a1c584fd9d02bbdb609d38b7cb4dded1197ac214ae112744c86abe0537a314dae0edbc0e752bb639ef2d9fb84c67a9d9
911+
languageName: node
912+
linkType: hard
913+
877914
"@types/babel__core@npm:^7.1.14":
878915
version: 7.20.5
879916
resolution: "@types/babel__core@npm:7.20.5"
@@ -925,6 +962,15 @@ __metadata:
925962
languageName: node
926963
linkType: hard
927964

965+
"@types/cls-hooked@npm:^4.3.3":
966+
version: 4.3.9
967+
resolution: "@types/cls-hooked@npm:4.3.9"
968+
dependencies:
969+
"@types/node": "npm:*"
970+
checksum: 10c0/fd531903b2cd7fa76d36ec81142ac55f0ea8702f6d76238a1ca5c773b8e35889cf528198a8a83b5e551f928f47bdfad947e29d9ebbe0df712cbf14510f7ae713
971+
languageName: node
972+
linkType: hard
973+
928974
"@types/connect@npm:*":
929975
version: 3.4.38
930976
resolution: "@types/connect@npm:3.4.38"
@@ -946,7 +992,7 @@ __metadata:
946992
languageName: node
947993
linkType: hard
948994

949-
"@types/express@npm:^5.0.0":
995+
"@types/express@npm:*, @types/express@npm:^5.0.0":
950996
version: 5.0.0
951997
resolution: "@types/express@npm:5.0.0"
952998
dependencies:
@@ -1023,6 +1069,15 @@ __metadata:
10231069
languageName: node
10241070
linkType: hard
10251071

1072+
"@types/mysql@npm:*":
1073+
version: 2.15.26
1074+
resolution: "@types/mysql@npm:2.15.26"
1075+
dependencies:
1076+
"@types/node": "npm:*"
1077+
checksum: 10c0/3cf279e7db05d56c0544532a4380b9079f579092379a04c8138bd5cf88dda5b31208ac2d23ce7dbf4e3a3f43aaeed44e72f9f19f726518f308efe95a7435619a
1078+
languageName: node
1079+
linkType: hard
1080+
10261081
"@types/node@npm:*, @types/node@npm:^22.5.0":
10271082
version: 22.8.7
10281083
resolution: "@types/node@npm:22.8.7"
@@ -1032,6 +1087,17 @@ __metadata:
10321087
languageName: node
10331088
linkType: hard
10341089

1090+
"@types/pg@npm:*":
1091+
version: 8.11.10
1092+
resolution: "@types/pg@npm:8.11.10"
1093+
dependencies:
1094+
"@types/node": "npm:*"
1095+
pg-protocol: "npm:*"
1096+
pg-types: "npm:^4.0.1"
1097+
checksum: 10c0/c8800d0ab2c6424308e6c6b40c73f19583ee1aed758462bd07694844b0a551b5841442205a4ee05207b80109ba502f33f20241b1bd9b4902e713611fb9e08f6c
1098+
languageName: node
1099+
linkType: hard
1100+
10351101
"@types/qs@npm:*":
10361102
version: 6.9.16
10371103
resolution: "@types/qs@npm:6.9.16"
@@ -1395,13 +1461,79 @@ __metadata:
13951461
languageName: node
13961462
linkType: hard
13971463

1464+
"atomic-batcher@npm:^1.0.2":
1465+
version: 1.0.2
1466+
resolution: "atomic-batcher@npm:1.0.2"
1467+
checksum: 10c0/6511385b61eca9ba1feedd85b78ba601818aba6fffc65ba3ba1b361d32f4a36b2e735c4d65a316568163beeb76bae7a21d3b043c1a1e5e2b5fa116048f5f7d2b
1468+
languageName: node
1469+
linkType: hard
1470+
13981471
"aws-ssl-profiles@npm:^1.1.1":
13991472
version: 1.1.2
14001473
resolution: "aws-ssl-profiles@npm:1.1.2"
14011474
checksum: 10c0/e5f59a4146fe3b88ad2a84f814886c788557b80b744c8cbcb1cbf8cf5ba19cc006a7a12e88819adc614ecda9233993f8f1d1f3b612cbc2f297196df9e8f4f66e
14021475
languageName: node
14031476
linkType: hard
14041477

1478+
"aws-xray-sdk-core@npm:3.10.2":
1479+
version: 3.10.2
1480+
resolution: "aws-xray-sdk-core@npm:3.10.2"
1481+
dependencies:
1482+
"@aws-sdk/types": "npm:^3.4.1"
1483+
"@smithy/service-error-classification": "npm:^2.0.4"
1484+
"@types/cls-hooked": "npm:^4.3.3"
1485+
atomic-batcher: "npm:^1.0.2"
1486+
cls-hooked: "npm:^4.2.2"
1487+
semver: "npm:^7.5.3"
1488+
checksum: 10c0/0d47b13687f841092e927c919085d0570aca67ad9a12251f1d8395c9628f6fcc738d962897032b993c3cf1a94e11cdbe64d23cfbd6106adde732bb46495d5c9e
1489+
languageName: node
1490+
linkType: hard
1491+
1492+
"aws-xray-sdk-express@npm:3.10.2":
1493+
version: 3.10.2
1494+
resolution: "aws-xray-sdk-express@npm:3.10.2"
1495+
dependencies:
1496+
"@types/express": "npm:*"
1497+
peerDependencies:
1498+
aws-xray-sdk-core: ^3.10.2
1499+
checksum: 10c0/8bc5846394eadf9ea2f89e5d28e2219cde88d9390a8b83b23ad4983efcd85d037f17deb9d627b1784205aae25d54a759532c17f027ef0cd492f4e927ccfc5379
1500+
languageName: node
1501+
linkType: hard
1502+
1503+
"aws-xray-sdk-mysql@npm:3.10.2":
1504+
version: 3.10.2
1505+
resolution: "aws-xray-sdk-mysql@npm:3.10.2"
1506+
dependencies:
1507+
"@types/mysql": "npm:*"
1508+
peerDependencies:
1509+
aws-xray-sdk-core: ^3.10.2
1510+
checksum: 10c0/b612825a3140a8b9c28262758dfe5184e15c6d0652fe46254d64728ed1183883059e16e506baac19d109e170e65b683acc1a4a5bbc5fd69ea3329691c086cc14
1511+
languageName: node
1512+
linkType: hard
1513+
1514+
"aws-xray-sdk-postgres@npm:3.10.2":
1515+
version: 3.10.2
1516+
resolution: "aws-xray-sdk-postgres@npm:3.10.2"
1517+
dependencies:
1518+
"@types/pg": "npm:*"
1519+
peerDependencies:
1520+
aws-xray-sdk-core: ^3.10.2
1521+
checksum: 10c0/190dde93c458f712fd42946c172ac0dca1290ff3a5ce781273d22bb0a5992d5689b08bd96f0c541ca2870bf79a7e900b883399cc2ab1d08daac114b3ae3c6618
1522+
languageName: node
1523+
linkType: hard
1524+
1525+
"aws-xray-sdk@npm:^3.10.2":
1526+
version: 3.10.2
1527+
resolution: "aws-xray-sdk@npm:3.10.2"
1528+
dependencies:
1529+
aws-xray-sdk-core: "npm:3.10.2"
1530+
aws-xray-sdk-express: "npm:3.10.2"
1531+
aws-xray-sdk-mysql: "npm:3.10.2"
1532+
aws-xray-sdk-postgres: "npm:3.10.2"
1533+
checksum: 10c0/7bd956d893ac23d48b7a569117c7c9aa62ed55d538ec288cbf22ea588829e0f5cffefe59a9e865b20ac2c8ad54711fc940291c0baa58138c541bec461992276b
1534+
languageName: node
1535+
linkType: hard
1536+
14051537
"babel-jest@npm:^29.7.0":
14061538
version: 29.7.0
14071539
resolution: "babel-jest@npm:29.7.0"
@@ -2469,6 +2601,7 @@ __metadata:
24692601
"@types/node": "npm:^22.5.0"
24702602
"@typescript-eslint/eslint-plugin": "npm:^5.9.0"
24712603
"@typescript-eslint/parser": "npm:^5.9.0"
2604+
aws-xray-sdk: "npm:^3.10.2"
24722605
cls-hooked: "npm:^4.2.2"
24732606
dataloader: "npm:^2.0.0"
24742607
eslint: "npm:^8.6.0"
@@ -4504,6 +4637,13 @@ __metadata:
45044637
languageName: node
45054638
linkType: hard
45064639

4640+
"obuf@npm:~1.1.2":
4641+
version: 1.1.2
4642+
resolution: "obuf@npm:1.1.2"
4643+
checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81
4644+
languageName: node
4645+
linkType: hard
4646+
45074647
"on-finished@npm:2.4.1, on-finished@npm:^2.4.1":
45084648
version: 2.4.1
45094649
resolution: "on-finished@npm:2.4.1"
@@ -4698,6 +4838,42 @@ __metadata:
46984838
languageName: node
46994839
linkType: hard
47004840

4841+
"pg-int8@npm:1.0.1":
4842+
version: 1.0.1
4843+
resolution: "pg-int8@npm:1.0.1"
4844+
checksum: 10c0/be6a02d851fc2a4ae3e9de81710d861de3ba35ac927268973eb3cb618873a05b9424656df464dd43bd7dc3fc5295c3f5b3c8349494f87c7af50ec59ef14e0b98
4845+
languageName: node
4846+
linkType: hard
4847+
4848+
"pg-numeric@npm:1.0.2":
4849+
version: 1.0.2
4850+
resolution: "pg-numeric@npm:1.0.2"
4851+
checksum: 10c0/43dd9884e7b52c79ddc28d2d282d7475fce8bba13452d33c04ceb2e0a65f561edf6699694e8e1c832ff9093770496363183c950dd29608e1bdd98f344b25bca9
4852+
languageName: node
4853+
linkType: hard
4854+
4855+
"pg-protocol@npm:*":
4856+
version: 1.7.0
4857+
resolution: "pg-protocol@npm:1.7.0"
4858+
checksum: 10c0/c4af854d9b843c808231c0040fed89f2b9101006157df8da2bb2f62a7dde702de748d852228dc22df41cc7ffddfb526af3bcb34b278b581e9f76a060789186c1
4859+
languageName: node
4860+
linkType: hard
4861+
4862+
"pg-types@npm:^4.0.1":
4863+
version: 4.0.2
4864+
resolution: "pg-types@npm:4.0.2"
4865+
dependencies:
4866+
pg-int8: "npm:1.0.1"
4867+
pg-numeric: "npm:1.0.2"
4868+
postgres-array: "npm:~3.0.1"
4869+
postgres-bytea: "npm:~3.0.0"
4870+
postgres-date: "npm:~2.1.0"
4871+
postgres-interval: "npm:^3.0.0"
4872+
postgres-range: "npm:^1.1.1"
4873+
checksum: 10c0/780fccda2f3fa2a34e85a72e8e7dadb7d88fbe71ce88f126cb3313f333ad836d02488ec4ff3d94d0c1e5846f735d6e6c6281f8059e6b8919d2180429acaec3e2
4874+
languageName: node
4875+
linkType: hard
4876+
47014877
"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1":
47024878
version: 1.1.1
47034879
resolution: "picocolors@npm:1.1.1"
@@ -4728,6 +4904,43 @@ __metadata:
47284904
languageName: node
47294905
linkType: hard
47304906

4907+
"postgres-array@npm:~3.0.1":
4908+
version: 3.0.2
4909+
resolution: "postgres-array@npm:3.0.2"
4910+
checksum: 10c0/644aa071f67a66a59f641f8e623887d2b915bc102a32643e2aa8b54c11acd343c5ad97831ea444dd37bd4b921ba35add4aa2cb0c6b76700a8252c2324aeba5b4
4911+
languageName: node
4912+
linkType: hard
4913+
4914+
"postgres-bytea@npm:~3.0.0":
4915+
version: 3.0.0
4916+
resolution: "postgres-bytea@npm:3.0.0"
4917+
dependencies:
4918+
obuf: "npm:~1.1.2"
4919+
checksum: 10c0/41c79cc48aa730c5ba3eda6ab989a940034f07a1f57b8f2777dce56f1b8cca16c5870582932b5b10cc605048aef9b6157e06253c871b4717cafc6d00f55376aa
4920+
languageName: node
4921+
linkType: hard
4922+
4923+
"postgres-date@npm:~2.1.0":
4924+
version: 2.1.0
4925+
resolution: "postgres-date@npm:2.1.0"
4926+
checksum: 10c0/00a7472c10788f6b0d08d24108bf1eb80858de1bd6317740198a564918ea4a69b80c98148167b92ae688abd606483020d0de0dd3a36f3ea9a3e26bbeef3464f4
4927+
languageName: node
4928+
linkType: hard
4929+
4930+
"postgres-interval@npm:^3.0.0":
4931+
version: 3.0.0
4932+
resolution: "postgres-interval@npm:3.0.0"
4933+
checksum: 10c0/8b570b30ea37c685e26d136d34460f246f98935a1533defc4b53bb05ee23ae3dc7475b718ec7ea607a57894d8c6b4f1adf67ca9cc83a75bdacffd427d5c68de8
4934+
languageName: node
4935+
linkType: hard
4936+
4937+
"postgres-range@npm:^1.1.1":
4938+
version: 1.1.4
4939+
resolution: "postgres-range@npm:1.1.4"
4940+
checksum: 10c0/254494ef81df208e0adeae6b66ce394aba37914ea14c7ece55a45fb6691b7db04bee74c825380a47c887a9f87158fd3d86f758f9cc60b76d3a38ce5aca7912e8
4941+
languageName: node
4942+
linkType: hard
4943+
47314944
"prelude-ls@npm:^1.2.1":
47324945
version: 1.2.1
47334946
resolution: "prelude-ls@npm:1.2.1"
@@ -5673,6 +5886,13 @@ __metadata:
56735886
languageName: node
56745887
linkType: hard
56755888

5889+
"tslib@npm:^2.6.2":
5890+
version: 2.8.1
5891+
resolution: "tslib@npm:2.8.1"
5892+
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
5893+
languageName: node
5894+
linkType: hard
5895+
56765896
"tsutils@npm:^3.21.0":
56775897
version: 3.21.0
56785898
resolution: "tsutils@npm:3.21.0"

0 commit comments

Comments
 (0)
Please sign in to comment.