aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
88 lines • 11.7 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy1tb25pdG9yLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2dzLW1vbml0b3IudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDRFQUFnRztBQUNoRyxxRUFBK0U7QUFDL0Usa0VBQTZEO0FBQzdELHFDQUFtQztBQUNuQyxrREFBb0U7QUFFcEUsc0NBQXNDO0FBQ3RDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDeEMsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUM7SUFDN0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRixJQUFJLEdBQVksQ0FBQztBQUNqQixJQUFJLFVBQTRCLENBQUM7QUFDakMsSUFBSSxPQUFrQyxDQUFDO0FBQ3ZDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCx1QkFBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDbEMsT0FBTyxHQUFHLElBQUksd0NBQXlCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDakYseUNBQXlDO1FBQ3pDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUF1QixDQUFDO1FBQ2hELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQXVCLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxHQUFHLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLENBQUMs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QUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDeEQsY0FBYyx3QkFBd0Isd0ZBQXdGLENBQy9ILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQztBQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM3QixTQUFTLEtBQUssQ0FBQyxFQUFVLEVBQUUsT0FBZSxFQUFFLFNBQWU7SUFDekQsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNoQixPQUFPO1FBQ1AsU0FBUyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7UUFDOUIsYUFBYSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUU7S0FDbkMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJMb2dFdmVudHNDb21tYW5kLCB0eXBlIEZpbHRlcmVkTG9nRXZlbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWR3YXRjaC1sb2dzJztcbmltcG9ydCB7IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2xvZ3MvbG9ncy1tb25pdG9yJztcbmltcG9ydCB7IENsaUlvSG9zdCB9IGZyb20gJy4uLy4uLy4uL2xpYi90b29sa2l0L2NsaS1pby1ob3N0JztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBNb2NrU2RrLCBtb2NrQ2xvdWRXYXRjaENsaWVudCB9IGZyb20gJy4uLy4uL3V0aWwvbW9jay1zZGsnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RyaXAgQU5TSSBjb2Rlc1xuY29uc3Qgc3RyaXBBbnNpID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgYW5zaVJlZ2V4ID0gL1xcdTAwMWJcXFtbMC05O10qW2EtekEtWl0vZztcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGFuc2lSZWdleCwgJycpO1xufTtcblxubGV0IHNkazogTW9ja1NkaztcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xubGV0IG1vbml0b3I6IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3I7XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgQ2xpSW9Ib3N0Lmluc3RhbmNlKCkuaXNDSSA9IGZhbHNlO1xuICBtb25pdG9yID0gbmV3IENsb3VkV2F0Y2hMb2dFdmVudE1vbml0b3IobmV3IERhdGUoVDEwMCkpO1xuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKChjaHVuazogYW55KSA9PiB7XG4gICAgLy8gU3RyaXAgQU5TSSBjb2RlcyB3aGVuIGNhcHR1cmluZyBvdXRwdXRcbiAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHN0cmlwQW5zaShjaHVuaykgYXMgdW5rbm93biBhcyBib29sZWFuO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaXBBbnNpKGNodW5rLnRvU3RyaW5nKCkpIGFzIHVua25vd24gYXMgYm9vbGVhbjtcbiAgfSk7XG4gIHNkayA9IG5ldyBNb2NrU2RrKCk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgc3RkZXJyTW9jay5tb2NrUmVzdG9yZSgpO1xuICBtb25pdG9yLmRlYWN0aXZhdGUoKTtcbn0pO1xuXG50ZXN0KCdwcm9jZXNzIGV2ZW50cycsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgZXZlbnREYXRlID0gbmV3IERhdGUoVDAgKyAxMDIgKiAxMDAwKTtcbiAgbW9ja0Nsb3VkV2F0Y2hDbGllbnQub24oRmlsdGVyTG9nRXZlbnRzQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIGV2ZW50czogW2V2ZW50KDEwMiwgJ21lc3NhZ2UnLCBldmVudERhdGUpXSxcbiAgfSk7XG5cbiAgbW9uaXRvci5hZGRMb2dHcm91cHMoXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgYWNjb3VudDogJzExMTExMTExMTExJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgICBzZGssXG4gICAgWydsb2dncm91cCddLFxuICApO1xuICAvLyBXSEVOXG4gIG1vbml0b3IuYWN0aXZhdGUoKTtcbiAgLy8gbmVlZCB0aW1lIGZvciB0aGUgbG9nIHByb2Nlc3NpbmcgdG8gb2NjdXJcbiAgYXdhaXQgc2xlZXAoMTAwMCk7XG5cbiAgLy8gVEhFTlxuICBjb25zdCBleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcgPSBldmVudERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIGV4cGVjdChzdGRlcnJNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIGV4cGVjdChzdHJpcEFuc2koc3RkZXJyTW9jay5tb2NrLmNhbGxzWzBdWzBdKSkudG9Db250YWluKGBbbG9nZ3JvdXBdICR7ZXhwZWN0ZWRMb2NhbGVUaW1lU3RyaW5nfSBtZXNzYWdlYCk7XG59KTtcblxudGVzdCgncHJvY2VzcyB0cnVuY2F0ZWQgZXZlbnRzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBldmVudERhdGUgPSBuZXcgRGF0ZShUMCArIDEwMiAqIDEwMDApO1xuICBjb25zdCBldmVudHM6IEZpbHRlcmVkTG9nRXZlbnRbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQoMTAyICsgaSwgJ21lc3NhZ2UnICsgaSwgZXZlbnREYXRlKSk7XG4gIH1cblxuICBtb2NrQ2xvdWRXYXRjaENsaWVudC5vbihGaWx0ZXJMb2dFdmVudHNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgZXZlbnRzLFxuICAgIG5leHRUb2tlbjogJ3NvbWUtdG9rZW4nLFxuICB9KTtcbiAgbW9uaXRvci5hZGRMb2dHcm91cHMoXG4gICAge1xuICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgYWNjb3VudDogJzExMTExMTExMTExJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgfSxcbiAgICBzZGssXG4gICAgWydsb2dncm91cCddLFxuICApO1xuICAvLyBXSEVOXG4gIG1vbml0b3IuYWN0aXZhdGUoKTtcbiAgLy8gbmVlZCB0aW1lIGZvciB0aGUgbG9nIHByb2Nlc3NpbmcgdG8gb2NjdXJcbiAgYXdhaXQgc2xlZXAoMTAwMCk7XG5cbiAgLy8gVEhFTlxuICBjb25zdCBleHBlY3RlZExvY2FsZVRpbWVTdHJpbmcgPSBldmVudERhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gIGV4cGVjdChzdGRlcnJNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMTAxKTtcbiAgZXhwZWN0KHN0cmlwQW5zaShzdGRlcnJNb2NrLm1vY2suY2FsbHNbMF1bMF0pKS50b0NvbnRhaW4oYFtsb2dncm91cF0gJHtleHBlY3RlZExvY2FsZVRpbWVTdHJpbmd9IG1lc3NhZ2UwYCk7XG4gIGV4cGVjdChzdHJpcEFuc2koc3RkZXJyTW9jay5tb2NrLmNhbGxzWzEwMF1bMF0pKS50b0NvbnRhaW4oXG4gICAgYFtsb2dncm91cF0gJHtleHBlY3RlZExvY2FsZVRpbWVTdHJpbmd9ID4+PiBcXGB3YXRjaFxcYCBzaG93cyBvbmx5IHRoZSBmaXJzdCAxMDAgbG9nIG1lc3NhZ2VzIC0gdGhlIHJlc3QgaGF2ZSBiZWVuIHRydW5jYXRlZC4uLmAsXG4gICk7XG59KTtcblxuY29uc3QgVDAgPSAxNTk3ODM3MjMwNTA0O1xuY29uc3QgVDEwMCA9IFQwICsgMTAwICogMTAwMDtcbmZ1bmN0aW9uIGV2ZW50KG5yOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZywgdGltZXN0YW1wOiBEYXRlKTogRmlsdGVyZWRMb2dFdmVudCB7XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogYCR7bnJ9YCxcbiAgICBtZXNzYWdlLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLmdldFRpbWUoKSxcbiAgICBpbmdlc3Rpb25UaW1lOiB0aW1lc3RhbXAuZ2V0VGltZSgpLFxuICB9O1xufVxuIl19