aws-delivlib
Version:
A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.
90 lines • 12.1 kB
JavaScript
;
// eslint-disable-next-line import/no-extraneous-dependencies
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = exports.cloudwatch = void 0;
// eslint-disable-next-line import/no-extraneous-dependencies
const client_cloudwatch_1 = require("@aws-sdk/client-cloudwatch");
// export for tests
exports.cloudwatch = new client_cloudwatch_1.CloudWatch();
const logger = {
log: (line) => process.stdout.write(line),
};
/**
* Lambda function that reacts to an Amazon EventBridge event triggered by a 'CodePipeline Action Execution State Change'.
* The handler reads the event and sends off metrics to CloudWatch.
*/
async function handler(event) {
logger.log(`Received event: ${JSON.stringify(event)}`);
switch (event['detail-type']) {
case 'CodePipeline Pipeline Execution State Change':
await handleExecutionChange(event);
break;
case 'CodePipeline Action Execution State Change':
await handleActionChange(event);
break;
default: throw new Error(`Unhandled detail type ${event['detaill-type']}`);
}
}
exports.handler = handler;
async function handleExecutionChange(event) {
const pipelineName = event.detail.pipeline;
const state = event.detail.state;
let value;
switch (state) {
case 'FAILED':
value = 1;
break;
case 'SUCCEEDED':
value = 0;
break;
default: throw new Error(`Unsupported state: ${state}. Only FAILED and SUCCEEDED states are supported. ` +
'Others must be filtered out prior to this function.');
}
await putMetric(event, value, [
{ Name: 'Pipeline', Value: pipelineName },
]);
logger.log('Done');
}
async function handleActionChange(event) {
const pipelineName = event.detail.pipeline;
const action = event.detail.action;
const state = event.detail.state;
let value;
switch (state) {
case 'FAILED':
value = 1;
break;
case 'SUCCEEDED':
value = 0;
break;
default: throw new Error(`Unsupported state: ${state}. Only FAILED and SUCCEEDED states are supported. ` +
'Others must be filtered out prior to this function.');
}
await putMetric(event, value, [
{ Name: 'Pipeline', Value: pipelineName },
{ Name: 'Action', Value: action },
]);
logger.log('Done');
}
async function putMetric(event, value, dimensions) {
const metricNamespace = process.env.METRIC_NAMESPACE;
const metricName = process.env.METRIC_NAME;
const time = new Date(event.time);
if (!metricNamespace || !metricName) {
throw new Error('Both METRIC_NAMESPACE and METRIC_NAME environment variables must be set.');
}
const input = {
Namespace: metricNamespace,
MetricData: [
{
MetricName: metricName,
Value: value,
Dimensions: dimensions,
Timestamp: time,
},
],
};
logger.log(`Calling PutMetricData with payload: ${JSON.stringify(input)}`);
await exports.cloudwatch.putMetricData(input);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2F0Y2hlci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw2REFBNkQ7OztBQUc3RCw2REFBNkQ7QUFDN0Qsa0VBQThGO0FBbUI5RixtQkFBbUI7QUFDTixRQUFBLFVBQVUsR0FBRyxJQUFJLDhCQUFVLEVBQUUsQ0FBQztBQUMzQyxNQUFNLE1BQU0sR0FBRztJQUNiLEdBQUcsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0NBQ2xELENBQUM7QUFFRjs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWdCO0lBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzVCLEtBQUssOENBQThDO1lBQUUsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDL0YsS0FBSyw0Q0FBNEM7WUFBRSxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUMxRixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzVFO0FBQ0gsQ0FBQztBQVJELDBCQVFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEtBQXNDO0lBQ3pFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWpDLElBQUksS0FBYSxDQUFDO0lBQ2xCLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxRQUFRO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDaEMsS0FBSyxXQUFXO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDbkMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxvREFBb0Q7WUFDeEcscURBQXFELENBQUMsQ0FBQztLQUN4RDtJQUVELE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7S0FDMUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBR0QsS0FBSyxVQUFVLGtCQUFrQixDQUFDLEtBQW1DO0lBQ25FLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWpDLElBQUksS0FBYSxDQUFDO0lBQ2xCLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxRQUFRO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDaEMsS0FBSyxXQUFXO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDbkMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxvREFBb0Q7WUFDeEcscURBQXFELENBQUMsQ0FBQztLQUN4RDtJQUVELE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7UUFDekMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FDbEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFnQixFQUFFLEtBQWEsRUFBRSxVQUE0QjtJQUNwRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztLQUM3RjtJQUVELE1BQU0sS0FBSyxHQUE4QjtRQUN2QyxTQUFTLEVBQUUsZUFBZTtRQUMxQixVQUFVLEVBQUU7WUFDVjtnQkFDRSxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFM0UsTUFBTSxrQkFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7IENsb3VkV2F0Y2gsIERpbWVuc2lvbiwgUHV0TWV0cmljRGF0YUNvbW1hbmRJbnB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZHdhdGNoJztcblxuLy8gUGFydGlhbCB0eXBlIGZvciB0aGUgJ2RldGFpbCcgc2VjdGlvbiBvZiBhbiBldmVudCBmcm9tIEFtYXpvbiBFdmVudEJyaWRnZSBmb3IgJ0NvZGVQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ1xuLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2V2ZW50LXR5cGVzLmh0bWwjY29kZXBpcGVsaW5lLWV2ZW50LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uU3RhdGVDaGFuZ2VFdmVudCB7XG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRlOiAnU1RBUlRFRCcgfCAnQ0FOQ0VMRUQnIHwgJ0ZBSUxFRCcgfCAnU1VDQ0VFREVEJztcbn1cblxuLy8gUGFydGlhbCB0eXBlIGZvciB0aGUgJ2RldGFpbCcgc2VjdGlvbiBvZiBhbiBldmVudCBmcm9tIEFtYXpvbiBFdmVudEJyaWRnZSBmb3IgJ0NvZGVQaXBlbGluZSBBY3Rpb24gRXhlY3V0aW9uIFN0YXRlIENoYW5nZSdcbi8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9ldmVudC10eXBlcy5odG1sI2NvZGVwaXBlbGluZS1ldmVudC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblN0YXRlQ2hhbmdlRXZlbnQgZXh0ZW5kcyBFeGVjdXRpb25TdGF0ZUNoYW5nZUV2ZW50IHtcbiAgcmVhZG9ubHkgYWN0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIExhbWJkYUV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQgPSBBV1NMYW1iZGEuRXZlbnRCcmlkZ2VFdmVudDwnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLCBFeGVjdXRpb25TdGF0ZUNoYW5nZUV2ZW50PjtcbmV4cG9ydCB0eXBlIExhbWJkYUFjdGlvblN0YXRlQ2hhbmdlRXZlbnQgPSBBV1NMYW1iZGEuRXZlbnRCcmlkZ2VFdmVudDwnQ29kZVBpcGVsaW5lIEFjdGlvbiBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJywgQWN0aW9uU3RhdGVDaGFuZ2VFdmVudD47XG5leHBvcnQgdHlwZSBFdmVudFR5cGUgPSBMYW1iZGFFeGVjdXRpb25TdGF0ZUNoYW5nZUV2ZW50IHwgTGFtYmRhQWN0aW9uU3RhdGVDaGFuZ2VFdmVudDtcblxuLy8gZXhwb3J0IGZvciB0ZXN0c1xuZXhwb3J0IGNvbnN0IGNsb3Vkd2F0Y2ggPSBuZXcgQ2xvdWRXYXRjaCgpO1xuY29uc3QgbG9nZ2VyID0ge1xuICBsb2c6IChsaW5lOiBzdHJpbmcpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKGxpbmUpLFxufTtcblxuLyoqXG4gKiBMYW1iZGEgZnVuY3Rpb24gdGhhdCByZWFjdHMgdG8gYW4gQW1hem9uIEV2ZW50QnJpZGdlIGV2ZW50IHRyaWdnZXJlZCBieSBhICdDb2RlUGlwZWxpbmUgQWN0aW9uIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLlxuICogVGhlIGhhbmRsZXIgcmVhZHMgdGhlIGV2ZW50IGFuZCBzZW5kcyBvZmYgbWV0cmljcyB0byBDbG91ZFdhdGNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogRXZlbnRUeXBlKSB7XG4gIGxvZ2dlci5sb2coYFJlY2VpdmVkIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gKTtcblxuICBzd2l0Y2ggKGV2ZW50WydkZXRhaWwtdHlwZSddKSB7XG4gICAgY2FzZSAnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnOiBhd2FpdCBoYW5kbGVFeGVjdXRpb25DaGFuZ2UoZXZlbnQpOyBicmVhaztcbiAgICBjYXNlICdDb2RlUGlwZWxpbmUgQWN0aW9uIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnOiBhd2FpdCBoYW5kbGVBY3Rpb25DaGFuZ2UoZXZlbnQpOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBkZXRhaWwgdHlwZSAke2V2ZW50WydkZXRhaWxsLXR5cGUnXX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFeGVjdXRpb25DaGFuZ2UoZXZlbnQ6IExhbWJkYUV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQpIHtcbiAgY29uc3QgcGlwZWxpbmVOYW1lID0gZXZlbnQuZGV0YWlsLnBpcGVsaW5lO1xuICBjb25zdCBzdGF0ZSA9IGV2ZW50LmRldGFpbC5zdGF0ZTtcblxuICBsZXQgdmFsdWU6IG51bWJlcjtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgJ0ZBSUxFRCc6IHZhbHVlID0gMTsgYnJlYWs7XG4gICAgY2FzZSAnU1VDQ0VFREVEJzogdmFsdWUgPSAwOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHN0YXRlOiAke3N0YXRlfS4gT25seSBGQUlMRUQgYW5kIFNVQ0NFRURFRCBzdGF0ZXMgYXJlIHN1cHBvcnRlZC4gYCArXG4gICAgJ090aGVycyBtdXN0IGJlIGZpbHRlcmVkIG91dCBwcmlvciB0byB0aGlzIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgYXdhaXQgcHV0TWV0cmljKGV2ZW50LCB2YWx1ZSwgW1xuICAgIHsgTmFtZTogJ1BpcGVsaW5lJywgVmFsdWU6IHBpcGVsaW5lTmFtZSB9LFxuICBdKTtcblxuICBsb2dnZXIubG9nKCdEb25lJyk7XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWN0aW9uQ2hhbmdlKGV2ZW50OiBMYW1iZGFBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50KSB7XG4gIGNvbnN0IHBpcGVsaW5lTmFtZSA9IGV2ZW50LmRldGFpbC5waXBlbGluZTtcbiAgY29uc3QgYWN0aW9uID0gZXZlbnQuZGV0YWlsLmFjdGlvbjtcbiAgY29uc3Qgc3RhdGUgPSBldmVudC5kZXRhaWwuc3RhdGU7XG5cbiAgbGV0IHZhbHVlOiBudW1iZXI7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlICdGQUlMRUQnOiB2YWx1ZSA9IDE7IGJyZWFrO1xuICAgIGNhc2UgJ1NVQ0NFRURFRCc6IHZhbHVlID0gMDsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzdGF0ZTogJHtzdGF0ZX0uIE9ubHkgRkFJTEVEIGFuZCBTVUNDRUVERUQgc3RhdGVzIGFyZSBzdXBwb3J0ZWQuIGAgK1xuICAgICdPdGhlcnMgbXVzdCBiZSBmaWx0ZXJlZCBvdXQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIGF3YWl0IHB1dE1ldHJpYyhldmVudCwgdmFsdWUsIFtcbiAgICB7IE5hbWU6ICdQaXBlbGluZScsIFZhbHVlOiBwaXBlbGluZU5hbWUgfSxcbiAgICB7IE5hbWU6ICdBY3Rpb24nLCBWYWx1ZTogYWN0aW9uIH0sXG4gIF0pO1xuXG4gIGxvZ2dlci5sb2coJ0RvbmUnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHV0TWV0cmljKGV2ZW50OiBFdmVudFR5cGUsIHZhbHVlOiBudW1iZXIsIGRpbWVuc2lvbnM6IEFycmF5PERpbWVuc2lvbj4pIHtcbiAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvY2Vzcy5lbnYuTUVUUklDX05BTUVTUEFDRTtcbiAgY29uc3QgbWV0cmljTmFtZSA9IHByb2Nlc3MuZW52Lk1FVFJJQ19OQU1FO1xuICBjb25zdCB0aW1lID0gbmV3IERhdGUoZXZlbnQudGltZSk7XG5cbiAgaWYgKCFtZXRyaWNOYW1lc3BhY2UgfHwgIW1ldHJpY05hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggTUVUUklDX05BTUVTUEFDRSBhbmQgTUVUUklDX05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG11c3QgYmUgc2V0LicpO1xuICB9XG5cbiAgY29uc3QgaW5wdXQ6IFB1dE1ldHJpY0RhdGFDb21tYW5kSW5wdXQgPSB7XG4gICAgTmFtZXNwYWNlOiBtZXRyaWNOYW1lc3BhY2UsXG4gICAgTWV0cmljRGF0YTogW1xuICAgICAge1xuICAgICAgICBNZXRyaWNOYW1lOiBtZXRyaWNOYW1lLFxuICAgICAgICBWYWx1ZTogdmFsdWUsXG4gICAgICAgIERpbWVuc2lvbnM6IGRpbWVuc2lvbnMsXG4gICAgICAgIFRpbWVzdGFtcDogdGltZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBsb2dnZXIubG9nKGBDYWxsaW5nIFB1dE1ldHJpY0RhdGEgd2l0aCBwYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KGlucHV0KX1gKTtcblxuICBhd2FpdCBjbG91ZHdhdGNoLnB1dE1ldHJpY0RhdGEoaW5wdXQpO1xufSJdfQ==