@bitblit/ratchet-aws
Version:
Common tools for use with AWS browser and node
75 lines • 3.13 kB
JavaScript
import { CloudWatchLogsClient, DescribeLogStreamsCommand, FilterLogEventsCommand, } from '@aws-sdk/client-cloudwatch-logs';
import { Logger } from '@bitblit/ratchet-common/logger/logger';
import { StopWatch } from '@bitblit/ratchet-common/lang/stop-watch';
export class CloudWatchLogGroupRatchet {
logGroup;
awsCWLogs;
constructor(logGroup, awsCWLogs = new CloudWatchLogsClient({ region: 'us-east-1' })) {
this.logGroup = logGroup;
this.awsCWLogs = awsCWLogs;
}
get cloudWatchLogsClient() {
return this.awsCWLogs;
}
async readLogStreams(startTimestamp = null, endTimestamp = null) {
const params = {
logGroupName: this.logGroup,
orderBy: 'LastEventTime',
};
const rval = [];
do {
Logger.debug('Pulling more log streams (%d found so far)', rval.length);
const temp = await this.awsCWLogs.send(new DescribeLogStreamsCommand(params));
temp.logStreams.forEach((s) => {
if (s.lastEventTimestamp !== null) {
if (!startTimestamp || s.lastEventTimestamp >= startTimestamp) {
if (!endTimestamp || s.firstEventTimestamp <= endTimestamp) {
rval.push(s);
}
}
}
});
params.nextToken = temp.nextToken;
} while (params.nextToken);
Logger.debug('Found %d total, returning', rval.length);
return rval;
}
async readLogStreamNames(startTimestamp = null, endTimestamp = null) {
const streams = await this.readLogStreams(startTimestamp, endTimestamp);
const rval = streams.map((s) => s.logStreamName);
return rval;
}
async readEvents(filter, startTimestamp = null, endTimestamp = null, sortEvents = true, maxEvents = null) {
const sw = new StopWatch();
const params = {
logGroupName: this.logGroup,
endTime: endTimestamp,
startTime: startTimestamp,
};
if (filter) {
params.filterPattern = filter;
}
Logger.debug('Reading log events matching : %j', params);
let rval = [];
do {
Logger.debug('Pulling more log events (%d found so far) : %s', rval.length, sw.dump());
const temp = await this.awsCWLogs.send(new FilterLogEventsCommand(params));
rval = rval.concat(temp.events);
params.nextToken = temp.nextToken;
} while (!!params.nextToken && (!maxEvents || rval.length < maxEvents));
Logger.debug('Found %d total in %s', rval.length, sw.dump());
if (sortEvents) {
Logger.debug('Sorting events by timestamp');
rval = rval.sort((a, b) => {
let rval = a.timestamp - b.timestamp;
if (rval === 0) {
rval = a.message.localeCompare(b.message);
}
return rval;
});
}
sw.log();
return rval;
}
}
//# sourceMappingURL=cloud-watch-log-group-ratchet.js.map