@robhan-cdk-lib/aws_aps 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2025 Robert Hanuschke
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # @robhan-cdk-lib/aws_aps
2
+
3
+ AWS Cloud Development Kit (CDK) constructs for Amazon Managed Service for Prometheus.
4
+
5
+ In [aws-cdk-lib.aws_aps](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_aps-readme.html), there currently only exist L1 constructs for Amazon Managed Service for Prometheus.
6
+
7
+ While helpful, they miss convenience like:
8
+
9
+ - advanced parameter checking (min/max number values, string lengths, array lengths...) before CloudFormation deployment
10
+ - proper parameter typing, e.g. enum values instead of strings
11
+ - simply referencing other constructs instead of e.g. ARN strings
12
+
13
+ Those features are implemented here.
14
+
15
+ The CDK maintainers explain that [publishing your own package](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md#publishing-your-own-package) is "by far the strongest signal you can give to the CDK team that a feature should be included within the core aws-cdk packages".
16
+
17
+ This project aims to develop aws_aps constructs to a maturity that can potentially be accepted to the CDK core.
18
+
19
+ It is not supported by AWS and is not endorsed by them. Please file issues in the [GitHub repository](https://github.com/robert-hanuschke/cdk-aws_aps/issues) if you find any.
20
+
21
+ ## Example use
22
+
23
+ ```typescript
24
+ import * as cdk from 'aws-cdk-lib';
25
+ import { Subnet } from 'aws-cdk-lib/aws-ec2';
26
+ import { Cluster } from 'aws-cdk-lib/aws-eks';
27
+ import { Construct } from 'constructs';
28
+ import { Workspace, RuleGroupsNamespace, Scraper } from '@robhan-cdk-lib/aws_aps';
29
+
30
+ export class AwsApsCdkStack extends cdk.Stack {
31
+ constructor(scope: Construct, id: string, props?: cdk.StackProps) {
32
+ super(scope, id, props);
33
+
34
+ const workspace = new Workspace(this, 'MyWorkspace', {});
35
+ new RuleGroupsNamespace(this, 'MyRuleGroupsNamespace', { workspace, data: '<myRulesFileData>', name: 'myRuleGroupsNamespace' });
36
+ new Scraper(this, 'MyScraper', {
37
+ destination: {
38
+ ampConfiguration: {
39
+ workspace,
40
+ },
41
+ },
42
+ source: {
43
+ eksConfiguration: {
44
+ cluster: Cluster.fromClusterAttributes(this, 'MyCluster', {
45
+ clusterName: 'clusterName',
46
+ }),
47
+ subnets: [
48
+ Subnet.fromSubnetAttributes(this, 'MySubnet', {
49
+ subnetId: 'subnetId',
50
+ }),
51
+ ],
52
+ },
53
+ },
54
+ scrapeConfiguration: {
55
+ configurationBlob: '<myScrapeConfiguration>',
56
+ },
57
+ });
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## License
63
+
64
+ MIT
package/lib/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './rule-groups-namespace';
2
+ export * from './rule-groups-namespace-base';
3
+ export * from './scraper';
4
+ export * from './scraper-base';
5
+ export * from './workspace';
6
+ export * from './workspace-base';
package/lib/index.js ADDED
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./rule-groups-namespace"), exports);
18
+ __exportStar(require("./rule-groups-namespace-base"), exports);
19
+ __exportStar(require("./scraper"), exports);
20
+ __exportStar(require("./scraper-base"), exports);
21
+ __exportStar(require("./workspace"), exports);
22
+ __exportStar(require("./workspace-base"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUF3QztBQUN4QywrREFBNkM7QUFDN0MsNENBQTBCO0FBQzFCLGlEQUErQjtBQUMvQiw4Q0FBNEI7QUFDNUIsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ydWxlLWdyb3Vwcy1uYW1lc3BhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ydWxlLWdyb3Vwcy1uYW1lc3BhY2UtYmFzZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjcmFwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zY3JhcGVyLWJhc2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi93b3Jrc3BhY2UtYmFzZSc7XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { IResource, Resource } from 'aws-cdk-lib';
2
+ import { IWorkspace } from './workspace-base';
3
+ export interface IRuleGroupsNamespace extends IResource {
4
+ /**
5
+ * The rules file used in the namespace.
6
+ */
7
+ readonly data: string;
8
+ /**
9
+ * The name of the rule groups namespace.
10
+ */
11
+ readonly name: string;
12
+ /**
13
+ * The ARN of the rule groups namespace.
14
+ * @attribute
15
+ */
16
+ readonly ruleGroupsNamespaceArn: string;
17
+ /**
18
+ * The workspace to add the rule groups namespace.
19
+ */
20
+ readonly workspace: IWorkspace;
21
+ }
22
+ export declare abstract class RuleGroupsNamespaceBase extends Resource implements IRuleGroupsNamespace {
23
+ /**
24
+ * The rules file used in the namespace.
25
+ */
26
+ abstract readonly data: string;
27
+ /**
28
+ * The name of the rule groups namespace.
29
+ */
30
+ abstract readonly name: string;
31
+ /**
32
+ * The ARN of the rule groups namespace.
33
+ */
34
+ abstract readonly ruleGroupsNamespaceArn: string;
35
+ /**
36
+ * The workspace to add the rule groups namespace.
37
+ */
38
+ abstract readonly workspace: IWorkspace;
39
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RuleGroupsNamespaceBase = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ class RuleGroupsNamespaceBase extends aws_cdk_lib_1.Resource {
8
+ }
9
+ exports.RuleGroupsNamespaceBase = RuleGroupsNamespaceBase;
10
+ _a = JSII_RTTI_SYMBOL_1;
11
+ RuleGroupsNamespaceBase[_a] = { fqn: "@robhan-cdk-lib/aws_aps.RuleGroupsNamespaceBase", version: "0.0.0" };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1ncm91cHMtbmFtZXNwYWNlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcnVsZS1ncm91cHMtbmFtZXNwYWNlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBa0Q7QUEwQmxELE1BQXNCLHVCQUF3QixTQUFRLHNCQUFROztBQUE5RCwwREFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUmVzb3VyY2UsIFJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVdvcmtzcGFjZSB9IGZyb20gJy4vd29ya3NwYWNlLWJhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdWxlR3JvdXBzTmFtZXNwYWNlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBydWxlcyBmaWxlIHVzZWQgaW4gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgcnVsZSBncm91cHMgbmFtZXNwYWNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBydWxlR3JvdXBzTmFtZXNwYWNlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgdG8gYWRkIHRoZSBydWxlIGdyb3VwcyBuYW1lc3BhY2UuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2U6IElXb3Jrc3BhY2U7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSdWxlR3JvdXBzTmFtZXNwYWNlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJ1bGVHcm91cHNOYW1lc3BhY2Uge1xuICAvKipcbiAgICogVGhlIHJ1bGVzIGZpbGUgdXNlZCBpbiB0aGUgbmFtZXNwYWNlLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBydWxlR3JvdXBzTmFtZXNwYWNlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3Jrc3BhY2UgdG8gYWRkIHRoZSBydWxlIGdyb3VwcyBuYW1lc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgd29ya3NwYWNlOiBJV29ya3NwYWNlO1xufSJdfQ==
@@ -0,0 +1,87 @@
1
+ import { Construct } from 'constructs';
2
+ import { IRuleGroupsNamespace, RuleGroupsNamespaceBase } from './rule-groups-namespace-base';
3
+ import { IWorkspace } from './workspace-base';
4
+ /**
5
+ * Properties for creating a rule groups namespace in an Amazon Managed Service for Prometheus
6
+ * workspace.
7
+ */
8
+ export interface RuleGroupsNamespaceProps {
9
+ /**
10
+ * The rules file used in the namespace.
11
+ */
12
+ readonly data: string;
13
+ /**
14
+ * The name of the rule groups namespace.
15
+ *
16
+ * Between 1 and 64 characters.
17
+ */
18
+ readonly name: string;
19
+ /**
20
+ * The workspace to add the rule groups namespace.
21
+ */
22
+ readonly workspace: IWorkspace;
23
+ }
24
+ /**
25
+ * Properties for importing a rule groups namespace in an Amazon Managed Service for Prometheus
26
+ * workspace from attributes.
27
+ */
28
+ export interface RuleGroupsNamespaceAttributes {
29
+ /**
30
+ * The rules file used in the namespace.
31
+ */
32
+ readonly data: string;
33
+ /**
34
+ * The name of the rule groups namespace.
35
+ *
36
+ * Between 1 and 64 characters.
37
+ */
38
+ readonly name: string;
39
+ /**
40
+ * The workspace to add the rule groups namespace.
41
+ */
42
+ readonly workspace: IWorkspace;
43
+ /**
44
+ * The ARN of the rule groups namespace.
45
+ */
46
+ readonly ruleGroupsNamespaceArn: string;
47
+ }
48
+ /**
49
+ * The definition of a rule groups namespace in an Amazon Managed Service for Prometheus workspace.
50
+ * A rule groups namespace is associated with exactly one rules file. A workspace can have multiple
51
+ * rule groups namespaces.
52
+ */
53
+ export declare class RuleGroupsNamespace extends RuleGroupsNamespaceBase {
54
+ static isRuleGroupsNamespace(x: any): x is RuleGroupsNamespace;
55
+ static fromRuleGroupsNamespaceAttributes(scope: Construct, id: string, attrs: RuleGroupsNamespaceAttributes): IRuleGroupsNamespace;
56
+ /**
57
+ * Validates all rule groups namespace properties.
58
+ *
59
+ * @param props - The rule group namespace properties to validate
60
+ * @returns An array of error messages if validation fails, or an empty array if valid
61
+ *
62
+ * This method aggregates validation results from all individual property validators.
63
+ * It throws an error if props is not an object.
64
+ */
65
+ private static validateProps;
66
+ /**
67
+ * The rules file used in the namespace.
68
+ */
69
+ readonly data: string;
70
+ /**
71
+ * The name of the rule groups namespace.
72
+ */
73
+ readonly name: string;
74
+ /**
75
+ * The workspace to add the rule groups namespace.
76
+ */
77
+ readonly workspace: IWorkspace;
78
+ /**
79
+ * The workspace to add the rule groups namespace.
80
+ */
81
+ readonly ruleGroupsNamespaceArn: string;
82
+ /**
83
+ * The underlying CloudFormation resource.
84
+ */
85
+ private readonly ruleGroupsNamespace;
86
+ constructor(scope: Construct, id: string, props: RuleGroupsNamespaceProps);
87
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.RuleGroupsNamespace = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const utils_1 = require("@robhan-cdk-lib/utils");
7
+ const aws_aps_1 = require("aws-cdk-lib/aws-aps");
8
+ const rule_groups_namespace_base_1 = require("./rule-groups-namespace-base");
9
+ const rule_groups_namespace_base_2 = require("./validation/rule-groups-namespace-base");
10
+ const IS_RULE_GROUPS_NAMESPACE = Symbol.for('@robhan-cdk-lib/aws_aps.RuleGroupsNamespace');
11
+ /**
12
+ * The definition of a rule groups namespace in an Amazon Managed Service for Prometheus workspace.
13
+ * A rule groups namespace is associated with exactly one rules file. A workspace can have multiple
14
+ * rule groups namespaces.
15
+ */
16
+ class RuleGroupsNamespace extends rule_groups_namespace_base_1.RuleGroupsNamespaceBase {
17
+ static isRuleGroupsNamespace(x) {
18
+ return IS_RULE_GROUPS_NAMESPACE in x;
19
+ }
20
+ static fromRuleGroupsNamespaceAttributes(scope, id, attrs) {
21
+ class Import extends rule_groups_namespace_base_1.RuleGroupsNamespaceBase {
22
+ constructor(attributes) {
23
+ super(scope, id);
24
+ this.data = attributes.data;
25
+ this.name = attributes.name;
26
+ this.workspace = attributes.workspace;
27
+ this.ruleGroupsNamespaceArn = attributes.ruleGroupsNamespaceArn;
28
+ }
29
+ }
30
+ return new Import(attrs);
31
+ }
32
+ /**
33
+ * Validates all rule groups namespace properties.
34
+ *
35
+ * @param props - The rule group namespace properties to validate
36
+ * @returns An array of error messages if validation fails, or an empty array if valid
37
+ *
38
+ * This method aggregates validation results from all individual property validators.
39
+ * It throws an error if props is not an object.
40
+ */
41
+ static validateProps(props) {
42
+ const errors = [];
43
+ if (!props || typeof props !== 'object') {
44
+ throw new Error('RuleGroupsNamespace constructor properties must be an object');
45
+ }
46
+ const ruleGroupsNamespaceProps = props;
47
+ errors.push(...(0, utils_1.validateObjectAttributes)({
48
+ inputObject: ruleGroupsNamespaceProps,
49
+ mandatoryAttributes: ['data', 'name', 'workspace'],
50
+ optionalAttributes: [],
51
+ }));
52
+ if (ruleGroupsNamespaceProps.name !== undefined) {
53
+ errors.push(...(0, rule_groups_namespace_base_2.validateName)(ruleGroupsNamespaceProps.name).map((err) => `name: ${err}`));
54
+ }
55
+ if (ruleGroupsNamespaceProps.data !== undefined) {
56
+ errors.push(...(0, rule_groups_namespace_base_2.validateData)(ruleGroupsNamespaceProps.data).map((err) => `data: ${err}`));
57
+ }
58
+ return errors;
59
+ }
60
+ constructor(scope, id, props) {
61
+ super(scope, id);
62
+ Object.defineProperty(this, IS_RULE_GROUPS_NAMESPACE, { value: true });
63
+ const errors = RuleGroupsNamespace.validateProps(props);
64
+ if (errors.length > 0) {
65
+ throw new Error(`Invalid props:\n${errors.join('\n')}`);
66
+ }
67
+ this.data = props.data;
68
+ this.name = props.name;
69
+ this.workspace = props.workspace;
70
+ let cfnRuleGroupsNamespaceProps = {
71
+ data: props.data,
72
+ name: props.name,
73
+ workspace: props.workspace.workspaceId,
74
+ };
75
+ this.ruleGroupsNamespace = new aws_aps_1.CfnRuleGroupsNamespace(this, 'Resource', cfnRuleGroupsNamespaceProps);
76
+ this.node.defaultChild = this.ruleGroupsNamespace;
77
+ this.ruleGroupsNamespaceArn = this.ruleGroupsNamespace.attrArn;
78
+ }
79
+ }
80
+ exports.RuleGroupsNamespace = RuleGroupsNamespace;
81
+ _a = JSII_RTTI_SYMBOL_1;
82
+ RuleGroupsNamespace[_a] = { fqn: "@robhan-cdk-lib/aws_aps.RuleGroupsNamespace", version: "0.0.0" };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1ncm91cHMtbmFtZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGUtZ3JvdXBzLW5hbWVzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFpRTtBQUNqRSxpREFBMEY7QUFFMUYsNkVBQTZGO0FBQzdGLHdGQUFxRjtBQXNEckYsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7QUFHM0Y7Ozs7R0FJRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsb0RBQXVCO0lBQ3ZELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFNO1FBQ3hDLE9BQU8sd0JBQXdCLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxNQUFNLENBQUMsaUNBQWlDLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDaEgsTUFBTSxNQUFPLFNBQVEsb0RBQXVCO1lBSzFDLFlBQVksVUFBeUM7Z0JBQ25ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUM7WUFDbEUsQ0FBQztTQUNGO1FBQ0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWM7UUFDekMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxNQUFNLHdCQUF3QixHQUFHLEtBQWlDLENBQUM7UUFFbkUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsZ0NBQXdCLEVBQUM7WUFDdEMsV0FBVyxFQUFFLHdCQUF3QjtZQUNyQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO1lBQ2xELGtCQUFrQixFQUFFLEVBQUU7U0FDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLHdCQUF3QixDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBQSx5Q0FBWSxFQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksd0JBQXdCLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFBLHlDQUFZLEVBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQTBCRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV2RSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUVqQyxJQUFJLDJCQUEyQixHQUFnQztZQUM3RCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVc7U0FDdkMsQ0FBQztRQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGdDQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFbEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7SUFDakUsQ0FBQzs7QUF6R0gsa0RBMEdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmFsaWRhdGVPYmplY3RBdHRyaWJ1dGVzIH0gZnJvbSAnQHJvYmhhbi1jZGstbGliL3V0aWxzJztcbmltcG9ydCB7IENmblJ1bGVHcm91cHNOYW1lc3BhY2UsIENmblJ1bGVHcm91cHNOYW1lc3BhY2VQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJUnVsZUdyb3Vwc05hbWVzcGFjZSwgUnVsZUdyb3Vwc05hbWVzcGFjZUJhc2UgfSBmcm9tICcuL3J1bGUtZ3JvdXBzLW5hbWVzcGFjZS1iYXNlJztcbmltcG9ydCB7IHZhbGlkYXRlRGF0YSwgdmFsaWRhdGVOYW1lIH0gZnJvbSAnLi92YWxpZGF0aW9uL3J1bGUtZ3JvdXBzLW5hbWVzcGFjZS1iYXNlJztcbmltcG9ydCB7IElXb3Jrc3BhY2UgfSBmcm9tICcuL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZSBpbiBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzXG4gKiB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUdyb3Vwc05hbWVzcGFjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBydWxlcyBmaWxlIHVzZWQgaW4gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIHRvIGFkZCB0aGUgcnVsZSBncm91cHMgbmFtZXNwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlOiBJV29ya3NwYWNlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGltcG9ydGluZyBhIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZSBpbiBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzXG4gKiB3b3Jrc3BhY2UgZnJvbSBhdHRyaWJ1dGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVHcm91cHNOYW1lc3BhY2VBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBydWxlcyBmaWxlIHVzZWQgaW4gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICpcbiAgICogQmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIHRvIGFkZCB0aGUgcnVsZSBncm91cHMgbmFtZXNwYWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlOiBJV29ya3NwYWNlO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBydWxlIGdyb3VwcyBuYW1lc3BhY2UuXG4gICAqL1xuICByZWFkb25seSBydWxlR3JvdXBzTmFtZXNwYWNlQXJuOiBzdHJpbmc7XG59XG5cbmNvbnN0IElTX1JVTEVfR1JPVVBTX05BTUVTUEFDRSA9IFN5bWJvbC5mb3IoJ0Byb2JoYW4tY2RrLWxpYi9hd3NfYXBzLlJ1bGVHcm91cHNOYW1lc3BhY2UnKTtcblxuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgcnVsZSBncm91cHMgbmFtZXNwYWNlIGluIGFuIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlLlxuICogQSBydWxlIGdyb3VwcyBuYW1lc3BhY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGV4YWN0bHkgb25lIHJ1bGVzIGZpbGUuIEEgd29ya3NwYWNlIGNhbiBoYXZlIG11bHRpcGxlXG4gKiBydWxlIGdyb3VwcyBuYW1lc3BhY2VzLlxuICovXG5leHBvcnQgY2xhc3MgUnVsZUdyb3Vwc05hbWVzcGFjZSBleHRlbmRzIFJ1bGVHcm91cHNOYW1lc3BhY2VCYXNlIHtcbiAgcHVibGljIHN0YXRpYyBpc1J1bGVHcm91cHNOYW1lc3BhY2UoeDogYW55KTogeCBpcyBSdWxlR3JvdXBzTmFtZXNwYWNlIHtcbiAgICByZXR1cm4gSVNfUlVMRV9HUk9VUFNfTkFNRVNQQUNFIGluIHg7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb21SdWxlR3JvdXBzTmFtZXNwYWNlQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogUnVsZUdyb3Vwc05hbWVzcGFjZUF0dHJpYnV0ZXMpOiBJUnVsZUdyb3Vwc05hbWVzcGFjZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUnVsZUdyb3Vwc05hbWVzcGFjZUJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlOiBJV29ya3NwYWNlO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJ1bGVHcm91cHNOYW1lc3BhY2VBcm46IHN0cmluZztcbiAgICAgIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXM6IFJ1bGVHcm91cHNOYW1lc3BhY2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IGF0dHJpYnV0ZXMuZGF0YTtcbiAgICAgICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lO1xuICAgICAgICB0aGlzLndvcmtzcGFjZSA9IGF0dHJpYnV0ZXMud29ya3NwYWNlO1xuICAgICAgICB0aGlzLnJ1bGVHcm91cHNOYW1lc3BhY2VBcm4gPSBhdHRyaWJ1dGVzLnJ1bGVHcm91cHNOYW1lc3BhY2VBcm47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZSBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcnVsZSBncm91cCBuYW1lc3BhY2UgcHJvcGVydGllcyB0byB2YWxpZGF0ZVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlcyBpZiB2YWxpZGF0aW9uIGZhaWxzLCBvciBhbiBlbXB0eSBhcnJheSBpZiB2YWxpZFxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhZ2dyZWdhdGVzIHZhbGlkYXRpb24gcmVzdWx0cyBmcm9tIGFsbCBpbmRpdmlkdWFsIHByb3BlcnR5IHZhbGlkYXRvcnMuXG4gICAqIEl0IHRocm93cyBhbiBlcnJvciBpZiBwcm9wcyBpcyBub3QgYW4gb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhwcm9wczogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoIXByb3BzIHx8IHR5cGVvZiBwcm9wcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVsZUdyb3Vwc05hbWVzcGFjZSBjb25zdHJ1Y3RvciBwcm9wZXJ0aWVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHJ1bGVHcm91cHNOYW1lc3BhY2VQcm9wcyA9IHByb3BzIGFzIFJ1bGVHcm91cHNOYW1lc3BhY2VQcm9wcztcblxuICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlT2JqZWN0QXR0cmlidXRlcyh7XG4gICAgICBpbnB1dE9iamVjdDogcnVsZUdyb3Vwc05hbWVzcGFjZVByb3BzLFxuICAgICAgbWFuZGF0b3J5QXR0cmlidXRlczogWydkYXRhJywgJ25hbWUnLCAnd29ya3NwYWNlJ10sXG4gICAgICBvcHRpb25hbEF0dHJpYnV0ZXM6IFtdLFxuICAgIH0pKTtcblxuICAgIGlmIChydWxlR3JvdXBzTmFtZXNwYWNlUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU5hbWUocnVsZUdyb3Vwc05hbWVzcGFjZVByb3BzLm5hbWUpLm1hcCgoZXJyKSA9PiBgbmFtZTogJHtlcnJ9YCkpO1xuICAgIH1cblxuICAgIGlmIChydWxlR3JvdXBzTmFtZXNwYWNlUHJvcHMuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZURhdGEocnVsZUdyb3Vwc05hbWVzcGFjZVByb3BzLmRhdGEpLm1hcCgoZXJyKSA9PiBgZGF0YTogJHtlcnJ9YCkpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBydWxlcyBmaWxlIHVzZWQgaW4gdGhlIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBydWxlIGdyb3VwcyBuYW1lc3BhY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIHRvIGFkZCB0aGUgcnVsZSBncm91cHMgbmFtZXNwYWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZTogSVdvcmtzcGFjZTtcblxuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSB0byBhZGQgdGhlIHJ1bGUgZ3JvdXBzIG5hbWVzcGFjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydWxlR3JvdXBzTmFtZXNwYWNlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBydWxlR3JvdXBzTmFtZXNwYWNlOiBDZm5SdWxlR3JvdXBzTmFtZXNwYWNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSdWxlR3JvdXBzTmFtZXNwYWNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIElTX1JVTEVfR1JPVVBTX05BTUVTUEFDRSwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGVycm9ycyA9IFJ1bGVHcm91cHNOYW1lc3BhY2UudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcm9wczpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSBwcm9wcy5kYXRhO1xuICAgIHRoaXMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgdGhpcy53b3Jrc3BhY2UgPSBwcm9wcy53b3Jrc3BhY2U7XG5cbiAgICBsZXQgY2ZuUnVsZUdyb3Vwc05hbWVzcGFjZVByb3BzOiBDZm5SdWxlR3JvdXBzTmFtZXNwYWNlUHJvcHMgPSB7XG4gICAgICBkYXRhOiBwcm9wcy5kYXRhLFxuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIHdvcmtzcGFjZTogcHJvcHMud29ya3NwYWNlLndvcmtzcGFjZUlkLFxuICAgIH07XG5cbiAgICB0aGlzLnJ1bGVHcm91cHNOYW1lc3BhY2UgPSBuZXcgQ2ZuUnVsZUdyb3Vwc05hbWVzcGFjZSh0aGlzLCAnUmVzb3VyY2UnLCBjZm5SdWxlR3JvdXBzTmFtZXNwYWNlUHJvcHMpO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJ1bGVHcm91cHNOYW1lc3BhY2U7XG5cbiAgICB0aGlzLnJ1bGVHcm91cHNOYW1lc3BhY2VBcm4gPSB0aGlzLnJ1bGVHcm91cHNOYW1lc3BhY2UuYXR0ckFybjtcbiAgfVxufSJdfQ==
@@ -0,0 +1,146 @@
1
+ import { IResource, Resource } from 'aws-cdk-lib';
2
+ import { ISecurityGroup, ISubnet } from 'aws-cdk-lib/aws-ec2';
3
+ import { ICluster } from 'aws-cdk-lib/aws-eks';
4
+ import { IRole } from 'aws-cdk-lib/aws-iam';
5
+ import { IWorkspace } from './workspace-base';
6
+ /**
7
+ * The AmpConfiguration structure defines the Amazon Managed Service for Prometheus instance a scraper should send metrics to.
8
+ */
9
+ export interface AmpConfiguration {
10
+ /**
11
+ * The Amazon Managed Service for Prometheus workspace
12
+ */
13
+ readonly workspace: IWorkspace;
14
+ }
15
+ /**
16
+ * Where to send the metrics from a scraper.
17
+ */
18
+ export interface Destination {
19
+ /**
20
+ * The Amazon Managed Service for Prometheus workspace to send metrics to.
21
+ */
22
+ readonly ampConfiguration: AmpConfiguration;
23
+ }
24
+ /**
25
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
26
+ */
27
+ export interface RoleConfiguration {
28
+ /**
29
+ * The source role
30
+ */
31
+ readonly sourceRole?: IRole;
32
+ /**
33
+ * The target role
34
+ */
35
+ readonly targetRole?: IRole;
36
+ }
37
+ /**
38
+ * A scrape configuration for a scraper, base 64 encoded.
39
+ */
40
+ export interface ScrapeConfiguration {
41
+ /**
42
+ * The base 64 encoded scrape configuration file.
43
+ */
44
+ readonly configurationBlob: string;
45
+ }
46
+ /**
47
+ * The EksConfiguration structure describes the connection to the Amazon EKS cluster from which a scraper collects metrics.
48
+ */
49
+ export interface EksConfiguration {
50
+ /**
51
+ * The Amazon EKS cluster
52
+ */
53
+ readonly cluster: ICluster;
54
+ /**
55
+ * A list of the security group IDs for the Amazon EKS cluster VPC configuration.
56
+ *
57
+ * Min 1, max 5.
58
+ */
59
+ readonly securityGroups?: ISecurityGroup[];
60
+ /**
61
+ * A list of subnets for the Amazon EKS cluster VPC configuration.
62
+ *
63
+ * Min 1, max 5.
64
+ */
65
+ readonly subnets: ISubnet[];
66
+ }
67
+ /**
68
+ * The source of collected metrics for a scraper.
69
+ */
70
+ export interface Source {
71
+ /**
72
+ * The Amazon EKS cluster from which a scraper collects metrics.
73
+ */
74
+ readonly eksConfiguration: EksConfiguration;
75
+ }
76
+ export interface IScraper extends IResource {
77
+ /**
78
+ * An optional user-assigned scraper alias.
79
+ *
80
+ * 1-100 characters.
81
+ *
82
+ * Pattern: ^[0-9A-Za-z][-.0-9A-Z_a-z]*$
83
+ */
84
+ readonly alias?: string;
85
+ /**
86
+ * The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.
87
+ */
88
+ readonly destination: Destination;
89
+ /**
90
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
91
+ */
92
+ readonly roleConfiguration?: RoleConfiguration;
93
+ /**
94
+ * The configuration in use by the scraper.
95
+ */
96
+ readonly scrapeConfiguration: ScrapeConfiguration;
97
+ /**
98
+ * The Amazon EKS cluster from which the scraper collects metrics.
99
+ */
100
+ readonly source: Source;
101
+ /**
102
+ * The ID of the scraper.
103
+ * @attribute
104
+ */
105
+ readonly scraperId: string;
106
+ /**
107
+ * The ARN of the scraper.
108
+ * @attribute
109
+ */
110
+ readonly scraperArn: string;
111
+ }
112
+ export declare abstract class ScraperBase extends Resource implements IScraper {
113
+ /**
114
+ * An optional user-assigned scraper alias.
115
+ *
116
+ * 1-100 characters.
117
+ *
118
+ * Pattern: ^[0-9A-Za-z][-.0-9A-Z_a-z]*$
119
+ */
120
+ abstract readonly alias?: string;
121
+ /**
122
+ * The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.
123
+ */
124
+ abstract readonly destination: Destination;
125
+ /**
126
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
127
+ */
128
+ abstract readonly roleConfiguration?: RoleConfiguration;
129
+ /**
130
+ * The configuration in use by the scraper.
131
+ */
132
+ abstract readonly scrapeConfiguration: ScrapeConfiguration;
133
+ /**
134
+ * The Amazon EKS cluster from which the scraper collects metrics.
135
+ */
136
+ abstract readonly source: Source;
137
+ /**
138
+ * The ID of the scraper.
139
+ */
140
+ abstract readonly scraperId: string;
141
+ /**
142
+ * The ARN of the scraper.
143
+ */
144
+ abstract readonly scraperArn: string;
145
+ protected getScraperId(scraperArn: string): string;
146
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ScraperBase = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
7
+ class ScraperBase extends aws_cdk_lib_1.Resource {
8
+ getScraperId(scraperArn) {
9
+ return scraperArn.substring(scraperArn.lastIndexOf('/') + 1);
10
+ }
11
+ }
12
+ exports.ScraperBase = ScraperBase;
13
+ _a = JSII_RTTI_SYMBOL_1;
14
+ ScraperBase[_a] = { fqn: "@robhan-cdk-lib/aws_aps.ScraperBase", version: "0.0.0" };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyYXBlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjcmFwZXItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFrRDtBQWlJbEQsTUFBc0IsV0FBWSxTQUFRLHNCQUFRO0lBd0N0QyxZQUFZLENBQUMsVUFBa0I7UUFDdkMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUExQ0gsa0NBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlc291cmNlLCBSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElTZWN1cml0eUdyb3VwLCBJU3VibmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBJQ2x1c3RlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1la3MnO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElXb3Jrc3BhY2UgfSBmcm9tICcuL3dvcmtzcGFjZS1iYXNlJztcblxuLyoqXG4gKiBUaGUgQW1wQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyBpbnN0YW5jZSBhIHNjcmFwZXIgc2hvdWxkIHNlbmQgbWV0cmljcyB0by5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbXBDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIHdvcmtzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlOiBJV29ya3NwYWNlO1xufVxuXG4vKipcbiAqIFdoZXJlIHRvIHNlbmQgdGhlIG1ldHJpY3MgZnJvbSBhIHNjcmFwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlIHRvIHNlbmQgbWV0cmljcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGFtcENvbmZpZ3VyYXRpb246IEFtcENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogVGhlIHJvbGUgY29uZmlndXJhdGlvbiBpbiBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIHNjcmFwZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSByb2xlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VSb2xlPzogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcm9sZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Um9sZT86IElSb2xlO1xufVxuXG4vKipcbiAqIEEgc2NyYXBlIGNvbmZpZ3VyYXRpb24gZm9yIGEgc2NyYXBlciwgYmFzZSA2NCBlbmNvZGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjcmFwZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGJhc2UgNjQgZW5jb2RlZCBzY3JhcGUgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbkJsb2I6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgRWtzQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBBbWF6b24gRUtTIGNsdXN0ZXIgZnJvbSB3aGljaCBhIHNjcmFwZXIgY29sbGVjdHMgbWV0cmljcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFa3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gRUtTIGNsdXN0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI6IElDbHVzdGVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIHNlY3VyaXR5IGdyb3VwIElEcyBmb3IgdGhlIEFtYXpvbiBFS1MgY2x1c3RlciBWUEMgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogTWluIDEsIG1heCA1LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cHM/OiBJU2VjdXJpdHlHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Ygc3VibmV0cyBmb3IgdGhlIEFtYXpvbiBFS1MgY2x1c3RlciBWUEMgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogTWluIDEsIG1heCA1LlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0czogSVN1Ym5ldFtdO1xufVxuXG4vKipcbiAqIFRoZSBzb3VyY2Ugb2YgY29sbGVjdGVkIG1ldHJpY3MgZm9yIGEgc2NyYXBlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBFS1MgY2x1c3RlciBmcm9tIHdoaWNoIGEgc2NyYXBlciBjb2xsZWN0cyBtZXRyaWNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZWtzQ29uZmlndXJhdGlvbjogRWtzQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2NyYXBlciBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB1c2VyLWFzc2lnbmVkIHNjcmFwZXIgYWxpYXMuXG4gICAqXG4gICAqIDEtMTAwIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIFBhdHRlcm46IF5bMC05QS1aYS16XVstLjAtOUEtWl9hLXpdKiRcbiAgICovXG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cyB3b3Jrc3BhY2UgdGhlIHNjcmFwZXIgc2VuZHMgbWV0cmljcyB0by5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbjtcblxuICAvKipcbiAgICogVGhlIHJvbGUgY29uZmlndXJhdGlvbiBpbiBhbiBBbWF6b24gTWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzIHNjcmFwZXIuXG4gICAqL1xuICByZWFkb25seSByb2xlQ29uZmlndXJhdGlvbj86IFJvbGVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBpbiB1c2UgYnkgdGhlIHNjcmFwZXIuXG4gICAqL1xuICByZWFkb25seSBzY3JhcGVDb25maWd1cmF0aW9uOiBTY3JhcGVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIEVLUyBjbHVzdGVyIGZyb20gd2hpY2ggdGhlIHNjcmFwZXIgY29sbGVjdHMgbWV0cmljcy5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZTogU291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHNjcmFwZXIuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHNjcmFwZXJJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBzY3JhcGVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzY3JhcGVyQXJuOiBzdHJpbmc7XG5cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNjcmFwZXJCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJU2NyYXBlciB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB1c2VyLWFzc2lnbmVkIHNjcmFwZXIgYWxpYXMuXG4gICAqXG4gICAqIDEtMTAwIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIFBhdHRlcm46IF5bMC05QS1aYS16XVstLjAtOUEtWl9hLXpdKiRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhbGlhcz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgd29ya3NwYWNlIHRoZSBzY3JhcGVyIHNlbmRzIG1ldHJpY3MgdG8uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGVzdGluYXRpb246IERlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBjb25maWd1cmF0aW9uIGluIGFuIEFtYXpvbiBNYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXMgc2NyYXBlci5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb2xlQ29uZmlndXJhdGlvbj86IFJvbGVDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBpbiB1c2UgYnkgdGhlIHNjcmFwZXIuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc2NyYXBlQ29uZmlndXJhdGlvbjogU2NyYXBlQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBFS1MgY2x1c3RlciBmcm9tIHdoaWNoIHRoZSBzY3JhcGVyIGNvbGxlY3RzIG1ldHJpY3MuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgc291cmNlOiBTb3VyY2U7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc2NyYXBlci5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzY3JhcGVySWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgc2NyYXBlci5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzY3JhcGVyQXJuOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGdldFNjcmFwZXJJZChzY3JhcGVyQXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc2NyYXBlckFybi5zdWJzdHJpbmcoc2NyYXBlckFybi5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,111 @@
1
+ import { Construct } from 'constructs';
2
+ import { Destination, IScraper, RoleConfiguration, ScrapeConfiguration, ScraperBase, Source } from './scraper-base';
3
+ /**
4
+ * Properties for creating an Amazon Managed Service for Prometheus Scraper.
5
+ */
6
+ export interface ScraperProps {
7
+ /**
8
+ * An optional user-assigned scraper alias.
9
+ *
10
+ * 1-100 characters.
11
+ *
12
+ * Pattern: ^[0-9A-Za-z][-.0-9A-Z_a-z]*$
13
+ */
14
+ readonly alias?: string;
15
+ /**
16
+ * The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.
17
+ */
18
+ readonly destination: Destination;
19
+ /**
20
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
21
+ */
22
+ readonly roleConfiguration?: RoleConfiguration;
23
+ /**
24
+ * The configuration in use by the scraper.
25
+ */
26
+ readonly scrapeConfiguration: ScrapeConfiguration;
27
+ /**
28
+ * The Amazon EKS cluster from which the scraper collects metrics.
29
+ */
30
+ readonly source: Source;
31
+ }
32
+ /**
33
+ * Properties for importing an Amazon Managed Service for Prometheus Scraper from attributes.
34
+ */
35
+ export interface ScraperAttributes {
36
+ /**
37
+ * An optional user-assigned scraper alias.
38
+ *
39
+ * 1-100 characters.
40
+ *
41
+ * Pattern: ^[0-9A-Za-z][-.0-9A-Z_a-z]*$
42
+ */
43
+ readonly alias?: string;
44
+ /**
45
+ * The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.
46
+ */
47
+ readonly destination: Destination;
48
+ /**
49
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
50
+ */
51
+ readonly roleConfiguration?: RoleConfiguration;
52
+ /**
53
+ * The configuration in use by the scraper.
54
+ */
55
+ readonly scrapeConfiguration: ScrapeConfiguration;
56
+ /**
57
+ * The Amazon EKS cluster from which the scraper collects metrics.
58
+ */
59
+ readonly source: Source;
60
+ /**
61
+ * The ARN of the scraper.
62
+ */
63
+ readonly scraperArn: string;
64
+ }
65
+ export declare class Scraper extends ScraperBase {
66
+ static isScraper(x: any): x is Scraper;
67
+ static frommScraperAttributes(scope: Construct, id: string, attrs: ScraperAttributes): IScraper;
68
+ /**
69
+ * Validates all scraper properties.
70
+ *
71
+ * @param props - The scraper properties to validate
72
+ * @returns An array of error messages if validation fails, or an empty array if valid
73
+ *
74
+ * This method aggregates validation results from all individual property validators.
75
+ * It throws an error if props is not an object.
76
+ */
77
+ private static validateProps;
78
+ /**
79
+ * An optional user-assigned scraper alias.
80
+ */
81
+ readonly alias?: string;
82
+ /**
83
+ * The Amazon Managed Service for Prometheus workspace the scraper sends metrics to.
84
+ */
85
+ readonly destination: Destination;
86
+ /**
87
+ * The role configuration in an Amazon Managed Service for Prometheus scraper.
88
+ */
89
+ readonly roleConfiguration?: RoleConfiguration;
90
+ /**
91
+ * The configuration in use by the scraper.
92
+ */
93
+ readonly scrapeConfiguration: ScrapeConfiguration;
94
+ /**
95
+ * The Amazon EKS cluster from which the scraper collects metrics.
96
+ */
97
+ readonly source: Source;
98
+ /**
99
+ * The ID of the scraper.
100
+ */
101
+ readonly scraperId: string;
102
+ /**
103
+ * The ARN of the scraper.
104
+ */
105
+ readonly scraperArn: string;
106
+ /**
107
+ * The underlying CloudFormation resource.
108
+ */
109
+ private readonly scraper;
110
+ constructor(scope: Construct, id: string, props: ScraperProps);
111
+ }