@aws/nx-plugin 0.7.1 → 0.8.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/nx-plugin",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "private": false,
5
5
  "type": "commonjs",
6
6
  "license": "Apache-2.0",
@@ -4,15 +4,107 @@ exports[`fastapi project generator > should match snapshot > main-snapshot 1`] =
4
4
  {
5
5
  "apps/test_api/test_api/__init__.py": """"Automatically generated by Nx."""
6
6
  ",
7
- "apps/test_api/test_api/main.py": "from fastapi import FastAPI
7
+ "apps/test_api/test_api/init.py": "import os
8
+ import uuid
9
+ from collections.abc import Callable
10
+
11
+ from aws_lambda_powertools import Logger, Metrics, Tracer
12
+ from aws_lambda_powertools.metrics import MetricUnit
13
+ from fastapi import FastAPI, Request, Response
14
+ from fastapi.responses import JSONResponse
15
+ from fastapi.routing import APIRoute
8
16
  from mangum import Mangum
17
+ from starlette.middleware.exceptions import ExceptionMiddleware
18
+
19
+ os.environ["POWERTOOLS_METRICS_NAMESPACE"] = "TestApi"
20
+ os.environ["POWERTOOLS_SERVICE_NAME"] = "TestApi"
21
+
22
+ logger: Logger = Logger()
23
+ metrics: Metrics = Metrics()
24
+ tracer: Tracer = Tracer()
9
25
 
10
26
  app = FastAPI(
11
27
  title="TestApi"
12
28
  )
13
- handler = Mangum(app)
29
+ lambda_handler = Mangum(app)
30
+
31
+ # Add tracing
32
+ lambda_handler.__name__ = "handler" # tracer requires __name__ to be set
33
+ lambda_handler = tracer.capture_lambda_handler(lambda_handler)
34
+ # Add logging
35
+ lambda_handler = logger.inject_lambda_context(lambda_handler, clear_state=True)
36
+ # Add metrics last to properly flush metrics.
37
+ lambda_handler = metrics.log_metrics(lambda_handler, capture_cold_start_metric=True)
38
+
39
+ # Add exception middleware(s)
40
+ app.add_middleware(ExceptionMiddleware, handlers=app.exception_handlers)
41
+
42
+ @app.exception_handler(Exception)
43
+ async def unhandled_exception_handler(request, err):
44
+ logger.exception("Unhandled exception")
45
+
46
+ metrics.add_metric(name="Failure", unit=MetricUnit.Count, value=1)
47
+
48
+ return JSONResponse(status_code=500, content={"detail": "Internal Server Error"})
49
+
50
+ @app.middleware("http")
51
+ async def metrics_handler(request: Request, call_next):
52
+ metrics.add_dimension("route", f"{request.method} {request.url.path}")
53
+ metrics.add_metric(name="RequestCount", unit=MetricUnit.Count, value=1)
54
+
55
+ response = await call_next(request)
56
+
57
+ if response.status_code == 200:
58
+ metrics.add_metric(name="Success", unit=MetricUnit.Count, value=1)
59
+
60
+ return response
61
+
62
+ # Add correlation id middleware
63
+ @app.middleware("http")
64
+ async def add_correlation_id(request: Request, call_next):
65
+ # Get correlation id from X-Correlation-Id header
66
+ corr_id = request.headers.get("x-correlation-id")
67
+ if not corr_id and "aws.context" in request.scope:
68
+ # If empty, use request id from aws context
69
+ corr_id = request.scope["aws.context"].aws_request_id
70
+ elif not corr_id:
71
+ # If still empty, use uuid
72
+ corr_id = uuid.uuid4().hex
73
+
74
+ # Add correlation id to logs
75
+ logger.set_correlation_id(corr_id)
76
+
77
+ response = await call_next(request)
78
+
79
+ # Return correlation header in response
80
+ response.headers["X-Correlation-Id"] = corr_id
81
+ return response
82
+
83
+ class LoggerRouteHandler(APIRoute):
84
+ def get_route_handler(self) -> Callable:
85
+ original_route_handler = super().get_route_handler()
86
+
87
+ async def route_handler(request: Request) -> Response:
88
+ # Add fastapi context to logs
89
+ ctx = {
90
+ "path": request.url.path,
91
+ "route": self.path,
92
+ "method": request.method,
93
+ }
94
+ logger.append_keys(fastapi=ctx)
95
+ logger.info("Received request")
96
+
97
+ return await original_route_handler(request)
98
+
99
+ return route_handler
100
+
101
+ app.router.route_class = LoggerRouteHandler",
102
+ "apps/test_api/test_api/main.py": "from .init import app, lambda_handler, tracer
103
+
104
+ handler = lambda_handler
14
105
 
15
106
  @app.get("/")
107
+ @tracer.capture_method
16
108
  def read_root():
17
109
  return {"Hello": "World"}",
18
110
  "apps/test_api/tests/__init__.py": """"unit tests."""
@@ -0,0 +1,95 @@
1
+ import os
2
+ import uuid
3
+ from collections.abc import Callable
4
+
5
+ from aws_lambda_powertools import Logger, Metrics, Tracer
6
+ from aws_lambda_powertools.metrics import MetricUnit
7
+ from fastapi import FastAPI, Request, Response
8
+ from fastapi.responses import JSONResponse
9
+ from fastapi.routing import APIRoute
10
+ from mangum import Mangum
11
+ from starlette.middleware.exceptions import ExceptionMiddleware
12
+
13
+ os.environ["POWERTOOLS_METRICS_NAMESPACE"] = "<%= apiNameClassName %>"
14
+ os.environ["POWERTOOLS_SERVICE_NAME"] = "<%= apiNameClassName %>"
15
+
16
+ logger: Logger = Logger()
17
+ metrics: Metrics = Metrics()
18
+ tracer: Tracer = Tracer()
19
+
20
+ app = FastAPI(
21
+ title="<%= apiNameClassName %>"
22
+ )
23
+ lambda_handler = Mangum(app)
24
+
25
+ # Add tracing
26
+ lambda_handler.__name__ = "handler" # tracer requires __name__ to be set
27
+ lambda_handler = tracer.capture_lambda_handler(lambda_handler)
28
+ # Add logging
29
+ lambda_handler = logger.inject_lambda_context(lambda_handler, clear_state=True)
30
+ # Add metrics last to properly flush metrics.
31
+ lambda_handler = metrics.log_metrics(lambda_handler, capture_cold_start_metric=True)
32
+
33
+ # Add exception middleware(s)
34
+ app.add_middleware(ExceptionMiddleware, handlers=app.exception_handlers)
35
+
36
+ @app.exception_handler(Exception)
37
+ async def unhandled_exception_handler(request, err):
38
+ logger.exception("Unhandled exception")
39
+
40
+ metrics.add_metric(name="Failure", unit=MetricUnit.Count, value=1)
41
+
42
+ return JSONResponse(status_code=500, content={"detail": "Internal Server Error"})
43
+
44
+ @app.middleware("http")
45
+ async def metrics_handler(request: Request, call_next):
46
+ metrics.add_dimension("route", f"{request.method} {request.url.path}")
47
+ metrics.add_metric(name="RequestCount", unit=MetricUnit.Count, value=1)
48
+
49
+ response = await call_next(request)
50
+
51
+ if response.status_code == 200:
52
+ metrics.add_metric(name="Success", unit=MetricUnit.Count, value=1)
53
+
54
+ return response
55
+
56
+ # Add correlation id middleware
57
+ @app.middleware("http")
58
+ async def add_correlation_id(request: Request, call_next):
59
+ # Get correlation id from X-Correlation-Id header
60
+ corr_id = request.headers.get("x-correlation-id")
61
+ if not corr_id and "aws.context" in request.scope:
62
+ # If empty, use request id from aws context
63
+ corr_id = request.scope["aws.context"].aws_request_id
64
+ elif not corr_id:
65
+ # If still empty, use uuid
66
+ corr_id = uuid.uuid4().hex
67
+
68
+ # Add correlation id to logs
69
+ logger.set_correlation_id(corr_id)
70
+
71
+ response = await call_next(request)
72
+
73
+ # Return correlation header in response
74
+ response.headers["X-Correlation-Id"] = corr_id
75
+ return response
76
+
77
+ class LoggerRouteHandler(APIRoute):
78
+ def get_route_handler(self) -> Callable:
79
+ original_route_handler = super().get_route_handler()
80
+
81
+ async def route_handler(request: Request) -> Response:
82
+ # Add fastapi context to logs
83
+ ctx = {
84
+ "path": request.url.path,
85
+ "route": self.path,
86
+ "method": request.method,
87
+ }
88
+ logger.append_keys(fastapi=ctx)
89
+ logger.info("Received request")
90
+
91
+ return await original_route_handler(request)
92
+
93
+ return route_handler
94
+
95
+ app.router.route_class = LoggerRouteHandler
@@ -1,11 +1,8 @@
1
- from fastapi import FastAPI
2
- from mangum import Mangum
1
+ from .init import app, lambda_handler, tracer
3
2
 
4
- app = FastAPI(
5
- title="<%= apiNameClassName %>"
6
- )
7
- handler = Mangum(app)
3
+ handler = lambda_handler
8
4
 
9
5
  @app.get("/")
6
+ @tracer.capture_method
10
7
  def read_root():
11
8
  return {"Hello": "World"}
@@ -107,7 +107,12 @@ const fastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void
107
107
  return config;
108
108
  });
109
109
  const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), 'utf8'));
110
- projectToml.project.dependencies = ['fastapi', 'mangum'].concat(((_b = projectToml.project) === null || _b === void 0 ? void 0 : _b.dependencies) || []);
110
+ projectToml.project.dependencies = [
111
+ 'fastapi',
112
+ 'mangum',
113
+ 'aws-lambda-powertools',
114
+ 'aws-lambda-powertools[tracer]',
115
+ ].concat(((_b = projectToml.project) === null || _b === void 0 ? void 0 : _b.dependencies) || []);
111
116
  projectToml['dependency-groups'] = { dev: ['fastapi[standard]>=0.115'] };
112
117
  tree.write((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
113
118
  yield (0, format_1.formatFilesInSubtree)(tree);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,7 @@ import {
68
68
  } from './middleware/index.js';
69
69
 
70
70
  process.env.POWERTOOLS_SERVICE_NAME = 'TestApi';
71
+ process.env.POWERTOOLS_METRICS_NAMESPACE = 'TestApi';
71
72
 
72
73
  export type Context = IMiddlewareContext;
73
74
 
@@ -195,9 +196,12 @@ export const createMetricsPlugin = () => {
195
196
 
196
197
  return t.procedure.use(async (opts) => {
197
198
  const metrics = new Metrics();
199
+ metrics.addDimensions({
200
+ procedure: opts.path,
201
+ type: opts.type,
202
+ });
198
203
  metrics.captureColdStartMetric();
199
-
200
- metrics.addMetric('requestCount', MetricUnit.Count, 1);
204
+ metrics.addMetric('RequestCount', MetricUnit.Count, 1);
201
205
 
202
206
  try {
203
207
  const response = await opts.next({
@@ -208,9 +212,9 @@ export const createMetricsPlugin = () => {
208
212
  });
209
213
 
210
214
  if (!response.ok) {
211
- metrics.addMetric('errorCount', MetricUnit.Count, 1);
215
+ metrics.addMetric('Failure', MetricUnit.Count, 1);
212
216
  } else {
213
- metrics.addMetric('successCount', MetricUnit.Count, 1);
217
+ metrics.addMetric('Success', MetricUnit.Count, 1);
214
218
  }
215
219
 
216
220
  return response;
@@ -8,6 +8,7 @@ import {
8
8
  } from './middleware/index.js';
9
9
 
10
10
  process.env.POWERTOOLS_SERVICE_NAME = '<%= apiNameClassName %>';
11
+ process.env.POWERTOOLS_METRICS_NAMESPACE = '<%= apiNameClassName %>';
11
12
 
12
13
  export type Context = IMiddlewareContext;
13
14
 
@@ -10,9 +10,12 @@ export const createMetricsPlugin = () => {
10
10
 
11
11
  return t.procedure.use(async (opts) => {
12
12
  const metrics = new Metrics();
13
+ metrics.addDimensions({
14
+ procedure: opts.path,
15
+ type: opts.type,
16
+ });
13
17
  metrics.captureColdStartMetric();
14
-
15
- metrics.addMetric('requestCount', MetricUnit.Count, 1);
18
+ metrics.addMetric('RequestCount', MetricUnit.Count, 1);
16
19
 
17
20
  try {
18
21
  const response = await opts.next({
@@ -23,9 +26,9 @@ export const createMetricsPlugin = () => {
23
26
  });
24
27
 
25
28
  if (!response.ok) {
26
- metrics.addMetric('errorCount', MetricUnit.Count, 1);
29
+ metrics.addMetric('Failure', MetricUnit.Count, 1);
27
30
  } else {
28
- metrics.addMetric('successCount', MetricUnit.Count, 1);
31
+ metrics.addMetric('Success', MetricUnit.Count, 1);
29
32
  }
30
33
 
31
34
  return response;