cat-a-logs 2.0.6 → 2.0.8
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/client/index.js +23 -9
- package/package.json +1 -1
package/client/index.js
CHANGED
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
};
|
10
10
|
import { Logger } from "@aws-lambda-powertools/logger";
|
11
11
|
import { Ajv } from "ajv";
|
12
|
-
//cache entries are structured thusly: 'Namespace +
|
12
|
+
//cache entries are structured thusly: 'Namespace + DimensionsKeys(Alphabetically)': EMFObject
|
13
13
|
const cache = {};
|
14
14
|
//let latency = 300; (Example metric to track)
|
15
15
|
//Example for in-line use of Cat-a-log w/maximum arguments: catalog(latency, "Latency" , "lambda-function-metrics", "Milliseconds", {'functionVersion': '$LATEST', 'Server': 'Prod'}, 60, deploy);
|
@@ -25,7 +25,7 @@ function catalog(trackedVariable_1, metricName_1) {
|
|
25
25
|
for (let i = 0; i < yourKeys.length; i++) {
|
26
26
|
if (badKeys.includes(yourKeys[i])) {
|
27
27
|
//if a dimension name or metric name conflicts with native logger keys, throw error
|
28
|
-
throw new Error("metricName, or Dimension names
|
28
|
+
throw new Error("metricName, or Dimension names CANNOT be the same as these native Logger keys: level || message || sampling_rate || service || timestamp || xray_trace_id");
|
29
29
|
}
|
30
30
|
}
|
31
31
|
//EMF specification catch: if tracked variable is an array with a length greater than 100, throw error and do not log
|
@@ -34,11 +34,9 @@ function catalog(trackedVariable_1, metricName_1) {
|
|
34
34
|
throw new Error("metric value cannot have more than 100 elements");
|
35
35
|
}
|
36
36
|
//EMF specification catch: make sure provided dimension object does not have more than 30 entries
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
// );
|
41
|
-
// }
|
37
|
+
if (Object.keys(CustomerDefinedDimension).length > 30) {
|
38
|
+
throw new Error("EMF has a limit of 30 user defined dimension keys per log");
|
39
|
+
}
|
42
40
|
//Create new instance of Logger to use in function
|
43
41
|
const logger = new Logger({ serviceName: "serverlessAirline" });
|
44
42
|
//Set up Ajv instance for JSON validation
|
@@ -204,11 +202,27 @@ function catalog(trackedVariable_1, metricName_1) {
|
|
204
202
|
logger.info(`Your EMF compliant Structured Metrics Log ${i + 1}`, cache[Object.keys(cache)[i]]);
|
205
203
|
}
|
206
204
|
//clear cache after logging all cached objects to Lambda
|
207
|
-
console.log("BEFORE:", cache);
|
205
|
+
console.log("BEFORE:", JSON.stringify(cache, null, 2));
|
208
206
|
for (var member in cache)
|
209
207
|
delete cache[member];
|
210
208
|
console.log("AFTER:", cache);
|
211
209
|
}
|
212
210
|
});
|
213
211
|
}
|
214
|
-
|
212
|
+
//If you want to manually deploy the cache without writing a catalog for it
|
213
|
+
function deployCatalog() {
|
214
|
+
return __awaiter(this, void 0, void 0, function* () {
|
215
|
+
//Create a new instance of Logger
|
216
|
+
const logger = new Logger({ serviceName: "serverlessAirline" });
|
217
|
+
//Log all cached objects to Cloudwatch through Lambda
|
218
|
+
for (let i = 0; i < Object.keys(cache).length; i++) {
|
219
|
+
logger.info(`Your EMF compliant Structured Metrics Log ${i + 1}`, cache[Object.keys(cache)[i]]);
|
220
|
+
}
|
221
|
+
//clear cache after logging all cached objects to Lambda
|
222
|
+
console.log("BEFORE:", JSON.stringify(cache, null, 2));
|
223
|
+
for (var member in cache)
|
224
|
+
delete cache[member];
|
225
|
+
console.log("AFTER:", cache);
|
226
|
+
});
|
227
|
+
}
|
228
|
+
export { cache, catalog, deployCatalog };
|