@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.
- package/LICENSE +15 -0
- package/README.md +190 -0
- package/build/GenerateNodes.d.ts +2 -0
- package/build/GenerateNodes.d.ts.map +1 -0
- package/build/GenerateNodes.js +36 -0
- package/build/Nodes.html +1729 -0
- package/build/Nodes.js +32 -0
- package/build/Plugins.js +74 -0
- package/build/core/NodeConstructor.d.ts +188 -0
- package/build/core/NodeConstructor.d.ts.map +1 -0
- package/build/core/NodeConstructor.js +679 -0
- package/build/core/NodeGenerator.d.ts +37 -0
- package/build/core/NodeGenerator.d.ts.map +1 -0
- package/build/core/NodeGenerator.js +300 -0
- package/build/core/Utils.d.ts +7 -0
- package/build/core/Utils.d.ts.map +1 -0
- package/build/core/Utils.js +19 -0
- package/build/core/logger/LoggerDecorator.d.ts +2 -0
- package/build/core/logger/LoggerDecorator.d.ts.map +1 -0
- package/build/core/logger/LoggerDecorator.js +93 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +16 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
- package/build/core/logger/node/ConsoleLoggerConfigNode.js +47 -0
- package/build/core/logger/node/LoggerConfigNode.d.ts +30 -0
- package/build/core/logger/node/LoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/LoggerConfigNode.html +307 -0
- package/build/core/logger/node/LoggerConfigNode.js +60 -0
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts +20 -0
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/LokiLoggerConfigNode.html +153 -0
- package/build/core/logger/node/LokiLoggerConfigNode.js +52 -0
- package/build/core/logger/node/RestLoggerConfigNode.d.ts +24 -0
- package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -0
- package/build/core/logger/node/RestLoggerConfigNode.html +209 -0
- package/build/core/logger/node/RestLoggerConfigNode.js +57 -0
- package/build/core/logger/service/LoggerService.d.ts +88 -0
- package/build/core/logger/service/LoggerService.d.ts.map +1 -0
- package/build/core/logger/service/LoggerService.js +204 -0
- package/build/core/logger/service/LoggerServiceTypes.d.ts +24 -0
- package/build/core/logger/service/LoggerServiceTypes.d.ts.map +1 -0
- package/build/core/logger/service/LoggerServiceTypes.js +30 -0
- package/build/core/logger/template/LoggerTemplate.d.ts +11 -0
- package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -0
- package/build/core/logger/template/LoggerTemplate.html +328 -0
- package/build/core/logger/template/LoggerTemplate.js +12 -0
- package/build/core/metrics/MetricsDecorator.d.ts +40 -0
- package/build/core/metrics/MetricsDecorator.d.ts.map +1 -0
- package/build/core/metrics/MetricsDecorator.js +166 -0
- package/build/core/metrics/node/CounterMetricConfigNode.d.ts +16 -0
- package/build/core/metrics/node/CounterMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/CounterMetricConfigNode.html +48 -0
- package/build/core/metrics/node/CounterMetricConfigNode.js +61 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.d.ts +17 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.html +48 -0
- package/build/core/metrics/node/GaugeMetricConfigNode.js +61 -0
- package/build/core/metrics/node/MetricsConfigNode.d.ts +14 -0
- package/build/core/metrics/node/MetricsConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/MetricsConfigNode.html +21 -0
- package/build/core/metrics/node/MetricsConfigNode.js +56 -0
- package/build/core/metrics/node/TimerMetricConfigNode.d.ts +28 -0
- package/build/core/metrics/node/TimerMetricConfigNode.d.ts.map +1 -0
- package/build/core/metrics/node/TimerMetricConfigNode.html +190 -0
- package/build/core/metrics/node/TimerMetricConfigNode.js +101 -0
- package/build/core/metrics/service/MetricsService.d.ts +187 -0
- package/build/core/metrics/service/MetricsService.d.ts.map +1 -0
- package/build/core/metrics/service/MetricsService.js +385 -0
- package/build/core/metrics/template/CounterMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/CounterMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/CounterMetricTemplate.html +40 -0
- package/build/core/metrics/template/CounterMetricTemplate.js +12 -0
- package/build/core/metrics/template/GaugeMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/GaugeMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/GaugeMetricTemplate.html +39 -0
- package/build/core/metrics/template/GaugeMetricTemplate.js +12 -0
- package/build/core/metrics/template/MetricsTemplate.d.ts +8 -0
- package/build/core/metrics/template/MetricsTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/MetricsTemplate.html +54 -0
- package/build/core/metrics/template/MetricsTemplate.js +12 -0
- package/build/core/metrics/template/TimerMetricTemplate.d.ts +5 -0
- package/build/core/metrics/template/TimerMetricTemplate.d.ts.map +1 -0
- package/build/core/metrics/template/TimerMetricTemplate.html +39 -0
- package/build/core/metrics/template/TimerMetricTemplate.js +12 -0
- package/build/core/other/InputDecorator.d.ts +3 -0
- package/build/core/other/InputDecorator.d.ts.map +1 -0
- package/build/core/other/InputDecorator.js +43 -0
- package/build/core/other/service/InputService.d.ts +16 -0
- package/build/core/other/service/InputService.d.ts.map +1 -0
- package/build/core/other/service/InputService.js +31 -0
- package/build/core/other/service/SettingsService.d.ts +25 -0
- package/build/core/other/service/SettingsService.d.ts.map +1 -0
- package/build/core/other/service/SettingsService.js +74 -0
- package/build/core/other/template/BasicTemplate.d.ts +5 -0
- package/build/core/other/template/BasicTemplate.d.ts.map +1 -0
- package/build/core/other/template/BasicTemplate.html +76 -0
- package/build/core/other/template/BasicTemplate.js +11 -0
- package/build/core/other/template/SettingsTemplate.d.ts +5 -0
- package/build/core/other/template/SettingsTemplate.d.ts.map +1 -0
- package/build/core/other/template/SettingsTemplate.html +128 -0
- package/build/core/other/template/SettingsTemplate.js +11 -0
- package/build/core/tagging/NodeDescriptionDecorator.d.ts +17 -0
- package/build/core/tagging/NodeDescriptionDecorator.d.ts.map +1 -0
- package/build/core/tagging/NodeDescriptionDecorator.js +25 -0
- package/build/core/tagging/service/NodeTypeService.d.ts +15 -0
- package/build/core/tagging/service/NodeTypeService.d.ts.map +1 -0
- package/build/core/tagging/service/NodeTypeService.js +47 -0
- package/build/core/webhook/WebhookDecorator.d.ts +3 -0
- package/build/core/webhook/WebhookDecorator.d.ts.map +1 -0
- package/build/core/webhook/WebhookDecorator.js +45 -0
- package/build/core/webhook/node/WebhookServerConfigNode.d.ts +16 -0
- package/build/core/webhook/node/WebhookServerConfigNode.d.ts.map +1 -0
- package/build/core/webhook/node/WebhookServerConfigNode.html +61 -0
- package/build/core/webhook/node/WebhookServerConfigNode.js +40 -0
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts +29 -0
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -0
- package/build/core/webhook/service/ReverseProxyTypeService.js +24 -0
- package/build/core/webhook/service/WebhookServerService.d.ts +52 -0
- package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -0
- package/build/core/webhook/service/WebhookServerService.js +146 -0
- package/build/core/webhook/template/WebhookTemplate.d.ts +22 -0
- package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -0
- package/build/core/webhook/template/WebhookTemplate.html +434 -0
- package/build/core/webhook/template/WebhookTemplate.js +12 -0
- package/build/index.d.ts +33 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +55 -0
- package/package.json +67 -0
- package/src/GenerateNodes.ts +42 -0
- package/src/core/NodeConstructor.ts +889 -0
- package/src/core/NodeGenerator.ts +331 -0
- package/src/core/Utils.ts +19 -0
- package/src/core/logger/LoggerDecorator.ts +105 -0
- package/src/core/logger/node/ConsoleLoggerConfigNode.html +131 -0
- package/src/core/logger/node/ConsoleLoggerConfigNode.ts +46 -0
- package/src/core/logger/node/LoggerConfigNode.html +307 -0
- package/src/core/logger/node/LoggerConfigNode.ts +95 -0
- package/src/core/logger/node/LokiLoggerConfigNode.html +153 -0
- package/src/core/logger/node/LokiLoggerConfigNode.ts +58 -0
- package/src/core/logger/node/RestLoggerConfigNode.html +209 -0
- package/src/core/logger/node/RestLoggerConfigNode.ts +67 -0
- package/src/core/logger/service/LoggerService.ts +317 -0
- package/src/core/logger/service/LoggerServiceTypes.ts +26 -0
- package/src/core/logger/template/LoggerTemplate.html +328 -0
- package/src/core/logger/template/LoggerTemplate.ts +23 -0
- package/src/core/metrics/MetricsDecorator.ts +227 -0
- package/src/core/metrics/node/CounterMetricConfigNode.html +48 -0
- package/src/core/metrics/node/CounterMetricConfigNode.ts +62 -0
- package/src/core/metrics/node/GaugeMetricConfigNode.html +48 -0
- package/src/core/metrics/node/GaugeMetricConfigNode.ts +62 -0
- package/src/core/metrics/node/MetricsConfigNode.html +21 -0
- package/src/core/metrics/node/MetricsConfigNode.ts +55 -0
- package/src/core/metrics/node/TimerMetricConfigNode.html +190 -0
- package/src/core/metrics/node/TimerMetricConfigNode.ts +118 -0
- package/src/core/metrics/service/MetricsService.ts +560 -0
- package/src/core/metrics/template/CounterMetricTemplate.html +40 -0
- package/src/core/metrics/template/CounterMetricTemplate.ts +15 -0
- package/src/core/metrics/template/GaugeMetricTemplate.html +39 -0
- package/src/core/metrics/template/GaugeMetricTemplate.ts +15 -0
- package/src/core/metrics/template/MetricsTemplate.html +54 -0
- package/src/core/metrics/template/MetricsTemplate.ts +18 -0
- package/src/core/metrics/template/TimerMetricTemplate.html +39 -0
- package/src/core/metrics/template/TimerMetricTemplate.ts +14 -0
- package/src/core/other/InputDecorator.ts +57 -0
- package/src/core/other/service/InputService.ts +36 -0
- package/src/core/other/service/SettingsService.ts +103 -0
- package/src/core/other/template/BasicTemplate.html +76 -0
- package/src/core/other/template/BasicTemplate.ts +15 -0
- package/src/core/other/template/SettingsTemplate.html +128 -0
- package/src/core/other/template/SettingsTemplate.ts +17 -0
- package/src/core/tagging/NodeDescriptionDecorator.ts +39 -0
- package/src/core/tagging/service/NodeTypeService.ts +67 -0
- package/src/core/webhook/WebhookDecorator.ts +70 -0
- package/src/core/webhook/node/WebhookServerConfigNode.html +61 -0
- package/src/core/webhook/node/WebhookServerConfigNode.ts +38 -0
- package/src/core/webhook/service/ReverseProxyTypeService.ts +46 -0
- package/src/core/webhook/service/WebhookServerService.ts +211 -0
- package/src/core/webhook/template/WebhookTemplate.html +434 -0
- package/src/core/webhook/template/WebhookTemplate.ts +36 -0
- package/src/index.ts +47 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script type="text/javascript" template-section="onCompose">
|
|
2
|
+
node
|
|
3
|
+
.addDefault("name", { value:"Metrics Example", required:true})
|
|
4
|
+
.addDefault("description", {value:"an example gauge", required:false})
|
|
5
|
+
.addDefault("reset", {value:false, required:false})
|
|
6
|
+
.setPaletteLabel("Gauge 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 Gauge Metrics
|
|
43
|
+
|
|
44
|
+
### Inputs
|
|
45
|
+
: *name* (string) : The common name for the gauge.
|
|
46
|
+
: *description* (string) : A description for the given gauge.
|
|
47
|
+
|
|
48
|
+
</script>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
import { Node } from "node-red";
|
|
3
|
+
import { ConfigNode, ConfigNodeConfig, NodeDescriptor, NodeManager } from "../../NodeConstructor"
|
|
4
|
+
import { MetricsContainer, MetricsService, GaugeMetricConfig, GaugeMetric, MetricsReference} from "../service/MetricsService"
|
|
5
|
+
import { SourceUtility } from "../../NodeGenerator";
|
|
6
|
+
import { MetricsConfigNode } from "./MetricsConfigNode";
|
|
7
|
+
import { MetricsTemplate, MetricsTemplateConfig } from "../template/MetricsTemplate";
|
|
8
|
+
import { NodeDescription } from "../../tagging/NodeDescriptionDecorator";
|
|
9
|
+
|
|
10
|
+
interface GaugeMetricConfigNodeConfig extends ConfigNodeConfig, GaugeMetricConfig, MetricsTemplateConfig {
|
|
11
|
+
description:string,
|
|
12
|
+
reset:boolean
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@NodeDescription({
|
|
16
|
+
id:"GaugeMetricConfigNode",
|
|
17
|
+
name:"Guage Metric Config Node",
|
|
18
|
+
group:"config",
|
|
19
|
+
sourceFile:SourceUtility.getSourcePath("/build/", "/src/") + "GaugeMetricConfigNode.html",
|
|
20
|
+
package: "@theotherwillembotha/node-red-plugincore",
|
|
21
|
+
templates: [
|
|
22
|
+
{ template: MetricsTemplate, config: {}}
|
|
23
|
+
],
|
|
24
|
+
dependencies:[ MetricsConfigNode, MetricsService ],
|
|
25
|
+
tags: [ "Core", "Metric" ]
|
|
26
|
+
})
|
|
27
|
+
export class GaugeMetricConfigNode extends ConfigNode<GaugeMetricConfigNodeConfig> {
|
|
28
|
+
private _metrics: MetricsContainer;
|
|
29
|
+
private _gauge: GaugeMetric;
|
|
30
|
+
|
|
31
|
+
constructor(node: Node, config: GaugeMetricConfigNodeConfig){
|
|
32
|
+
super(node, config);
|
|
33
|
+
let _this = this;
|
|
34
|
+
|
|
35
|
+
this._metrics = (NodeManager.RED.nodes.getNode(config.metricsReference) as any).node().metrics();
|
|
36
|
+
|
|
37
|
+
let gaugeConfig:GaugeMetricConfig = {
|
|
38
|
+
metricname:config.name,
|
|
39
|
+
metricdescription:config.description,
|
|
40
|
+
node:{
|
|
41
|
+
id:this.id(),
|
|
42
|
+
flow:this.flow(),
|
|
43
|
+
type:this.type(),
|
|
44
|
+
name:this.name()
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
this._gauge = this._metrics.guage(gaugeConfig);
|
|
49
|
+
|
|
50
|
+
if(config.reset){
|
|
51
|
+
_this._gauge.reset();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public metrics():MetricsContainer {
|
|
56
|
+
return this._metrics;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public gauge():GaugeMetric {
|
|
60
|
+
return this._gauge;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<script type="text/javascript" template-section="onCompose">
|
|
2
|
+
node
|
|
3
|
+
.addDefault("name", { value:"Metrics Example", required:true})
|
|
4
|
+
.setPaletteLabel("Metrics Config")
|
|
5
|
+
.setLabel(function() {return this.name })
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<script type="text/html" template-section="onIncludeEditForm">
|
|
9
|
+
<div id="MetricsConfig">
|
|
10
|
+
<div class="form-row">
|
|
11
|
+
<label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
12
|
+
<input type="text" id="node-config-input-name" />
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<script type="text/markdown" template-section="onIncludeDocumentation">
|
|
19
|
+
### Inputs
|
|
20
|
+
: *name* (string) : The common name for the metrics integration.
|
|
21
|
+
</script>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
import { Node } from "node-red";
|
|
3
|
+
import { ConfigNode, ConfigNodeConfig, NodeDescriptor } from "../../NodeConstructor"
|
|
4
|
+
import { MetricsContainer, MetricsService} from "../service/MetricsService"
|
|
5
|
+
import { SourceUtility } from "../../NodeGenerator";
|
|
6
|
+
import { WebhookTemplate, WebhookTemplateConfig } from "../../webhook/template/WebhookTemplate";
|
|
7
|
+
import { Webhook } from "../../webhook/WebhookDecorator";
|
|
8
|
+
import { EndpointMethodType } from "../../webhook/service/WebhookServerService";
|
|
9
|
+
import {register as PrometheusRegistry, } from "prom-client";
|
|
10
|
+
import express, { Request, Response, Express } from 'express';
|
|
11
|
+
import { NodeDescription } from "../../tagging/NodeDescriptionDecorator";
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
Note: the MetricsConfigNode does not actually do the deployment of the metrics / repositories.
|
|
15
|
+
The metrics / repositories are menanaged by the plugin and triggered when the flows are deployed.
|
|
16
|
+
|
|
17
|
+
The reasoning for this is that the Metrics exist outside of the flow, but is configured using the flow.
|
|
18
|
+
Basically, if the metrics arent changed, we dont have to redeploy the metrics, which means that
|
|
19
|
+
stuff like coutners, guages and timers are not reset.
|
|
20
|
+
*/
|
|
21
|
+
interface MetricsConfigNodeConfig extends ConfigNodeConfig, WebhookTemplateConfig {
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@NodeDescription({
|
|
25
|
+
id:"MetricsConfigNode",
|
|
26
|
+
name:"Metrics Config Node",
|
|
27
|
+
group:"config",
|
|
28
|
+
sourceFile:SourceUtility.getSourcePath("/build/", "/src/") + "MetricsConfigNode.html",
|
|
29
|
+
package: "@theotherwillembotha/node-red-plugincore",
|
|
30
|
+
templates:[
|
|
31
|
+
{ template:WebhookTemplate, config: {} }
|
|
32
|
+
],
|
|
33
|
+
dependencies:[ MetricsService ],
|
|
34
|
+
tags: [ ]
|
|
35
|
+
})
|
|
36
|
+
export class MetricsConfigNode extends ConfigNode<MetricsConfigNodeConfig> {
|
|
37
|
+
private _metrics!: MetricsContainer;
|
|
38
|
+
|
|
39
|
+
constructor(node: Node, config: MetricsConfigNodeConfig){
|
|
40
|
+
super(node, config);
|
|
41
|
+
let _this = this;
|
|
42
|
+
|
|
43
|
+
this._metrics = MetricsService.get({metricsEnabled:false, metricsReference:this.id()});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public metrics():MetricsContainer {
|
|
47
|
+
return this._metrics;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@Webhook({name:"MetricsConfigNode", methods:[EndpointMethodType.GET]})
|
|
51
|
+
private onWebhookRequest(request:Request, response:Response):void {
|
|
52
|
+
response.set('Content-Type', PrometheusRegistry.contentType);
|
|
53
|
+
this._metrics.registry().metrics().then((data:any) => response.status(200).send(data))
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
<script type="text/javascript" template-section="onCompose">
|
|
2
|
+
node
|
|
3
|
+
.addDefault("name", { value:"Timer Example", required:true})
|
|
4
|
+
.addDefault("description", {value:"an example gauge", required:false})
|
|
5
|
+
.addDefault("metricType", {required:true})
|
|
6
|
+
.addDefault("buckettype", {value:"Default", required:false})
|
|
7
|
+
.addDefault("buckettype_manual_intervals", {value:"0.001, 0.01, 0.1, 1, 2, 5", required:false})
|
|
8
|
+
.addDefault("buckettype_linear_start", {value:"0", required:false})
|
|
9
|
+
.addDefault("buckettype_linear_interval", {value:"5", required:false})
|
|
10
|
+
.addDefault("buckettype_linear_count", {value:"10", required:false})
|
|
11
|
+
.addDefault("buckettype_exponential_start", {value:"1", required:false})
|
|
12
|
+
.addDefault("buckettype_exponential_factor", {value:"2", required:false})
|
|
13
|
+
.addDefault("buckettype_exponential_count", {value:"10", required:false})
|
|
14
|
+
.addDefault("percentiletype", {value:"Default", required:false})
|
|
15
|
+
.addDefault("percentiletype_manual_intervals", {value:"0.01, 0.1, 0.9, 0.99", required:false})
|
|
16
|
+
|
|
17
|
+
.setPaletteLabel("Timer Metric Config")
|
|
18
|
+
.setLabel(function() {return this.name })
|
|
19
|
+
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<script type="text/javascript" template-section="onIncludeEditPrepare">
|
|
23
|
+
{
|
|
24
|
+
let node = this;
|
|
25
|
+
|
|
26
|
+
// bucket generator selection
|
|
27
|
+
let selectBucketType = function(value){
|
|
28
|
+
$("#TimerMetricConfig").find(".metricsconfig_buckets").hide();
|
|
29
|
+
$("#TimerMetricConfig").find(`.metricsconfig_buckets_${value}`).show();
|
|
30
|
+
};
|
|
31
|
+
let bucketTypeSelection = $("#node-config-input-buckettype");
|
|
32
|
+
bucketTypeSelection.typedInput({type:"buckettype", types:[{
|
|
33
|
+
value: "buckettype",
|
|
34
|
+
options: [
|
|
35
|
+
{ value: "default", label: "Default"},
|
|
36
|
+
{ value: "manual", label: "Manual"},
|
|
37
|
+
{ value: "linear", label: "Linear"},
|
|
38
|
+
{ value: "exponential", label: "Exponential"},
|
|
39
|
+
]
|
|
40
|
+
}]});
|
|
41
|
+
bucketTypeSelection.on("change", () => selectBucketType(bucketTypeSelection.val()));
|
|
42
|
+
selectBucketType(bucketTypeSelection.val());
|
|
43
|
+
|
|
44
|
+
// percentile type selection.
|
|
45
|
+
let selectPercentileType = function(value){
|
|
46
|
+
$("#TimerMetricConfig").find(".metricsconfig_percentiles").hide();
|
|
47
|
+
$("#TimerMetricConfig").find(`.metricsconfig_percentiles_${value}`).show();
|
|
48
|
+
}
|
|
49
|
+
let percentileTypeSelection = $("#node-config-input-percentiletype");
|
|
50
|
+
percentileTypeSelection.typedInput({type:"percentiletype", types:[{
|
|
51
|
+
value: "percentiletype",
|
|
52
|
+
options: [
|
|
53
|
+
{ value: "default", label: "Default"},
|
|
54
|
+
{ value: "manual", label: "Manual"},
|
|
55
|
+
]
|
|
56
|
+
}]});
|
|
57
|
+
percentileTypeSelection.on("change", () => selectPercentileType(percentileTypeSelection.val()));
|
|
58
|
+
selectPercentileType(percentileTypeSelection.val());
|
|
59
|
+
|
|
60
|
+
// metric type selection.
|
|
61
|
+
let selectMetricType = function(value){
|
|
62
|
+
// show/hide the relevant metric type section.
|
|
63
|
+
$("#TimerMetricConfig").find(`.metrictype`).hide();
|
|
64
|
+
$("#TimerMetricConfig").find(`.metrictype_${value}`).show();
|
|
65
|
+
|
|
66
|
+
bucketTypeSelection.trigger("change");
|
|
67
|
+
percentileTypeSelection.trigger("change");
|
|
68
|
+
}
|
|
69
|
+
let metricTypeSelection = $("#node-config-input-metricType");
|
|
70
|
+
metricTypeSelection.typedInput({type:"metricType", types:[{
|
|
71
|
+
value: "metricType",
|
|
72
|
+
options: [
|
|
73
|
+
{ value: "histogram", label: "Histogram"},
|
|
74
|
+
{ value: "summary", label: "Summary"},
|
|
75
|
+
]
|
|
76
|
+
}]});
|
|
77
|
+
metricTypeSelection.on("change", () => selectMetricType(metricTypeSelection.val()));
|
|
78
|
+
selectMetricType(metricTypeSelection.val());
|
|
79
|
+
|
|
80
|
+
// enable the metrics by default and hide the Enable metrics button.
|
|
81
|
+
let metricsEnabled = $("#node-config-input-metricsEnabled");
|
|
82
|
+
metricsEnabled.prop('checked', true);
|
|
83
|
+
metricsEnabled.trigger("change");
|
|
84
|
+
$("#section_metricsconfig").find(".metricsEnableCheck").hide();
|
|
85
|
+
}
|
|
86
|
+
</script>
|
|
87
|
+
|
|
88
|
+
<script type="text/html" template-section="onIncludeEditForm">
|
|
89
|
+
<div id="TimerMetricConfig">
|
|
90
|
+
<div class="form-row">
|
|
91
|
+
<label class="towb_editorlabel" for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
|
|
92
|
+
<input type="text" id="node-config-input-name" />
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div class="form-row">
|
|
96
|
+
<label class="towb_editorlabel" for="node-config-input-description"><i class="fa fa-tag"></i> Description</label>
|
|
97
|
+
<input type="text" id="node-config-input-description" />
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<div class="form-row">
|
|
101
|
+
<label class="towb_editorlabel" for="node-config-input-metricType"><i class="fa fa-tag"></i> Type</label>
|
|
102
|
+
<input class="towb_editorfield" type="text" id="node-config-input-metricType" />
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="metrictype metrictype_histogram">
|
|
106
|
+
<div class="form-row">
|
|
107
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype"><i class="fa fa-tag"></i> Bucket Type</label>
|
|
108
|
+
<input class="towb_editorfield" type="text" id="node-config-input-buckettype" />
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="metricsconfig_buckets metricsconfig_buckets_default">
|
|
112
|
+
<span>Default bucket sizes configured as 0.001, 0.01, 0.1, 1, 2, 5 seconds</span>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="metricsconfig_buckets metricsconfig_buckets_manual">
|
|
116
|
+
<div class="form-row">
|
|
117
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_manual_intervals"><i class="fa fa-tag"></i> Buckets</label>
|
|
118
|
+
<input type="text" id="node-config-input-buckettype_manual_intervals" placeholder="0.001, 0.01, 0.1, 1, 2, 5", value="0.001, 0.01, 0.1, 1, 2, 5"/>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
|
|
122
|
+
<div class="metricsconfig_buckets metricsconfig_buckets_linear">
|
|
123
|
+
<div class="form-row">
|
|
124
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_linear_start"><i class="fa fa-tag"></i> Start</label>
|
|
125
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_linear_start" placeholder="0.000", value="0.000"/>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="form-row">
|
|
128
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_linear_inteval"><i class="fa fa-tag"></i> Interval</label>
|
|
129
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_linear_interval" placeholder="10", value="10"/>
|
|
130
|
+
</div>
|
|
131
|
+
<div class="form-row">
|
|
132
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_linear_count"><i class="fa fa-tag"></i> Count</label>
|
|
133
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_linear_count" placeholder="10", value="10"/>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<div class="metricsconfig_buckets metricsconfig_buckets_exponential">
|
|
138
|
+
<div class="form-row">
|
|
139
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_exponential_start"><i class="fa fa-tag"></i> Start</label>
|
|
140
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_exponential_start" placeholder="1", value="1"/>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="form-row">
|
|
143
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_exponential_factor"><i class="fa fa-tag"></i> Factor</label>
|
|
144
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_exponential_factor" placeholder="2", value="2"/>
|
|
145
|
+
</div>
|
|
146
|
+
<div class="form-row">
|
|
147
|
+
<label class="towb_editorlabel" for="node-config-input-buckettype_exponential_count"><i class="fa fa-tag"></i> Count</label>
|
|
148
|
+
<input class="towb_editorfield_short" type="text" id="node-config-input-buckettype_exponential_count" placeholder="10", value="10"/>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="metrictype metrictype_summary">
|
|
154
|
+
<div class="form-row">
|
|
155
|
+
<label class="towb_editorlabel" for="node-config-input-percentiletype"><i class="fa fa-tag"></i> Percentile Type</label>
|
|
156
|
+
<input type="text" id="node-config-input-percentiletype" />
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="metricsconfig_percentiles metricsconfig_percentiles_default">
|
|
160
|
+
<span>Default percentille sizes configured as [0.01, 0.1, 0.9, 0.99]</span>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<div class="metricsconfig_percentiles metricsconfig_percentiles_manual">
|
|
164
|
+
<div class="form-row">
|
|
165
|
+
<label class="towb_editorlabel" for="node-config-input-percentiletype_manual_intervals"><i class="fa fa-tag"></i> Percentiles</label>
|
|
166
|
+
<input class="towb_editorfield" type="text" id="node-config-input-percentiletype_manual_intervals" placeholder="0.01, 0.1, 0.9, 0.99", value="0.01, 0.1, 0.9, 0.99"/>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</script>
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
<script type="text/markdown" template-section="onIncludeDocumentation">
|
|
175
|
+
Configuration node for the Timer Metrics
|
|
176
|
+
|
|
177
|
+
### Inputs
|
|
178
|
+
: *name* (string) : The common name for the timer.
|
|
179
|
+
: *description* (string) : A description for the timer
|
|
180
|
+
: *type* (string) : the type of timer metric ie. Histogram or Summary
|
|
181
|
+
|
|
182
|
+
#### Histogram
|
|
183
|
+
: *type* (string) : the type of timer metric ie. Histogram or Summary
|
|
184
|
+
|
|
185
|
+
#### Summary
|
|
186
|
+
: *percentile type* (string) : the type of percentile strategy. currently supported are default and manual
|
|
187
|
+
: *percentiles* (string) : a comma separated list of percentiles to group observations into. note that the scale goes from 0 to 1.
|
|
188
|
+
|
|
189
|
+
</script>
|
|
190
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
|
|
2
|
+
import { Node } from "node-red";
|
|
3
|
+
import { ConfigNode, ConfigNodeConfig, NodeDescriptor, NodeManager } from "../../NodeConstructor"
|
|
4
|
+
import { MetricsContainer, MetricsService, BucketType, HistogramMetric, HistogramMetricConfig, SummaryMetricConfig, PercentileType, SummaryMetric} from "../service/MetricsService"
|
|
5
|
+
import { SourceUtility } from "../../NodeGenerator";
|
|
6
|
+
import { MetricsConfigNode } from "./MetricsConfigNode";
|
|
7
|
+
import { MetricsTemplate, MetricsTemplateConfig } from "../template/MetricsTemplate";
|
|
8
|
+
import { MetricCollectorType } from "../MetricsDecorator";
|
|
9
|
+
import { NodeDescription } from "../../tagging/NodeDescriptionDecorator";
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
interface TimerMetricConfigNodeConfig extends ConfigNodeConfig, MetricsTemplateConfig {
|
|
14
|
+
description:string,
|
|
15
|
+
metricType: MetricCollectorType,
|
|
16
|
+
|
|
17
|
+
buckettype: BucketType,
|
|
18
|
+
buckettype_manual_intervals:string,
|
|
19
|
+
buckettype_linear_start:string,
|
|
20
|
+
buckettype_linear_interval:string,
|
|
21
|
+
buckettype_linear_count:string,
|
|
22
|
+
buckettype_exponential_start:string,
|
|
23
|
+
buckettype_exponential_factor:string,
|
|
24
|
+
buckettype_exponential_count:string,
|
|
25
|
+
|
|
26
|
+
percentiletype:PercentileType,
|
|
27
|
+
percentiletype_manual_intervals:string,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@NodeDescription({
|
|
31
|
+
id:"TimerMetricConfigNode",
|
|
32
|
+
name:"Timer Metric Config Node",
|
|
33
|
+
group:"config",
|
|
34
|
+
sourceFile:SourceUtility.getSourcePath("/build/", "/src/") + "TimerMetricConfigNode.html",
|
|
35
|
+
package: "@theotherwillembotha/node-red-plugincore",
|
|
36
|
+
templates: [
|
|
37
|
+
{ template: MetricsTemplate, config: {isConfigNode:true}}
|
|
38
|
+
],
|
|
39
|
+
dependencies:[ MetricsConfigNode, MetricsService ],
|
|
40
|
+
tags: [ "Core", "Metric" ]
|
|
41
|
+
})
|
|
42
|
+
export class TimerMetricConfigNode extends ConfigNode<TimerMetricConfigNodeConfig> {
|
|
43
|
+
private _metrics: MetricsContainer;
|
|
44
|
+
private _timer!: HistogramMetric|SummaryMetric;
|
|
45
|
+
|
|
46
|
+
constructor(node: Node, config: TimerMetricConfigNodeConfig){
|
|
47
|
+
super(node, config);
|
|
48
|
+
let _this = this;
|
|
49
|
+
|
|
50
|
+
this._metrics = (NodeManager.RED.nodes.getNode(config.metricsReference) as any).node().metrics();
|
|
51
|
+
|
|
52
|
+
let bucketConfig:any = {}
|
|
53
|
+
|
|
54
|
+
switch(config.buckettype){
|
|
55
|
+
case BucketType.default:{
|
|
56
|
+
// do nothing
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case BucketType.manual:{
|
|
60
|
+
bucketConfig.intervals = config.buckettype_manual_intervals.split(",").map(i => Number.parseFloat(i.trim()));
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case BucketType.linear:{
|
|
64
|
+
bucketConfig.start = config.buckettype_linear_start;
|
|
65
|
+
bucketConfig.interval = config.buckettype_linear_interval;
|
|
66
|
+
bucketConfig.count = config.buckettype_linear_count;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
case BucketType.exponential:{
|
|
70
|
+
bucketConfig.start = config.buckettype_exponential_start;
|
|
71
|
+
bucketConfig.factor = config.buckettype_exponential_factor;
|
|
72
|
+
bucketConfig.count = config.buckettype_exponential_count;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if(config.metricType === MetricCollectorType.histogram){
|
|
78
|
+
let timerConfig:HistogramMetricConfig = {
|
|
79
|
+
node:{
|
|
80
|
+
id: this.id(),
|
|
81
|
+
name: this.name(),
|
|
82
|
+
flow: this.flow(),
|
|
83
|
+
type: this.type()
|
|
84
|
+
},
|
|
85
|
+
buckettype:config.buckettype,
|
|
86
|
+
bucketconfig:bucketConfig,
|
|
87
|
+
metricname:config.name,
|
|
88
|
+
metricdescription:config.description
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
this._timer = this._metrics.histogram(timerConfig);
|
|
92
|
+
}
|
|
93
|
+
if(config.metricType === MetricCollectorType.summary) {
|
|
94
|
+
let timerConfig:SummaryMetricConfig = {
|
|
95
|
+
node:{
|
|
96
|
+
id: this.id(),
|
|
97
|
+
name: this.name(),
|
|
98
|
+
flow: this.flow(),
|
|
99
|
+
type: this.type()
|
|
100
|
+
},
|
|
101
|
+
percentileType:config.percentiletype,
|
|
102
|
+
percentileConfig:config.percentiletype_manual_intervals,
|
|
103
|
+
metricname:config.name,
|
|
104
|
+
metricdescription:config.description,
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
this._timer = this._metrics.summary(timerConfig);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public metrics():MetricsContainer {
|
|
112
|
+
return this._metrics;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
public timer():HistogramMetric|SummaryMetric {
|
|
116
|
+
return this._timer;
|
|
117
|
+
}
|
|
118
|
+
}
|