@theotherwillembotha/node-red-plugincore 0.0.54 → 0.0.55
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/README.md +5 -8
- package/build/GenerateNodes.js +0 -1
- package/build/Nodes.html +0 -141
- package/build/Nodes.js +0 -2
- package/build/Plugins.js +2 -2
- package/build/core/NodeConstructor.js +15 -50
- package/build/core/NodeGenerator.js +8 -10
- package/build/core/logger/LoggerDecorator.d.ts.map +1 -1
- package/build/core/logger/LoggerDecorator.js +34 -38
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts +11 -7
- package/build/core/logger/node/ConsoleLoggerConfigNode.d.ts.map +1 -1
- package/build/core/logger/node/ConsoleLoggerConfigNode.js +24 -10
- package/build/core/logger/node/RestLoggerConfigNode.d.ts +22 -6
- package/build/core/logger/node/RestLoggerConfigNode.d.ts.map +1 -1
- package/build/core/logger/node/RestLoggerConfigNode.js +93 -23
- package/build/core/logger/service/LoggerService.d.ts +59 -68
- package/build/core/logger/service/LoggerService.d.ts.map +1 -1
- package/build/core/logger/service/LoggerService.js +76 -165
- package/build/core/logger/template/LoggerTemplate.d.ts +9 -1
- package/build/core/logger/template/LoggerTemplate.d.ts.map +1 -1
- package/build/core/metrics/node/CounterMetricConfigNode.js +0 -2
- package/build/core/metrics/node/GaugeMetricConfigNode.js +0 -2
- package/build/core/metrics/node/MetricsConfigNode.js +0 -1
- package/build/core/metrics/node/TimerMetricConfigNode.js +0 -2
- package/build/core/metrics/service/MetricsService.js +10 -24
- package/build/core/other/service/SettingsService.js +0 -2
- package/build/core/tagging/service/NodeTypeService.js +1 -2
- package/build/core/webhook/WebhookDecorator.d.ts.map +1 -1
- package/build/core/webhook/WebhookDecorator.js +4 -4
- package/build/core/webhook/node/WebhookServerConfigNode.js +0 -1
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts +0 -2
- package/build/core/webhook/service/ReverseProxyTypeService.d.ts.map +1 -1
- package/build/core/webhook/service/ReverseProxyTypeService.js +1 -6
- package/build/core/webhook/service/WebhookServerService.d.ts +1 -1
- package/build/core/webhook/service/WebhookServerService.d.ts.map +1 -1
- package/build/core/webhook/service/WebhookServerService.js +6 -9
- package/build/core/webhook/template/WebhookTemplate.d.ts +1 -1
- package/build/core/webhook/template/WebhookTemplate.d.ts.map +1 -1
- package/build/index.d.ts +1 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -2
- package/build/resources/editorLanguageExtension.js +1 -2
- package/package.json +5 -3
- package/resources/editorLanguageExtension.js +1 -2
- package/src/GenerateNodes.ts +2 -2
- package/src/core/NodeConstructor.ts +1 -1
- package/src/core/NodeGenerator.ts +2 -2
- package/src/core/logger/LoggerDecorator.ts +56 -53
- package/src/core/logger/node/ConsoleLoggerConfigNode.ts +39 -14
- package/src/core/logger/node/RestLoggerConfigNode.ts +128 -25
- package/src/core/logger/service/LoggerService.ts +103 -239
- package/src/core/logger/template/LoggerTemplate.ts +11 -1
- package/src/core/webhook/WebhookDecorator.ts +1 -3
- package/src/core/webhook/service/ReverseProxyTypeService.ts +0 -4
- package/src/core/webhook/service/WebhookServerService.ts +1 -1
- package/src/core/webhook/template/WebhookTemplate.ts +1 -1
- package/src/index.ts +2 -2
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts +0 -20
- package/build/core/logger/node/LokiLoggerConfigNode.d.ts.map +0 -1
- package/build/core/logger/node/LokiLoggerConfigNode.html +0 -117
- package/build/core/logger/node/LokiLoggerConfigNode.js +0 -53
- package/build/core/logger/service/LoggerServiceTypes.d.ts +0 -24
- package/build/core/logger/service/LoggerServiceTypes.d.ts.map +0 -1
- package/build/core/logger/service/LoggerServiceTypes.js +0 -30
- package/documentation/LokiLoggerConfigNode.png +0 -0
- package/src/core/logger/node/LokiLoggerConfigNode.html +0 -117
- package/src/core/logger/node/LokiLoggerConfigNode.ts +0 -58
- package/src/core/logger/service/LoggerServiceTypes.ts +0 -26
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Node } from "node-red";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { ApiKeyMechanismType, Level,
|
|
2
|
+
import { ConfigNodeConfig } from "../../NodeConstructor";
|
|
3
|
+
import { LoggerConfigNode, AbstractLogger, BaseLoggerConfig, Log } from "../service/LoggerService";
|
|
4
|
+
import { ApiKeyMechanismType, Level, RestAuthType } from "../service/LoggerService";
|
|
5
|
+
import { LoggerTemplateConfig } from "../template/LoggerTemplate";
|
|
5
6
|
interface RestLoggerConfigNodeConfig extends ConfigNodeConfig {
|
|
6
7
|
id: string;
|
|
7
|
-
platform: PlatformType;
|
|
8
8
|
level: Level;
|
|
9
9
|
template: string;
|
|
10
10
|
rest_url: string;
|
|
11
|
+
rest_ignoresslerror: boolean;
|
|
11
12
|
rest_auth_type: RestAuthType;
|
|
12
13
|
rest_auth_basic_username: string;
|
|
13
14
|
rest_auth_basic_password: string;
|
|
@@ -15,10 +16,25 @@ interface RestLoggerConfigNodeConfig extends ConfigNodeConfig {
|
|
|
15
16
|
rest_auth_apikey_name: string;
|
|
16
17
|
rest_auth_apikey_value: string;
|
|
17
18
|
}
|
|
18
|
-
export declare class RestLoggerConfigNode extends
|
|
19
|
+
export declare class RestLoggerConfigNode extends LoggerConfigNode<RestLoggerConfigNodeConfig, RestLogger> {
|
|
19
20
|
private _logger;
|
|
20
21
|
constructor(node: Node, config: RestLoggerConfigNodeConfig);
|
|
21
|
-
|
|
22
|
+
protected logger(): RestLogger;
|
|
23
|
+
}
|
|
24
|
+
declare class RestLogger extends AbstractLogger<RestLoggerConfig> {
|
|
25
|
+
private winston;
|
|
26
|
+
constructor(config: RestLoggerConfig);
|
|
27
|
+
protected createLogger(config: LoggerTemplateConfig): Log;
|
|
28
|
+
}
|
|
29
|
+
interface RestLoggerConfig extends BaseLoggerConfig {
|
|
30
|
+
url: string;
|
|
31
|
+
ignoresslerror: boolean;
|
|
32
|
+
auth_type: RestAuthType;
|
|
33
|
+
auth_basic_username: string;
|
|
34
|
+
auth_basic_password: string;
|
|
35
|
+
auth_apikey_mechanism: ApiKeyMechanismType;
|
|
36
|
+
auth_apikey_name: string;
|
|
37
|
+
auth_apikey_value: string;
|
|
22
38
|
}
|
|
23
39
|
export {};
|
|
24
40
|
//# sourceMappingURL=RestLoggerConfigNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestLoggerConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/node/RestLoggerConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"RestLoggerConfigNode.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/node/RestLoggerConfigNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAiB,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAU,GAAG,EAAE,MAAM,0BAA0B,CAAA;AAEzH,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAKlE,UAAU,0BAA2B,SAAQ,gBAAgB;IAEzD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAC,KAAK,CAAC;IACZ,QAAQ,EAAC,MAAM,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAC,OAAO,CAAC;IAC5B,cAAc,EAAE,YAAY,CAAC;IAC7B,wBAAwB,EAAC,MAAM,CAAC;IAChC,wBAAwB,EAAC,MAAM,CAAC;IAChC,0BAA0B,EAAC,mBAAmB,CAAC;IAC/C,qBAAqB,EAAC,MAAM,CAAC;IAC7B,sBAAsB,EAAC,MAAM,CAAC;CACjC;AAED,qBASa,oBAAqB,SAAQ,gBAAgB,CAAC,0BAA0B,EAAE,UAAU,CAAC;IAE9F,OAAO,CAAC,OAAO,CAAc;gBAEjB,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,0BAA0B;IAyB1D,SAAS,CAAC,MAAM,IAAG,UAAU;CAGhC;AAED,cAAM,UAAW,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAErD,OAAO,CAAC,OAAO,CAAQ;gBAEX,MAAM,EAAC,gBAAgB;IA8DnC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,GAAG,GAAG;CAG5D;AAoBD,UAAU,gBAAiB,SAAQ,gBAAgB;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAC,OAAO,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;IACxB,mBAAmB,EAAC,MAAM,CAAC;IAC3B,mBAAmB,EAAC,MAAM,CAAC;IAC3B,qBAAqB,EAAC,mBAAmB,CAAC;IAC1C,gBAAgB,EAAC,MAAM,CAAC;IACxB,iBAAiB,EAAC,MAAM,CAAC;CAC5B"}
|
|
@@ -10,37 +10,36 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.RestLoggerConfigNode = void 0;
|
|
13
|
-
const NodeConstructor_1 = require("../../NodeConstructor");
|
|
14
13
|
const LoggerService_1 = require("../service/LoggerService");
|
|
15
14
|
const NodeGenerator_1 = require("../../NodeGenerator");
|
|
16
|
-
const
|
|
15
|
+
const LoggerService_2 = require("../service/LoggerService");
|
|
17
16
|
const NodeDescriptionDecorator_1 = require("../../tagging/NodeDescriptionDecorator");
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
const whatwg_url_1 = require("whatwg-url");
|
|
18
|
+
const winston_1 = require("winston");
|
|
19
|
+
let RestLoggerConfigNode = class RestLoggerConfigNode extends LoggerService_1.LoggerConfigNode {
|
|
20
20
|
constructor(node, config) {
|
|
21
21
|
super(node, config);
|
|
22
22
|
let _this = this;
|
|
23
23
|
// instantiate the logger.
|
|
24
|
-
let loggerConfig
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
this._logger = LoggerService_1.LoggerService.get(loggerConfig);
|
|
24
|
+
let loggerConfig = {
|
|
25
|
+
id: this.id(),
|
|
26
|
+
type: "REST",
|
|
27
|
+
level: config.level,
|
|
28
|
+
template: config.template,
|
|
29
|
+
// additional properties.
|
|
30
|
+
url: config.rest_url,
|
|
31
|
+
ignoresslerror: config.rest_ignoresslerror,
|
|
32
|
+
auth_type: config.rest_auth_type,
|
|
33
|
+
auth_basic_username: config.rest_auth_basic_username,
|
|
34
|
+
auth_basic_password: config.rest_auth_basic_password,
|
|
35
|
+
auth_apikey_mechanism: config.rest_auth_apikey_mechanism,
|
|
36
|
+
auth_apikey_name: config.rest_auth_apikey_name,
|
|
37
|
+
auth_apikey_value: config.rest_auth_apikey_value,
|
|
38
|
+
};
|
|
39
|
+
this._logger = new RestLogger(loggerConfig);
|
|
41
40
|
}
|
|
42
|
-
|
|
43
|
-
return this._logger
|
|
41
|
+
logger() {
|
|
42
|
+
return this._logger;
|
|
44
43
|
}
|
|
45
44
|
};
|
|
46
45
|
exports.RestLoggerConfigNode = RestLoggerConfigNode;
|
|
@@ -56,3 +55,74 @@ exports.RestLoggerConfigNode = RestLoggerConfigNode = __decorate([
|
|
|
56
55
|
}),
|
|
57
56
|
__metadata("design:paramtypes", [Object, Object])
|
|
58
57
|
], RestLoggerConfigNode);
|
|
58
|
+
class RestLogger extends LoggerService_1.AbstractLogger {
|
|
59
|
+
constructor(config) {
|
|
60
|
+
super(config);
|
|
61
|
+
// get the url.
|
|
62
|
+
let hosturl = (0, whatwg_url_1.parseURL)(config.url);
|
|
63
|
+
if (!hosturl) {
|
|
64
|
+
throw Error("could not parse url: " + config.url);
|
|
65
|
+
}
|
|
66
|
+
// get the options
|
|
67
|
+
let httpOptions = {};
|
|
68
|
+
// get the params.
|
|
69
|
+
let httpParams = {
|
|
70
|
+
host: hosturl.host?.toString(),
|
|
71
|
+
path: "/" + (hosturl.path ? [...hosturl.path].join("/") : "") + (hosturl.query ? ("?" + hosturl.query) : ""),
|
|
72
|
+
port: (hosturl.port) ? hosturl.port : undefined,
|
|
73
|
+
ssl: hosturl.scheme.toLowerCase() === "https",
|
|
74
|
+
headers: {},
|
|
75
|
+
};
|
|
76
|
+
httpParams.options = httpOptions;
|
|
77
|
+
// add the ignore ssl error flag if need be.
|
|
78
|
+
if (config.ignoresslerror) {
|
|
79
|
+
httpOptions.rejectUnauthorized = false;
|
|
80
|
+
}
|
|
81
|
+
// configure "none" authentication.
|
|
82
|
+
if (config.auth_type === LoggerService_2.RestAuthType.none) { }
|
|
83
|
+
// configure "basic" authentication.
|
|
84
|
+
if (config.auth_type === LoggerService_2.RestAuthType.basic) {
|
|
85
|
+
httpParams.auth = {
|
|
86
|
+
username: config.auth_basic_username,
|
|
87
|
+
password: config.auth_basic_password
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// configure "apikey" authentication.
|
|
91
|
+
if (config.auth_type === LoggerService_2.RestAuthType.apikey) {
|
|
92
|
+
if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.header) {
|
|
93
|
+
httpParams.headers[config.auth_apikey_name] = config.auth_apikey_value;
|
|
94
|
+
}
|
|
95
|
+
if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.matrixparam) {
|
|
96
|
+
httpParams.path = httpParams.path?.replace(`:${config.auth_apikey_name}`, config.auth_apikey_value);
|
|
97
|
+
}
|
|
98
|
+
if (config.auth_apikey_mechanism === LoggerService_2.ApiKeyMechanismType.queryparam) {
|
|
99
|
+
httpParams.path = httpParams.path + (httpParams.path?.includes("?") ? "&" : "?") + config.auth_apikey_name + "=" + config.auth_apikey_value;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
;
|
|
103
|
+
this.winston = (0, winston_1.createLogger)({
|
|
104
|
+
level: config.level.toString().toLowerCase(),
|
|
105
|
+
format: winston_1.format.json(),
|
|
106
|
+
defaultMeta: {},
|
|
107
|
+
transports: [
|
|
108
|
+
new winston_1.transports.Http(httpParams),
|
|
109
|
+
],
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
createLogger(config) {
|
|
113
|
+
return new RestAppender(config, this.winston);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
class RestAppender extends LoggerService_1.Log {
|
|
117
|
+
constructor(config, winston) {
|
|
118
|
+
super(config);
|
|
119
|
+
this.winston = winston;
|
|
120
|
+
}
|
|
121
|
+
writeToLog(level, message, tags) {
|
|
122
|
+
this.winston.log({
|
|
123
|
+
level: level,
|
|
124
|
+
message: message,
|
|
125
|
+
labels: tags
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -1,88 +1,79 @@
|
|
|
1
|
-
import { BaseService, ServiceDescriptor } from "../../NodeConstructor";
|
|
2
|
-
import { NodeAPI, NodeAPISettingsWithData } from "node-red";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { BaseService, ServiceDescriptor, ConfigNodeConfig, ConfigNode } from "../../NodeConstructor";
|
|
2
|
+
import { NodeAPI, NodeAPISettingsWithData, Node } from "node-red";
|
|
3
|
+
import { LoggerTemplateConfig } from "../template/LoggerTemplate";
|
|
4
|
+
export declare enum Level {
|
|
5
|
+
DEBUG = "DEBUG",
|
|
6
|
+
INFO = "INFO",
|
|
7
|
+
WARNING = "WARNING",
|
|
8
|
+
ERROR = "ERROR"
|
|
9
|
+
}
|
|
10
|
+
export declare enum RestAuthType {
|
|
11
|
+
none = "none",
|
|
12
|
+
basic = "basic",
|
|
13
|
+
apikey = "apikey"
|
|
14
|
+
}
|
|
15
|
+
export declare enum ApiKeyMechanismType {
|
|
16
|
+
header = "header",
|
|
17
|
+
queryparam = "queryparam",
|
|
18
|
+
matrixparam = "matrixparam"
|
|
19
|
+
}
|
|
20
|
+
export type TagMap = {
|
|
21
|
+
id: string;
|
|
7
22
|
node: string;
|
|
8
23
|
type: string;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export type Log = {
|
|
12
|
-
log(message: {
|
|
13
|
-
[key: string]: any;
|
|
14
|
-
} | string): void;
|
|
24
|
+
flow: string;
|
|
25
|
+
instance: string;
|
|
15
26
|
};
|
|
16
|
-
export declare class
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
log(
|
|
27
|
+
export declare abstract class Log {
|
|
28
|
+
private _config;
|
|
29
|
+
private template;
|
|
30
|
+
private tags;
|
|
31
|
+
protected constructor(config: LoggerTemplateConfig);
|
|
32
|
+
protected config(): LoggerTemplateConfig;
|
|
33
|
+
log(payload: {
|
|
23
34
|
[key: string]: any;
|
|
24
35
|
} | string): void;
|
|
25
|
-
|
|
26
|
-
[key: string]:
|
|
27
|
-
}):
|
|
28
|
-
getTags(): TagMap;
|
|
36
|
+
protected abstract writeToLog(level: string, message: string, tags: {
|
|
37
|
+
[key: string]: string | boolean | number;
|
|
38
|
+
}): void;
|
|
29
39
|
}
|
|
30
|
-
export
|
|
40
|
+
export type BaseLoggerConfig = {
|
|
31
41
|
id: string;
|
|
32
|
-
type:
|
|
42
|
+
type: string;
|
|
33
43
|
level: Level;
|
|
34
44
|
template: string;
|
|
35
|
-
}
|
|
36
|
-
export declare abstract class
|
|
45
|
+
};
|
|
46
|
+
export declare abstract class AbstractLogger<BaseLoggerConfig> {
|
|
37
47
|
private _config;
|
|
38
|
-
private
|
|
39
|
-
constructor(config:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
register(registration: LoggerRegistration): Log;
|
|
44
|
-
serialize(content: any): string;
|
|
45
|
-
config(): ConfigType;
|
|
46
|
-
protected abstract writeToLog(serializedContent: string, tags: TagMap): void;
|
|
47
|
-
}
|
|
48
|
-
export interface ConsoleLoggerConfig extends BaseLoggerConfig {
|
|
49
|
-
}
|
|
50
|
-
export interface LokiLoggerConfig extends BaseLoggerConfig {
|
|
51
|
-
type: PlatformType.loki;
|
|
52
|
-
host: string;
|
|
53
|
-
userid?: string;
|
|
54
|
-
authtoken?: string;
|
|
55
|
-
tenantid?: string;
|
|
56
|
-
}
|
|
57
|
-
export interface RestLoggerConfig extends BaseLoggerConfig {
|
|
58
|
-
type: PlatformType.rest;
|
|
59
|
-
url: string;
|
|
60
|
-
ignoresslerror: boolean;
|
|
61
|
-
auth_type: RestAuthType;
|
|
62
|
-
auth_basic_username: string;
|
|
63
|
-
auth_basic_password: string;
|
|
64
|
-
auth_apikey_mechanism: ApiKeyMechanismType;
|
|
65
|
-
auth_apikey_name: string;
|
|
66
|
-
auth_apikey_value: string;
|
|
48
|
+
private _appenders;
|
|
49
|
+
constructor(config: BaseLoggerConfig);
|
|
50
|
+
config(): BaseLoggerConfig;
|
|
51
|
+
registerTemplate(config: LoggerTemplateConfig): Log;
|
|
52
|
+
protected abstract createLogger(config: LoggerTemplateConfig): Log;
|
|
67
53
|
}
|
|
68
54
|
export declare class LoggerService extends BaseService {
|
|
69
55
|
static instanceID: string;
|
|
70
|
-
private static loggers;
|
|
71
56
|
private red;
|
|
72
57
|
constructor();
|
|
73
58
|
init(red: NodeAPI<NodeAPISettingsWithData>): void | Promise<void>;
|
|
74
59
|
deinit(red: NodeAPI<NodeAPISettingsWithData>): void | Promise<void>;
|
|
75
|
-
static get<ConfigType extends BaseLoggerConfig>(config: ConfigType): NewLogger<ConfigType>;
|
|
76
60
|
static getServiceDescriptor(): ServiceDescriptor;
|
|
77
61
|
}
|
|
78
|
-
export type
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
62
|
+
export type LoggerConfigNodeConfig = ConfigNodeConfig & BaseLoggerConfig & {};
|
|
63
|
+
export declare abstract class LoggerConfigNode<CNC extends LoggerConfigNodeConfig, LoggerType extends AbstractLogger<BaseLoggerConfig>> extends ConfigNode<CNC> {
|
|
64
|
+
protected constructor(node: Node, config: CNC);
|
|
65
|
+
protected abstract logger(): LoggerType;
|
|
66
|
+
registerTemplate(config: LoggerTemplateConfig): Log;
|
|
67
|
+
}
|
|
68
|
+
export declare class DoNothingAppender extends Log {
|
|
69
|
+
private static instance;
|
|
70
|
+
static get(): any;
|
|
71
|
+
private constructor();
|
|
72
|
+
log(payload: {
|
|
73
|
+
[key: string]: any;
|
|
74
|
+
} | string): void;
|
|
75
|
+
protected writeToLog(level: string, message: string, tags: {
|
|
76
|
+
[key: string]: string | boolean | number;
|
|
77
|
+
}): void;
|
|
78
|
+
}
|
|
88
79
|
//# sourceMappingURL=LoggerService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/service/LoggerService.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"LoggerService.d.ts","sourceRoot":"","sources":["../../../../src/core/logger/service/LoggerService.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,185 +3,83 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LoggerService = exports.
|
|
6
|
+
exports.DoNothingAppender = exports.LoggerConfigNode = exports.LoggerService = exports.AbstractLogger = exports.Log = exports.ApiKeyMechanismType = exports.RestAuthType = exports.Level = void 0;
|
|
7
7
|
const NodeConstructor_1 = require("../../NodeConstructor");
|
|
8
8
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
9
|
-
const winston_1 = require("winston");
|
|
10
|
-
const winston_loki_1 = __importDefault(require("winston-loki"));
|
|
11
|
-
const whatwg_url_1 = require("whatwg-url");
|
|
12
9
|
const LoggerTemplate_1 = require("../template/LoggerTemplate");
|
|
13
10
|
var network = require('network');
|
|
14
|
-
const deep_equal_1 = __importDefault(require("deep-equal"));
|
|
15
|
-
const LoggerServiceTypes_1 = require("./LoggerServiceTypes");
|
|
16
11
|
// helper for serializing json objects inside handlebars tags.
|
|
17
12
|
// you can then convert it like this: {{{json myobject}}}
|
|
18
13
|
handlebars_1.default.registerHelper('json', function (context) {
|
|
19
14
|
return JSON.stringify(context);
|
|
20
15
|
});
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
16
|
+
var Level;
|
|
17
|
+
(function (Level) {
|
|
18
|
+
Level["DEBUG"] = "DEBUG";
|
|
19
|
+
Level["INFO"] = "INFO";
|
|
20
|
+
Level["WARNING"] = "WARNING";
|
|
21
|
+
Level["ERROR"] = "ERROR";
|
|
22
|
+
})(Level || (exports.Level = Level = {}));
|
|
23
|
+
var RestAuthType;
|
|
24
|
+
(function (RestAuthType) {
|
|
25
|
+
RestAuthType["none"] = "none";
|
|
26
|
+
RestAuthType["basic"] = "basic";
|
|
27
|
+
RestAuthType["apikey"] = "apikey";
|
|
28
|
+
})(RestAuthType || (exports.RestAuthType = RestAuthType = {}));
|
|
29
|
+
var ApiKeyMechanismType;
|
|
30
|
+
(function (ApiKeyMechanismType) {
|
|
31
|
+
ApiKeyMechanismType["header"] = "header";
|
|
32
|
+
ApiKeyMechanismType["queryparam"] = "queryparam";
|
|
33
|
+
ApiKeyMechanismType["matrixparam"] = "matrixparam";
|
|
34
|
+
})(ApiKeyMechanismType || (exports.ApiKeyMechanismType = ApiKeyMechanismType = {}));
|
|
35
|
+
class Log {
|
|
36
|
+
constructor(config) {
|
|
37
|
+
this._config = config;
|
|
38
|
+
this.template = handlebars_1.default.compile(config.template);
|
|
39
|
+
this.tags = {
|
|
40
|
+
id: config.id,
|
|
33
41
|
node: config.name,
|
|
34
42
|
type: config.type,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
log(message) {
|
|
39
|
-
// enrich the logged content with additional properties.
|
|
40
|
-
let content = {
|
|
41
|
-
currentTime: new Date().toISOString(),
|
|
42
|
-
msg: message,
|
|
43
|
+
flow: config.flow,
|
|
44
|
+
instance: LoggerService.instanceID
|
|
43
45
|
};
|
|
44
|
-
// send typ the logger.
|
|
45
|
-
this.root.log(this, content);
|
|
46
|
-
}
|
|
47
|
-
serialize(content) {
|
|
48
|
-
return !!this.template ? this.template(content) : this.root.serialize(content);
|
|
49
46
|
}
|
|
50
|
-
|
|
51
|
-
return this.
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
exports.LogImplementation = LogImplementation;
|
|
55
|
-
class NewLogger {
|
|
56
|
-
_config;
|
|
57
|
-
template;
|
|
58
|
-
constructor(config) {
|
|
59
|
-
this._config = config;
|
|
60
|
-
this.template = handlebars_1.default.compile(config.template);
|
|
47
|
+
config() {
|
|
48
|
+
return this._config;
|
|
61
49
|
}
|
|
62
|
-
log(
|
|
50
|
+
log(payload) {
|
|
63
51
|
try {
|
|
64
|
-
// step 1
|
|
65
|
-
let
|
|
66
|
-
// step 2
|
|
67
|
-
|
|
68
|
-
// step 3. write to the logger.
|
|
69
|
-
this.writeToLog(serializedContent, tags);
|
|
52
|
+
// step 1. serialize the payload using the template engine.
|
|
53
|
+
let message = (payload instanceof String) ? payload : this.template({ msg: payload });
|
|
54
|
+
// step 2. write to the log appender.
|
|
55
|
+
this.writeToLog(this.config().level, message, this.tags);
|
|
70
56
|
}
|
|
71
|
-
catch (
|
|
72
|
-
console.log(
|
|
57
|
+
catch (e) {
|
|
58
|
+
console.log(e);
|
|
73
59
|
}
|
|
74
60
|
}
|
|
75
|
-
register(registration) {
|
|
76
|
-
return new LogImplementation(this, registration);
|
|
77
|
-
}
|
|
78
|
-
serialize(content) {
|
|
79
|
-
return this.template(content);
|
|
80
|
-
}
|
|
81
|
-
config() {
|
|
82
|
-
return this._config;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
exports.NewLogger = NewLogger;
|
|
86
|
-
class ConsoleLogger extends NewLogger {
|
|
87
|
-
constructor(config) {
|
|
88
|
-
super(config);
|
|
89
|
-
}
|
|
90
|
-
writeToLog(serializedContent, tags) {
|
|
91
|
-
console.log(tags, serializedContent);
|
|
92
|
-
}
|
|
93
61
|
}
|
|
94
|
-
|
|
95
|
-
|
|
62
|
+
exports.Log = Log;
|
|
63
|
+
class AbstractLogger {
|
|
96
64
|
constructor(config) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
host: config.host,
|
|
100
|
-
json: true,
|
|
101
|
-
format: winston_1.format.json(),
|
|
102
|
-
headers: {
|
|
103
|
-
"X-Scope-OrgID": (config.tenantid) ? config.tenantid : undefined
|
|
104
|
-
},
|
|
105
|
-
replaceTimestamp: true,
|
|
106
|
-
onConnectionError: (err) => console.error(err),
|
|
107
|
-
basicAuth: (config.userid && config.authtoken)
|
|
108
|
-
? `${config.userid}:${config.authtoken}`
|
|
109
|
-
: undefined
|
|
110
|
-
};
|
|
111
|
-
this.logger = (0, winston_1.createLogger)({
|
|
112
|
-
level: this.config().level.toString().toLowerCase(),
|
|
113
|
-
format: winston_1.format.json(),
|
|
114
|
-
defaultMeta: {},
|
|
115
|
-
transports: [
|
|
116
|
-
new winston_loki_1.default(transportConfig),
|
|
117
|
-
],
|
|
118
|
-
});
|
|
65
|
+
this._appenders = {};
|
|
66
|
+
this._config = config;
|
|
119
67
|
}
|
|
120
|
-
|
|
121
|
-
|
|
68
|
+
config() {
|
|
69
|
+
return this._config;
|
|
122
70
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
super(config);
|
|
128
|
-
let hosturl = (0, whatwg_url_1.parseURL)(config.url);
|
|
129
|
-
if (!hosturl) {
|
|
130
|
-
throw Error("could not parse url: " + config.url);
|
|
71
|
+
registerTemplate(config) {
|
|
72
|
+
let appender = this._appenders[config.id];
|
|
73
|
+
if (appender) {
|
|
74
|
+
return appender;
|
|
131
75
|
}
|
|
132
|
-
let
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
path: "/" + (hosturl.path ? [...hosturl.path].join("/") : "") + (hosturl.query ? ("?" + hosturl.query) : ""),
|
|
136
|
-
port: (hosturl.port) ? hosturl.port : undefined,
|
|
137
|
-
ssl: hosturl.scheme.toLowerCase() === "https",
|
|
138
|
-
headers: {},
|
|
139
|
-
};
|
|
140
|
-
httpParams.options = httpOptions;
|
|
141
|
-
if (config.ignoresslerror) {
|
|
142
|
-
httpOptions.rejectUnauthorized = false;
|
|
143
|
-
}
|
|
144
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.none) { }
|
|
145
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.basic) {
|
|
146
|
-
httpParams.auth = {
|
|
147
|
-
username: config.auth_basic_username,
|
|
148
|
-
password: config.auth_basic_password
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
if (config.auth_type === LoggerServiceTypes_1.RestAuthType.apikey) {
|
|
152
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.header) {
|
|
153
|
-
httpParams.headers[config.auth_apikey_name] = config.auth_apikey_value;
|
|
154
|
-
}
|
|
155
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.matrixparam) {
|
|
156
|
-
httpParams.path = httpParams.path?.replace(`:${config.auth_apikey_name}`, config.auth_apikey_value);
|
|
157
|
-
}
|
|
158
|
-
if (config.auth_apikey_mechanism === LoggerServiceTypes_1.ApiKeyMechanismType.queryparam) {
|
|
159
|
-
httpParams.path = httpParams.path + (httpParams.path?.includes("?") ? "&" : "?") + config.auth_apikey_name + "=" + config.auth_apikey_value;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
;
|
|
163
|
-
this.logger = (0, winston_1.createLogger)({
|
|
164
|
-
level: config.level.toString().toLowerCase(),
|
|
165
|
-
format: winston_1.format.json(),
|
|
166
|
-
defaultMeta: {},
|
|
167
|
-
transports: [
|
|
168
|
-
new winston_1.transports.Http(httpParams),
|
|
169
|
-
],
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
writeToLog(serializedContent, tags) {
|
|
173
|
-
this.logger.log({ level: this.logger.level, message: serializedContent, labels: tags });
|
|
76
|
+
let _this = this;
|
|
77
|
+
this._appenders[config.id] = appender = this.createLogger(config);
|
|
78
|
+
return appender;
|
|
174
79
|
}
|
|
175
80
|
}
|
|
176
|
-
|
|
177
|
-
console: ConsoleLogger,
|
|
178
|
-
loki: LokiLogger,
|
|
179
|
-
rest: RestLogger
|
|
180
|
-
};
|
|
81
|
+
exports.AbstractLogger = AbstractLogger;
|
|
181
82
|
class LoggerService extends NodeConstructor_1.BaseService {
|
|
182
|
-
static instanceID;
|
|
183
|
-
static loggers = {};
|
|
184
|
-
red;
|
|
185
83
|
constructor() {
|
|
186
84
|
super("logger");
|
|
187
85
|
}
|
|
@@ -194,20 +92,33 @@ class LoggerService extends NodeConstructor_1.BaseService {
|
|
|
194
92
|
});
|
|
195
93
|
}
|
|
196
94
|
deinit(red) { }
|
|
197
|
-
static get(config) {
|
|
198
|
-
let logger = this.loggers[config.id];
|
|
199
|
-
if (logger) {
|
|
200
|
-
if (!(0, deep_equal_1.default)(config, logger.config())) {
|
|
201
|
-
this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
this.loggers[config.id] = (logger = new (LoggerTypes[config.type])(config));
|
|
206
|
-
}
|
|
207
|
-
return logger;
|
|
208
|
-
}
|
|
209
95
|
static getServiceDescriptor() {
|
|
210
96
|
return new NodeConstructor_1.ServiceDescriptor("@theotherwillembotha/loggerservice", "LoggerService", "services-plugin", "@theotherwillembotha/node-red-plugincore", LoggerService, [LoggerTemplate_1.LoggerTemplate]);
|
|
211
97
|
}
|
|
212
98
|
}
|
|
213
99
|
exports.LoggerService = LoggerService;
|
|
100
|
+
class LoggerConfigNode extends NodeConstructor_1.ConfigNode {
|
|
101
|
+
constructor(node, config) {
|
|
102
|
+
super(node, config);
|
|
103
|
+
}
|
|
104
|
+
registerTemplate(config) {
|
|
105
|
+
return this.logger().registerTemplate(config);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.LoggerConfigNode = LoggerConfigNode;
|
|
109
|
+
class DoNothingAppender extends Log {
|
|
110
|
+
static { this.instance = new DoNothingAppender(); }
|
|
111
|
+
static get() {
|
|
112
|
+
return DoNothingAppender.instance;
|
|
113
|
+
}
|
|
114
|
+
constructor() {
|
|
115
|
+
super({ flow: "", id: "", level: "", name: "", template: "", type: "" });
|
|
116
|
+
}
|
|
117
|
+
log(payload) {
|
|
118
|
+
// do nothing.
|
|
119
|
+
}
|
|
120
|
+
writeToLog(level, message, tags) {
|
|
121
|
+
// do nothing.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.DoNothingAppender = DoNothingAppender;
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { BaseNodeConfig, Template, TemplateDescriptor } from "../../NodeConstructor";
|
|
2
|
-
export interface
|
|
2
|
+
export interface LoggerTemplateNodeConfig extends BaseNodeConfig {
|
|
3
3
|
logEnabled: boolean;
|
|
4
4
|
logger: string;
|
|
5
5
|
logTemplateOverrideEnabled: boolean;
|
|
6
6
|
logTemplateOverride: string;
|
|
7
7
|
}
|
|
8
|
+
export type LoggerTemplateConfig = {
|
|
9
|
+
id: string;
|
|
10
|
+
flow: string;
|
|
11
|
+
type: string;
|
|
12
|
+
name: string;
|
|
13
|
+
template: string;
|
|
14
|
+
level: string;
|
|
15
|
+
};
|
|
8
16
|
export declare class LoggerTemplate extends Template {
|
|
9
17
|
static getTemplateDescriptor(): TemplateDescriptor;
|
|
10
18
|
}
|