UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

88 lines 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const client_cloudwatch_logs_1 = require("@aws-sdk/client-cloudwatch-logs"); const logs_monitor_1 = require("../../../lib/api/logs/logs-monitor"); const cli_io_host_1 = require("../../../lib/toolkit/cli-io-host"); const util_1 = require("../../util"); const mock_sdk_1 = require("../../util/mock-sdk"); // Helper function to strip ANSI codes const stripAnsi = (str) => { const ansiRegex = /\u001b\[[0-9;]*[a-zA-Z]/g; return str.replace(ansiRegex, ''); }; let sdk; let stderrMock; let monitor; beforeEach(() => { cli_io_host_1.CliIoHost.instance().isCI = false; monitor = new logs_monitor_1.CloudWatchLogEventMonitor(new Date(T100)); stderrMock = jest.spyOn(process.stderr, 'write').mockImplementation((chunk) => { // Strip ANSI codes when capturing output if (typeof chunk === 'string') { return stripAnsi(chunk); } return stripAnsi(chunk.toString()); }); sdk = new mock_sdk_1.MockSdk(); }); afterEach(() => { stderrMock.mockRestore(); monitor.deactivate(); }); test('process events', async () => { // GIVEN const eventDate = new Date(T0 + 102 * 1000); mock_sdk_1.mockCloudWatchClient.on(client_cloudwatch_logs_1.FilterLogEventsCommand).resolves({ events: [event(102, 'message', eventDate)], }); monitor.addLogGroups({ name: 'name', account: '11111111111', region: 'us-east-1', }, sdk, ['loggroup']); // WHEN monitor.activate(); // need time for the log processing to occur await (0, util_1.sleep)(1000); // THEN const expectedLocaleTimeString = eventDate.toLocaleTimeString(); expect(stderrMock).toHaveBeenCalledTimes(1); expect(stripAnsi(stderrMock.mock.calls[0][0])).toContain(`[loggroup] ${expectedLocaleTimeString} message`); }); test('process truncated events', async () => { // GIVEN const eventDate = new Date(T0 + 102 * 1000); const events = []; for (let i = 0; i < 100; i++) { events.push(event(102 + i, 'message' + i, eventDate)); } mock_sdk_1.mockCloudWatchClient.on(client_cloudwatch_logs_1.FilterLogEventsCommand).resolves({ events, nextToken: 'some-token', }); monitor.addLogGroups({ name: 'name', account: '11111111111', region: 'us-east-1', }, sdk, ['loggroup']); // WHEN monitor.activate(); // need time for the log processing to occur await (0, util_1.sleep)(1000); // THEN const expectedLocaleTimeString = eventDate.toLocaleTimeString(); expect(stderrMock).toHaveBeenCalledTimes(101); expect(stripAnsi(stderrMock.mock.calls[0][0])).toContain(`[loggroup] ${expectedLocaleTimeString} message0`); expect(stripAnsi(stderrMock.mock.calls[100][0])).toContain(`[loggroup] ${expectedLocaleTimeString} >>> \`watch\` shows only the first 100 log messages - the rest have been truncated...`); }); const T0 = 1597837230504; const T100 = T0 + 100 * 1000; function event(nr, message, timestamp) { return { eventId: `${nr}`, message, timestamp: timestamp.getTime(), ingestionTime: timestamp.getTime(), }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy1tb25pdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2dzLW1vbml0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRFQUFnRztBQUNoRyxxRUFBK0U7QUFDL0Usa0VBQTZEO0FBQzdELHFDQUFtQztBQUNuQyxrREFBb0U7QUFFcEUsc0NBQXNDO0FBQ3RDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDeEMsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUM7SUFDN0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRixJQUFJLEdBQVksQ0FBQztBQUNqQixJQUFJLFVBQTRCLENBQUM7QUFDakMsSUFBSSxPQUFrQyxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCx1QkFBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDbEMsT0FBTyxHQUFHLElBQUksd0NBQXlCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDakYseUNBQXlDO1FBQ3pDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUF1QixDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQXVCLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxHQUFHLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO0lBQ2IsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN2QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNoQyxRQUFRO0lBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM1QywrQkFBb0IsQ0FBQyxFQUFFLENBQUMsK0NBQXNCLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDdkQsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLFlBQVksQ0FDbEI7UUFDRSxJQUFJLEVBQUUsTUFBTTtRQUNaLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLE1BQU0sRUFBRSxXQUFXO0tBQ3BCLEVBQ0QsR0FBRyxFQUNILENBQUMsVUFBVSxDQUFDLENBQ2IsQ0FBQztJQUNGLE9BQU87SUFDUCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsNENBQTRDO0lBQzVDLE1BQU0sSUFBQSxZQUFLLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEIsT0FBTztJQUNQLE1BQU0sd0JBQXdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDaEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLHdCQUF3QixVQUFVLENBQUMsQ0FBQztBQUM3RyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxQyxRQUFRO0lBQ1IsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBdUIsRUFBRSxDQUFDO0lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsK0JBQW9CLENBQUMsRUFBRSxDQUFDLCtDQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3ZELE1BQU07UUFDTixTQUFTLEVBQUUsWUFBWTtLQUN4QixDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsWUFBWSxDQUNsQjtRQUNFLElBQUksRUFBRSxNQUFNO1FBQ1osT0FBTyxFQUFFLGFBQWE7UUFDdEIsTUFBTSxFQUFFLFdBQVc7S0FDcEIsRUFDRCxHQUFHLEVBQ0gsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFDO0lBQ0YsT0FBTztJQUNQLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQiw0Q0FBNEM7SUFDNUMsTUFBTSxJQUFBLFlBQUssRUFBQyxJQUFJLENBQUMsQ0FBQztJQUVsQixPQUFPO0lBQ1AsTUFBTSx3QkFBd0IsR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNoRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsd0JBQXdCLFdBQVcsQ0FBQyxDQUFDO0lBQzVHLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDeEQsY0FBYyx3QkFBd0Isd0ZBQXdGLENBQy9ILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM3QixTQUFTLEtBQUssQ0FBQyxFQUFVLEVBQUUsT0FBZSxFQUFFLFNBQWU7SUFDekQsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNoQixPQUFPO1FBQ1AsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJMb2dFdmVudHNDb21tYW5kLCB0eXBlIEZpbHRlcmVkTG9nRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2xvZ3MvbG9ncy1tb25pdG9yJztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4uLy4uLy4uL2xpYi90b29sa2l0L2NsaS1pby1ob3N0JztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBNb2NrU2RrLCBtb2NrQ2xvdWRXYXRjaENsaWVudCB9IGZyb20gJy4uLy4uL3V0aWwvbW9jay1zZGsnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RyaXAgQU5TSSBjb2Rlc1xuY29uc3Qgc3RyaXBBbnNpID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgYW5zaVJlZ2V4ID0gL1xcdTAwMWJcXFtbMC05O10qW2EtekEtWl0vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGFuc2lSZWdleCwgJycpO1xufTtcblxubGV0IHNkazogTW9ja1NkaztcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xubGV0IG1vbml0b3I6IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3I7XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgQ2xpSW9Ib3N0Lmluc3RhbmNlKCkuaXNDSSA9IGZhbHNlO1xuICBtb25pdG9yID0gbmV3IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IobmV3IERhdGUoVDEwMCkpO1xuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKChjaHVuazogYW55KSA9PiB7XG4gICAgLy8gU3RyaXAgQU5TSSBjb2RlcyB3aGVuIGNhcHR1cmluZyBvdXRwdXRcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaShjaHVuaykgYXMgdW5rbm93biBhcyBib29sZWFuO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaXBBbnNpKGNodW5rLnRvU3RyaW5nKCkpIGFzIHVua25vd24gYXMgYm9vbGVhbjtcbiAgfSk7XG4gIHNkayA9IG5ldyBNb2NrU2RrKCk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgc3RkZXJyTW9jay5tb2NrUmVzdG9yZSgpO1xuICBtb25pdG9yLmRlYWN0aXZhdGUoKTtcbn0pO1xuXG50ZXN0KCdwcm9jZXNzIGV2ZW50cycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZXZlbnREYXRlID0gbmV3IERhdGUoVDAgKyAxMDIgKiAxMDAwKTtcbiAgbW9ja0Nsb3VkV2F0Y2hDbGllbnQub24oRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIGV2ZW50czogW2V2ZW50KDEwMiwgJ21lc3NhZ2UnLCBldmVudERhdGUpXSxcbiAgfSk7XG5cbiAgbW9uaXRvci5hZGRMb2dHcm91cHMoXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgYWNjb3VudDogJzExMTExMTExMTExJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgICBzZGssXG4gICAgWydsb2dncm91cCddLFxuICApO1xuICAvLyBXSEVOXG4gIG1vbml0b3IuYWN0aXZhdGUoKTtcbiAgLy8gbmVlZCB0aW1lIGZvciB0aGUgbG9nIHByb2Nlc3NpbmcgdG8gb2NjdXJcbiAgYXdhaXQgc2xlZXAoMTAwMCk7XG5cbiAgLy8gVEhFTlxuICBjb25zdCBleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcgPSBldmVudERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIGV4cGVjdChzdGRlcnJNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIGV4cGVjdChzdHJpcEFuc2koc3RkZXJyTW9jay5tb2NrLmNhbGxzWzBdWzBdKSkudG9Db250YWluKGBbbG9nZ3JvdXBdICR7ZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nfSBtZXNzYWdlYCk7XG59KTtcblxudGVzdCgncHJvY2VzcyB0cnVuY2F0ZWQgZXZlbnRzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShUMCArIDEwMiAqIDEwMDApO1xuICBjb25zdCBldmVudHM6IEZpbHRlcmVkTG9nRXZlbnRbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQoMTAyICsgaSwgJ21lc3NhZ2UnICsgaSwgZXZlbnREYXRlKSk7XG4gIH1cblxuICBtb2NrQ2xvdWRXYXRjaENsaWVudC5vbihGaWx0ZXJMb2dFdmVudHNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgZXZlbnRzLFxuICAgIG5leHRUb2tlbjogJ3NvbWUtdG9rZW4nLFxuICB9KTtcbiAgbW9uaXRvci5hZGRMb2dHcm91cHMoXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgYWNjb3VudDogJzExMTExMTExMTExJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgICBzZGssXG4gICAgWydsb2dncm91cCddLFxuICApO1xuICAvLyBXSEVOXG4gIG1vbml0b3IuYWN0aXZhdGUoKTtcbiAgLy8gbmVlZCB0aW1lIGZvciB0aGUgbG9nIHByb2Nlc3NpbmcgdG8gb2NjdXJcbiAgYXdhaXQgc2xlZXAoMTAwMCk7XG5cbiAgLy8gVEhFTlxuICBjb25zdCBleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcgPSBldmVudERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIGV4cGVjdChzdGRlcnJNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMTAxKTtcbiAgZXhwZWN0KHN0cmlwQW5zaShzdGRlcnJNb2NrLm1vY2suY2FsbHNbMF1bMF0pKS50b0NvbnRhaW4oYFtsb2dncm91cF0gJHtleHBlY3RlZExvY2FsZVRpbWVTdHJpbmd9IG1lc3NhZ2UwYCk7XG4gIGV4cGVjdChzdHJpcEFuc2koc3RkZXJyTW9jay5tb2NrLmNhbGxzWzEwMF1bMF0pKS50b0NvbnRhaW4oXG4gICAgYFtsb2dncm91cF0gJHtleHBlY3RlZExvY2FsZVRpbWVTdHJpbmd9ID4+PiBcXGB3YXRjaFxcYCBzaG93cyBvbmx5IHRoZSBmaXJzdCAxMDAgbG9nIG1lc3NhZ2VzIC0gdGhlIHJlc3QgaGF2ZSBiZWVuIHRydW5jYXRlZC4uLmAsXG4gICk7XG59KTtcblxuY29uc3QgVDAgPSAxNTk3ODM3MjMwNTA0O1xuY29uc3QgVDEwMCA9IFQwICsgMTAwICogMTAwMDtcbmZ1bmN0aW9uIGV2ZW50KG5yOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogRmlsdGVyZWRMb2dFdmVudCB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogYCR7bnJ9YCxcbiAgICBtZXNzYWdlLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLmdldFRpbWUoKSxcbiAgICBpbmdlc3Rpb25UaW1lOiB0aW1lc3RhbXAuZ2V0VGltZSgpLFxuICB9O1xufVxuIl19