@bitblit/ratchet-aws
Version:
Common tools for use with AWS browser and node
57 lines • 2.58 kB
JavaScript
import { CloudWatchClient, PutMetricDataCommand, StandardUnit, } from '@aws-sdk/client-cloudwatch';
import { DateTime } from 'luxon';
import { Logger } from '@bitblit/ratchet-common/logger/logger';
export class CloudWatchMetricsRatchet {
cw;
constructor(cloudWatch = null) {
this.cw = cloudWatch ? cloudWatch : new CloudWatchClient({ region: 'us-east-1', apiVersion: '2010-08-01' });
}
get cloudWatchClient() {
return this.cw;
}
async writeSingleMetric(namespace, metric, dims, unit = StandardUnit.None, value, timestampDate = new Date(), highResolution = false) {
const cwDims = [];
if (!!dims && dims.length > 0) {
dims.forEach((d) => {
cwDims.push({ Name: d.key, Value: d.value });
});
}
const storageResolution = highResolution ? 1 : 60;
const metricData = {
Namespace: namespace,
MetricData: [
{
MetricName: metric,
Dimensions: cwDims,
Unit: unit,
Value: value,
Timestamp: timestampDate,
StorageResolution: storageResolution,
},
],
};
Logger.silly('Writing metric to cw : %j', metricData);
const result = await this.cw.send(new PutMetricDataCommand(metricData));
Logger.silly('Result: %j', result);
return result;
}
async writeDynamoCountAsMinuteLevelMetric(req) {
Logger.info('Publishing %s / %s metric for %s UTC', req.namespace, req.metric, req.minuteUTC);
if (!!req.scan && !!req.query) {
throw new Error('Must send query or scan, but not both');
}
if (!req.scan && !req.query) {
throw new Error('You must specify either a scan or a query');
}
const cnt = req.query
? await req.dynamoRatchet.fullyExecuteQueryCount(req.query)
: await req.dynamoRatchet.fullyExecuteScanCount(req.scan);
Logger.debug('%s / %s for %s are %j', req.namespace, req.metric, req.minuteUTC, cnt);
const parseDateString = req.minuteUTC.split(' ').join('T') + ':00Z';
const parseDate = DateTime.fromISO(parseDateString).toJSDate();
const metricRes = await this.writeSingleMetric(req.namespace, req.metric, req.dims, StandardUnit.Count, cnt.count, parseDate, false);
Logger.debug('Metrics response: %j', metricRes);
return cnt.count;
}
}
//# sourceMappingURL=cloud-watch-metrics-ratchet.js.map