aws-cdk 2.1020.1 → 2.1020.2
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/build-info.json +2 -2
- package/lib/cli/cli-type-registry.json +942 -0
- package/lib/cli/telemetry/endpoint-sink.d.ts +45 -0
- package/lib/cli/telemetry/endpoint-sink.js +94 -0
- package/lib/cli/telemetry/file-sink.d.ts +32 -0
- package/lib/cli/telemetry/file-sink.js +47 -0
- package/lib/cli/telemetry/io-host-sink.d.ts +27 -0
- package/lib/cli/telemetry/io-host-sink.js +35 -0
- package/lib/cli/telemetry/schema.d.ts +62 -0
- package/lib/cli/telemetry/schema.js +3 -0
- package/lib/cli/telemetry/sink-interface.d.ts +18 -0
- package/lib/cli/telemetry/sink-interface.js +3 -0
- package/lib/index.js +22 -12
- package/package.json +3 -3
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Agent } from 'https';
|
|
2
|
+
import type { UrlWithStringQuery } from 'url';
|
|
3
|
+
import type { IIoHost } from '../io-host';
|
|
4
|
+
import type { TelemetrySchema } from './schema';
|
|
5
|
+
import type { ITelemetrySink } from './sink-interface';
|
|
6
|
+
/**
|
|
7
|
+
* Properties for the Endpoint Telemetry Client
|
|
8
|
+
*/
|
|
9
|
+
export interface EndpointTelemetrySinkProps {
|
|
10
|
+
/**
|
|
11
|
+
* The external endpoint to hit
|
|
12
|
+
*/
|
|
13
|
+
readonly endpoint: UrlWithStringQuery;
|
|
14
|
+
/**
|
|
15
|
+
* Where messages are going to be sent
|
|
16
|
+
*/
|
|
17
|
+
readonly ioHost: IIoHost;
|
|
18
|
+
/**
|
|
19
|
+
* The agent responsible for making the network requests.
|
|
20
|
+
*
|
|
21
|
+
* Use this to set up a proxy connection.
|
|
22
|
+
*
|
|
23
|
+
* @default - Uses the shared global node agent
|
|
24
|
+
*/
|
|
25
|
+
readonly agent?: Agent;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The telemetry client that hits an external endpoint.
|
|
29
|
+
*/
|
|
30
|
+
export declare class EndpointTelemetrySink implements ITelemetrySink {
|
|
31
|
+
private events;
|
|
32
|
+
private endpoint;
|
|
33
|
+
private ioHelper;
|
|
34
|
+
private agent?;
|
|
35
|
+
constructor(props: EndpointTelemetrySinkProps);
|
|
36
|
+
/**
|
|
37
|
+
* Add an event to the collection.
|
|
38
|
+
*/
|
|
39
|
+
emit(event: TelemetrySchema): Promise<void>;
|
|
40
|
+
flush(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Returns true if telemetry successfully posted, false otherwise.
|
|
43
|
+
*/
|
|
44
|
+
private https;
|
|
45
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EndpointTelemetrySink = void 0;
|
|
4
|
+
const https_1 = require("https");
|
|
5
|
+
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
|
|
6
|
+
const api_private_1 = require("../../api-private");
|
|
7
|
+
const REQUEST_ATTEMPT_TIMEOUT_MS = 500;
|
|
8
|
+
/**
|
|
9
|
+
* The telemetry client that hits an external endpoint.
|
|
10
|
+
*/
|
|
11
|
+
class EndpointTelemetrySink {
|
|
12
|
+
constructor(props) {
|
|
13
|
+
this.events = [];
|
|
14
|
+
this.endpoint = props.endpoint;
|
|
15
|
+
this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
|
|
16
|
+
this.agent = props.agent;
|
|
17
|
+
// Batch events every 30 seconds
|
|
18
|
+
setInterval(() => this.flush(), 30000).unref();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Add an event to the collection.
|
|
22
|
+
*/
|
|
23
|
+
async emit(event) {
|
|
24
|
+
try {
|
|
25
|
+
this.events.push(event);
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
// Never throw errors, just log them via ioHost
|
|
29
|
+
await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async flush() {
|
|
33
|
+
try {
|
|
34
|
+
if (this.events.length === 0) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const res = await this.https(this.endpoint, this.events);
|
|
38
|
+
// Clear the events array after successful output
|
|
39
|
+
if (res) {
|
|
40
|
+
this.events = [];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
// Never throw errors, just log them via ioHost
|
|
45
|
+
await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns true if telemetry successfully posted, false otherwise.
|
|
50
|
+
*/
|
|
51
|
+
async https(url, body) {
|
|
52
|
+
try {
|
|
53
|
+
const res = await doRequest(url, body, this.agent);
|
|
54
|
+
// Successfully posted
|
|
55
|
+
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
await this.ioHelper.defaults.trace(`Telemetry Unsuccessful: POST ${url.hostname}${url.pathname}: ${res.statusCode}:${res.statusMessage}`);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
await this.ioHelper.defaults.trace(`Telemetry Error: POST ${url.hostname}${url.pathname}: ${JSON.stringify(e)}`);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.EndpointTelemetrySink = EndpointTelemetrySink;
|
|
68
|
+
/**
|
|
69
|
+
* A Promisified version of `https.request()`
|
|
70
|
+
*/
|
|
71
|
+
function doRequest(url, data, agent) {
|
|
72
|
+
return new Promise((ok, ko) => {
|
|
73
|
+
const payload = JSON.stringify(data);
|
|
74
|
+
const req = (0, https_1.request)({
|
|
75
|
+
hostname: url.hostname,
|
|
76
|
+
port: url.port,
|
|
77
|
+
path: url.pathname,
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: {
|
|
80
|
+
'content-type': 'application/json',
|
|
81
|
+
'content-length': payload.length,
|
|
82
|
+
},
|
|
83
|
+
agent,
|
|
84
|
+
timeout: REQUEST_ATTEMPT_TIMEOUT_MS,
|
|
85
|
+
}, ok);
|
|
86
|
+
req.on('error', ko);
|
|
87
|
+
req.on('timeout', () => {
|
|
88
|
+
const error = new toolkit_lib_1.ToolkitError(`Timeout after ${REQUEST_ATTEMPT_TIMEOUT_MS}ms, aborting request`);
|
|
89
|
+
req.destroy(error);
|
|
90
|
+
});
|
|
91
|
+
req.end(payload);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVuZHBvaW50LXNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaUNBQWdDO0FBRWhDLHNEQUFvRDtBQUNwRCxtREFBNkM7QUFLN0MsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUEwQnZDOztHQUVHO0FBQ0gsTUFBYSxxQkFBcUI7SUFNaEMsWUFBbUIsS0FBaUM7UUFMNUMsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFNckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsc0JBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBRXpCLGdDQUFnQztRQUNoQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBc0I7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsK0NBQStDO1lBQy9DLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9B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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UgfSBmcm9tICdodHRwJztcbmltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHR5cGUgeyBVcmxXaXRoU3RyaW5nUXVlcnkgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5pbXBvcnQgdHlwZSB7IElJb0hvc3QgfSBmcm9tICcuLi9pby1ob3N0JztcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJVGVsZW1ldHJ5U2luayB9IGZyb20gJy4vc2luay1pbnRlcmZhY2UnO1xuXG5jb25zdCBSRVFVRVNUX0FUVEVNUFRfVElNRU9VVF9NUyA9IDUwMDtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgRW5kcG9pbnQgVGVsZW1ldHJ5IENsaWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50VGVsZW1ldHJ5U2lua1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBlbmRwb2ludCB0byBoaXRcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBVcmxXaXRoU3RyaW5nUXVlcnk7XG5cbiAgLyoqXG4gICAqIFdoZXJlIG1lc3NhZ2VzIGFyZSBnb2luZyB0byBiZSBzZW50XG4gICAqL1xuICByZWFkb25seSBpb0hvc3Q6IElJb0hvc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhZ2VudCByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBuZXR3b3JrIHJlcXVlc3RzLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBzZXQgdXAgYSBwcm94eSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIHNoYXJlZCBnbG9iYWwgbm9kZSBhZ2VudFxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnQ/OiBBZ2VudDtcbn1cblxuLyoqXG4gKiBUaGUgdGVsZW1ldHJ5IGNsaWVudCB0aGF0IGhpdHMgYW4gZXh0ZXJuYWwgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbmRwb2ludFRlbGVtZXRyeVNpbmsgaW1wbGVtZW50cyBJVGVsZW1ldHJ5U2luayB7XG4gIHByaXZhdGUgZXZlbnRzOiBUZWxlbWV0cnlTY2hlbWFbXSA9IFtdO1xuICBwcml2YXRlIGVuZHBvaW50OiBVcmxXaXRoU3RyaW5nUXVlcnk7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIGFnZW50PzogQWdlbnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBFbmRwb2ludFRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuZW5kcG9pbnQgPSBwcm9wcy5lbmRwb2ludDtcbiAgICB0aGlzLmlvSGVscGVyID0gSW9IZWxwZXIuZnJvbUFjdGlvbkF3YXJlSW9Ib3N0KHByb3BzLmlvSG9zdCk7XG4gICAgdGhpcy5hZ2VudCA9IHByb3BzLmFnZW50O1xuXG4gICAgLy8gQmF0Y2ggZXZlbnRzIGV2ZXJ5IDMwIHNlY29uZHNcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmZsdXNoKCksIDMwMDAwKS51bnJlZigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCB0byB0aGUgY29sbGVjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWl0KGV2ZW50OiBUZWxlbWV0cnlTY2hlbWEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5ldmVudHMucHVzaChldmVudCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaHR0cHModGhpcy5lbmRwb2ludCwgdGhpcy5ldmVudHMpO1xuXG4gICAgICAvLyBDbGVhciB0aGUgZXZlbnRzIGFycmF5IGFmdGVyIHN1Y2Nlc3NmdWwgb3V0cHV0XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGVsZW1ldHJ5IHN1Y2Nlc3NmdWxseSBwb3N0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaHR0cHMoXG4gICAgdXJsOiBVcmxXaXRoU3RyaW5nUXVlcnksXG4gICAgYm9keTogVGVsZW1ldHJ5U2NoZW1hW10sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBkb1JlcXVlc3QodXJsLCBib2R5LCB0aGlzLmFnZW50KTtcblxuICAgICAgLy8gU3VjY2Vzc2Z1bGx5IHBvc3RlZFxuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlICYmIHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IFVuc3VjY2Vzc2Z1bDogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7cmVzLnN0YXR1c0NvZGV9OiR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBFcnJvcjogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGBodHRwcy5yZXF1ZXN0KClgXG4gKi9cbmZ1bmN0aW9uIGRvUmVxdWVzdChcbiAgdXJsOiBVcmxXaXRoU3RyaW5nUXVlcnksXG4gIGRhdGE6IFRlbGVtZXRyeVNjaGVtYVtdLFxuICBhZ2VudD86IEFnZW50LFxuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+KChvaywga28pID0+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0KHtcbiAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB1cmwucG9ydCxcbiAgICAgIHBhdGg6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnY29udGVudC1sZW5ndGgnOiBwYXlsb2FkLmxlbmd0aCxcbiAgICAgIH0sXG4gICAgICBhZ2VudCxcbiAgICAgIHRpbWVvdXQ6IFJFUVVFU1RfQVRURU1QVF9USU1FT1VUX01TLFxuICAgIH0sIG9rKTtcblxuICAgIHJlcS5vbignZXJyb3InLCBrbyk7XG4gICAgcmVxLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVG9vbGtpdEVycm9yKGBUaW1lb3V0IGFmdGVyICR7UkVRVUVTVF9BVFRFTVBUX1RJTUVPVVRfTVN9bXMsIGFib3J0aW5nIHJlcXVlc3RgKTtcbiAgICAgIHJlcS5kZXN0cm95KGVycm9yKTtcbiAgICB9KTtcblxuICAgIHJlcS5lbmQocGF5bG9hZCk7XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type IIoHost } from '@aws-cdk/toolkit-lib';
|
|
2
|
+
import type { TelemetrySchema } from './schema';
|
|
3
|
+
import type { ITelemetrySink } from './sink-interface';
|
|
4
|
+
/**
|
|
5
|
+
* Properties for the FileTelemetryClient
|
|
6
|
+
*/
|
|
7
|
+
export interface FileTelemetrySinkProps {
|
|
8
|
+
/**
|
|
9
|
+
* Where messages are going to be sent
|
|
10
|
+
*/
|
|
11
|
+
readonly ioHost: IIoHost;
|
|
12
|
+
/**
|
|
13
|
+
* The local file to log telemetry data to.
|
|
14
|
+
*/
|
|
15
|
+
readonly logFilePath: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A telemetry client that collects events writes them to a file
|
|
19
|
+
*/
|
|
20
|
+
export declare class FileTelemetrySink implements ITelemetrySink {
|
|
21
|
+
private ioHelper;
|
|
22
|
+
private logFilePath;
|
|
23
|
+
/**
|
|
24
|
+
* Create a new FileTelemetryClient
|
|
25
|
+
*/
|
|
26
|
+
constructor(props: FileTelemetrySinkProps);
|
|
27
|
+
/**
|
|
28
|
+
* Emit an event.
|
|
29
|
+
*/
|
|
30
|
+
emit(event: TelemetrySchema): Promise<void>;
|
|
31
|
+
flush(): Promise<void>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileTelemetrySink = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
|
|
7
|
+
const api_private_1 = require("../../api-private");
|
|
8
|
+
/**
|
|
9
|
+
* A telemetry client that collects events writes them to a file
|
|
10
|
+
*/
|
|
11
|
+
class FileTelemetrySink {
|
|
12
|
+
/**
|
|
13
|
+
* Create a new FileTelemetryClient
|
|
14
|
+
*/
|
|
15
|
+
constructor(props) {
|
|
16
|
+
this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
|
|
17
|
+
this.logFilePath = props.logFilePath;
|
|
18
|
+
if (fs.existsSync(this.logFilePath)) {
|
|
19
|
+
throw new toolkit_lib_1.ToolkitError(`Telemetry file already exists at ${this.logFilePath}`);
|
|
20
|
+
}
|
|
21
|
+
// Create the file if necessary
|
|
22
|
+
const directory = path.dirname(this.logFilePath);
|
|
23
|
+
if (!fs.existsSync(directory)) {
|
|
24
|
+
fs.mkdirSync(directory, { recursive: true });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Emit an event.
|
|
29
|
+
*/
|
|
30
|
+
async emit(event) {
|
|
31
|
+
try {
|
|
32
|
+
// Format the events as a JSON string with pretty printing
|
|
33
|
+
const output = JSON.stringify(event, null, 2) + '\n';
|
|
34
|
+
// Write to file
|
|
35
|
+
fs.appendFileSync(this.logFilePath, output);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
// Never throw errors, just log them via ioHost
|
|
39
|
+
await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async flush() {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.FileTelemetrySink = FileTelemetrySink;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zaW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZS1zaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0Isc0RBQWtFO0FBR2xFLG1EQUE2QztBQWlCN0M7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQUk1Qjs7T0FFRztJQUNILFlBQVksS0FBNkI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBUSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFFckMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSwwQkFBWSxDQUFDLG9DQUFvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLENBQUM7WUFDSCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUVyRCxnQkFBZ0I7WUFDaEIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLCtDQUErQztZQUMvQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixPQUFPO0lBQ1QsQ0FBQztDQUNGO0FBekNELDhDQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IsIHR5cGUgSUlvSG9zdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJVGVsZW1ldHJ5U2luayB9IGZyb20gJy4vc2luay1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIEZpbGVUZWxlbWV0cnlDbGllbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlVGVsZW1ldHJ5U2lua1Byb3BzIHtcbiAgLyoqXG4gICAqIFdoZXJlIG1lc3NhZ2VzIGFyZSBnb2luZyB0byBiZSBzZW50XG4gICAqL1xuICByZWFkb25seSBpb0hvc3Q6IElJb0hvc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbCBmaWxlIHRvIGxvZyB0ZWxlbWV0cnkgZGF0YSB0by5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ0ZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0ZWxlbWV0cnkgY2xpZW50IHRoYXQgY29sbGVjdHMgZXZlbnRzIHdyaXRlcyB0aGVtIHRvIGEgZmlsZVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVRlbGVtZXRyeVNpbmsgaW1wbGVtZW50cyBJVGVsZW1ldHJ5U2luayB7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIGxvZ0ZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGaWxlVGVsZW1ldHJ5Q2xpZW50XG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRmlsZVRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBJb0hlbHBlci5mcm9tQWN0aW9uQXdhcmVJb0hvc3QocHJvcHMuaW9Ib3N0KTtcbiAgICB0aGlzLmxvZ0ZpbGVQYXRoID0gcHJvcHMubG9nRmlsZVBhdGg7XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLmxvZ0ZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVGVsZW1ldHJ5IGZpbGUgYWxyZWFkeSBleGlzdHMgYXQgJHt0aGlzLmxvZ0ZpbGVQYXRofWApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZmlsZSBpZiBuZWNlc3NhcnlcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUodGhpcy5sb2dGaWxlUGF0aCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcmVjdG9yeSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtaXQoZXZlbnQ6IFRlbGVtZXRyeVNjaGVtYSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBGb3JtYXQgdGhlIGV2ZW50cyBhcyBhIEpTT04gc3RyaW5nIHdpdGggcHJldHR5IHByaW50aW5nXG4gICAgICBjb25zdCBvdXRwdXQgPSBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikgKyAnXFxuJztcblxuICAgICAgLy8gV3JpdGUgdG8gZmlsZVxuICAgICAgZnMuYXBwZW5kRmlsZVN5bmModGhpcy5sb2dGaWxlUGF0aCwgb3V0cHV0KTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIE5ldmVyIHRocm93IGVycm9ycywganVzdCBsb2cgdGhlbSB2aWEgaW9Ib3N0XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGBGYWlsZWQgdG8gYWRkIHRlbGVtZXRyeSBldmVudDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IIoHost } from '@aws-cdk/toolkit-lib';
|
|
2
|
+
import type { TelemetrySchema } from './schema';
|
|
3
|
+
import type { ITelemetrySink } from './sink-interface';
|
|
4
|
+
/**
|
|
5
|
+
* Properties for the StdoutTelemetryClient
|
|
6
|
+
*/
|
|
7
|
+
export interface IoHostTelemetrySinkProps {
|
|
8
|
+
/**
|
|
9
|
+
* Where messages are going to be sent
|
|
10
|
+
*/
|
|
11
|
+
readonly ioHost: IIoHost;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A telemetry client that collects events and flushes them to stdout.
|
|
15
|
+
*/
|
|
16
|
+
export declare class IoHostTelemetrySink implements ITelemetrySink {
|
|
17
|
+
private ioHelper;
|
|
18
|
+
/**
|
|
19
|
+
* Create a new StdoutTelemetryClient
|
|
20
|
+
*/
|
|
21
|
+
constructor(props: IoHostTelemetrySinkProps);
|
|
22
|
+
/**
|
|
23
|
+
* Emit an event
|
|
24
|
+
*/
|
|
25
|
+
emit(event: TelemetrySchema): Promise<void>;
|
|
26
|
+
flush(): Promise<void>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IoHostTelemetrySink = void 0;
|
|
4
|
+
const api_private_1 = require("../../api-private");
|
|
5
|
+
/**
|
|
6
|
+
* A telemetry client that collects events and flushes them to stdout.
|
|
7
|
+
*/
|
|
8
|
+
class IoHostTelemetrySink {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new StdoutTelemetryClient
|
|
11
|
+
*/
|
|
12
|
+
constructor(props) {
|
|
13
|
+
this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Emit an event
|
|
17
|
+
*/
|
|
18
|
+
async emit(event) {
|
|
19
|
+
try {
|
|
20
|
+
// Format the events as a JSON string with pretty printing
|
|
21
|
+
const output = JSON.stringify(event, null, 2);
|
|
22
|
+
// Write to IoHost
|
|
23
|
+
await this.ioHelper.defaults.trace(`--- TELEMETRY EVENT ---\n${output}\n-----------------------\n`);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
// Never throw errors, just log them via ioHost
|
|
27
|
+
await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async flush() {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.IoHostTelemetrySink = IoHostTelemetrySink;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8taG9zdC1zaW5rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW8taG9zdC1zaW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLG1EQUE2QztBQVk3Qzs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCOztPQUVHO0lBQ0gsWUFBWSxLQUErQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLHNCQUFRLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBc0I7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsMERBQTBEO1lBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU5QyxrQkFBa0I7WUFDbEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLE1BQU0sNkJBQTZCLENBQUMsQ0FBQztRQUN0RyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQiwrQ0FBK0M7WUFDL0MsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsT0FBTztJQUNULENBQUM7Q0FDRjtBQTdCRCxrREE2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElJb0hvc3QgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgdHlwZSB7IFRlbGVtZXRyeVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgSVRlbGVtZXRyeVNpbmsgfSBmcm9tICcuL3NpbmstaW50ZXJmYWNlJztcbmltcG9ydCB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vYXBpLXByaXZhdGUnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBTdGRvdXRUZWxlbWV0cnlDbGllbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb0hvc3RUZWxlbWV0cnlTaW5rUHJvcHMge1xuICAvKipcbiAgICogV2hlcmUgbWVzc2FnZXMgYXJlIGdvaW5nIHRvIGJlIHNlbnRcbiAgICovXG4gIHJlYWRvbmx5IGlvSG9zdDogSUlvSG9zdDtcbn1cblxuLyoqXG4gKiBBIHRlbGVtZXRyeSBjbGllbnQgdGhhdCBjb2xsZWN0cyBldmVudHMgYW5kIGZsdXNoZXMgdGhlbSB0byBzdGRvdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb0hvc3RUZWxlbWV0cnlTaW5rIGltcGxlbWVudHMgSVRlbGVtZXRyeVNpbmsge1xuICBwcml2YXRlIGlvSGVscGVyOiBJb0hlbHBlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFN0ZG91dFRlbGVtZXRyeUNsaWVudFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IElvSG9zdFRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuaW9IZWxwZXIgPSBJb0hlbHBlci5mcm9tQWN0aW9uQXdhcmVJb0hvc3QocHJvcHMuaW9Ib3N0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1pdChldmVudDogVGVsZW1ldHJ5U2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvcm1hdCB0aGUgZXZlbnRzIGFzIGEgSlNPTiBzdHJpbmcgd2l0aCBwcmV0dHkgcHJpbnRpbmdcbiAgICAgIGNvbnN0IG91dHB1dCA9IEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKTtcblxuICAgICAgLy8gV3JpdGUgdG8gSW9Ib3N0XG4gICAgICBhd2FpdCB0aGlzLmlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGAtLS0gVEVMRU1FVFJZIEVWRU5UIC0tLVxcbiR7b3V0cHV0fVxcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuYCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBOZXZlciB0aHJvdyBlcnJvcnMsIGp1c3QgbG9nIHRoZW0gdmlhIGlvSG9zdFxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRmFpbGVkIHRvIGFkZCB0ZWxlbWV0cnkgZXZlbnQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
interface Identifiers {
|
|
2
|
+
readonly cdkCliVersion: string;
|
|
3
|
+
readonly cdkLibraryVersion?: string;
|
|
4
|
+
readonly telemetryVersion: string;
|
|
5
|
+
readonly sessionId: string;
|
|
6
|
+
readonly eventId: string;
|
|
7
|
+
readonly installationId: string;
|
|
8
|
+
readonly timestamp: string;
|
|
9
|
+
readonly accountId?: string;
|
|
10
|
+
readonly region?: string;
|
|
11
|
+
}
|
|
12
|
+
interface Event {
|
|
13
|
+
readonly state: 'ABORTED' | 'FAILED' | 'SUCCEEDED';
|
|
14
|
+
readonly eventType: string;
|
|
15
|
+
readonly command: {
|
|
16
|
+
readonly path: string[];
|
|
17
|
+
readonly parameters: string[];
|
|
18
|
+
readonly config: {
|
|
19
|
+
[key: string]: any;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
interface Environment {
|
|
24
|
+
readonly os: {
|
|
25
|
+
readonly platform: string;
|
|
26
|
+
readonly release: string;
|
|
27
|
+
};
|
|
28
|
+
readonly ci: boolean;
|
|
29
|
+
readonly nodeVersion: string;
|
|
30
|
+
}
|
|
31
|
+
interface Duration {
|
|
32
|
+
readonly total: number;
|
|
33
|
+
readonly components?: {
|
|
34
|
+
[key: string]: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
type Counters = {
|
|
38
|
+
[key: string]: number;
|
|
39
|
+
};
|
|
40
|
+
interface Error {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly message?: string;
|
|
43
|
+
readonly trace?: string;
|
|
44
|
+
readonly logs?: string;
|
|
45
|
+
}
|
|
46
|
+
interface Dependency {
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly version: string;
|
|
49
|
+
}
|
|
50
|
+
interface Project {
|
|
51
|
+
readonly dependencies?: Dependency[];
|
|
52
|
+
}
|
|
53
|
+
export interface TelemetrySchema {
|
|
54
|
+
readonly identifiers: Identifiers;
|
|
55
|
+
readonly event: Event;
|
|
56
|
+
readonly environment: Environment;
|
|
57
|
+
readonly project: Project;
|
|
58
|
+
readonly duration: Duration;
|
|
59
|
+
readonly counters?: Counters;
|
|
60
|
+
readonly error?: Error;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgSWRlbnRpZmllcnMge1xuICByZWFkb25seSBjZGtDbGlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNka0xpYnJhcnlWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSB0ZWxlbWV0cnlWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlc3Npb25JZDogc3RyaW5nO1xuICByZWFkb25seSBldmVudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogc3RyaW5nO1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEV2ZW50IHtcbiAgcmVhZG9ubHkgc3RhdGU6ICdBQk9SVEVEJyB8ICdGQUlMRUQnIHwgJ1NVQ0NFRURFRCc7XG4gIHJlYWRvbmx5IGV2ZW50VHlwZTogc3RyaW5nO1xuICByZWFkb25seSBjb21tYW5kOiB7XG4gICAgcmVhZG9ubHkgcGF0aDogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyczogc3RyaW5nW107XG4gICAgcmVhZG9ubHkgY29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICByZWFkb25seSBvczoge1xuICAgIHJlYWRvbmx5IHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcmVsZWFzZTogc3RyaW5nO1xuICB9O1xuICByZWFkb25seSBjaTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9kZVZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER1cmF0aW9uIHtcbiAgcmVhZG9ubHkgdG90YWw6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tcG9uZW50cz86IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG59XG5cbnR5cGUgQ291bnRlcnMgPSB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuXG5pbnRlcmZhY2UgRXJyb3Ige1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U/OiBzdHJpbmc7IC8vIGFub255bWl6ZWQgc3RhY2sgbWVzc2FnZVxuICByZWFkb25seSB0cmFjZT86IHN0cmluZzsgLy8gYW5vbnltaXplZCBzdGFjayB0cmFjZVxuICByZWFkb25seSBsb2dzPzogc3RyaW5nOyAvLyBhbm9ueW1pemVkIHN0YWNrIGxvZ3Ncbn1cblxuaW50ZXJmYWNlIERlcGVuZGVuY3kge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFByb2plY3Qge1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVsZW1ldHJ5U2NoZW1hIHtcbiAgcmVhZG9ubHkgaWRlbnRpZmllcnM6IElkZW50aWZpZXJzO1xuICByZWFkb25seSBldmVudDogRXZlbnQ7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdDtcbiAgcmVhZG9ubHkgZHVyYXRpb246IER1cmF0aW9uO1xuICByZWFkb25seSBjb3VudGVycz86IENvdW50ZXJzO1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TelemetrySchema } from './schema';
|
|
2
|
+
/**
|
|
3
|
+
* All Telemetry Clients are Sinks.
|
|
4
|
+
*
|
|
5
|
+
* A telemtry client receives event data via 'emit'
|
|
6
|
+
* and sends batched events via 'flush'
|
|
7
|
+
*/
|
|
8
|
+
export interface ITelemetrySink {
|
|
9
|
+
/**
|
|
10
|
+
* Recieve an event
|
|
11
|
+
*/
|
|
12
|
+
emit(event: TelemetrySchema): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* If the implementer of ITelemetrySink batches events,
|
|
15
|
+
* flush sends the data and clears the cache.
|
|
16
|
+
*/
|
|
17
|
+
flush(): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay1pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaW5rLWludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTY2hlbWEgfSBmcm9tICcuL3NjaGVtYSc7XG5cbi8qKlxuICogQWxsIFRlbGVtZXRyeSBDbGllbnRzIGFyZSBTaW5rcy5cbiAqXG4gKiBBIHRlbGVtdHJ5IGNsaWVudCByZWNlaXZlcyBldmVudCBkYXRhIHZpYSAnZW1pdCdcbiAqIGFuZCBzZW5kcyBiYXRjaGVkIGV2ZW50cyB2aWEgJ2ZsdXNoJ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElUZWxlbWV0cnlTaW5rIHtcbiAgLyoqXG4gICAqIFJlY2lldmUgYW4gZXZlbnRcbiAgICovXG4gIGVtaXQoZXZlbnQ6IFRlbGVtZXRyeVNjaGVtYSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIElmIHRoZSBpbXBsZW1lbnRlciBvZiBJVGVsZW1ldHJ5U2luayBiYXRjaGVzIGV2ZW50cyxcbiAgICogZmx1c2ggc2VuZHMgdGhlIGRhdGEgYW5kIGNsZWFycyB0aGUgY2FjaGUuXG4gICAqL1xuICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
|
package/lib/index.js
CHANGED
|
@@ -3449,7 +3449,7 @@ var require_semver2 = __commonJS({
|
|
|
3449
3449
|
// ../@aws-cdk/cloud-assembly-schema/cli-version.json
|
|
3450
3450
|
var require_cli_version = __commonJS({
|
|
3451
3451
|
"../@aws-cdk/cloud-assembly-schema/cli-version.json"(exports2, module2) {
|
|
3452
|
-
module2.exports = { version: "2.1020.
|
|
3452
|
+
module2.exports = { version: "2.1020.2" };
|
|
3453
3453
|
}
|
|
3454
3454
|
});
|
|
3455
3455
|
|
|
@@ -305413,21 +305413,31 @@ var init_cc_api_provider = __esm({
|
|
|
305413
305413
|
*/
|
|
305414
305414
|
async listResources(cc, typeName, propertyMatch, expectedMatchCount) {
|
|
305415
305415
|
try {
|
|
305416
|
-
const
|
|
305417
|
-
|
|
305418
|
-
|
|
305419
|
-
|
|
305420
|
-
|
|
305421
|
-
|
|
305422
|
-
|
|
305416
|
+
const found = [];
|
|
305417
|
+
let nextToken = void 0;
|
|
305418
|
+
do {
|
|
305419
|
+
const result3 = await cc.listResources({
|
|
305420
|
+
TypeName: typeName,
|
|
305421
|
+
MaxResults: 100,
|
|
305422
|
+
...nextToken ? { NextToken: nextToken } : {}
|
|
305423
305423
|
});
|
|
305424
|
-
|
|
305424
|
+
found.push(
|
|
305425
|
+
...(result3.ResourceDescriptions ?? []).map(foundResourceFromCcApi).filter((r3) => {
|
|
305426
|
+
return Object.entries(propertyMatch).every(([propPath, expected]) => {
|
|
305427
|
+
const actual = findJsonValue(r3.properties, propPath);
|
|
305428
|
+
return propertyMatchesFilter(actual, expected);
|
|
305429
|
+
});
|
|
305430
|
+
})
|
|
305431
|
+
);
|
|
305432
|
+
nextToken = result3.NextToken;
|
|
305433
|
+
if ((expectedMatchCount === "at-most-one" || expectedMatchCount === "exactly-one") && found.length > 1) {
|
|
305434
|
+
const atLeast = nextToken ? "at least " : "";
|
|
305435
|
+
throw new ContextProviderError(`Found ${atLeast}${found.length} resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}. Please narrow the search criteria`);
|
|
305436
|
+
}
|
|
305437
|
+
} while (nextToken);
|
|
305425
305438
|
if ((expectedMatchCount === "at-least-one" || expectedMatchCount === "exactly-one") && found.length === 0) {
|
|
305426
305439
|
throw new NoResultsFoundError(`Could not find any resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}.`);
|
|
305427
305440
|
}
|
|
305428
|
-
if ((expectedMatchCount === "at-most-one" || expectedMatchCount === "exactly-one") && found.length > 1) {
|
|
305429
|
-
throw new ContextProviderError(`Found ${found.length} resources matching ${JSON.stringify(propertyMatch)}; expected ${expectedMatchCountText(expectedMatchCount)}. Please narrow the search criteria`);
|
|
305430
|
-
}
|
|
305431
305441
|
return found;
|
|
305432
305442
|
} catch (err) {
|
|
305433
305443
|
if (!ContextProviderError.isContextProviderError(err)) {
|
package/package.json
CHANGED
|
@@ -78,10 +78,10 @@
|
|
|
78
78
|
"typescript": "5.6",
|
|
79
79
|
"xml-js": "^1.6.11",
|
|
80
80
|
"@aws-cdk/cdk-assets-lib": "^1.0.0",
|
|
81
|
-
"@aws-cdk/cloud-assembly-schema": ">=45.
|
|
81
|
+
"@aws-cdk/cloud-assembly-schema": ">=45.1.0",
|
|
82
82
|
"@aws-cdk/cloudformation-diff": "2.182.0",
|
|
83
83
|
"@aws-cdk/cx-api": "^2.202.0",
|
|
84
|
-
"@aws-cdk/toolkit-lib": "^1.2.
|
|
84
|
+
"@aws-cdk/toolkit-lib": "^1.2.4",
|
|
85
85
|
"@aws-sdk/client-appsync": "^3",
|
|
86
86
|
"@aws-sdk/client-cloudcontrol": "^3",
|
|
87
87
|
"@aws-sdk/client-cloudformation": "^3",
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"publishConfig": {
|
|
146
146
|
"access": "public"
|
|
147
147
|
},
|
|
148
|
-
"version": "2.1020.
|
|
148
|
+
"version": "2.1020.2",
|
|
149
149
|
"types": "lib/index.d.ts",
|
|
150
150
|
"exports": {
|
|
151
151
|
"./package.json": "./package.json",
|