@theotherwillembotha/node-red-plugincore 0.0.50

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 (180) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +190 -0
  3. package/build/GenerateNodes.d.ts +2 -0
  4. package/build/GenerateNodes.d.ts.map +1 -0
  5. package/build/GenerateNodes.js +36 -0
  6. package/build/Nodes.html +1729 -0
  7. package/build/Nodes.js +32 -0
  8. package/build/Plugins.js +74 -0
  9. package/build/core/NodeConstructor.d.ts +188 -0
  10. package/build/core/NodeConstructor.d.ts.map +1 -0
  11. package/build/core/NodeConstructor.js +679 -0
  12. package/build/core/NodeGenerator.d.ts +37 -0
  13. package/build/core/NodeGenerator.d.ts.map +1 -0
  14. package/build/core/NodeGenerator.js +300 -0
  15. package/build/core/Utils.d.ts +7 -0
  16. package/build/core/Utils.d.ts.map +1 -0
  17. package/build/core/Utils.js +19 -0
  18. package/build/core/logger/LoggerDecorator.d.ts +2 -0
  19. package/build/core/logger/LoggerDecorator.d.ts.map +1 -0
  20. package/build/core/logger/LoggerDecorator.js +93 -0
  21. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +16 -0
  22. package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -0
  23. package/build/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
  24. package/build/core/logger/node/ConsoleLoggerConfigNode.js +47 -0
  25. package/build/core/logger/node/LoggerConfigNode.d.ts +30 -0
  26. package/build/core/logger/node/LoggerConfigNode.d.ts.map +1 -0
  27. package/build/core/logger/node/LoggerConfigNode.html +307 -0
  28. package/build/core/logger/node/LoggerConfigNode.js +60 -0
  29. package/build/core/logger/node/LokiLoggerConfigNode.d.ts +20 -0
  30. package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +1 -0
  31. package/build/core/logger/node/LokiLoggerConfigNode.html +153 -0
  32. package/build/core/logger/node/LokiLoggerConfigNode.js +52 -0
  33. package/build/core/logger/node/RestLoggerConfigNode.d.ts +24 -0
  34. package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -0
  35. package/build/core/logger/node/RestLoggerConfigNode.html +209 -0
  36. package/build/core/logger/node/RestLoggerConfigNode.js +57 -0
  37. package/build/core/logger/service/LoggerService.d.ts +88 -0
  38. package/build/core/logger/service/LoggerService.d.ts.map +1 -0
  39. package/build/core/logger/service/LoggerService.js +204 -0
  40. package/build/core/logger/service/LoggerServiceTypes.d.ts +24 -0
  41. package/build/core/logger/service/LoggerServiceTypes.d.ts.map +1 -0
  42. package/build/core/logger/service/LoggerServiceTypes.js +30 -0
  43. package/build/core/logger/template/LoggerTemplate.d.ts +11 -0
  44. package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -0
  45. package/build/core/logger/template/LoggerTemplate.html +328 -0
  46. package/build/core/logger/template/LoggerTemplate.js +12 -0
  47. package/build/core/metrics/MetricsDecorator.d.ts +40 -0
  48. package/build/core/metrics/MetricsDecorator.d.ts.map +1 -0
  49. package/build/core/metrics/MetricsDecorator.js +166 -0
  50. package/build/core/metrics/node/CounterMetricConfigNode.d.ts +16 -0
  51. package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -0
  52. package/build/core/metrics/node/CounterMetricConfigNode.html +48 -0
  53. package/build/core/metrics/node/CounterMetricConfigNode.js +61 -0
  54. package/build/core/metrics/node/GaugeMetricConfigNode.d.ts +17 -0
  55. package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -0
  56. package/build/core/metrics/node/GaugeMetricConfigNode.html +48 -0
  57. package/build/core/metrics/node/GaugeMetricConfigNode.js +61 -0
  58. package/build/core/metrics/node/MetricsConfigNode.d.ts +14 -0
  59. package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -0
  60. package/build/core/metrics/node/MetricsConfigNode.html +21 -0
  61. package/build/core/metrics/node/MetricsConfigNode.js +56 -0
  62. package/build/core/metrics/node/TimerMetricConfigNode.d.ts +28 -0
  63. package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -0
  64. package/build/core/metrics/node/TimerMetricConfigNode.html +190 -0
  65. package/build/core/metrics/node/TimerMetricConfigNode.js +101 -0
  66. package/build/core/metrics/service/MetricsService.d.ts +187 -0
  67. package/build/core/metrics/service/MetricsService.d.ts.map +1 -0
  68. package/build/core/metrics/service/MetricsService.js +385 -0
  69. package/build/core/metrics/template/CounterMetricTemplate.d.ts +5 -0
  70. package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -0
  71. package/build/core/metrics/template/CounterMetricTemplate.html +40 -0
  72. package/build/core/metrics/template/CounterMetricTemplate.js +12 -0
  73. package/build/core/metrics/template/GaugeMetricTemplate.d.ts +5 -0
  74. package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -0
  75. package/build/core/metrics/template/GaugeMetricTemplate.html +39 -0
  76. package/build/core/metrics/template/GaugeMetricTemplate.js +12 -0
  77. package/build/core/metrics/template/MetricsTemplate.d.ts +8 -0
  78. package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -0
  79. package/build/core/metrics/template/MetricsTemplate.html +54 -0
  80. package/build/core/metrics/template/MetricsTemplate.js +12 -0
  81. package/build/core/metrics/template/TimerMetricTemplate.d.ts +5 -0
  82. package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -0
  83. package/build/core/metrics/template/TimerMetricTemplate.html +39 -0
  84. package/build/core/metrics/template/TimerMetricTemplate.js +12 -0
  85. package/build/core/other/InputDecorator.d.ts +3 -0
  86. package/build/core/other/InputDecorator.d.ts.map +1 -0
  87. package/build/core/other/InputDecorator.js +43 -0
  88. package/build/core/other/service/InputService.d.ts +16 -0
  89. package/build/core/other/service/InputService.d.ts.map +1 -0
  90. package/build/core/other/service/InputService.js +31 -0
  91. package/build/core/other/service/SettingsService.d.ts +25 -0
  92. package/build/core/other/service/SettingsService.d.ts.map +1 -0
  93. package/build/core/other/service/SettingsService.js +74 -0
  94. package/build/core/other/template/BasicTemplate.d.ts +5 -0
  95. package/build/core/other/template/BasicTemplate.d.ts.map +1 -0
  96. package/build/core/other/template/BasicTemplate.html +76 -0
  97. package/build/core/other/template/BasicTemplate.js +11 -0
  98. package/build/core/other/template/SettingsTemplate.d.ts +5 -0
  99. package/build/core/other/template/SettingsTemplate.d.ts.map +1 -0
  100. package/build/core/other/template/SettingsTemplate.html +128 -0
  101. package/build/core/other/template/SettingsTemplate.js +11 -0
  102. package/build/core/tagging/NodeDescriptionDecorator.d.ts +17 -0
  103. package/build/core/tagging/NodeDescriptionDecorator.d.ts.map +1 -0
  104. package/build/core/tagging/NodeDescriptionDecorator.js +25 -0
  105. package/build/core/tagging/service/NodeTypeService.d.ts +15 -0
  106. package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -0
  107. package/build/core/tagging/service/NodeTypeService.js +47 -0
  108. package/build/core/webhook/WebhookDecorator.d.ts +3 -0
  109. package/build/core/webhook/WebhookDecorator.d.ts.map +1 -0
  110. package/build/core/webhook/WebhookDecorator.js +45 -0
  111. package/build/core/webhook/node/WebhookServerConfigNode.d.ts +16 -0
  112. package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -0
  113. package/build/core/webhook/node/WebhookServerConfigNode.html +61 -0
  114. package/build/core/webhook/node/WebhookServerConfigNode.js +40 -0
  115. package/build/core/webhook/service/ReverseProxyTypeService.d.ts +29 -0
  116. package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -0
  117. package/build/core/webhook/service/ReverseProxyTypeService.js +24 -0
  118. package/build/core/webhook/service/WebhookServerService.d.ts +52 -0
  119. package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -0
  120. package/build/core/webhook/service/WebhookServerService.js +146 -0
  121. package/build/core/webhook/template/WebhookTemplate.d.ts +22 -0
  122. package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -0
  123. package/build/core/webhook/template/WebhookTemplate.html +434 -0
  124. package/build/core/webhook/template/WebhookTemplate.js +12 -0
  125. package/build/index.d.ts +33 -0
  126. package/build/index.d.ts.map +1 -0
  127. package/build/index.js +55 -0
  128. package/package.json +67 -0
  129. package/src/GenerateNodes.ts +42 -0
  130. package/src/core/NodeConstructor.ts +889 -0
  131. package/src/core/NodeGenerator.ts +331 -0
  132. package/src/core/Utils.ts +19 -0
  133. package/src/core/logger/LoggerDecorator.ts +105 -0
  134. package/src/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
  135. package/src/core/logger/node/ConsoleLoggerConfigNode.ts +46 -0
  136. package/src/core/logger/node/LoggerConfigNode.html +307 -0
  137. package/src/core/logger/node/LoggerConfigNode.ts +95 -0
  138. package/src/core/logger/node/LokiLoggerConfigNode.html +153 -0
  139. package/src/core/logger/node/LokiLoggerConfigNode.ts +58 -0
  140. package/src/core/logger/node/RestLoggerConfigNode.html +209 -0
  141. package/src/core/logger/node/RestLoggerConfigNode.ts +67 -0
  142. package/src/core/logger/service/LoggerService.ts +317 -0
  143. package/src/core/logger/service/LoggerServiceTypes.ts +26 -0
  144. package/src/core/logger/template/LoggerTemplate.html +328 -0
  145. package/src/core/logger/template/LoggerTemplate.ts +23 -0
  146. package/src/core/metrics/MetricsDecorator.ts +227 -0
  147. package/src/core/metrics/node/CounterMetricConfigNode.html +48 -0
  148. package/src/core/metrics/node/CounterMetricConfigNode.ts +62 -0
  149. package/src/core/metrics/node/GaugeMetricConfigNode.html +48 -0
  150. package/src/core/metrics/node/GaugeMetricConfigNode.ts +62 -0
  151. package/src/core/metrics/node/MetricsConfigNode.html +21 -0
  152. package/src/core/metrics/node/MetricsConfigNode.ts +55 -0
  153. package/src/core/metrics/node/TimerMetricConfigNode.html +190 -0
  154. package/src/core/metrics/node/TimerMetricConfigNode.ts +118 -0
  155. package/src/core/metrics/service/MetricsService.ts +560 -0
  156. package/src/core/metrics/template/CounterMetricTemplate.html +40 -0
  157. package/src/core/metrics/template/CounterMetricTemplate.ts +15 -0
  158. package/src/core/metrics/template/GaugeMetricTemplate.html +39 -0
  159. package/src/core/metrics/template/GaugeMetricTemplate.ts +15 -0
  160. package/src/core/metrics/template/MetricsTemplate.html +54 -0
  161. package/src/core/metrics/template/MetricsTemplate.ts +18 -0
  162. package/src/core/metrics/template/TimerMetricTemplate.html +39 -0
  163. package/src/core/metrics/template/TimerMetricTemplate.ts +14 -0
  164. package/src/core/other/InputDecorator.ts +57 -0
  165. package/src/core/other/service/InputService.ts +36 -0
  166. package/src/core/other/service/SettingsService.ts +103 -0
  167. package/src/core/other/template/BasicTemplate.html +76 -0
  168. package/src/core/other/template/BasicTemplate.ts +15 -0
  169. package/src/core/other/template/SettingsTemplate.html +128 -0
  170. package/src/core/other/template/SettingsTemplate.ts +17 -0
  171. package/src/core/tagging/NodeDescriptionDecorator.ts +39 -0
  172. package/src/core/tagging/service/NodeTypeService.ts +67 -0
  173. package/src/core/webhook/WebhookDecorator.ts +70 -0
  174. package/src/core/webhook/node/WebhookServerConfigNode.html +61 -0
  175. package/src/core/webhook/node/WebhookServerConfigNode.ts +38 -0
  176. package/src/core/webhook/service/ReverseProxyTypeService.ts +46 -0
  177. package/src/core/webhook/service/WebhookServerService.ts +211 -0
  178. package/src/core/webhook/template/WebhookTemplate.html +434 -0
  179. package/src/core/webhook/template/WebhookTemplate.ts +36 -0
  180. package/src/index.ts +47 -0
@@ -0,0 +1,328 @@
1
+ <div template-section="onIncludeOnce">
2
+ <style>
3
+ .editorgroupborder {
4
+ border-width:1px;
5
+ border-style:solid;
6
+ border-color:lightgray;
7
+ padding: 3px;
8
+ margin-top: 2px;
9
+ margin-bottom: 2px;
10
+ }
11
+
12
+ .editorsectionheading {
13
+ font-weight: 600;
14
+ margin-bottom:1px !important;
15
+ margin-top:6px !important;
16
+ }
17
+
18
+ .nomargin {
19
+ margin-bottom:1px !important;
20
+ margin-top:1px !important;
21
+ }
22
+
23
+ .slidecontainer {
24
+ width: 100%;
25
+ }
26
+
27
+ .slider {
28
+ -webkit-appearance: none;
29
+ appearance: none;
30
+ width: 100%;
31
+ height: 25px;
32
+ background: #d3d3d3;
33
+ outline: none;
34
+ opacity: 0.7;
35
+ -webkit-transition: .2s;
36
+ transition: opacity .2s;
37
+ }
38
+
39
+ .slider:hover {
40
+ opacity: 1;
41
+ }
42
+
43
+ .slider::-webkit-slider-thumb {
44
+ -webkit-appearance: none;
45
+ appearance: none;
46
+ width: 25px;
47
+ height: 25px;
48
+ background: #04AA6D;
49
+ cursor: pointer;
50
+ }
51
+
52
+ .slider::-moz-range-thumb {
53
+ width: 25px;
54
+ height: 25px;
55
+ background: #04AA6D;
56
+ cursor: pointer;
57
+ }
58
+
59
+ .towb_editorlabel {
60
+ width: 120px !important;
61
+ }
62
+ .towb_editorfield {
63
+ width: 70% !important;
64
+ }
65
+ .towb_editorfield_short {
66
+ width: 30% !important;
67
+ }
68
+
69
+ </style>
70
+
71
+ <script type="text/javascript">
72
+
73
+ // CSS
74
+ dropdownStyles = `
75
+ .loggertype-dropdown {
76
+ position: absolute;
77
+ background: white;
78
+ border: 1px solid #ccc;
79
+ border-radius: 4px;
80
+ box-shadow: 0 2px 8px rgba(0,0,0,0.15);
81
+ max-height: 150px;
82
+ overflow-y: auto;
83
+ z-index: 1000;
84
+ min-width: 150px;
85
+ }
86
+ .loggertype-dropdown .dropdown-item {
87
+ padding: 6px 12px;
88
+ cursor: pointer;
89
+ }
90
+ .loggertype-dropdown .dropdown-item:hover {
91
+ background: #f0f0f0;
92
+ }
93
+ `;
94
+ $('<style>').text(dropdownStyles).appendTo('head');
95
+
96
+ </script>
97
+
98
+
99
+ </div>
100
+
101
+
102
+ <script type="text/javascript" template-section="onCompose">
103
+ node
104
+ .addDefault("logEnabled", { value:false, required:true})
105
+ .addDefault("logger", { required:false})
106
+ .addDefault("logTemplateOverrideEnabled", {value:false})
107
+ .addDefault("logTemplateOverride", {value:"message:{{msg}}"})
108
+ </script>
109
+
110
+ <script type="text/javascript" template-section="onIncludeEditPrepare">
111
+ let node = this;
112
+
113
+ // controls.
114
+ let logEnabled = $("#{{defaults.logEnabled}}");
115
+ let logTemplateEnabled = $("#{{defaults.logTemplateOverrideEnabled}}");
116
+ let logTemplateEnabledSection = $("#section_logTemplateOverrideEnabled");
117
+ let logEnabledSection = $("#section_logEnabled");
118
+
119
+ // functions.
120
+ let getLoggerTypes = async function(){
121
+ let types = [];
122
+ await $.ajax({
123
+ url: "nodetypeservice/find?tag=LoggerType",
124
+ type: "GET",
125
+ contentType: "application/json; charset=utf-8",
126
+ data:JSON.stringify({id:node.id}),
127
+ success: (response) => {
128
+ types = response;
129
+ },
130
+ error: (jqXHR, textStatus, errorThrown) => {
131
+ console.log(jqXHR, textStatus, errorThrown);
132
+ },
133
+ });
134
+ return types;
135
+ }
136
+
137
+ let getLoggers = async () => {
138
+ let loggers = [];
139
+
140
+ // get the list of types again.
141
+ let loggerTypes = (await getLoggerTypes()).map(type => type.id);
142
+
143
+ // add all of the known loggers.
144
+ RED.nodes.eachConfig(cfg => {
145
+ if(loggerTypes.includes(cfg.type)){
146
+ loggers.push({id:cfg.id, name:cfg.label(), type:cfg.type});
147
+ }
148
+ });
149
+
150
+ return loggers;
151
+ };
152
+
153
+ let updateLoggerSelectorList = async () => {
154
+ loggerSelector.empty();
155
+ (await getLoggers()).forEach(logger => {
156
+ $('<option value="' + logger.id + '">' + logger.name + '</option>').appendTo(loggerSelector);
157
+ });
158
+ $('<option value="_ADD_">none</option>').appendTo(loggerSelector);
159
+ }
160
+
161
+ logEnabled.on('change', function() {
162
+ if(logEnabled.prop("checked")){
163
+ logEnabledSection.show();
164
+ node._def.defaults.logger.required = true;
165
+ }
166
+ else{
167
+ logEnabledSection.hide()
168
+ node._def.defaults.logger.required = false;
169
+ }
170
+ });
171
+
172
+ logTemplateEnabled.on('change', function() {
173
+ if(logTemplateEnabled.prop("checked")){
174
+ logTemplateEnabledSection.show();
175
+ node._def.defaults.logTemplateOverride.required = true;
176
+ }
177
+ else{
178
+ logTemplateEnabledSection.hide()
179
+ node._def.defaults.logTemplateOverride.required = false;
180
+ }
181
+ });
182
+
183
+ node.logTemplateOverrideEditor = RED.editor.createEditor({
184
+ id: 'node-input-logTemplateOverrideEditor',
185
+ mode: 'ace/mode/handlebars',
186
+ value: node.logTemplateOverride
187
+ });
188
+
189
+ let loggerSelector = $("#{{defaults.logger}}");
190
+ let loggerEditButton = $("#logger-edit-btn");
191
+ let loggerAddButton = $("#logger-add-btn");
192
+
193
+
194
+ loggerEditButton.on('click', async function(event){
195
+ event.stopPropagation();
196
+ if(loggerEditButton.hasClass("disabled")){
197
+ return;
198
+ }
199
+
200
+ // figure out what type of logger this is.
201
+ let selectedLogger = (await getLoggers()).find(logger => logger.id === loggerSelector.val());
202
+ RED.editor.editConfig("#{{defaults.logger}}", selectedLogger.type, selectedLogger.id);
203
+ });
204
+
205
+ loggerAddButton.on('click', function(event) {
206
+ event.stopPropagation();
207
+ let $btn = $(event.target);
208
+
209
+ // Remove any existing dropdown
210
+ $('.loggertype-dropdown').remove();
211
+
212
+ getLoggerTypes().then(loggerTypes => {
213
+ let $dropdown = $('<div class="loggertype-dropdown red-ui-editor"></div>');
214
+
215
+ loggerTypes.forEach(loggerType => {
216
+ $('<div class="dropdown-item"></div>')
217
+ .text(loggerType.name)
218
+ .data('value', loggerType.id)
219
+ .css({
220
+ padding: '4px 8px',
221
+ cursor: 'pointer'
222
+ })
223
+ .appendTo($dropdown);
224
+ });
225
+
226
+ // Position it near the button
227
+ $dropdown.css({
228
+ top: $btn.offset().top + $btn.height(),
229
+ left: $btn.offset().left
230
+ });
231
+
232
+ $('body').append($dropdown);
233
+
234
+ $(document).on('mousedown.dropdown', function(e) {
235
+ if (!$(e.target).closest('.loggertype-dropdown').length) {
236
+ $dropdown.remove();
237
+ $(document).off('mousedown.dropdown'); // Clean up the listener
238
+ }
239
+ });
240
+
241
+ // Handle item selection
242
+ $dropdown.on('click', '.dropdown-item', function(e) {
243
+ e.stopPropagation();
244
+ const selectedValue = $(this).data('value');
245
+ const selectedText = $(this).text();
246
+
247
+ // Do whatever you need with the selection
248
+ console.log('Selected:', selectedValue, selectedText);
249
+ $dropdown.remove();
250
+ RED.editor.editConfig("#{{defaults.logger}}", selectedValue, "_ADD_");
251
+ });
252
+ })
253
+ });
254
+
255
+ loggerSelector.on("focus", updateLoggerSelectorList);
256
+ loggerSelector.on('change', function(event) {
257
+ if("_ADD_" === loggerSelector.val()){
258
+ loggerEditButton.addClass("disabled")
259
+ }
260
+ else{
261
+ loggerEditButton.removeClass("disabled")
262
+ }
263
+ });
264
+
265
+ // lastly, make sure that we set the correct value on the logger selector.
266
+ updateLoggerSelectorList().then(() => {
267
+ loggerSelector.val(node.logger);
268
+ });
269
+
270
+ </script>
271
+
272
+ <script type="text/javascript" template-section="onIncludeEditSave">
273
+ node = this;
274
+ node.logTemplateOverride = node.logTemplateOverrideEditor.getValue();
275
+ node.logTemplateOverrideEditor.destroy();
276
+ delete node.logTemplateOverrideEditor;
277
+ </script>
278
+
279
+ <script type="text/html" template-section="onIncludeEditForm">
280
+ <div id="section_loggerconfig" >
281
+ <div class="form-row editorsectionheading">
282
+ <i class="w-16 fa fa-eye"></i> <span>Logging</span>
283
+ </div>
284
+ <div class="editorgroupborder">
285
+ <div class="form-row nomargin logEnableCheck">
286
+ <input type="checkbox" id="{{defaults.logEnabled}}" placeholder="logEnabled" value="false" style="margin:8px 0 10px 102px; width:20px;">
287
+ <label style="width:auto" for="{{defaults.logEnabled}}"><span>Enable Logging</span></label>
288
+ </div>
289
+
290
+ <div id="section_logEnabled">
291
+ <div class="form-row nomargin">
292
+ <label for="{{defaults.logger}}">Logger</label>
293
+ <div style="width: 70%; display: inline-flex;">
294
+ <select id="{{defaults.logger}}" style="flex-grow: 1;" class="">
295
+ <option value="_ADD_">none</option>
296
+ </select>
297
+ <a id="logger-edit-btn" class="red-ui-button disabled" style="margin-left: 10px;">
298
+ <i class="fa fa-pencil"></i>
299
+ </a>
300
+ <a id="logger-add-btn" class="red-ui-button" style="margin-left: 10px;">
301
+ <i class="fa fa-plus"></i>
302
+ </a>
303
+ </div>
304
+ </div>
305
+
306
+ <div class="form-row nomargin">
307
+ <input type="checkbox" id="{{defaults.logTemplateOverrideEnabled}}" placeholder="" value="false" style="margin:8px 0 10px 102px; width:20px;">
308
+ <label style="width:auto" for="{{defaults.logTemplateOverrideEnabled}}"><span>Override Template</span></label>
309
+ </div>
310
+
311
+ <div id="section_logTemplateOverrideEnabled">
312
+ <div class="form-row">
313
+ <label for="node-input-logTemplateOverrideEditor"><i class="fa fa-tag"></i> Template</label>
314
+ <div style="height: 250px; min-height:150px;" class="node-text-editor" id="node-input-logTemplateOverrideEditor"></div>
315
+ </div>
316
+ </div>
317
+ </div>
318
+ </div>
319
+ </div>
320
+ </script>
321
+
322
+ <script type="text/markdown" template-section="onIncludeDocumentation">
323
+ ### Logging
324
+ : *enable logging* (boolean) : if checked, then the node will produce logging output to the specified logger.
325
+ : *logger* (logconfig) : the endppoint that the node will log events to.
326
+ : *override template* (logconfig) : if checked, a custom logging template can be provided for the log message.
327
+ : *logger template* (mustache) : a template in mustache format to generate a message for logging purposes (see LoggerConfig node for more information)
328
+ </script>
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoggerTemplate = void 0;
4
+ const NodeGenerator_1 = require("../../NodeGenerator");
5
+ const NodeConstructor_1 = require("../../NodeConstructor");
6
+ const LoggerConfigNode_1 = require("../node/LoggerConfigNode");
7
+ class LoggerTemplate extends NodeConstructor_1.Template {
8
+ static getTemplateDescriptor() {
9
+ return new NodeConstructor_1.TemplateDescriptor("logger", LoggerTemplate, NodeGenerator_1.SourceUtility.getSourcePath("/build/", "/src/") + "LoggerTemplate.html", [LoggerConfigNode_1.LoggerConfigNode]);
10
+ }
11
+ }
12
+ exports.LoggerTemplate = LoggerTemplate;
@@ -0,0 +1,40 @@
1
+ import { BucketType, DefaultBucketConfig } from "./service/MetricsService";
2
+ export declare enum MetricType {
3
+ Counter = "Counter",
4
+ Timer = "Timer",
5
+ Gauge = "Gauge"
6
+ }
7
+ export declare enum MetricCollectorType {
8
+ histogram = "histogram",
9
+ summary = "summary"
10
+ }
11
+ type BaseMetricDecoratorConfig = {
12
+ name: string;
13
+ type: MetricType;
14
+ description: string;
15
+ };
16
+ type CounterMetricDecoratorConfig = BaseMetricDecoratorConfig & {
17
+ type: MetricType.Counter;
18
+ };
19
+ type GaugeMetricDecoratorConfig = BaseMetricDecoratorConfig & {
20
+ type: MetricType.Gauge;
21
+ };
22
+ type TimerMetricDecoratorConfig = BaseMetricDecoratorConfig & {
23
+ type: MetricType.Timer;
24
+ collector: MetricCollectorType;
25
+ };
26
+ type SummaryTimerMetricDecoratorConfig = TimerMetricDecoratorConfig & {
27
+ collector: MetricCollectorType.summary;
28
+ };
29
+ type HistogramTimerMetricDecoratorConfig = TimerMetricDecoratorConfig & {
30
+ collector: MetricCollectorType.histogram;
31
+ buckettype: BucketType;
32
+ };
33
+ type DefaultHistogramTimerMetricDecoratorConfig = HistogramTimerMetricDecoratorConfig & {
34
+ buckettype: BucketType.default;
35
+ bucketconfig?: DefaultBucketConfig;
36
+ };
37
+ type MetricsConfig = CounterMetricDecoratorConfig | GaugeMetricDecoratorConfig | SummaryTimerMetricDecoratorConfig | DefaultHistogramTimerMetricDecoratorConfig;
38
+ export declare function Metrics(metricsConfig: MetricsConfig): Function;
39
+ export {};
40
+ //# sourceMappingURL=MetricsDecorator.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MetricCollectorType = exports.MetricType = void 0;
4
+ exports.Metrics = Metrics;
5
+ const NodeConstructor_1 = require("../NodeConstructor");
6
+ const MetricsService_1 = require("./service/MetricsService");
7
+ var MetricType;
8
+ (function (MetricType) {
9
+ MetricType["Counter"] = "Counter";
10
+ MetricType["Timer"] = "Timer";
11
+ MetricType["Gauge"] = "Gauge";
12
+ })(MetricType || (exports.MetricType = MetricType = {}));
13
+ var MetricCollectorType;
14
+ (function (MetricCollectorType) {
15
+ MetricCollectorType["histogram"] = "histogram";
16
+ MetricCollectorType["summary"] = "summary";
17
+ })(MetricCollectorType || (exports.MetricCollectorType = MetricCollectorType = {}));
18
+ function Metrics(metricsConfig) {
19
+ return function (target, propertyKey) {
20
+ // if the type is a string, then its probably defined in the local (core) module.
21
+ if (typeof propertyKey === "string") {
22
+ const valueSymbol = Symbol(`_${String(propertyKey)}_value`);
23
+ Object.defineProperty(target, propertyKey, {
24
+ get: function () {
25
+ if (this[valueSymbol]) {
26
+ return this[valueSymbol];
27
+ }
28
+ //console.log("injecting metric", valueSymbol);
29
+ let node = this;
30
+ let config = node.config();
31
+ 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.guage(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];
79
+ }
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
+ return this[valueSymbol];
86
+ },
87
+ enumerable: true,
88
+ configurable: false
89
+ });
90
+ return;
91
+ }
92
+ else {
93
+ let property = propertyKey;
94
+ property.addInitializer(function () {
95
+ let node = this;
96
+ const valueSymbol = Symbol(`_${String(property.name)}_value`);
97
+ Object.defineProperty(node, property.name, {
98
+ get: function () {
99
+ if (this[valueSymbol]) {
100
+ return this[valueSymbol];
101
+ }
102
+ //console.log("injecting metric", valueSymbol);
103
+ let config = node.config();
104
+ 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.guage(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];
152
+ }
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
+ return this[valueSymbol];
159
+ },
160
+ enumerable: true,
161
+ configurable: false
162
+ });
163
+ });
164
+ }
165
+ };
166
+ }
@@ -0,0 +1,16 @@
1
+ import { Node } from "node-red";
2
+ import { ConfigNode, ConfigNodeConfig } from "../../NodeConstructor";
3
+ import { MetricsContainer, MetricsReference, CounterMetric, CounterMetricConfig } from "../service/MetricsService";
4
+ interface CounterMetricConfigNodeConfig extends ConfigNodeConfig, CounterMetricConfig, MetricsReference {
5
+ description: string;
6
+ reset: boolean;
7
+ }
8
+ export declare class CounterMetricConfigNode extends ConfigNode<CounterMetricConfigNodeConfig> {
9
+ private _metrics;
10
+ private _counter;
11
+ constructor(node: Node, config: CounterMetricConfigNodeConfig);
12
+ metrics(): MetricsContainer;
13
+ counter(): CounterMetric;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=CounterMetricConfigNode.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,48 @@
1
+ <script type="text/javascript" template-section="onCompose">
2
+ node
3
+ .addDefault("name", { value:"Counter Example", required:true})
4
+ .addDefault("description", {value:"an example couter", required:false})
5
+ .addDefault("reset", {value:false, required:false})
6
+ .setPaletteLabel("Counter Metric Config")
7
+ .setLabel(function() {return this.name })
8
+ </script>
9
+
10
+ <script type="text/javascript" template-section="onIncludeEditPrepare">
11
+ // enable the metrics by default and hide the Enable metrics button.
12
+ let metricsEnabled = $("#node-config-input-metricsEnabled");
13
+ metricsEnabled.prop('checked', true);
14
+ metricsEnabled.trigger("change");
15
+ $("#section_metricsconfig").find(".metricsEnableCheck").hide();
16
+
17
+
18
+ </script>
19
+
20
+ <script type="text/html" template-section="onIncludeEditForm">
21
+ <div id="MetricsConfig">
22
+ <div class="form-row">
23
+ <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
24
+ <input type="text" id="node-config-input-name" />
25
+ </div>
26
+
27
+ <div class="form-row">
28
+ <label for="node-config-input-description"><i class="fa fa-tag"></i> Description</label>
29
+ <input type="text" id="node-config-input-description" />
30
+ </div>
31
+
32
+ <div class="form-row">
33
+ <label></label>
34
+ <input type="checkbox" id="node-config-input-reset" style="width:20px; margin-right:5px;" />
35
+ <label style="width:auto" for="node-config-input-reset"><span>Reset on Deploy</span></label>
36
+ </div>
37
+ </div>
38
+ </script>
39
+
40
+
41
+ <script type="text/markdown" template-section="onIncludeDocumentation">
42
+ Configuration node for the Counter Metrics
43
+
44
+ ### Inputs
45
+ : *name* (string) : The common name for the counter.
46
+ : *description* (string) : A description for the given counter
47
+
48
+ </script>