@trusthab/composable-resources
Version:
migrating https://github.com/knetikmedia/hab-api/tree/integration/app/resources/composable
78 lines (61 loc) • 2.05 kB
JavaScript
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);
};