@theotherwillembotha/node-red-plugincore 0.1.0 → 0.3.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.
Files changed (167) hide show
  1. package/README.md +616 -220
  2. package/build/GenerateNodes.js +9 -33
  3. package/build/Nodes.html +2 -1505
  4. package/build/Nodes.js +5 -19
  5. package/build/Plugins.html +11 -0
  6. package/build/Plugins.js +17 -12
  7. package/build/core/NodeConstructor.d.ts +12 -16
  8. package/build/core/NodeConstructor.d.ts.map +1 -1
  9. package/build/core/NodeConstructor.js +125 -185
  10. package/build/core/NodeGenerator.d.ts +3 -1
  11. package/build/core/NodeGenerator.d.ts.map +1 -1
  12. package/build/core/NodeGenerator.js +139 -43
  13. package/build/core/NodeManagerRuntime.d.ts +44 -0
  14. package/build/core/NodeManagerRuntime.d.ts.map +1 -0
  15. package/build/core/NodeManagerRuntime.js +140 -0
  16. package/build/core/Utils.d.ts.map +1 -1
  17. package/build/core/logger/service/LoggerService.d.ts +8 -6
  18. package/build/core/logger/service/LoggerService.d.ts.map +1 -1
  19. package/build/core/logger/service/LoggerService.js +101 -23
  20. package/build/core/logger/template/LoggerTemplate.d.ts +1 -2
  21. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
  22. package/build/core/logger/template/LoggerTemplate.js +18 -5
  23. package/build/core/metrics/MetricsDecorator.d.ts +1 -2
  24. package/build/core/metrics/MetricsDecorator.d.ts.map +1 -1
  25. package/build/core/metrics/MetricsDecorator.js +89 -116
  26. package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -1
  27. package/build/core/metrics/node/CounterMetricConfigNode.js +4 -5
  28. package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -1
  29. package/build/core/metrics/node/GaugeMetricConfigNode.js +5 -6
  30. package/build/core/metrics/node/MetricsConfigNode.d.ts +19 -9
  31. package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -1
  32. package/build/core/metrics/node/MetricsConfigNode.js +14 -45
  33. package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -1
  34. package/build/core/metrics/node/TimerMetricConfigNode.js +11 -17
  35. package/build/core/metrics/service/MetricsService.d.ts +110 -114
  36. package/build/core/metrics/service/MetricsService.d.ts.map +1 -1
  37. package/build/core/metrics/service/MetricsService.js +122 -339
  38. package/build/core/metrics/template/CounterMetricTemplate.d.ts +1 -2
  39. package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -1
  40. package/build/core/metrics/template/CounterMetricTemplate.js +16 -5
  41. package/build/core/metrics/template/GaugeMetricTemplate.d.ts +1 -2
  42. package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -1
  43. package/build/core/metrics/template/GaugeMetricTemplate.js +16 -5
  44. package/build/core/metrics/template/MetricsTemplate.d.ts +1 -2
  45. package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -1
  46. package/build/core/metrics/template/MetricsTemplate.js +18 -6
  47. package/build/core/metrics/template/TimerMetricTemplate.d.ts +1 -2
  48. package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -1
  49. package/build/core/metrics/template/TimerMetricTemplate.js +16 -5
  50. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts +1 -1
  51. package/build/core/other/node/DelegatedConfigReferenceNode.d.ts.map +1 -1
  52. package/build/core/other/node/DelegatedConfigReferenceNode.js +1 -1
  53. package/build/core/other/service/InputService.d.ts.map +1 -1
  54. package/build/core/other/service/SettingsService.d.ts +1 -2
  55. package/build/core/other/service/SettingsService.d.ts.map +1 -1
  56. package/build/core/other/service/SettingsService.js +19 -5
  57. package/build/core/other/template/BasicTemplate.d.ts +1 -2
  58. package/build/core/other/template/BasicTemplate.d.ts.map +1 -1
  59. package/build/core/other/template/BasicTemplate.js +15 -5
  60. package/build/core/other/template/SettingsTemplate.d.ts +1 -2
  61. package/build/core/other/template/SettingsTemplate.d.ts.map +1 -1
  62. package/build/core/other/template/SettingsTemplate.js +17 -5
  63. package/build/core/state/node/InternalStateConfigNode.d.ts +16 -0
  64. package/build/core/state/node/InternalStateConfigNode.d.ts.map +1 -0
  65. package/build/core/state/node/InternalStateConfigNode.js +89 -0
  66. package/build/core/state/node/StateConfigNode.d.ts +24 -0
  67. package/build/core/state/node/StateConfigNode.d.ts.map +1 -0
  68. package/build/core/state/node/StateConfigNode.js +22 -0
  69. package/build/core/state/service/StateService.d.ts +34 -0
  70. package/build/core/state/service/StateService.d.ts.map +1 -0
  71. package/build/core/state/service/StateService.js +201 -0
  72. package/build/core/state/template/StateTemplate.d.ts +7 -0
  73. package/build/core/state/template/StateTemplate.d.ts.map +1 -0
  74. package/build/core/state/template/StateTemplate.js +25 -0
  75. package/build/core/tagging/ServiceDescriptionDecorator.d.ts +10 -0
  76. package/build/core/tagging/ServiceDescriptionDecorator.d.ts.map +1 -0
  77. package/build/core/tagging/ServiceDescriptionDecorator.js +10 -0
  78. package/build/core/tagging/TemplateDescriptionDecorator.d.ts +8 -0
  79. package/build/core/tagging/TemplateDescriptionDecorator.d.ts.map +1 -0
  80. package/build/core/tagging/TemplateDescriptionDecorator.js +10 -0
  81. package/build/core/tagging/service/NodeTypeService.d.ts +1 -2
  82. package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -1
  83. package/build/core/tagging/service/NodeTypeService.js +19 -5
  84. package/build/core/ui/template/ScriptEditorTemplate.d.ts +1 -2
  85. package/build/core/ui/template/ScriptEditorTemplate.d.ts.map +1 -1
  86. package/build/core/ui/template/ScriptEditorTemplate.js +15 -5
  87. package/build/core/ui/template/UIHelperTemplate.d.ts +1 -2
  88. package/build/core/ui/template/UIHelperTemplate.d.ts.map +1 -1
  89. package/build/core/ui/template/UIHelperTemplate.js +15 -5
  90. package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -1
  91. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
  92. package/build/core/webhook/service/WebhookServerService.d.ts +3 -4
  93. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
  94. package/build/core/webhook/service/WebhookServerService.js +48 -18
  95. package/build/core/webhook/template/WebhookTemplate.d.ts +1 -2
  96. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
  97. package/build/core/webhook/template/WebhookTemplate.js +19 -6
  98. package/build/index.d.ts +6 -2
  99. package/build/index.d.ts.map +1 -1
  100. package/build/index.js +7 -2
  101. package/build/runtime/NodeManagerRuntime.js +140 -0
  102. package/documentation/CounterMetricConfigNode.png +0 -0
  103. package/documentation/GaugeMetricConfigNode.png +0 -0
  104. package/documentation/LoggerTemplate.png +0 -0
  105. package/documentation/MetricsTemplate.png +0 -0
  106. package/documentation/StateTemplate.png +0 -0
  107. package/documentation/TimerMetricConfigNode_histogram.png +0 -0
  108. package/documentation/TimerMetricConfigNode_summary.png +0 -0
  109. package/documentation/WebhookServerConfigNode.png +0 -0
  110. package/documentation/WebhookTemplate.png +0 -0
  111. package/package.json +4 -11
  112. package/src/GenerateNodes.ts +10 -40
  113. package/src/core/NodeConstructor.ts +150 -228
  114. package/src/core/NodeGenerator.ts +156 -47
  115. package/src/core/NodeManagerRuntime.ts +179 -0
  116. package/src/core/logger/service/LoggerService.ts +60 -32
  117. package/src/core/logger/template/LoggerTemplate.html +11 -6
  118. package/src/core/logger/template/LoggerTemplate.ts +9 -11
  119. package/src/core/metrics/MetricsDecorator.ts +140 -168
  120. package/src/core/metrics/node/CounterMetricConfigNode.ts +20 -20
  121. package/src/core/metrics/node/GaugeMetricConfigNode.ts +24 -25
  122. package/src/core/metrics/node/MetricsConfigNode.ts +29 -48
  123. package/src/core/metrics/node/TimerMetricConfigNode.ts +50 -59
  124. package/src/core/metrics/service/MetricsService.ts +214 -489
  125. package/src/core/metrics/template/CounterMetricTemplate.html +0 -1
  126. package/src/core/metrics/template/CounterMetricTemplate.ts +8 -11
  127. package/src/core/metrics/template/GaugeMetricTemplate.html +1 -1
  128. package/src/core/metrics/template/GaugeMetricTemplate.ts +8 -11
  129. package/src/core/metrics/template/MetricsTemplate.html +132 -13
  130. package/src/core/metrics/template/MetricsTemplate.ts +9 -10
  131. package/src/core/metrics/template/TimerMetricTemplate.ts +8 -10
  132. package/src/core/other/node/DelegatedConfigReferenceNode.ts +1 -1
  133. package/src/core/other/service/SettingsService.ts +6 -10
  134. package/src/core/other/template/BasicTemplate.html +1 -1
  135. package/src/core/other/template/BasicTemplate.ts +6 -11
  136. package/src/core/other/template/SettingsTemplate.ts +8 -13
  137. package/src/core/state/node/InternalStateConfigNode.html +77 -0
  138. package/src/core/state/node/InternalStateConfigNode.ts +102 -0
  139. package/src/core/state/node/StateConfigNode.ts +29 -0
  140. package/src/core/state/service/StateService.ts +180 -0
  141. package/src/core/state/template/StateTemplate.html +244 -0
  142. package/src/core/state/template/StateTemplate.ts +18 -0
  143. package/src/core/tagging/ServiceDescriptionDecorator.ts +23 -0
  144. package/src/core/tagging/TemplateDescriptionDecorator.ts +19 -0
  145. package/src/core/tagging/service/NodeTypeService.ts +6 -11
  146. package/src/core/ui/template/ScriptEditorTemplate.ts +6 -10
  147. package/src/core/ui/template/UIHelperTemplate.html +41 -26
  148. package/src/core/ui/template/UIHelperTemplate.ts +6 -10
  149. package/src/core/webhook/service/WebhookServerService.ts +39 -23
  150. package/src/core/webhook/template/WebhookTemplate.html +28 -35
  151. package/src/core/webhook/template/WebhookTemplate.ts +10 -12
  152. package/src/index.ts +8 -2
  153. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +0 -20
  154. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +0 -1
  155. package/build/core/logger/node/ConsoleLoggerConfigNode.js +0 -62
  156. package/build/core/logger/node/RestLoggerConfigNode.d.ts +0 -40
  157. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +0 -1
  158. package/build/core/logger/node/RestLoggerConfigNode.js +0 -128
  159. package/documentation/ConsoleLoggerConfigNode.png +0 -0
  160. package/documentation/MetricsConfigNode.png +0 -0
  161. package/documentation/RestLoggerConfigNode.png +0 -0
  162. package/documentation/TimerMetricConfigNode.png +0 -0
  163. package/documentation/WebhookNode.png +0 -0
  164. package/src/core/logger/node/ConsoleLoggerConfigNode.html +0 -90
  165. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +0 -71
  166. package/src/core/logger/node/RestLoggerConfigNode.html +0 -183
  167. package/src/core/logger/node/RestLoggerConfigNode.ts +0 -170
@@ -1,18 +1,77 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4
43
  };
44
+ var LoggerService_1;
5
45
  Object.defineProperty(exports, "__esModule", { value: true });
6
46
  exports.DoNothingAppender = exports.LoggerConfigNode = exports.LoggerService = exports.AbstractLogger = exports.Log = exports.ApiKeyMechanismType = exports.RestAuthType = exports.Level = void 0;
47
+ const os = __importStar(require("os"));
7
48
  const NodeConstructor_1 = require("../../NodeConstructor");
8
- const handlebars_1 = __importDefault(require("handlebars"));
49
+ const ServiceDescriptionDecorator_1 = require("../../tagging/ServiceDescriptionDecorator");
9
50
  const LoggerTemplate_1 = require("../template/LoggerTemplate");
10
- var network = require('network');
11
- // helper for serializing json objects inside handlebars tags.
12
- // you can then convert it like this: {{{json myobject}}}
13
- handlebars_1.default.registerHelper('json', function (context) {
14
- return JSON.stringify(context);
15
- });
51
+ // Build-time / optional runtime deps - lazy so they are never required at bundle load time.
52
+ function getHandlebars() { return require('handlebars'); }
53
+ function getLocalIpAddress() {
54
+ const interfaces = os.networkInterfaces();
55
+ for (const name of Object.keys(interfaces)) {
56
+ for (const iface of interfaces[name] ?? []) {
57
+ if (iface.family === 'IPv4' && !iface.internal) {
58
+ return iface.address;
59
+ }
60
+ }
61
+ }
62
+ return '127.0.0.1';
63
+ }
64
+ let _helpersRegistered = false;
65
+ function ensureHelpersRegistered() {
66
+ if (_helpersRegistered)
67
+ return;
68
+ _helpersRegistered = true;
69
+ // helper for serializing json objects inside handlebars tags.
70
+ // you can then convert it like this: {{{json myobject}}}
71
+ getHandlebars().registerHelper('json', function (context) {
72
+ return JSON.stringify(context);
73
+ });
74
+ }
16
75
  var Level;
17
76
  (function (Level) {
18
77
  Level["DEBUG"] = "DEBUG";
@@ -34,8 +93,9 @@ var ApiKeyMechanismType;
34
93
  })(ApiKeyMechanismType || (exports.ApiKeyMechanismType = ApiKeyMechanismType = {}));
35
94
  class Log {
36
95
  constructor(config) {
96
+ this._compiledTemplate = null;
37
97
  this._config = config;
38
- this.template = handlebars_1.default.compile(config.template);
98
+ this._templateStr = config.template;
39
99
  this.tags = {
40
100
  id: config.id,
41
101
  node: config.name,
@@ -44,13 +104,20 @@ class Log {
44
104
  instance: LoggerService.instanceID
45
105
  };
46
106
  }
107
+ getTemplate() {
108
+ if (!this._compiledTemplate) {
109
+ ensureHelpersRegistered();
110
+ this._compiledTemplate = getHandlebars().compile(this._templateStr);
111
+ }
112
+ return this._compiledTemplate;
113
+ }
47
114
  config() {
48
115
  return this._config;
49
116
  }
50
117
  log(payload) {
51
118
  try {
52
119
  // step 1. serialize the payload using the template engine.
53
- let message = (payload instanceof String) ? payload : this.template({ msg: payload });
120
+ let message = (payload instanceof String) ? payload : this.getTemplate()({ msg: payload });
54
121
  // step 2. write to the log appender.
55
122
  this.writeToLog(this.config().level, message, this.tags);
56
123
  }
@@ -79,24 +146,33 @@ class AbstractLogger {
79
146
  }
80
147
  }
81
148
  exports.AbstractLogger = AbstractLogger;
82
- class LoggerService extends NodeConstructor_1.BaseService {
149
+ let LoggerService = LoggerService_1 = class LoggerService extends NodeConstructor_1.BaseService {
150
+ // Backed by a global so the value is shared across separately-bundled copies
151
+ // of plugincore (Nodes.js and Plugins.js each inline their own copy).
152
+ static get instanceID() {
153
+ return global.__plugincore_instance_id__ ?? '';
154
+ }
155
+ static set instanceID(value) {
156
+ global.__plugincore_instance_id__ = value;
157
+ }
83
158
  constructor() {
84
159
  super("logger");
85
160
  }
86
161
  init(red) {
87
162
  this.red = red;
88
- return new Promise((resolve) => {
89
- network.get_active_interface((err, obj) => {
90
- LoggerService.instanceID = obj.ip_address;
91
- });
92
- });
163
+ LoggerService_1.instanceID = getLocalIpAddress();
93
164
  }
94
165
  deinit(red) { }
95
- static getServiceDescriptor() {
96
- return new NodeConstructor_1.ServiceDescriptor("@theotherwillembotha/loggerservice", "LoggerService", "services-plugin", "@theotherwillembotha/node-red-plugincore", LoggerService, [LoggerTemplate_1.LoggerTemplate]);
97
- }
98
- }
166
+ };
99
167
  exports.LoggerService = LoggerService;
168
+ exports.LoggerService = LoggerService = LoggerService_1 = __decorate([
169
+ (0, ServiceDescriptionDecorator_1.ServiceDescription)({
170
+ id: "@theotherwillembotha/loggerservice",
171
+ sourceFile: "@theotherwillembotha/node-red-plugincore",
172
+ dependencies: [LoggerTemplate_1.LoggerTemplate]
173
+ }),
174
+ __metadata("design:paramtypes", [])
175
+ ], LoggerService);
100
176
  class LoggerConfigNode extends NodeConstructor_1.ConfigNode {
101
177
  constructor(node, config) {
102
178
  super(node, config);
@@ -107,9 +183,11 @@ class LoggerConfigNode extends NodeConstructor_1.ConfigNode {
107
183
  }
108
184
  exports.LoggerConfigNode = LoggerConfigNode;
109
185
  class DoNothingAppender extends Log {
110
- static { this.instance = new DoNothingAppender(); }
186
+ static { this._instance = null; }
111
187
  static get() {
112
- return DoNothingAppender.instance;
188
+ if (!DoNothingAppender._instance)
189
+ DoNothingAppender._instance = new DoNothingAppender();
190
+ return DoNothingAppender._instance;
113
191
  }
114
192
  constructor() {
115
193
  super({ flow: "", id: "", level: "", name: "", template: "", type: "" });
@@ -1,4 +1,4 @@
1
- import { BaseNodeConfig, Template, TemplateDescriptor } from "../../NodeConstructor";
1
+ import { BaseNodeConfig, Template } from "../../NodeConstructor";
2
2
  export interface LoggerTemplateNodeConfig extends BaseNodeConfig {
3
3
  logEnabled: boolean;
4
4
  logger: string;
@@ -14,6 +14,5 @@ export type LoggerTemplateConfig = {
14
14
  level: string;
15
15
  };
16
16
  export declare class LoggerTemplate extends Template {
17
- static getTemplateDescriptor(): TemplateDescriptor;
18
17
  }
19
18
  //# sourceMappingURL=LoggerTemplate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoggerTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/template/LoggerTemplate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGpF,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC5D,UAAU,EAAC,OAAO,CAAC;IACnB,MAAM,EAAC,MAAM,CAAC;IACd,0BAA0B,EAAC,OAAO,CAAC;IACnC,mBAAmB,EAAC,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,EAAE,EAAC,MAAM,CAAC;IACV,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAChB,KAAK,EAAC,MAAM,CAAC;CAChB,CAAA;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAGxC,MAAM,CAAC,qBAAqB,IAAI,kBAAkB;CAQrD"}
1
+ {"version":3,"file":"LoggerTemplate.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/template/LoggerTemplate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAMhE,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC5D,UAAU,EAAC,OAAO,CAAC;IACnB,MAAM,EAAC,MAAM,CAAC;IACd,0BAA0B,EAAC,OAAO,CAAC;IACnC,mBAAmB,EAAC,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,EAAE,EAAC,MAAM,CAAC;IACV,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,MAAM,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAChB,KAAK,EAAC,MAAM,CAAC;CAChB,CAAA;AAED,qBAKa,cAAe,SAAQ,QAAQ;CAC3C"}
@@ -1,11 +1,24 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
2
8
  Object.defineProperty(exports, "__esModule", { value: true });
3
9
  exports.LoggerTemplate = void 0;
4
10
  const NodeGenerator_1 = require("../../NodeGenerator");
5
11
  const NodeConstructor_1 = require("../../NodeConstructor");
6
- class LoggerTemplate extends NodeConstructor_1.Template {
7
- static getTemplateDescriptor() {
8
- return new NodeConstructor_1.TemplateDescriptor("logger", LoggerTemplate, NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "LoggerTemplate.html", []);
9
- }
10
- }
12
+ const TemplateDescriptionDecorator_1 = require("../../tagging/TemplateDescriptionDecorator");
13
+ const DelegatedConfigReferenceNode_1 = require("../../other/node/DelegatedConfigReferenceNode");
14
+ const LoggerService_1 = require("../service/LoggerService");
15
+ let LoggerTemplate = class LoggerTemplate extends NodeConstructor_1.Template {
16
+ };
11
17
  exports.LoggerTemplate = LoggerTemplate;
18
+ exports.LoggerTemplate = LoggerTemplate = __decorate([
19
+ (0, TemplateDescriptionDecorator_1.TemplateDescription)({
20
+ name: "logger",
21
+ templateFile: NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "LoggerTemplate.html",
22
+ dependencies: [DelegatedConfigReferenceNode_1.DelegatedConfigReferenceNode, LoggerService_1.LoggerService],
23
+ })
24
+ ], LoggerTemplate);
@@ -1,4 +1,4 @@
1
- import { BucketType, DefaultBucketConfig } from "./service/MetricsService";
1
+ import { BucketType } from "./service/MetricsService";
2
2
  export declare enum MetricType {
3
3
  Counter = "Counter",
4
4
  Timer = "Timer",
@@ -32,7 +32,6 @@ type HistogramTimerMetricDecoratorConfig = TimerMetricDecoratorConfig & {
32
32
  };
33
33
  type DefaultHistogramTimerMetricDecoratorConfig = HistogramTimerMetricDecoratorConfig & {
34
34
  buckettype: BucketType.default;
35
- bucketconfig?: DefaultBucketConfig;
36
35
  };
37
36
  type MetricsConfig = CounterMetricDecoratorConfig | GaugeMetricDecoratorConfig | SummaryTimerMetricDecoratorConfig | DefaultHistogramTimerMetricDecoratorConfig;
38
37
  export declare function Metrics(metricsConfig: MetricsConfig): Function;
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsDecorator.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/MetricsDecorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAuB,mBAAmB,EAAiN,MAAM,0BAA0B,CAAC;AAG/S,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,oBAAY,mBAAmB;IAC3B,SAAS,cAAc;IACvB,OAAO,YAAY;CACtB;AAGD,KAAK,yBAAyB,GAAG;IAC7B,IAAI,EAAC,MAAM,CAAC;IACZ,IAAI,EAAC,UAAU,CAAC;IAChB,WAAW,EAAC,MAAM,CAAC;CACtB,CAAA;AAED,KAAK,4BAA4B,GAAG,yBAAyB,GAAG;IAC9D,IAAI,EAAC,UAAU,CAAC,OAAO,CAAA;CACxB,CAAA;AAED,KAAK,0BAA0B,GAAG,yBAAyB,GAAG;IAC5D,IAAI,EAAC,UAAU,CAAC,KAAK,CAAA;CACtB,CAAA;AAED,KAAK,0BAA0B,GAAG,yBAAyB,GAAG;IAC5D,IAAI,EAAC,UAAU,CAAC,KAAK,CAAC;IACtB,SAAS,EAAC,mBAAmB,CAAC;CAC/B,CAAA;AAED,KAAK,iCAAiC,GAAG,0BAA0B,GAAG;IACpE,SAAS,EAAC,mBAAmB,CAAC,OAAO,CAAC;CACvC,CAAA;AAED,KAAK,mCAAmC,GAAG,0BAA0B,GAAG;IACtE,SAAS,EAAC,mBAAmB,CAAC,SAAS,CAAC;IACxC,UAAU,EAAC,UAAU,CAAC;CAEvB,CAAA;AAED,KAAK,0CAA0C,GAAG,mCAAmC,GAAG;IACtF,UAAU,EAAC,UAAU,CAAC,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAC,mBAAmB,CAAA;CAClC,CAAA;AAED,KAAK,aAAa,GAChB,4BAA4B,GAC5B,0BAA0B,GAC1B,iCAAiC,GACjC,0CAA0C,CAAA;AAE5C,wBAAgB,OAAO,CAAC,aAAa,EAAE,aAAa,GAAE,QAAQ,CAyK7D"}
1
+ {"version":3,"file":"MetricsDecorator.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/MetricsDecorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,UAAU,EAUX,MAAM,0BAA0B,CAAC;AAGlC,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,KAAK,UAAY;IACjB,KAAK,UAAY;CAClB;AAED,oBAAY,mBAAmB;IAC3B,SAAS,cAAc;IACvB,OAAO,YAAc;CACxB;AAED,KAAK,yBAAyB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAA;AAED,KAAK,4BAA4B,GAAG,yBAAyB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAA;CAAE,CAAA;AAC5F,KAAK,0BAA0B,GAAK,yBAAyB,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAA;CAAE,CAAA;AAE1F,KAAK,0BAA0B,GAAG,yBAAyB,GAAG;IAC5D,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;IACvB,SAAS,EAAE,mBAAmB,CAAC;CAChC,CAAA;AAED,KAAK,iCAAiC,GAAG,0BAA0B,GAAG;IACpE,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC;CACxC,CAAA;AAED,KAAK,mCAAmC,GAAG,0BAA0B,GAAG;IACtE,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAA;AAED,KAAK,0CAA0C,GAAG,mCAAmC,GAAG;IACtF,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC;CAChC,CAAA;AAED,KAAK,aAAa,GAChB,4BAA4B,GAC5B,0BAA0B,GAC1B,iCAAiC,GACjC,0CAA0C,CAAA;AAkF5C,wBAAgB,OAAO,CAAC,aAAa,EAAE,aAAa,GAAG,QAAQ,CAqD9D"}
@@ -15,146 +15,119 @@ var MetricCollectorType;
15
15
  MetricCollectorType["histogram"] = "histogram";
16
16
  MetricCollectorType["summary"] = "summary";
17
17
  })(MetricCollectorType || (exports.MetricCollectorType = MetricCollectorType = {}));
18
+ function resolveMetric(node, metricsConfig, _metrics) {
19
+ const nde = {
20
+ id: node.id(),
21
+ name: node.name(),
22
+ flow: node.flow(),
23
+ type: node.type()
24
+ };
25
+ if (metricsConfig.type === MetricType.Counter) {
26
+ if (!_metrics.supports(MetricsService_1.MetricCapability.Counter)) {
27
+ console.warn(`[PluginCore] @Metrics Counter requested by node "${node.name()}" (${node.type()}) but the selected provider does not support Counter. Using DoNothing.`);
28
+ }
29
+ const counterConfig = {
30
+ metricname: metricsConfig.name,
31
+ metricdescription: metricsConfig.description,
32
+ node: nde
33
+ };
34
+ return _metrics.counter(counterConfig);
35
+ }
36
+ if (metricsConfig.type === MetricType.Gauge) {
37
+ if (!_metrics.supports(MetricsService_1.MetricCapability.Gauge)) {
38
+ console.warn(`[PluginCore] @Metrics Gauge requested by node "${node.name()}" (${node.type()}) but the selected provider does not support Gauge. Using DoNothing.`);
39
+ }
40
+ const gaugeConfig = {
41
+ metricname: metricsConfig.name,
42
+ metricdescription: metricsConfig.description,
43
+ node: nde
44
+ };
45
+ return _metrics.gauge(gaugeConfig);
46
+ }
47
+ if (metricsConfig.type === MetricType.Timer) {
48
+ if (metricsConfig.collector === MetricCollectorType.histogram) {
49
+ if (!_metrics.supports(MetricsService_1.MetricCapability.Histogram)) {
50
+ console.warn(`[PluginCore] @Metrics Histogram requested by node "${node.name()}" (${node.type()}) but the selected provider does not support Histogram. Using DoNothing.`);
51
+ }
52
+ if (metricsConfig.buckettype === MetricsService_1.BucketType.default) {
53
+ const histogramConfig = {
54
+ metricname: metricsConfig.name,
55
+ metricdescription: metricsConfig.description,
56
+ buckettype: metricsConfig.buckettype,
57
+ bucketconfig: {},
58
+ node: nde
59
+ };
60
+ return _metrics.histogram(histogramConfig);
61
+ }
62
+ }
63
+ if (metricsConfig.collector === MetricCollectorType.summary) {
64
+ if (!_metrics.supports(MetricsService_1.MetricCapability.Summary)) {
65
+ console.warn(`[PluginCore] @Metrics Summary requested by node "${node.name()}" (${node.type()}) but the selected provider does not support Summary. Using DoNothing.`);
66
+ }
67
+ }
68
+ }
69
+ console.error("[PluginCore] @Metrics: no factory matched for config", metricsConfig);
70
+ return undefined;
71
+ }
72
+ function resolveContainer(metricsReference) {
73
+ if (!metricsReference)
74
+ return new MetricsService_1.DoNothingMetricsContainer();
75
+ const refNode = NodeConstructor_1.NodeManager.RED.nodes.getNode(metricsReference);
76
+ return refNode ? refNode.node().metrics() : new MetricsService_1.DoNothingMetricsContainer();
77
+ }
78
+ function dudForType(metricsConfig) {
79
+ if (metricsConfig.type === MetricType.Counter)
80
+ return new MetricsService_1.DoNothingCounterMetric();
81
+ if (metricsConfig.type === MetricType.Gauge)
82
+ return new MetricsService_1.DoNothingGaugeMetric();
83
+ if (metricsConfig.type === MetricType.Timer) {
84
+ if (metricsConfig.collector === MetricCollectorType.histogram)
85
+ return new MetricsService_1.DoNothingHistogramMetric();
86
+ if (metricsConfig.collector === MetricCollectorType.summary)
87
+ return new MetricsService_1.DoNothingSummaryMetric();
88
+ }
89
+ return undefined;
90
+ }
18
91
  function Metrics(metricsConfig) {
19
92
  return function (target, propertyKey) {
20
- // if the type is a string, then its probably defined in the local (core) module.
21
93
  if (typeof propertyKey === "string") {
22
94
  const valueSymbol = Symbol(`_${String(propertyKey)}_value`);
23
95
  Object.defineProperty(target, propertyKey, {
24
96
  get: function () {
25
- if (this[valueSymbol]) {
97
+ if (this[valueSymbol])
26
98
  return this[valueSymbol];
27
- }
28
- //console.log("injecting metric", valueSymbol);
29
- let node = this;
30
- let config = node.config();
99
+ const node = this;
100
+ const config = node.config();
31
101
  if (config.metricsEnabled) {
32
- let _metrics = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference).node().metrics();
33
- let nde = {
34
- id: node.id(),
35
- name: node.name(),
36
- flow: node.flow(),
37
- type: node.type()
38
- };
39
- // counter metric
40
- if (metricsConfig.type === MetricType.Counter) {
41
- let counterConfig = {
42
- metricname: metricsConfig.name,
43
- metricdescription: metricsConfig.description,
44
- node: nde
45
- };
46
- this[valueSymbol] = _metrics.counter(counterConfig);
47
- return this[valueSymbol];
48
- }
49
- // gauge metric
50
- if (metricsConfig.type === MetricType.Gauge) {
51
- let gaugeConfig = {
52
- metricname: metricsConfig.name,
53
- metricdescription: metricsConfig.description,
54
- node: nde
55
- };
56
- this[valueSymbol] = _metrics.gauge(gaugeConfig);
57
- return this[valueSymbol];
58
- }
59
- // timer metric.
60
- if (metricsConfig.type === MetricType.Timer) {
61
- // handle it as a histogram collector.
62
- if (metricsConfig.collector === MetricCollectorType.histogram) {
63
- // handle it as the default bucket.
64
- if (metricsConfig.buckettype === MetricsService_1.BucketType.default) {
65
- let histogramConfig = {
66
- metricname: metricsConfig.name,
67
- metricdescription: metricsConfig.description,
68
- buckettype: metricsConfig.buckettype,
69
- bucketconfig: {},
70
- node: nde
71
- };
72
- this[valueSymbol] = _metrics.histogram(histogramConfig);
73
- return this[valueSymbol];
74
- }
75
- }
76
- }
77
- console.error("No Metric Factory type defined for ", metricsConfig);
78
- return this[valueSymbol];
102
+ const _metrics = resolveContainer(config.metricsReference);
103
+ this[valueSymbol] = resolveMetric(node, metricsConfig, _metrics);
104
+ }
105
+ else {
106
+ this[valueSymbol] = dudForType(metricsConfig);
79
107
  }
80
- this[valueSymbol] =
81
- (metricsConfig.type === MetricType.Counter) ? { inc() { }, reset() { } } :
82
- (metricsConfig.type === MetricType.Gauge) ? { inc() { }, dec() { }, reset() { } } :
83
- (metricsConfig.type === MetricType.Timer) ? { observe(val) { } }
84
- : undefined;
85
108
  return this[valueSymbol];
86
109
  },
87
110
  enumerable: true,
88
111
  configurable: false
89
112
  });
90
- return;
91
113
  }
92
114
  else {
93
115
  let property = propertyKey;
94
116
  property.addInitializer(function () {
95
- let node = this;
117
+ const node = this;
96
118
  const valueSymbol = Symbol(`_${String(property.name)}_value`);
97
119
  Object.defineProperty(node, property.name, {
98
120
  get: function () {
99
- if (this[valueSymbol]) {
121
+ if (this[valueSymbol])
100
122
  return this[valueSymbol];
101
- }
102
- //console.log("injecting metric", valueSymbol);
103
- let config = node.config();
123
+ const config = node.config();
104
124
  if (config.metricsEnabled) {
105
- let _metrics = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference).node().metrics();
106
- let nde = {
107
- id: node.id(),
108
- name: node.name(),
109
- flow: node.flow(),
110
- type: node.type()
111
- };
112
- // counter metric
113
- if (metricsConfig.type === MetricType.Counter) {
114
- let counterConfig = {
115
- metricname: metricsConfig.name,
116
- metricdescription: metricsConfig.description,
117
- node: nde
118
- };
119
- this[valueSymbol] = _metrics.counter(counterConfig);
120
- return this[valueSymbol];
121
- }
122
- // gauge metric
123
- if (metricsConfig.type === MetricType.Gauge) {
124
- let gaugeConfig = {
125
- metricname: metricsConfig.name,
126
- metricdescription: metricsConfig.description,
127
- node: nde
128
- };
129
- this[valueSymbol] = _metrics.gauge(gaugeConfig);
130
- return this[valueSymbol];
131
- }
132
- // timer metric.
133
- if (metricsConfig.type === MetricType.Timer) {
134
- // handle it as a histogram collector.
135
- if (metricsConfig.collector === MetricCollectorType.histogram) {
136
- // handle it as the default bucket.
137
- if (metricsConfig.buckettype === MetricsService_1.BucketType.default) {
138
- let histogramConfig = {
139
- metricname: metricsConfig.name,
140
- metricdescription: metricsConfig.description,
141
- buckettype: metricsConfig.buckettype,
142
- bucketconfig: {},
143
- node: nde
144
- };
145
- this[valueSymbol] = _metrics.histogram(histogramConfig);
146
- return this[valueSymbol];
147
- }
148
- }
149
- }
150
- console.error("No Metric Factory type defined for ", metricsConfig);
151
- return this[valueSymbol];
125
+ const _metrics = resolveContainer(config.metricsReference);
126
+ this[valueSymbol] = resolveMetric(node, metricsConfig, _metrics);
127
+ }
128
+ else {
129
+ this[valueSymbol] = dudForType(metricsConfig);
152
130
  }
153
- this[valueSymbol] =
154
- (metricsConfig.type === MetricType.Counter) ? { inc() { }, reset() { } } :
155
- (metricsConfig.type === MetricType.Gauge) ? { inc() { }, dec() { }, reset() { } } :
156
- (metricsConfig.type === MetricType.Timer) ? { observe(val) { } }
157
- : undefined;
158
131
  return this[valueSymbol];
159
132
  },
160
133
  enumerable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"CounterMetricConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/CounterMetricConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAkB,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAC,MAAM,2BAA2B,CAAA;AAMjI,UAAU,6BAA8B,SAAQ,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB;IACnG,WAAW,EAAC,MAAM,CAAC;IACnB,KAAK,EAAC,OAAO,CAAA;CAChB;AAED,qBAYa,uBAAwB,SAAQ,UAAU,CAAC,6BAA6B,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,6BAA6B;IAwBtD,OAAO,IAAG,gBAAgB;IAI1B,OAAO,IAAG,aAAa;CAGjC"}
1
+ {"version":3,"file":"CounterMetricConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/CounterMetricConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAkB,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAA4B,MAAM,2BAA2B,CAAA;AAM5J,UAAU,6BAA8B,SAAQ,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB;IACnG,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAA;CACjB;AAED,qBAYa,uBAAwB,SAAQ,UAAU,CAAC,6BAA6B,CAAC;IAClF,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,QAAQ,CAAgB;IAEhC,YAAY,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,6BAA6B,EAsB5D;IAEM,OAAO,IAAI,gBAAgB,CAEjC;IAEM,OAAO,IAAI,aAAa,CAE9B;CACJ"}
@@ -13,15 +13,14 @@ exports.CounterMetricConfigNode = void 0;
13
13
  const NodeConstructor_1 = require("../../NodeConstructor");
14
14
  const MetricsService_1 = require("../service/MetricsService");
15
15
  const NodeGenerator_1 = require("../../NodeGenerator");
16
- const MetricsConfigNode_1 = require("./MetricsConfigNode");
17
16
  const MetricsTemplate_1 = require("../template/MetricsTemplate");
18
17
  const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
19
18
  let CounterMetricConfigNode = class CounterMetricConfigNode extends NodeConstructor_1.ConfigNode {
20
19
  constructor(node, config) {
21
20
  super(node, config);
22
- let _this = this;
23
- this._metrics = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference).node().metrics();
24
- let counterConfig = {
21
+ const refNode = config.metricsEnabled && config.metricsReference ? NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference) : null;
22
+ this._metrics = refNode ? refNode.node().metrics() : new MetricsService_1.DoNothingMetricsContainer();
23
+ const counterConfig = {
25
24
  metricname: config.name,
26
25
  metricdescription: config.description,
27
26
  node: {
@@ -54,7 +53,7 @@ exports.CounterMetricConfigNode = CounterMetricConfigNode = __decorate([
54
53
  templates: [
55
54
  { template: MetricsTemplate_1.MetricsTemplate, config: {} }
56
55
  ],
57
- dependencies: [MetricsConfigNode_1.MetricsConfigNode, MetricsService_1.MetricsService],
56
+ dependencies: [MetricsService_1.MetricsService],
58
57
  tags: ["MetricType"]
59
58
  }),
60
59
  __metadata("design:paramtypes", [Object, Object])
@@ -1 +1 @@
1
- {"version":3,"file":"GaugeMetricConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/GaugeMetricConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,gBAAgB,EAAkB,iBAAiB,EAAE,WAAW,EAAmB,MAAM,2BAA2B,CAAA;AAG7H,OAAO,EAAmB,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGrF,UAAU,2BAA4B,SAAQ,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB;IACpG,WAAW,EAAC,MAAM,CAAC;IACnB,KAAK,EAAC,OAAO,CAAA;CAChB;AAED,qBAYa,qBAAsB,SAAQ,UAAU,CAAC,2BAA2B,CAAC;IAC9E,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAc;gBAEhB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,2BAA2B;IAwBpD,OAAO,IAAG,gBAAgB;IAI1B,KAAK,IAAG,WAAW;CAG7B"}
1
+ {"version":3,"file":"GaugeMetricConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/GaugeMetricConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAkB,iBAAiB,EAAE,WAAW,EAA8C,MAAM,2BAA2B,CAAA;AAExJ,OAAO,EAAmB,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGrF,UAAU,2BAA4B,SAAQ,gBAAgB,EAAE,iBAAiB,EAAE,qBAAqB;IACpG,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAA;CACjB;AAED,qBAYa,qBAAsB,SAAQ,UAAU,CAAC,2BAA2B,CAAC;IAC9E,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAc;IAE5B,YAAY,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,2BAA2B,EAsB1D;IAEM,OAAO,IAAI,gBAAgB,CAEjC;IAEM,KAAK,IAAI,WAAW,CAE1B;CACJ"}
@@ -13,15 +13,14 @@ exports.GaugeMetricConfigNode = void 0;
13
13
  const NodeConstructor_1 = require("../../NodeConstructor");
14
14
  const MetricsService_1 = require("../service/MetricsService");
15
15
  const NodeGenerator_1 = require("../../NodeGenerator");
16
- const MetricsConfigNode_1 = require("./MetricsConfigNode");
17
16
  const MetricsTemplate_1 = require("../template/MetricsTemplate");
18
17
  const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
19
18
  let GaugeMetricConfigNode = class GaugeMetricConfigNode extends NodeConstructor_1.ConfigNode {
20
19
  constructor(node, config) {
21
20
  super(node, config);
22
- let _this = this;
23
- this._metrics = NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference).node().metrics();
24
- let gaugeConfig = {
21
+ const refNode = config.metricsEnabled && config.metricsReference ? NodeConstructor_1.NodeManager.RED.nodes.getNode(config.metricsReference) : null;
22
+ this._metrics = refNode ? refNode.node().metrics() : new MetricsService_1.DoNothingMetricsContainer();
23
+ const gaugeConfig = {
25
24
  metricname: config.name,
26
25
  metricdescription: config.description,
27
26
  node: {
@@ -33,7 +32,7 @@ let GaugeMetricConfigNode = class GaugeMetricConfigNode extends NodeConstructor_
33
32
  };
34
33
  this._gauge = this._metrics.gauge(gaugeConfig);
35
34
  if (config.reset) {
36
- _this._gauge.reset();
35
+ this._gauge.reset();
37
36
  }
38
37
  }
39
38
  metrics() {
@@ -54,7 +53,7 @@ exports.GaugeMetricConfigNode = GaugeMetricConfigNode = __decorate([
54
53
  templates: [
55
54
  { template: MetricsTemplate_1.MetricsTemplate, config: {} }
56
55
  ],
57
- dependencies: [MetricsConfigNode_1.MetricsConfigNode, MetricsService_1.MetricsService],
56
+ dependencies: [MetricsService_1.MetricsService],
58
57
  tags: ["Core", "Metric"]
59
58
  }),
60
59
  __metadata("design:paramtypes", [Object, Object])
@@ -1,14 +1,24 @@
1
1
  import { Node } from "node-red";
2
2
  import { ConfigNode, ConfigNodeConfig } from "../../NodeConstructor";
3
- import { MetricsContainer } from "../service/MetricsService";
4
- import { WebhookTemplateConfig } from "../../webhook/template/WebhookTemplate";
5
- interface MetricsConfigNodeConfig extends ConfigNodeConfig, WebhookTemplateConfig {
6
- }
7
- export declare class MetricsConfigNode extends ConfigNode<MetricsConfigNodeConfig> {
8
- private _metrics;
9
- constructor(node: Node, config: MetricsConfigNodeConfig);
3
+ import { MetricsContainer, MetricsConfig } from "../service/MetricsService";
4
+ /**
5
+ * Abstract base for all metrics provider config nodes.
6
+ *
7
+ * Concrete implementations (e.g. PrometheusMetricsConfigNode) extend this class,
8
+ * decorate with @NodeDescription + tags: ["MetricsProvider"], and implement
9
+ * createContainer() to return their backend-specific MetricsContainer.
10
+ *
11
+ * This class is intentionally NOT decorated with @NodeDescription - it is never
12
+ * registered as a Node-RED node type directly. Only concrete subclasses are registered.
13
+ */
14
+ export declare abstract class MetricsConfigNode extends ConfigNode<ConfigNodeConfig> {
15
+ constructor(node: Node, config: ConfigNodeConfig);
16
+ /**
17
+ * Called once on construction to create the backend MetricsContainer.
18
+ * MetricsService preserves the container across redeploys if the config
19
+ * has not changed, so metric state (counters, gauges) is not reset.
20
+ */
21
+ protected abstract createContainer(config: MetricsConfig): MetricsContainer;
10
22
  metrics(): MetricsContainer;
11
- private onWebhookRequest;
12
23
  }
13
- export {};
14
24
  //# sourceMappingURL=MetricsConfigNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/MetricsConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,gBAAgB,EAAiB,MAAM,2BAA2B,CAAA;AAE3E,OAAO,EAAmB,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAehG,UAAU,uBAAwB,SAAQ,gBAAgB,EAAE,qBAAqB;CAChF;AAED,qBAYa,iBAAkB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IACtE,OAAO,CAAC,QAAQ,CAAoB;gBAExB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB;IAOhD,OAAO,IAAG,gBAAgB;IAKjC,OAAO,CAAC,gBAAgB;CAI3B"}
1
+ {"version":3,"file":"MetricsConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/metrics/node/MetricsConfigNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAkB,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE3F;;;;;;;;;GASG;AACH,8BAAsB,iBAAkB,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IAExE,YAAY,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAO/C;IAED;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CAAC;IAErE,OAAO,IAAI,gBAAgB,CAEjC;CACJ"}