pepr 0.9.0 → 0.10.1
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/dist/cli.js +86 -68
- package/dist/controller.js +1 -1
- package/dist/lib/controller.d.ts +2 -0
- package/dist/lib/controller.d.ts.map +1 -1
- package/dist/lib/filter.d.ts.map +1 -1
- package/dist/lib/k8s/types.d.ts +1 -1
- package/dist/lib/k8s/types.d.ts.map +1 -1
- package/dist/lib/k8s/webhook.d.ts.map +1 -1
- package/dist/lib/metrics.d.ts +38 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/processor.d.ts.map +1 -1
- package/dist/lib/request.d.ts.map +1 -1
- package/dist/lib.js +98 -6
- package/dist/lib.js.map +4 -4
- package/package.json +4 -3
- package/src/lib/controller.ts +20 -1
- package/src/lib/filter.ts +8 -3
- package/src/lib/k8s/types.ts +1 -1
- package/src/lib/k8s/webhook.ts +1 -0
- package/src/lib/metrics.ts +79 -0
- package/src/lib/processor.ts +5 -0
- package/src/lib/request.ts +16 -5
package/dist/controller.js
CHANGED
|
@@ -116,7 +116,7 @@ if (process.env.LOG_LEVEL) {
|
|
|
116
116
|
var logger_default = Log;
|
|
117
117
|
|
|
118
118
|
// src/cli/init/templates/data.json
|
|
119
|
-
var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, version: "0.
|
|
119
|
+
var packageJSON = { name: "pepr", description: "Kubernetes application engine", author: "Defense Unicorns", homepage: "https://github.com/defenseunicorns/pepr", license: "Apache-2.0", bin: "dist/cli.js", repository: "defenseunicorns/pepr", engines: { node: ">=18.0.0" }, version: "0.10.1", main: "dist/lib.js", types: "dist/lib.d.ts", scripts: { prebuild: "rm -fr dist/* && node hack/build-template-data.js", build: "tsc && node build.mjs", test: "npm run test:unit && npm run test:e2e", "test:unit": "npm run build && tsc -p tsconfig.tests.json && ava dist/**/*.test.js", "test:e2e": "npm run test:e2e:k3d && npm run test:e2e:build && npm run test:e2e:image && npm run test:e2e:run", "test:e2e:k3d": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0'", "test:e2e:build": "npm run build && npm pack", "test:e2e:image": "docker buildx build --tag pepr:dev . && k3d image import pepr:dev -c pepr-dev", "test:e2e:run": "ava hack/e2e.test.mjs --sequential --timeout=2m", "format:check": "eslint src && prettier src --check", "format:fix": "eslint src --fix && prettier src --write" }, dependencies: { "@kubernetes/client-node": "0.18.1", express: "4.18.2", "fast-json-patch": "3.1.1", "http-status-codes": "2.2.0", "node-fetch": "2.6.12", "prom-client": "^14.2.0", ramda: "0.29.0" }, devDependencies: { "@types/eslint": "8.40.2", "@types/express": "4.17.17", "@types/node-fetch": "2.6.4", "@types/node-forge": "1.3.2", "@types/prettier": "2.7.3", "@types/prompts": "2.4.4", "@types/ramda": "0.29.3", "@types/uuid": "9.0.2", ava: "5.3.1", nock: "13.3.1" }, peerDependencies: { "@typescript-eslint/eslint-plugin": "5.59.7", "@typescript-eslint/parser": "5.59.7", commander: "10.0.1", esbuild: "0.17.19", eslint: "8.41.0", "node-forge": "1.3.1", prettier: "2.8.8", prompts: "2.4.2", typescript: "5.0.4", uuid: "9.0.0" }, ava: { failFast: true, verbose: true } };
|
|
120
120
|
|
|
121
121
|
// src/runtime/controller.ts
|
|
122
122
|
var { version } = packageJSON;
|
package/dist/lib/controller.d.ts
CHANGED
|
@@ -8,12 +8,14 @@ export declare class Controller {
|
|
|
8
8
|
private readonly afterHook?;
|
|
9
9
|
private readonly app;
|
|
10
10
|
private running;
|
|
11
|
+
private metricsCollector;
|
|
11
12
|
private token;
|
|
12
13
|
constructor(config: ModuleConfig, capabilities: Capability[], beforeHook?: ((req: Request) => void) | undefined, afterHook?: ((res: Response) => void) | undefined);
|
|
13
14
|
/** Start the webhook server */
|
|
14
15
|
startServer: (port: number) => void;
|
|
15
16
|
private logger;
|
|
16
17
|
private healthz;
|
|
18
|
+
private metrics;
|
|
17
19
|
private mutate;
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/lib/controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/lib/controller.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,qBAAa,UAAU;IASnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAX7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAgC;IAGxD,OAAO,CAAC,KAAK,CAAM;gBAGA,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,UAAU,CAAC,SAAQ,OAAO,KAAK,IAAI,aAAA,EACnC,SAAS,CAAC,SAAQ,QAAQ,KAAK,IAAI,aAAA;IA0BtD,+BAA+B;IACxB,WAAW,SAAU,MAAM,UAkDhC;IAEF,OAAO,CAAC,MAAM,CAYZ;IAEF,OAAO,CAAC,OAAO,CAOb;IAEF,OAAO,CAAC,OAAO,CAOb;IAEF,OAAO,CAAC,MAAM,CA+CZ;CACH"}
|
package/dist/lib/filter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/lib/filter.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/lib/filter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,OAAO,EAAS,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,WA6E/D"}
|
package/dist/lib/k8s/types.d.ts
CHANGED
|
@@ -96,7 +96,7 @@ export interface Request<T = KubernetesObject> {
|
|
|
96
96
|
};
|
|
97
97
|
/** Object is the object from the incoming request prior to default values being applied */
|
|
98
98
|
readonly object: T;
|
|
99
|
-
/** OldObject is the existing object. Only populated for UPDATE requests. */
|
|
99
|
+
/** OldObject is the existing object. Only populated for UPDATE or DELETE requests. */
|
|
100
100
|
readonly oldObject?: T;
|
|
101
101
|
/** DryRun indicates that modifications will definitely not be persisted for this request. Defaults to false. */
|
|
102
102
|
readonly dryRun?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/k8s/types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEnE,oBAAY,SAAS;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AACD,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,gBAAgB;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;CACZ;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;IAGI;AACJ,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,gBAAgB;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,+GAA+G;IAC/G,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAEhC,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IAExC,iGAAiG;IACjG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B,yHAAyH;IACzH,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAExC,0GAA0G;IAC1G,QAAQ,CAAC,eAAe,CAAC,EAAE,oBAAoB,CAAC;IAEhD,qHAAqH;IACrH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAErC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE;QACjB,0EAA0E;QAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;QAElB;;;WAGG;QACH,GAAG,CAAC,EAAE,MAAM,CAAC;QAEb,kDAAkD;QAClD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAElB,gEAAgE;QAChE,KAAK,CAAC,EAAE;YACN,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;SACzB,CAAC;KACH,CAAC;IAEF,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAEnB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/k8s/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/lib/k8s/webhook.ts"],"names":[],"mappings":";AAGA,OAAO,EAQL,aAAa,EACb,oBAAoB,EACpB,YAAY,EAEZ,8BAA8B,EAC9B,WAAW,EACX,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAEjB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAA6B,YAAY,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,MAAM,EAAU,MAAM,OAAO,CAAC;AAQvC,qBAAa,OAAO;IAeN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAgB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAdzE,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAEnB,KAAK,EAAE,MAAM,CAAC;IAErB,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;gBAE4B,MAAM,EAAE,YAAY,EAAmB,IAAI,CAAC,oBAAQ;IAYjF,yCAAyC;IACzC,SAAS,IAAI,WAAW;IAQxB;;;;;OAKG;IACH,WAAW,IAAI,aAAa;IAgB5B,kBAAkB,IAAI,oBAAoB;IAqB1C,cAAc,IAAI,gBAAgB;IAWlC,cAAc,IAAI,QAAQ;IAe1B,SAAS,IAAI,QAAQ;IAgBrB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAwF7D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,SAAK,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA4DjG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAoGtC,OAAO,IAAI,SAAS;IAsBpB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAkBlD,QAAQ,CAAC,IAAI,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/lib/k8s/webhook.ts"],"names":[],"mappings":";AAGA,OAAO,EAQL,aAAa,EACb,oBAAoB,EACpB,YAAY,EAEZ,8BAA8B,EAC9B,WAAW,EACX,oBAAoB,EACpB,QAAQ,EACR,SAAS,EACT,gBAAgB,EAEjB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAA6B,YAAY,EAAE,MAAM,UAAU,CAAC;AACnE,OAAO,EAAE,MAAM,EAAU,MAAM,OAAO,CAAC;AAQvC,qBAAa,OAAO;IAeN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAgB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAdzE,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAS;IAEnB,KAAK,EAAE,MAAM,CAAC;IAErB,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,QAAQ,IAAI,MAAM,CAE5B;gBAE4B,MAAM,EAAE,YAAY,EAAmB,IAAI,CAAC,oBAAQ;IAYjF,yCAAyC;IACzC,SAAS,IAAI,WAAW;IAQxB;;;;;OAKG;IACH,WAAW,IAAI,aAAa;IAgB5B,kBAAkB,IAAI,oBAAoB;IAqB1C,cAAc,IAAI,gBAAgB;IAWlC,cAAc,IAAI,QAAQ;IAe1B,SAAS,IAAI,QAAQ;IAgBrB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAwF7D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,SAAK,GAAG,OAAO,CAAC,8BAA8B,CAAC;IA4DjG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAoGtC,OAAO,IAAI,SAAS;IAsBpB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAkBlD,QAAQ,CAAC,IAAI,EAAE,MAAM;IA4Bf,OAAO,CAAC,IAAI,EAAE,MAAM;IAyBpB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;CA6InD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MetricsCollector class handles metrics collection using prom-client and performance hooks.
|
|
3
|
+
*/
|
|
4
|
+
export declare class MetricsCollector {
|
|
5
|
+
private _registry;
|
|
6
|
+
private _errors;
|
|
7
|
+
private _alerts;
|
|
8
|
+
private _summary;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a MetricsCollector instance with prefixed metrics.
|
|
11
|
+
* @param {string} [prefix='pepr'] - The prefix for the metric names.
|
|
12
|
+
*/
|
|
13
|
+
constructor(prefix?: string);
|
|
14
|
+
/**
|
|
15
|
+
* Increments the error counter.
|
|
16
|
+
*/
|
|
17
|
+
error(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Increments the alerts counter.
|
|
20
|
+
*/
|
|
21
|
+
alert(): void;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the current timestamp from performance.now() method. Useful for start timing an operation.
|
|
24
|
+
* @returns {number} The timestamp.
|
|
25
|
+
*/
|
|
26
|
+
observeStart(): number;
|
|
27
|
+
/**
|
|
28
|
+
* Observes the duration since the provided start time and updates the summary.
|
|
29
|
+
* @param {number} startTime - The start time.
|
|
30
|
+
*/
|
|
31
|
+
observeEnd(startTime: number): void;
|
|
32
|
+
/**
|
|
33
|
+
* Fetches the current metrics from the registry.
|
|
34
|
+
* @returns {Promise<string>} The metrics.
|
|
35
|
+
*/
|
|
36
|
+
getMetrics(): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/lib/metrics.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,QAAQ,CAA6B;IAE7C;;;OAGG;gBACS,MAAM,SAAS;IAsB3B;;OAEG;IACH,KAAK;IAIL;;OAEG;IACH,KAAK;IAIL;;;OAGG;IACH,YAAY;IAIZ;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM;IAI5B;;;OAGG;IACG,UAAU;CAGjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../../src/lib/processor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIhD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,QAAQ,CAAC,CAsHnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAa,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;;GAGG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,gBAAgB;IAmCrC,OAAO,CAAC,MAAM;IAlCnB,GAAG,EAAE,CAAC,CAAC;IAEd,IAAI,iBAAiB,YAEpB;IAED;;;OAGG;IACH,IAAI,QAAQ,wBAEX;IAED;;;OAGG;IACH,IAAI,WAAW,kBAEd;IAED;;;OAGG;IACH,IAAI,OAAO,eAEV;IAED;;;OAGG;gBACiB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IActC;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;IAIzB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUnC;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAUxC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM;IAQvB;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAQ5B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB;;;;;OAKG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM;CAG1B"}
|
package/dist/lib.js
CHANGED
|
@@ -794,8 +794,11 @@ var import_fast_json_patch = __toESM(require("fast-json-patch"));
|
|
|
794
794
|
function shouldSkipRequest(binding, req) {
|
|
795
795
|
const { group, kind, version } = binding.kind || {};
|
|
796
796
|
const { namespaces, labels, annotations, name } = binding.filters || {};
|
|
797
|
-
const
|
|
798
|
-
|
|
797
|
+
const operation = req.operation.toUpperCase();
|
|
798
|
+
const srcObject = operation === "DELETE" /* DELETE */ ? req.oldObject : req.object;
|
|
799
|
+
const { metadata } = srcObject || {};
|
|
800
|
+
console.log(metadata);
|
|
801
|
+
if (!binding.event.includes(operation) && !binding.event.includes("*" /* Any */)) {
|
|
799
802
|
return true;
|
|
800
803
|
}
|
|
801
804
|
if (name && name !== req.name) {
|
|
@@ -848,7 +851,14 @@ var PeprRequest = class {
|
|
|
848
851
|
*/
|
|
849
852
|
constructor(_input) {
|
|
850
853
|
this._input = _input;
|
|
851
|
-
|
|
854
|
+
if (_input.operation.toUpperCase() === "DELETE" /* DELETE */) {
|
|
855
|
+
this.Raw = (0, import_ramda.clone)(_input.oldObject);
|
|
856
|
+
} else {
|
|
857
|
+
this.Raw = (0, import_ramda.clone)(_input.object);
|
|
858
|
+
}
|
|
859
|
+
if (!this.Raw) {
|
|
860
|
+
throw new Error("unable to load the request object into PeprRequest.RawP");
|
|
861
|
+
}
|
|
852
862
|
}
|
|
853
863
|
Raw;
|
|
854
864
|
get PermitSideEffects() {
|
|
@@ -938,7 +948,7 @@ var PeprRequest = class {
|
|
|
938
948
|
* @returns
|
|
939
949
|
*/
|
|
940
950
|
HasLabel(key) {
|
|
941
|
-
return this.Raw
|
|
951
|
+
return this.Raw.metadata?.labels?.[key] !== void 0;
|
|
942
952
|
}
|
|
943
953
|
/**
|
|
944
954
|
* Check if an annotation exists on the Kubernetes resource.
|
|
@@ -947,7 +957,7 @@ var PeprRequest = class {
|
|
|
947
957
|
* @returns
|
|
948
958
|
*/
|
|
949
959
|
HasAnnotation(key) {
|
|
950
|
-
return this.Raw
|
|
960
|
+
return this.Raw.metadata?.annotations?.[key] !== void 0;
|
|
951
961
|
}
|
|
952
962
|
};
|
|
953
963
|
|
|
@@ -1046,6 +1056,9 @@ async function processor(config, capabilities, req, parentPrefix) {
|
|
|
1046
1056
|
logger_default.info(`No matching capability action found`, parentPrefix);
|
|
1047
1057
|
return response;
|
|
1048
1058
|
}
|
|
1059
|
+
if (req.operation == "DELETE") {
|
|
1060
|
+
return response;
|
|
1061
|
+
}
|
|
1049
1062
|
const transformed = wrapped.Raw;
|
|
1050
1063
|
if (isSecret) {
|
|
1051
1064
|
convertToBase64Map(transformed, skipDecode);
|
|
@@ -1062,6 +1075,71 @@ async function processor(config, capabilities, req, parentPrefix) {
|
|
|
1062
1075
|
return response;
|
|
1063
1076
|
}
|
|
1064
1077
|
|
|
1078
|
+
// src/lib/metrics.ts
|
|
1079
|
+
var import_prom_client = __toESM(require("prom-client"));
|
|
1080
|
+
var import_perf_hooks = require("perf_hooks");
|
|
1081
|
+
var MetricsCollector = class {
|
|
1082
|
+
_registry;
|
|
1083
|
+
_errors;
|
|
1084
|
+
_alerts;
|
|
1085
|
+
_summary;
|
|
1086
|
+
/**
|
|
1087
|
+
* Creates a MetricsCollector instance with prefixed metrics.
|
|
1088
|
+
* @param {string} [prefix='pepr'] - The prefix for the metric names.
|
|
1089
|
+
*/
|
|
1090
|
+
constructor(prefix = "pepr") {
|
|
1091
|
+
this._registry = new import_prom_client.default.Registry();
|
|
1092
|
+
this._errors = new import_prom_client.default.Counter({
|
|
1093
|
+
name: `${prefix}_errors`,
|
|
1094
|
+
help: "error counter",
|
|
1095
|
+
registers: [this._registry]
|
|
1096
|
+
});
|
|
1097
|
+
this._alerts = new import_prom_client.default.Counter({
|
|
1098
|
+
name: `${prefix}_alerts`,
|
|
1099
|
+
help: "alerts counter",
|
|
1100
|
+
registers: [this._registry]
|
|
1101
|
+
});
|
|
1102
|
+
this._summary = new import_prom_client.default.Summary({
|
|
1103
|
+
name: `${prefix}_summary`,
|
|
1104
|
+
help: "summary",
|
|
1105
|
+
registers: [this._registry]
|
|
1106
|
+
});
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Increments the error counter.
|
|
1110
|
+
*/
|
|
1111
|
+
error() {
|
|
1112
|
+
this._errors.inc();
|
|
1113
|
+
}
|
|
1114
|
+
/**
|
|
1115
|
+
* Increments the alerts counter.
|
|
1116
|
+
*/
|
|
1117
|
+
alert() {
|
|
1118
|
+
this._alerts.inc();
|
|
1119
|
+
}
|
|
1120
|
+
/**
|
|
1121
|
+
* Returns the current timestamp from performance.now() method. Useful for start timing an operation.
|
|
1122
|
+
* @returns {number} The timestamp.
|
|
1123
|
+
*/
|
|
1124
|
+
observeStart() {
|
|
1125
|
+
return import_perf_hooks.performance.now();
|
|
1126
|
+
}
|
|
1127
|
+
/**
|
|
1128
|
+
* Observes the duration since the provided start time and updates the summary.
|
|
1129
|
+
* @param {number} startTime - The start time.
|
|
1130
|
+
*/
|
|
1131
|
+
observeEnd(startTime) {
|
|
1132
|
+
this._summary.observe(import_perf_hooks.performance.now() - startTime);
|
|
1133
|
+
}
|
|
1134
|
+
/**
|
|
1135
|
+
* Fetches the current metrics from the registry.
|
|
1136
|
+
* @returns {Promise<string>} The metrics.
|
|
1137
|
+
*/
|
|
1138
|
+
async getMetrics() {
|
|
1139
|
+
return this._registry.metrics();
|
|
1140
|
+
}
|
|
1141
|
+
};
|
|
1142
|
+
|
|
1065
1143
|
// src/lib/controller.ts
|
|
1066
1144
|
var Controller = class {
|
|
1067
1145
|
constructor(config, capabilities, beforeHook, afterHook) {
|
|
@@ -1072,6 +1150,7 @@ var Controller = class {
|
|
|
1072
1150
|
this.app.use(this.logger);
|
|
1073
1151
|
this.app.use(import_express.default.json({ limit: "2mb" }));
|
|
1074
1152
|
this.app.get("/healthz", this.healthz);
|
|
1153
|
+
this.app.get("/metrics", this.metrics);
|
|
1075
1154
|
this.app.post("/mutate/:token", this.mutate);
|
|
1076
1155
|
if (beforeHook) {
|
|
1077
1156
|
console.info(`Using beforeHook: ${beforeHook}`);
|
|
@@ -1082,6 +1161,7 @@ var Controller = class {
|
|
|
1082
1161
|
}
|
|
1083
1162
|
app = (0, import_express.default)();
|
|
1084
1163
|
running = false;
|
|
1164
|
+
metricsCollector = new MetricsCollector("pepr");
|
|
1085
1165
|
// The token used to authenticate requests
|
|
1086
1166
|
token = "";
|
|
1087
1167
|
/** Start the webhook server */
|
|
@@ -1141,13 +1221,23 @@ var Controller = class {
|
|
|
1141
1221
|
res.status(500).send("Internal Server Error");
|
|
1142
1222
|
}
|
|
1143
1223
|
};
|
|
1224
|
+
metrics = async (req, res) => {
|
|
1225
|
+
try {
|
|
1226
|
+
res.send(await this.metricsCollector.getMetrics());
|
|
1227
|
+
} catch (err) {
|
|
1228
|
+
console.error(err);
|
|
1229
|
+
res.status(500).send("Internal Server Error");
|
|
1230
|
+
}
|
|
1231
|
+
};
|
|
1144
1232
|
mutate = async (req, res) => {
|
|
1233
|
+
const startTime = this.metricsCollector.observeStart();
|
|
1145
1234
|
try {
|
|
1146
1235
|
const { token } = req.params;
|
|
1147
1236
|
if (token !== this.token) {
|
|
1148
1237
|
const err = `Unauthorized: invalid token '${token.replace(/[^\w]/g, "_")}'`;
|
|
1149
1238
|
console.warn(err);
|
|
1150
1239
|
res.status(401).send(err);
|
|
1240
|
+
this.metricsCollector.alert();
|
|
1151
1241
|
return;
|
|
1152
1242
|
}
|
|
1153
1243
|
const request = req.body?.request || {};
|
|
@@ -1156,7 +1246,7 @@ var Controller = class {
|
|
|
1156
1246
|
const namespace = request?.namespace || "";
|
|
1157
1247
|
const gvk = request?.kind || { group: "", version: "", kind: "" };
|
|
1158
1248
|
const prefix = `${request.uid} ${namespace}${name}`;
|
|
1159
|
-
logger_default.info(`Mutate request
|
|
1249
|
+
logger_default.info(`Mutate [${request.operation}] ${gvk.group}/${gvk.version}/${gvk.kind}`, prefix);
|
|
1160
1250
|
const response = await processor(this.config, this.capabilities, request, prefix);
|
|
1161
1251
|
this.afterHook && this.afterHook(response);
|
|
1162
1252
|
logger_default.debug(response, prefix);
|
|
@@ -1165,9 +1255,11 @@ var Controller = class {
|
|
|
1165
1255
|
kind: "AdmissionReview",
|
|
1166
1256
|
response
|
|
1167
1257
|
});
|
|
1258
|
+
this.metricsCollector.observeEnd(startTime);
|
|
1168
1259
|
} catch (err) {
|
|
1169
1260
|
console.error(err);
|
|
1170
1261
|
res.status(500).send("Internal Server Error");
|
|
1262
|
+
this.metricsCollector.error();
|
|
1171
1263
|
}
|
|
1172
1264
|
};
|
|
1173
1265
|
};
|