UNPKG

@bitblit/ratchet-aws

Version:

Common tools for use with AWS browser and node

57 lines 2.58 kB
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