UNPKG

@trusthab/composable-resources

Version:

migrating https://github.com/knetikmedia/hab-api/tree/integration/app/resources/composable

78 lines (61 loc) 2.05 kB
const composer = require('../mixin_loader'); const moment = require('moment'); const crypto = require('crypto'); const winston = require('winston'); const CloudWatchTransport = require('winston-aws-cloudwatch'); module.exports = (App) => { const { underscore } = require('inflected'); class CloudWatchPersistenceResource { static getPersistedList(query = {}) { throw new Error(`Not yet implemented`); } static getPersistedCount(query = {}) { throw new Error(`Not yet implemented`); } static persistCreate(data) { const Logger = setupLogger(data); const { source, timestamp, request_id, ...params } = data; params.severity = params.severity.toUpperCase(); params.customer = App.app_id; params.type = `${source}.habapi.${process.env.NODE_ENV}`; params.requestId = request_id || App.request_id; params["@timestamp"] = timestamp; params["@version"] = 1; params.fingerprint = crypto.createHash('md5') .update(params.message + params['@timestamp']).digest('hex'); const log_type = params.severity.toLowerCase(); Logger[log_type](params); return data; } static getPersistedRecord(id) { throw new Error(`Not yet implemented`); } persistUpdate() { throw new Error(`You can't update cloudwatch logs items`); } } function setupLogger(data) { const { source } = data; const date = moment().format('Y/MM/D/HH'); const log_group = `/hab/${process.env.NODE_ENV}/${source}`; const stream_name = date; const logger = new (winston.Logger)({ transports: [] }); const config = { logGroupName: log_group, logStreamName: stream_name, createLogGroup: true, createLogStream: true, awsConfig: { region: 'us-east-1' }, formatLog(item) { return JSON.stringify(item.meta); } }; logger.add(CloudWatchTransport, config); return logger; } return composer(CloudWatchPersistenceResource, App); };