in code/sample-app/src/lib/logging/logger.js [198:274]
Dimensions: buildDimensions(service, options),
Timestamp: new Date(),
Unit: unit,
Value: value
},
],
Namespace: namespace
};
return metric
}
/**
* Transforms arguments into dimensions to EMF.
*
* @property {String} SERVICE_NAME Environment variable defining the service name to be used as metric dimension. This variable can be defined in the SAM template.
*
* @param {Object} dimensions Dict containing metric dimensions and namespace. Optional. (e.g. {customer: customerId})
*
* @returns {Object} Custom Dimensions object.
*/
const buildEMFDimensions = (dimensions) => {
let service = process.env.SERVICE_NAME !== undefined ? process.env.SERVICE_NAME : 'service_undefined'
if (dimensions) {
if (dimensions.service !== undefined) service = dimensions.service
delete dimensions.namespace
delete dimensions.service
}
return dimensions
}
/**
* Transforms arguments into StatsD Metric Data.
*
* @property {String} SERVICE_NAME Environment variable defining the service name to be used as metric dimension. This variable can be defined in the SAM template.
*
* @param {String} name Metric name.
* @param {MetricUnit} unit Metric unit enum value (e.g. MetricUnit.Seconds). Metric units are available via MetricUnit Enum.
* @param {Number} value Metric value.
* @param {Object} options Dict containing metric dimensions and namespace. Optional. (e.g. {customer: customerId})
*
* @returns {String} Custom Metric object. MONITORING|<metric_value>|<metric_unit>|<metric_name>|<namespace>|<dimensions>
*/
const buildStatsDMetricData = (name, unit, value, options) => {
let namespace = 'MonitoringApp',
service = process.env.SERVICE_NAME !== undefined ? process.env.SERVICE_NAME : 'service_undefined'
if (options) {
if (options.namespace !== undefined) namespace = options.namespace
if (options.service !== undefined) service = options.service
delete options.namespace
delete options.service
}
return `MONITORING|${value}|${unit}|${name}|${namespace}|${buildDimensionsStatsDFormat(service, options)}`
}
/**
* Builds correct format for custom metric dimensions from args.
*
* CloudWatch accepts a max of 10 dimensions per metric
* we include service name as a dimension
* so we take up to 9 values as additional dimensions
* before we return our dimensions array
*
* @param {JSON} service Service dimension. (e.g. {service: 'value'})
* @param {JSON} extra_dimensions Extra metric dimensions and. Optional. (e.g. {customer: customerId})
*
* @returns {Array} Dimensions in the form of [{Name: 'dim1', Value: 'val1'}, {Name: 'dim10', Value: 'val10'}]
*/
const buildDimensions = (service, extra_dimensions) => {
let dimensions = [{ Name: 'service', Value: service }]
if (extra_dimensions) {
Object.keys(extra_dimensions).forEach(k => {