construct-hub 0.4.2 → 0.4.5
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/.jsii +21 -21
- package/API.md +4 -4
- package/changelog.md +1 -1
- package/docs/operator-runbook.md +32 -0
- package/lib/backend/catalog-builder/index.js +5 -1
- package/lib/construct-hub.js +1 -1
- package/lib/monitoring/api.d.ts +3 -3
- package/lib/monitoring/api.js +1 -1
- package/lib/monitoring/index.d.ts +4 -4
- package/lib/monitoring/index.js +5 -5
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs/canary/constants.d.ts +8 -1
- package/lib/package-sources/npmjs/canary/constants.js +1 -1
- package/lib/package-sources/npmjs/canary/index.d.ts +16 -0
- package/lib/package-sources/npmjs/canary/index.js +35 -4
- package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.bundle/index.js +20 -1
- package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.bundle/index.js.map +2 -2
- package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.d.ts +58 -0
- package/lib/package-sources/npmjs/canary/npmjs-package-canary.lambda.js +24 -3
- package/lib/package-sources/npmjs.js +64 -8
- package/lib/package-tag/index.js +3 -3
- package/lib/package-tag-group/index.js +2 -2
- package/lib/preload-file/index.js +1 -1
- package/lib/s3/storage.js +1 -1
- package/lib/spdx-license.js +1 -1
- package/package.json +1 -1
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
@@ -12,7 +12,7 @@ const npmjs_package_canary_1 = require("./npmjs-package-canary");
|
|
12
12
|
class NpmJsPackageCanary extends constructs_1.Construct {
|
13
13
|
constructor(scope, id, props) {
|
14
14
|
super(scope, id);
|
15
|
-
|
15
|
+
this.handler = new npmjs_package_canary_1.NpmjsPackageCanary(this, 'Resource', {
|
16
16
|
architecture: _lambda_architecture_1.gravitonLambdaIfAvailable(this),
|
17
17
|
description: `[${scope.node.path}/PackageCanary] Monitors ${props.packageName} versions availability`,
|
18
18
|
environment: {
|
@@ -24,11 +24,11 @@ class NpmJsPackageCanary extends constructs_1.Construct {
|
|
24
24
|
memorySize: 10024,
|
25
25
|
timeout: aws_cdk_lib_1.Duration.minutes(1),
|
26
26
|
});
|
27
|
-
const grant = props.bucket.grantReadWrite(handler, `${"package-canary/" /* STATE_PREFIX */}*${".state.json" /* STATE_SUFFIX */}`);
|
27
|
+
const grant = props.bucket.grantReadWrite(this.handler, `${"package-canary/" /* STATE_PREFIX */}*${".state.json" /* STATE_SUFFIX */}`);
|
28
28
|
const schedule = new aws_events_1.Rule(this, 'Schedule', {
|
29
29
|
description: 'Scheduled executions of the NpmJS package canary',
|
30
30
|
schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.minutes(1)),
|
31
|
-
targets: [new aws_events_targets_1.LambdaFunction(handler)],
|
31
|
+
targets: [new aws_events_targets_1.LambdaFunction(this.handler)],
|
32
32
|
});
|
33
33
|
// Ensure we don't attempt to run before permissions have been granted.
|
34
34
|
schedule.node.addDependency(grant);
|
@@ -60,6 +60,37 @@ class NpmJsPackageCanary extends constructs_1.Construct {
|
|
60
60
|
namespace: constants_1.METRICS_NAMESPACE,
|
61
61
|
});
|
62
62
|
}
|
63
|
+
/**
|
64
|
+
* The estimated lag between the npm registry replica (replcate.npmjs.com) and
|
65
|
+
* the primary registry (registry.npmjs.com).
|
66
|
+
*
|
67
|
+
* IMPORTANT NOTE: This is based on the difference in modified timestamps for
|
68
|
+
* the probe package between the two and hence has a granularly no better than
|
69
|
+
* the publishing interval of this. Since the construct-hub-probe package is
|
70
|
+
* only published every 3 hours approximately, this metric has a resolution
|
71
|
+
* that is strictly worse than 3 hours.
|
72
|
+
*/
|
73
|
+
metricEstimatedNpmReplicaLag(opts) {
|
74
|
+
return new aws_cloudwatch_1.Metric({
|
75
|
+
period: aws_cdk_lib_1.Duration.minutes(1),
|
76
|
+
statistic: aws_cloudwatch_1.Statistic.MAXIMUM,
|
77
|
+
...opts,
|
78
|
+
metricName: "EstimatedNpmReplicaLag" /* NPM_REPLICA_LAG */,
|
79
|
+
namespace: constants_1.METRICS_NAMESPACE,
|
80
|
+
});
|
81
|
+
}
|
82
|
+
metricErrors(opts) {
|
83
|
+
return this.handler.metricErrors(opts);
|
84
|
+
}
|
85
|
+
metricInvocations(opts) {
|
86
|
+
return this.handler.metricInvocations(opts);
|
87
|
+
}
|
88
|
+
metricThrottles(opts) {
|
89
|
+
return this.handler.metricThrottles(opts);
|
90
|
+
}
|
91
|
+
metricDuration(opts) {
|
92
|
+
return this.handler.metricDuration(opts);
|
93
|
+
}
|
63
94
|
}
|
64
95
|
exports.NpmJsPackageCanary = NpmJsPackageCanary;
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGFja2FnZS1zb3VyY2VzL25wbWpzL2NhbmFyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUM7QUFDdkMsK0RBQThFO0FBQzlFLHVEQUF3RDtBQUN4RCx1RUFBZ0U7QUFFaEUsMkNBQXVDO0FBQ3ZDLGdGQUFrRjtBQUNsRiwyQ0FLcUI7QUFDckIsaUVBQXVFO0FBUXZFLE1BQWEsa0JBQW1CLFNBQVEsc0JBQVM7SUFHL0MsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBOEI7UUFFOUIsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkseUNBQU8sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzNDLFlBQVksRUFBRSxnREFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDN0MsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLDRCQUE0QixLQUFLLENBQUMsV0FBVyx3QkFBd0I7WUFDckcsV0FBVyxFQUFFO2dCQUNYLG1CQUFtQixFQUFFLE9BQU87Z0JBQzVCLHVEQUFvQyxFQUFFLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQy9ELCtEQUF3QyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVTtnQkFDakUsbUNBQTBCLEVBQUUsS0FBSyxDQUFDLFdBQVc7YUFDOUM7WUFDRCxVQUFVLEVBQUUsS0FBTTtZQUNsQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUN2QyxJQUFJLENBQUMsT0FBTyxFQUNaLEdBQUcsb0NBQXNCLElBQUksZ0NBQXNCLEVBQUUsQ0FDdEQsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksaUJBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzFDLFdBQVcsRUFBRSxrREFBa0Q7WUFDL0QsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxDQUFDLElBQUksbUNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsdUVBQXVFO1FBQ3ZFLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBb0I7UUFDekMsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzQixTQUFTLEVBQUUsMEJBQVMsQ0FBQyxPQUFPO1lBQzVCLEdBQUcsSUFBSTtZQUNQLFVBQVUsOEJBQXVCO1lBQ2pDLFNBQVMsRUFBRSw2QkFBaUI7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQW9CO1FBQzdDLE9BQU8sSUFBSSx1QkFBTSxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDM0IsU0FBUyxFQUFFLDBCQUFTLENBQUMsT0FBTztZQUM1QixHQUFHLElBQUk7WUFDUCxVQUFVLHVDQUE0QjtZQUN0QyxTQUFTLEVBQUUsNkJBQWlCO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxJQUFvQjtRQUNuRCxPQUFPLElBQUksdUJBQU0sQ0FBQztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFNBQVMsRUFBRSwwQkFBUyxDQUFDLE9BQU87WUFDNUIsR0FBRyxJQUFJO1lBQ1AsVUFBVSxtREFBa0M7WUFDNUMsU0FBUyxFQUFFLDZCQUFpQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksNEJBQTRCLENBQUMsSUFBb0I7UUFDdEQsT0FBTyxJQUFJLHVCQUFNLENBQUM7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMzQixTQUFTLEVBQUUsMEJBQVMsQ0FBQyxPQUFPO1lBQzVCLEdBQUcsSUFBSTtZQUNQLFVBQVUsZ0RBQTRCO1lBQ3RDLFNBQVMsRUFBRSw2QkFBaUI7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFvQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFvQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFvQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBb0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFyR0QsZ0RBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBNZXRyaWNPcHRpb25zLCBNZXRyaWMsIFN0YXRpc3RpYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cyc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgZ3Jhdml0b25MYW1iZGFJZkF2YWlsYWJsZSB9IGZyb20gJy4uLy4uLy4uL2JhY2tlbmQvX2xhbWJkYS1hcmNoaXRlY3R1cmUnO1xuaW1wb3J0IHtcbiAgRW52aXJvbm1lbnQsXG4gIE9iamVjdEtleSxcbiAgTUVUUklDU19OQU1FU1BBQ0UsXG4gIE1ldHJpY05hbWUsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5wbWpzUGFja2FnZUNhbmFyeSBhcyBIYW5kbGVyIH0gZnJvbSAnLi9ucG1qcy1wYWNrYWdlLWNhbmFyeSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnBtSnNQYWNrYWdlQ2FuYXJ5UHJvcHMge1xuICByZWFkb25seSBidWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdEh1YkJhc2VVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIE5wbUpzUGFja2FnZUNhbmFyeSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlcjogSGFuZGxlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOcG1Kc1BhY2thZ2VDYW5hcnlQcm9wc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IEhhbmRsZXIodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgYXJjaGl0ZWN0dXJlOiBncmF2aXRvbkxhbWJkYUlmQXZhaWxhYmxlKHRoaXMpLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHtzY29wZS5ub2RlLnBhdGh9L1BhY2thZ2VDYW5hcnldIE1vbml0b3JzICR7cHJvcHMucGFja2FnZU5hbWV9IHZlcnNpb25zIGF2YWlsYWJpbGl0eWAsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBBV1NfRU1GX0VOVklST05NRU5UOiAnTG9jYWwnLFxuICAgICAgICBbRW52aXJvbm1lbnQuQ09OU1RSVUNUX0hVQl9CQVNFX1VSTF06IHByb3BzLmNvbnN0cnVjdEh1YkJhc2VVcmwsXG4gICAgICAgIFtFbnZpcm9ubWVudC5QQUNLQUdFX0NBTkFSWV9CVUNLRVRfTkFNRV06IHByb3BzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICBbRW52aXJvbm1lbnQuUEFDS0FHRV9OQU1FXTogcHJvcHMucGFja2FnZU5hbWUsXG4gICAgICB9LFxuICAgICAgbWVtb3J5U2l6ZTogMTBfMDI0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICB9KTtcbiAgICBjb25zdCBncmFudCA9IHByb3BzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgIHRoaXMuaGFuZGxlcixcbiAgICAgIGAke09iamVjdEtleS5TVEFURV9QUkVGSVh9KiR7T2JqZWN0S2V5LlNUQVRFX1NVRkZJWH1gXG4gICAgKTtcblxuICAgIGNvbnN0IHNjaGVkdWxlID0gbmV3IFJ1bGUodGhpcywgJ1NjaGVkdWxlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdTY2hlZHVsZWQgZXhlY3V0aW9ucyBvZiB0aGUgTnBtSlMgcGFja2FnZSBjYW5hcnknLFxuICAgICAgc2NoZWR1bGU6IFNjaGVkdWxlLnJhdGUoRHVyYXRpb24ubWludXRlcygxKSksXG4gICAgICB0YXJnZXRzOiBbbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMuaGFuZGxlcildLFxuICAgIH0pO1xuICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJ1biBiZWZvcmUgcGVybWlzc2lvbnMgaGF2ZSBiZWVuIGdyYW50ZWQuXG4gICAgc2NoZWR1bGUubm9kZS5hZGREZXBlbmRlbmN5KGdyYW50KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNEd2VsbFRpbWUob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogTWV0cmljTmFtZS5EV0VMTF9USU1FLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNUaW1lVG9DYXRhbG9nKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuVElNRV9UT19DQVRBTE9HLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNUcmFja2VkVmVyc2lvbkNvdW50KG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuVFJBQ0tFRF9WRVJTSU9OX0NPVU5ULFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXN0aW1hdGVkIGxhZyBiZXR3ZWVuIHRoZSBucG0gcmVnaXN0cnkgcmVwbGljYSAocmVwbGNhdGUubnBtanMuY29tKSBhbmRcbiAgICogdGhlIHByaW1hcnkgcmVnaXN0cnkgKHJlZ2lzdHJ5Lm5wbWpzLmNvbSkuXG4gICAqXG4gICAqIElNUE9SVEFOVCBOT1RFOiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIGluIG1vZGlmaWVkIHRpbWVzdGFtcHMgZm9yXG4gICAqIHRoZSBwcm9iZSBwYWNrYWdlIGJldHdlZW4gdGhlIHR3byBhbmQgaGVuY2UgaGFzIGEgZ3JhbnVsYXJseSBubyBiZXR0ZXIgdGhhblxuICAgKiB0aGUgcHVibGlzaGluZyBpbnRlcnZhbCBvZiB0aGlzLiBTaW5jZSB0aGUgY29uc3RydWN0LWh1Yi1wcm9iZSBwYWNrYWdlIGlzXG4gICAqIG9ubHkgcHVibGlzaGVkIGV2ZXJ5IDMgaG91cnMgYXBwcm94aW1hdGVseSwgdGhpcyBtZXRyaWMgaGFzIGEgcmVzb2x1dGlvblxuICAgKiB0aGF0IGlzIHN0cmljdGx5IHdvcnNlIHRoYW4gMyBob3Vycy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNFc3RpbWF0ZWROcG1SZXBsaWNhTGFnKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IE1ldHJpY05hbWUuTlBNX1JFUExJQ0FfTEFHLFxuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNFcnJvcnMob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIubWV0cmljRXJyb3JzKG9wdHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0ludm9jYXRpb25zKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm1ldHJpY0ludm9jYXRpb25zKG9wdHMpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1Rocm90dGxlcyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5tZXRyaWNUaHJvdHRsZXMob3B0cyk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljRHVyYXRpb24ob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIubWV0cmljRHVyYXRpb24ob3B0cyk7XG4gIH1cbn1cbiJdfQ==
|
@@ -8075,6 +8075,7 @@ var require_lib2 = __commonJS({
|
|
8075
8075
|
// src/package-sources/npmjs/canary/npmjs-package-canary.lambda.ts
|
8076
8076
|
var npmjs_package_canary_lambda_exports = {};
|
8077
8077
|
__export(npmjs_package_canary_lambda_exports, {
|
8078
|
+
CanaryStateService: () => CanaryStateService,
|
8078
8079
|
handler: () => handler
|
8079
8080
|
});
|
8080
8081
|
module.exports = __toCommonJS(npmjs_package_canary_lambda_exports);
|
@@ -8129,9 +8130,10 @@ async function handler(event) {
|
|
8129
8130
|
console.log(`Initial state: ${JSON.stringify(state, null, 2)}`);
|
8130
8131
|
updateLatestIfNeeded(state, latest);
|
8131
8132
|
try {
|
8132
|
-
await (0, import_aws_embedded_metrics.metricScope)((metrics) => () => {
|
8133
|
+
await (0, import_aws_embedded_metrics.metricScope)((metrics) => async () => {
|
8133
8134
|
metrics.setDimensions();
|
8134
8135
|
metrics.putMetric("TrackedVersionCount" /* TRACKED_VERSION_COUNT */, Object.keys(state.pending).length + 1, import_aws_embedded_metrics.Unit.Count);
|
8136
|
+
metrics.putMetric("EstimatedNpmReplicaLag" /* NPM_REPLICA_LAG */, await stateService.npmReplicaLagSeconds(packageName), import_aws_embedded_metrics.Unit.Seconds);
|
8135
8137
|
})();
|
8136
8138
|
for (const versionState of [
|
8137
8139
|
state.latest,
|
@@ -8243,6 +8245,22 @@ var CanaryStateService = class {
|
|
8243
8245
|
console.log(`Package: ${packageName} | Version : ${version} | Published At: ${publishedAt}`);
|
8244
8246
|
return { version, publishedAt: new Date(publishedAt) };
|
8245
8247
|
}
|
8248
|
+
async npmReplicaLagSeconds(packageName) {
|
8249
|
+
const encodedPackageName = encodeURIComponent(packageName);
|
8250
|
+
console.log(`Measuring NPM replica lag using ${packageName}...`);
|
8251
|
+
const [primaryDate, replicaDate] = await Promise.all([
|
8252
|
+
getModifiedTimestamp(`registry.npmjs.org`),
|
8253
|
+
getModifiedTimestamp(`replicate.npmjs.com/registry`)
|
8254
|
+
]);
|
8255
|
+
const deltaMs = primaryDate.getTime() - replicaDate.getTime();
|
8256
|
+
console.log(`Timestamp on primary: ${primaryDate.toISOString()}`);
|
8257
|
+
console.log(`Timestamp on replica: ${replicaDate.toISOString()} (${deltaMs / 36e5} hours behind)`);
|
8258
|
+
return deltaMs / 1e3;
|
8259
|
+
async function getModifiedTimestamp(baseUrl) {
|
8260
|
+
const isoDate = await getJSON(`https://${baseUrl}/${encodedPackageName}`, ["time", "modified"]);
|
8261
|
+
return new Date(isoDate);
|
8262
|
+
}
|
8263
|
+
}
|
8246
8264
|
key(packageName) {
|
8247
8265
|
return `${"package-canary/" /* STATE_PREFIX */}${packageName}${".state.json" /* STATE_SUFFIX */}`;
|
8248
8266
|
}
|
@@ -8287,6 +8305,7 @@ function gunzip(readable) {
|
|
8287
8305
|
}
|
8288
8306
|
// Annotate the CommonJS export names for ESM import in node:
|
8289
8307
|
0 && (module.exports = {
|
8308
|
+
CanaryStateService,
|
8290
8309
|
handler
|
8291
8310
|
});
|
8292
8311
|
//# sourceMappingURL=index.js.map
|