cdk-monitoring-constructs
Version:
[](https://badge.fury.io/js/cdk-monitoring-constructs) [](https://m
71 lines • 9.5 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BitmapWidgetRenderingSupport = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const path = require("path");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
const aws_logs_1 = require("aws-cdk-lib/aws-logs");
const constructs_1 = require("constructs");
const CustomWidget_1 = require("./CustomWidget");
/**
* Support for rendering bitmap widgets on the server side.
* It is a custom widget lambda with some additional roles and helper methods.
*/
class BitmapWidgetRenderingSupport extends constructs_1.Construct {
constructor(scope, id) {
super(scope, id);
this.handler = new aws_lambda_1.Function(this, "Lambda", {
code: aws_lambda_1.Code.fromAsset(path.join(__dirname, "..", "..", "..", "assets", "BitmapWidgetRenderingSupport")),
description: "Custom Widget Render for Bitmap Widgets (cdk-monitoring-constructs)",
handler: "index.handler",
memorySize: 128,
runtime: (0, aws_lambda_1.determineLatestNodeRuntime)(this),
timeout: aws_cdk_lib_1.Duration.seconds(60),
logGroup: new aws_logs_1.LogGroup(this, "LambdaLogs", {
retention: aws_logs_1.RetentionDays.ONE_DAY,
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE,
}),
});
this.handler.addToRolePolicy(new aws_iam_1.PolicyStatement({
actions: ["cloudwatch:GetMetricWidgetImage"],
effect: aws_iam_1.Effect.ALLOW,
resources: ["*"],
}));
aws_cdk_lib_1.Tags.of(this.handler).add("cw-custom-widget", "describe:readOnly");
}
asBitmap(widget) {
const props = this.getWidgetProperties(widget);
// remove the title from the graph and remember it
const { title, ...graph } = props;
return new CustomWidget_1.CustomWidget({
// move the original title here
title,
width: widget.width,
height: widget.height,
// empty the inner title since we already have it on the whole widget
handlerParams: { graph: { ...graph, title: " " } },
handler: this.handler,
updateOnRefresh: true,
updateOnResize: true,
updateOnTimeRangeChange: true,
});
}
getWidgetProperties(widget) {
const graphs = widget.toJson();
if (graphs.length != 1) {
throw new Error("Number of objects in the widget definition must be exactly one.");
}
const graph = graphs[0];
if (!graph.properties) {
throw new Error("No graph properties: " + graph);
}
return graph.properties;
}
}
exports.BitmapWidgetRenderingSupport = BitmapWidgetRenderingSupport;
_a = JSII_RTTI_SYMBOL_1;
BitmapWidgetRenderingSupport[_a] = { fqn: "cdk-monitoring-constructs.BitmapWidgetRenderingSupport", version: "10.0.0" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0bWFwV2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiQml0bWFwV2lkZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBRTdCLDZDQUE0RDtBQUU1RCxpREFBOEQ7QUFDOUQsdURBS2dDO0FBQ2hDLG1EQUErRDtBQUMvRCwyQ0FBdUM7QUFFdkMsaURBQThDO0FBRTlDOzs7R0FHRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFHekQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzFDLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsSUFBSSxDQUFDLElBQUksQ0FDUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osUUFBUSxFQUNSLDhCQUE4QixDQUMvQixDQUNGO1lBQ0QsV0FBVyxFQUNULHFFQUFxRTtZQUN2RSxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSxJQUFBLHVDQUEwQixFQUFDLElBQUksQ0FBQztZQUN6QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDekMsU0FBUyxFQUFFLHdCQUFhLENBQUMsT0FBTztnQkFDaEMsYUFBYSxFQUFFLDJCQUFhLENBQUMsMEJBQTBCO2FBQ3hELENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FDMUIsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxDQUFDLGlDQUFpQyxDQUFDO1lBQzVDLE1BQU0sRUFBRSxnQkFBTSxDQUFDLEtBQUs7WUFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsa0JBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBZTtRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0Msa0RBQWtEO1FBQ2xELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFbEMsT0FBTyxJQUFJLDJCQUFZLENBQUM7WUFDdEIsK0JBQStCO1lBQy9CLEtBQUs7WUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLHFFQUFxRTtZQUNyRSxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbEQsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHVCQUF1QixFQUFFLElBQUk7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE1BQWU7UUFDM0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxDQUNsRSxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUMxQixDQUFDOztBQXZFSCxvRUF3RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5LCBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJV2lkZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCI7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBkZXRlcm1pbmVMYXRlc3ROb2RlUnVudGltZSxcbiAgRnVuY3Rpb24sXG4gIElGdW5jdGlvbixcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBDdXN0b21XaWRnZXQgfSBmcm9tIFwiLi9DdXN0b21XaWRnZXRcIjtcblxuLyoqXG4gKiBTdXBwb3J0IGZvciByZW5kZXJpbmcgYml0bWFwIHdpZGdldHMgb24gdGhlIHNlcnZlciBzaWRlLlxuICogSXQgaXMgYSBjdXN0b20gd2lkZ2V0IGxhbWJkYSB3aXRoIHNvbWUgYWRkaXRpb25hbCByb2xlcyBhbmQgaGVscGVyIG1ldGhvZHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCaXRtYXBXaWRnZXRSZW5kZXJpbmdTdXBwb3J0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogSUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IEZ1bmN0aW9uKHRoaXMsIFwiTGFtYmRhXCIsIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICAgIFwiLi5cIixcbiAgICAgICAgICBcIi4uXCIsXG4gICAgICAgICAgXCIuLlwiLFxuICAgICAgICAgIFwiYXNzZXRzXCIsXG4gICAgICAgICAgXCJCaXRtYXBXaWRnZXRSZW5kZXJpbmdTdXBwb3J0XCIsXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQ3VzdG9tIFdpZGdldCBSZW5kZXIgZm9yIEJpdG1hcCBXaWRnZXRzIChjZGstbW9uaXRvcmluZy1jb25zdHJ1Y3RzKVwiLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICBydW50aW1lOiBkZXRlcm1pbmVMYXRlc3ROb2RlUnVudGltZSh0aGlzKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgbG9nR3JvdXA6IG5ldyBMb2dHcm91cCh0aGlzLCBcIkxhbWJkYUxvZ3NcIiwge1xuICAgICAgICByZXRlbnRpb246IFJldGVudGlvbkRheXMuT05FX0RBWSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5oYW5kbGVyLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJjbG91ZHdhdGNoOkdldE1ldHJpY1dpZGdldEltYWdlXCJdLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIFRhZ3Mub2YodGhpcy5oYW5kbGVyKS5hZGQoXCJjdy1jdXN0b20td2lkZ2V0XCIsIFwiZGVzY3JpYmU6cmVhZE9ubHlcIik7XG4gIH1cblxuICBhc0JpdG1hcCh3aWRnZXQ6IElXaWRnZXQpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0V2lkZ2V0UHJvcGVydGllcyh3aWRnZXQpO1xuICAgIC8vIHJlbW92ZSB0aGUgdGl0bGUgZnJvbSB0aGUgZ3JhcGggYW5kIHJlbWVtYmVyIGl0XG4gICAgY29uc3QgeyB0aXRsZSwgLi4uZ3JhcGggfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIG5ldyBDdXN0b21XaWRnZXQoe1xuICAgICAgLy8gbW92ZSB0aGUgb3JpZ2luYWwgdGl0bGUgaGVyZVxuICAgICAgdGl0bGUsXG4gICAgICB3aWR0aDogd2lkZ2V0LndpZHRoLFxuICAgICAgaGVpZ2h0OiB3aWRnZXQuaGVpZ2h0LFxuICAgICAgLy8gZW1wdHkgdGhlIGlubmVyIHRpdGxlIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBpdCBvbiB0aGUgd2hvbGUgd2lkZ2V0XG4gICAgICBoYW5kbGVyUGFyYW1zOiB7IGdyYXBoOiB7IC4uLmdyYXBoLCB0aXRsZTogXCIgXCIgfSB9LFxuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgdXBkYXRlT25SZWZyZXNoOiB0cnVlLFxuICAgICAgdXBkYXRlT25SZXNpemU6IHRydWUsXG4gICAgICB1cGRhdGVPblRpbWVSYW5nZUNoYW5nZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRXaWRnZXRQcm9wZXJ0aWVzKHdpZGdldDogSVdpZGdldCk6IGFueSB7XG4gICAgY29uc3QgZ3JhcGhzID0gd2lkZ2V0LnRvSnNvbigpO1xuICAgIGlmIChncmFwaHMubGVuZ3RoICE9IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgd2lkZ2V0IGRlZmluaXRpb24gbXVzdCBiZSBleGFjdGx5IG9uZS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGdyYXBoID0gZ3JhcGhzWzBdO1xuICAgIGlmICghZ3JhcGgucHJvcGVydGllcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ3JhcGggcHJvcGVydGllczogXCIgKyBncmFwaCk7XG4gICAgfVxuICAgIHJldHVybiBncmFwaC5wcm9wZXJ0aWVzO1xuICB9XG59XG4iXX0=