UNPKG

@bitblit/ratchet-aws

Version:

Common tools for use with AWS browser and node

75 lines 3.13 kB
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