cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
88 lines • 9.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.capitalizeFirstLetter = capitalizeFirstLetter;
exports.capitalizeFirstLetterOnly = capitalizeFirstLetterOnly;
exports.removeBracketsWithDynamicLabels = removeBracketsWithDynamicLabels;
exports.getHashForMetricExpressionId = getHashForMetricExpressionId;
exports.getShortHash = getShortHash;
/**
* matches all strings enclosed in brackets
*/
const STRINGS_IN_BRACKETS_REGEXP = /(\(.+?\))/g;
/**
* matches one or more whitespace characters
*/
const ONE_OR_MORE_WHITESPACE_REGEXP = /\s+/g;
/**
* something we can use to identify brackets with dynamic labels
*/
const DYNAMIC_LABEL_MARKER = "${";
/**
* Capitalize first letter, leave the rest as-is.
* @param str string to process
*/
function capitalizeFirstLetter(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
/**
* Capitalize first letter, make the rest lower-case.
* @param str string to process
*/
function capitalizeFirstLetterOnly(str) {
return capitalizeFirstLetter(str.toLowerCase());
}
/**
* Removes pieces of string that are enclosed in brackets and contain placeholders.
* For example, for "label (avg: ${AVG})" it returns "label".
* This is useful for annotations, because they do not replace the placeholders properly.
* @param label label to process
*/
function removeBracketsWithDynamicLabels(label) {
let result = label;
const stringsInBrackets = label.match(STRINGS_IN_BRACKETS_REGEXP);
if (stringsInBrackets) {
for (const stringInBrackets of stringsInBrackets) {
if (stringInBrackets.includes(DYNAMIC_LABEL_MARKER)) {
// if this bracket contains dynamic label, we just remove it
result = result.replace(stringInBrackets, "");
}
}
}
// we can end up with some extra spaces, so let's fix it
result = result.replace(ONE_OR_MORE_WHITESPACE_REGEXP, " ").trim();
return result;
}
/**
* Simple hashing function to generate hash-based metric expression ID.
* This function is insecure and outputs a hexadecimal string.
* @param str string to encode
* @return hexadecimal hash
*/
function getHashForMetricExpressionId(str) {
return getShortHash(str);
}
/**
* Simple hashing function to generate short hash for the given string.
* This function is insecure and outputs a hexadecimal string.
* @param str string to encode
* @return hexadecimal hash
*/
function getShortHash(str) {
const seed = 31;
let h1 = 0xdeadbeef ^ seed;
let h2 = 0x41c6ce57 ^ seed;
for (let i = 0, ch; i < str.length; i++) {
ch = str.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 =
Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^
Math.imul(h2 ^ (h2 >>> 13), 3266489909);
h2 =
Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^
Math.imul(h1 ^ (h1 >>> 13), 3266489909);
const result = 4294967296 * (2097151 & h2) + (h1 >>> 0);
return result.toString(16);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0cmluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsc0RBRUM7QUFNRCw4REFFQztBQVFELDBFQWNDO0FBUUQsb0VBRUM7QUFRRCxvQ0FpQkM7QUFwRkQ7O0dBRUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLFlBQVksQ0FBQztBQUNoRDs7R0FFRztBQUNILE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDO0FBQzdDOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFFbEM7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsR0FBVztJQUMvQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsR0FBVztJQUNuRCxPQUFPLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLCtCQUErQixDQUFDLEtBQWE7SUFDM0QsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ25CLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2xFLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNqRCxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELDREQUE0RDtnQkFDNUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0Qsd0RBQXdEO0lBQ3hELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25FLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLEdBQVc7SUFDdEQsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLEdBQVc7SUFDdEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsSUFBSSxFQUFFLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN4QyxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELEVBQUU7UUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUMsRUFBRTtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztZQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1hdGNoZXMgYWxsIHN0cmluZ3MgZW5jbG9zZWQgaW4gYnJhY2tldHNcbiAqL1xuY29uc3QgU1RSSU5HU19JTl9CUkFDS0VUU19SRUdFWFAgPSAvKFxcKC4rP1xcKSkvZztcbi8qKlxuICogbWF0Y2hlcyBvbmUgb3IgbW9yZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcbiAqL1xuY29uc3QgT05FX09SX01PUkVfV0hJVEVTUEFDRV9SRUdFWFAgPSAvXFxzKy9nO1xuLyoqXG4gKiBzb21ldGhpbmcgd2UgY2FuIHVzZSB0byBpZGVudGlmeSBicmFja2V0cyB3aXRoIGR5bmFtaWMgbGFiZWxzXG4gKi9cbmNvbnN0IERZTkFNSUNfTEFCRUxfTUFSS0VSID0gXCIke1wiO1xuXG4vKipcbiAqIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyLCBsZWF2ZSB0aGUgcmVzdCBhcy1pcy5cbiAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemVGaXJzdExldHRlcihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIsIG1ha2UgdGhlIHJlc3QgbG93ZXItY2FzZS5cbiAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemVGaXJzdExldHRlck9ubHkoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHN0ci50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIHBpZWNlcyBvZiBzdHJpbmcgdGhhdCBhcmUgZW5jbG9zZWQgaW4gYnJhY2tldHMgYW5kIGNvbnRhaW4gcGxhY2Vob2xkZXJzLlxuICogRm9yIGV4YW1wbGUsIGZvciBcImxhYmVsIChhdmc6ICR7QVZHfSlcIiBpdCByZXR1cm5zIFwibGFiZWxcIi5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBhbm5vdGF0aW9ucywgYmVjYXVzZSB0aGV5IGRvIG5vdCByZXBsYWNlIHRoZSBwbGFjZWhvbGRlcnMgcHJvcGVybHkuXG4gKiBAcGFyYW0gbGFiZWwgbGFiZWwgdG8gcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHNXaXRoRHluYW1pY0xhYmVscyhsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9IGxhYmVsO1xuICBjb25zdCBzdHJpbmdzSW5CcmFja2V0cyA9IGxhYmVsLm1hdGNoKFNUUklOR1NfSU5fQlJBQ0tFVFNfUkVHRVhQKTtcbiAgaWYgKHN0cmluZ3NJbkJyYWNrZXRzKSB7XG4gICAgZm9yIChjb25zdCBzdHJpbmdJbkJyYWNrZXRzIG9mIHN0cmluZ3NJbkJyYWNrZXRzKSB7XG4gICAgICBpZiAoc3RyaW5nSW5CcmFja2V0cy5pbmNsdWRlcyhEWU5BTUlDX0xBQkVMX01BUktFUikpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBicmFja2V0IGNvbnRhaW5zIGR5bmFtaWMgbGFiZWwsIHdlIGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHN0cmluZ0luQnJhY2tldHMsIFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyB3ZSBjYW4gZW5kIHVwIHdpdGggc29tZSBleHRyYSBzcGFjZXMsIHNvIGxldCdzIGZpeCBpdFxuICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShPTkVfT1JfTU9SRV9XSElURVNQQUNFX1JFR0VYUCwgXCIgXCIpLnRyaW0oKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBTaW1wbGUgaGFzaGluZyBmdW5jdGlvbiB0byBnZW5lcmF0ZSBoYXNoLWJhc2VkIG1ldHJpYyBleHByZXNzaW9uIElELlxuICogVGhpcyBmdW5jdGlvbiBpcyBpbnNlY3VyZSBhbmQgb3V0cHV0cyBhIGhleGFkZWNpbWFsIHN0cmluZy5cbiAqIEBwYXJhbSBzdHIgc3RyaW5nIHRvIGVuY29kZVxuICogQHJldHVybiBoZXhhZGVjaW1hbCBoYXNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYXNoRm9yTWV0cmljRXhwcmVzc2lvbklkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFNob3J0SGFzaChzdHIpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBoYXNoaW5nIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHNob3J0IGhhc2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGluc2VjdXJlIGFuZCBvdXRwdXRzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLlxuICogQHBhcmFtIHN0ciBzdHJpbmcgdG8gZW5jb2RlXG4gKiBAcmV0dXJuIGhleGFkZWNpbWFsIGhhc2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNob3J0SGFzaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZWQgPSAzMTtcbiAgbGV0IGgxID0gMHhkZWFkYmVlZiBeIHNlZWQ7XG4gIGxldCBoMiA9IDB4NDFjNmNlNTcgXiBzZWVkO1xuICBmb3IgKGxldCBpID0gMCwgY2g7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjaCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIGgxID0gTWF0aC5pbXVsKGgxIF4gY2gsIDI2NTQ0MzU3NjEpO1xuICAgIGgyID0gTWF0aC5pbXVsKGgyIF4gY2gsIDE1OTczMzQ2NzcpO1xuICB9XG4gIGgxID1cbiAgICBNYXRoLmltdWwoaDEgXiAoaDEgPj4+IDE2KSwgMjI0NjgyMjUwNykgXlxuICAgIE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTMpLCAzMjY2NDg5OTA5KTtcbiAgaDIgPVxuICAgIE1hdGguaW11bChoMiBeIChoMiA+Pj4gMTYpLCAyMjQ2ODIyNTA3KSBeXG4gICAgTWF0aC5pbXVsKGgxIF4gKGgxID4+PiAxMyksIDMyNjY0ODk5MDkpO1xuICBjb25zdCByZXN1bHQgPSA0Mjk0OTY3Mjk2ICogKDIwOTcxNTEgJiBoMikgKyAoaDEgPj4+IDApO1xuICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKDE2KTtcbn1cbiJdfQ==