@cripty2001/utils 0.0.54 → 0.0.56

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.
@@ -1,5 +1,7 @@
1
1
  import { Static, TSchema } from '@sinclair/typebox';
2
2
  import { AppserverData } from './common';
3
+ export { Type, Static, TSchema } from '@sinclair/typebox';
4
+ export { Value } from '@sinclair/typebox/value';
3
5
  export type AppserverHandler<I extends AppserverData, U extends AppserverData, O extends AppserverData> = (input: I, user: U | null) => Promise<O> | O;
4
6
  export type AppserverUsergetter<U extends AppserverData> = (token: string) => Promise<U | null>;
5
7
  declare class AppserverError extends Error {
@@ -17,8 +19,9 @@ export declare class AppserverHandledError extends AppserverError {
17
19
  export declare class Appserver<U extends AppserverData> {
18
20
  private app;
19
21
  private parseUser;
20
- constructor(port: number, parseUser: AppserverUsergetter<U>);
22
+ private getMetrics;
23
+ constructor(port: number, parseUser: AppserverUsergetter<U>, getMetrics: () => Record<string, number>);
24
+ private handleMetricsRequest;
21
25
  private parseInput;
22
26
  register<ISchema extends TSchema, O extends AppserverData, I extends Static<ISchema> & AppserverData = Static<ISchema> & AppserverData>(action: string, inputSchema: ISchema, auth: boolean, handler: AppserverHandler<I, U, O>): void;
23
27
  }
24
- export {};
@@ -3,10 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Appserver = exports.AppserverHandledError = exports.AppserverAuthError = void 0;
6
+ exports.Appserver = exports.AppserverHandledError = exports.AppserverAuthError = exports.Value = exports.Type = void 0;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const value_1 = require("@sinclair/typebox/value");
9
9
  const msgpack_1 = require("@msgpack/msgpack");
10
+ // Helpful for avoiding sinclair version mismatch between this and the actual user of the package
11
+ var typebox_1 = require("@sinclair/typebox");
12
+ Object.defineProperty(exports, "Type", { enumerable: true, get: function () { return typebox_1.Type; } });
13
+ var value_2 = require("@sinclair/typebox/value");
14
+ Object.defineProperty(exports, "Value", { enumerable: true, get: function () { return value_2.Value; } });
10
15
  (0, msgpack_1.encode)({}); // Fixes issue with msgpack not being included in build
11
16
  class AppserverError extends Error {
12
17
  code;
@@ -34,10 +39,43 @@ exports.AppserverHandledError = AppserverHandledError;
34
39
  class Appserver {
35
40
  app;
36
41
  parseUser;
37
- constructor(port, parseUser) {
42
+ getMetrics;
43
+ constructor(port, parseUser, getMetrics) {
38
44
  this.parseUser = parseUser;
45
+ this.getMetrics = getMetrics;
39
46
  this.app = (0, express_1.default)();
40
47
  this.app.listen(port);
48
+ this.app.get('/metrics', async (req, res) => {
49
+ await this.handleMetricsRequest(req, res);
50
+ });
51
+ }
52
+ async handleMetricsRequest(req, res) {
53
+ try {
54
+ const metrics = this.getMetrics();
55
+ const toReturn = Object.entries(metrics)
56
+ .map(([name, value]) => {
57
+ if (typeof value !== 'number' || !isFinite(value))
58
+ throw new Error(`Metric value for "${name}" is not a number`);
59
+ const prometheusName = 'app_' + name
60
+ .toLowerCase()
61
+ .replace(/[^a-z0-9_]/g, '_')
62
+ .replace(/_+/g, '_')
63
+ .replace(/^_+|_+$/g, '');
64
+ return `# TYPE ${prometheusName} gauge\n${prometheusName} ${value}\n`;
65
+ })
66
+ .join('');
67
+ res
68
+ .status(200)
69
+ .type('text/plain')
70
+ .send(toReturn);
71
+ }
72
+ catch (e) {
73
+ console.log("Error generating metrics:", e);
74
+ res
75
+ .status(500)
76
+ .type('text/plain')
77
+ .send('# Error generating metrics\n');
78
+ }
41
79
  }
42
80
  async parseInput(req) {
43
81
  if (req.headers['content-type'] !== 'application/vnd.msgpack')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cripty2001/utils",
3
- "version": "0.0.54",
3
+ "version": "0.0.56",
4
4
  "description": "Internal Set of utils. If you need them use them, otherwise go to the next package ;)",
5
5
  "homepage": "https://github.com/cripty2001/utils#readme",
6
6
  "bugs": {