@bsb/base 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +665 -0
- package/LICENSE.commercial +32 -0
- package/README.md +263 -0
- package/bsb-plugin.json +62 -0
- package/lib/base/BSBConfig.d.ts +130 -0
- package/lib/base/BSBConfig.js +95 -0
- package/lib/base/BSBConfig.js.map +1 -0
- package/lib/base/BSBEvents.d.ts +207 -0
- package/lib/base/BSBEvents.js +101 -0
- package/lib/base/BSBEvents.js.map +1 -0
- package/lib/base/BSBObservable.d.ts +178 -0
- package/lib/base/BSBObservable.js +91 -0
- package/lib/base/BSBObservable.js.map +1 -0
- package/lib/base/BSBService.d.ts +277 -0
- package/lib/base/BSBService.js +366 -0
- package/lib/base/BSBService.js.map +1 -0
- package/lib/base/BSBServiceClient.d.ts +135 -0
- package/lib/base/BSBServiceClient.js +130 -0
- package/lib/base/BSBServiceClient.js.map +1 -0
- package/lib/base/EventValidator.d.ts +137 -0
- package/lib/base/EventValidator.js +210 -0
- package/lib/base/EventValidator.js.map +1 -0
- package/lib/base/ObservableBackend.d.ts +281 -0
- package/lib/base/ObservableBackend.js +515 -0
- package/lib/base/ObservableBackend.js.map +1 -0
- package/lib/base/PluginConfig.d.ts +196 -0
- package/lib/base/PluginConfig.js +96 -0
- package/lib/base/PluginConfig.js.map +1 -0
- package/lib/base/PluginEvents.d.ts +140 -0
- package/lib/base/PluginEvents.js +268 -0
- package/lib/base/PluginEvents.js.map +1 -0
- package/lib/base/PluginObservable.d.ts +196 -0
- package/lib/base/PluginObservable.js +250 -0
- package/lib/base/PluginObservable.js.map +1 -0
- package/lib/base/ResourceContext.d.ts +70 -0
- package/lib/base/ResourceContext.js +54 -0
- package/lib/base/ResourceContext.js.map +1 -0
- package/lib/base/base.d.ts +264 -0
- package/lib/base/base.js +182 -0
- package/lib/base/base.js.map +1 -0
- package/lib/base/errorMessages.d.ts +56 -0
- package/lib/base/errorMessages.js +70 -0
- package/lib/base/errorMessages.js.map +1 -0
- package/lib/base/factory.d.ts +58 -0
- package/lib/base/factory.js +167 -0
- package/lib/base/factory.js.map +1 -0
- package/lib/base/functions.d.ts +117 -0
- package/lib/base/functions.js +152 -0
- package/lib/base/functions.js.map +1 -0
- package/lib/base/index.d.ts +44 -0
- package/lib/base/index.js +64 -0
- package/lib/base/index.js.map +1 -0
- package/lib/base/logFormatter.d.ts +50 -0
- package/lib/base/logFormatter.js +105 -0
- package/lib/base/logFormatter.js.map +1 -0
- package/lib/base/tools.d.ts +316 -0
- package/lib/base/tools.js +666 -0
- package/lib/base/tools.js.map +1 -0
- package/lib/cli.d.ts +28 -0
- package/lib/cli.js +254 -0
- package/lib/cli.js.map +1 -0
- package/lib/dev.d.ts +27 -0
- package/lib/dev.js +200 -0
- package/lib/dev.js.map +1 -0
- package/lib/index.d.ts +32 -0
- package/lib/index.js +49 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces/events.d.ts +67 -0
- package/lib/interfaces/events.js +44 -0
- package/lib/interfaces/events.js.map +1 -0
- package/lib/interfaces/index.d.ts +38 -0
- package/lib/interfaces/index.js +59 -0
- package/lib/interfaces/index.js.map +1 -0
- package/lib/interfaces/logging.d.ts +106 -0
- package/lib/interfaces/logging.js +39 -0
- package/lib/interfaces/logging.js.map +1 -0
- package/lib/interfaces/metrics.d.ts +365 -0
- package/lib/interfaces/metrics.js +46 -0
- package/lib/interfaces/metrics.js.map +1 -0
- package/lib/interfaces/observable-types.d.ts +63 -0
- package/lib/interfaces/observable-types.js +49 -0
- package/lib/interfaces/observable-types.js.map +1 -0
- package/lib/interfaces/observable.d.ts +297 -0
- package/lib/interfaces/observable.js +29 -0
- package/lib/interfaces/observable.js.map +1 -0
- package/lib/interfaces/options.d.ts +164 -0
- package/lib/interfaces/options.js +56 -0
- package/lib/interfaces/options.js.map +1 -0
- package/lib/interfaces/plugins.d.ts +143 -0
- package/lib/interfaces/plugins.js +45 -0
- package/lib/interfaces/plugins.js.map +1 -0
- package/lib/interfaces/result.d.ts +129 -0
- package/lib/interfaces/result.js +162 -0
- package/lib/interfaces/result.js.map +1 -0
- package/lib/interfaces/schema-events.d.ts +378 -0
- package/lib/interfaces/schema-events.js +247 -0
- package/lib/interfaces/schema-events.js.map +1 -0
- package/lib/interfaces/schema-types.d.ts +407 -0
- package/lib/interfaces/schema-types.js +581 -0
- package/lib/interfaces/schema-types.js.map +1 -0
- package/lib/interfaces/service.d.ts +48 -0
- package/lib/interfaces/service.js +29 -0
- package/lib/interfaces/service.js.map +1 -0
- package/lib/interfaces/tools.d.ts +65 -0
- package/lib/interfaces/tools.js +50 -0
- package/lib/interfaces/tools.js.map +1 -0
- package/lib/plugins/config-default/index.d.ts +59 -0
- package/lib/plugins/config-default/index.js +197 -0
- package/lib/plugins/config-default/index.js.map +1 -0
- package/lib/plugins/config-default/interfaces.d.ts +92 -0
- package/lib/plugins/config-default/interfaces.js +36 -0
- package/lib/plugins/config-default/interfaces.js.map +1 -0
- package/lib/plugins/events-default/events/broadcast.d.ts +36 -0
- package/lib/plugins/events-default/events/broadcast.js +85 -0
- package/lib/plugins/events-default/events/broadcast.js.map +1 -0
- package/lib/plugins/events-default/events/emit.d.ts +38 -0
- package/lib/plugins/events-default/events/emit.js +104 -0
- package/lib/plugins/events-default/events/emit.js.map +1 -0
- package/lib/plugins/events-default/events/emitAndReturn.d.ts +36 -0
- package/lib/plugins/events-default/events/emitAndReturn.js +100 -0
- package/lib/plugins/events-default/events/emitAndReturn.js.map +1 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.d.ts +38 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js +134 -0
- package/lib/plugins/events-default/events/emitStreamAndReceiveStream.js.map +1 -0
- package/lib/plugins/events-default/events/index.d.ts +30 -0
- package/lib/plugins/events-default/events/index.js +38 -0
- package/lib/plugins/events-default/events/index.js.map +1 -0
- package/lib/plugins/events-default/index.d.ts +57 -0
- package/lib/plugins/events-default/index.js +86 -0
- package/lib/plugins/events-default/index.js.map +1 -0
- package/lib/plugins/observable-default/index.d.ts +43 -0
- package/lib/plugins/observable-default/index.js +151 -0
- package/lib/plugins/observable-default/index.js.map +1 -0
- package/lib/schemas/config-default.json +34 -0
- package/lib/schemas/config-default.plugin.json +36 -0
- package/lib/schemas/events-default.json +18 -0
- package/lib/schemas/events-default.plugin.json +17 -0
- package/lib/schemas/observable-default.json +33 -0
- package/lib/schemas/observable-default.plugin.json +24 -0
- package/lib/scripts/bsb-client-cli.d.ts +21 -0
- package/lib/scripts/bsb-client-cli.js +701 -0
- package/lib/scripts/bsb-client-cli.js.map +1 -0
- package/lib/scripts/bsb-plugin-cli.d.ts +15 -0
- package/lib/scripts/bsb-plugin-cli.js +547 -0
- package/lib/scripts/bsb-plugin-cli.js.map +1 -0
- package/lib/scripts/export-schemas.d.ts +17 -0
- package/lib/scripts/export-schemas.js +205 -0
- package/lib/scripts/export-schemas.js.map +1 -0
- package/lib/scripts/extract-schemas-from-source.d.ts +23 -0
- package/lib/scripts/extract-schemas-from-source.js +604 -0
- package/lib/scripts/extract-schemas-from-source.js.map +1 -0
- package/lib/scripts/generate-client-types.d.ts +22 -0
- package/lib/scripts/generate-client-types.js +537 -0
- package/lib/scripts/generate-client-types.js.map +1 -0
- package/lib/scripts/generate-plugin-json.d.ts +17 -0
- package/lib/scripts/generate-plugin-json.js +219 -0
- package/lib/scripts/generate-plugin-json.js.map +1 -0
- package/lib/serviceBase/config.d.ts +83 -0
- package/lib/serviceBase/config.js +236 -0
- package/lib/serviceBase/config.js.map +1 -0
- package/lib/serviceBase/events.d.ts +91 -0
- package/lib/serviceBase/events.js +519 -0
- package/lib/serviceBase/events.js.map +1 -0
- package/lib/serviceBase/index.d.ts +33 -0
- package/lib/serviceBase/index.js +50 -0
- package/lib/serviceBase/index.js.map +1 -0
- package/lib/serviceBase/observable.d.ts +249 -0
- package/lib/serviceBase/observable.js +551 -0
- package/lib/serviceBase/observable.js.map +1 -0
- package/lib/serviceBase/plugins.d.ts +48 -0
- package/lib/serviceBase/plugins.js +184 -0
- package/lib/serviceBase/plugins.js.map +1 -0
- package/lib/serviceBase/serviceBase.d.ts +228 -0
- package/lib/serviceBase/serviceBase.js +420 -0
- package/lib/serviceBase/serviceBase.js.map +1 -0
- package/lib/serviceBase/services.d.ts +63 -0
- package/lib/serviceBase/services.js +346 -0
- package/lib/serviceBase/services.js.map +1 -0
- package/lib/tests.d.ts +27 -0
- package/lib/tests.js +44 -0
- package/lib/tests.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BSB (Better-Service-Base) is an event-bus based microservice framework.
|
|
4
|
+
* Copyright (C) 2016 - 2025 BetterCorp (PTY) Ltd
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
8
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
* (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Alternatively, you may obtain a commercial license for this program.
|
|
12
|
+
* The commercial license allows you to use the Program in a closed-source manner,
|
|
13
|
+
* including the right to create derivative works that are not subject to the terms
|
|
14
|
+
* of the AGPL.
|
|
15
|
+
*
|
|
16
|
+
* To obtain a commercial license, please contact the copyright holders at
|
|
17
|
+
* https://www.bettercorp.dev. The terms and conditions of the commercial license
|
|
18
|
+
* will be provided upon request.
|
|
19
|
+
*
|
|
20
|
+
* This program is distributed in the hope that it will be useful,
|
|
21
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
22
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
23
|
+
* GNU Affero General Public License for more details.
|
|
24
|
+
*
|
|
25
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
26
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.SBObservable = void 0;
|
|
30
|
+
const node_events_1 = require("node:events");
|
|
31
|
+
const base_1 = require("../base");
|
|
32
|
+
const metrics_1 = require("../interfaces/metrics");
|
|
33
|
+
const index_1 = require("../plugins/observable-default/index");
|
|
34
|
+
/**
|
|
35
|
+
* @hidden
|
|
36
|
+
*/
|
|
37
|
+
function internalTrace(span) {
|
|
38
|
+
return (0, metrics_1.createFakeDTrace)("serviceBase/SBObservable", span);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* BSB Observable Controller - Unified logging, metrics, and tracing
|
|
42
|
+
*
|
|
43
|
+
* This class is responsible for managing all observability in the BSB framework.
|
|
44
|
+
* It coordinates observable plugins (like OpenTelemetry, Prometheus, etc.) and
|
|
45
|
+
* routes events from the Observable API to the configured backends.
|
|
46
|
+
*
|
|
47
|
+
* If you have a specific way of managing observability, you can extend this class
|
|
48
|
+
* and use your own class when creating the ServiceBase instance.
|
|
49
|
+
*
|
|
50
|
+
* @group Observable
|
|
51
|
+
* @category Core
|
|
52
|
+
* @see {@link https://bsbcode.dev/languages/nodejs/types/classes/SBObservable.html | API: SBObservable}
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* // Custom observable controller
|
|
57
|
+
* class MyObservable extends SBObservable {
|
|
58
|
+
* // Override methods as needed
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
* // Use custom controller
|
|
62
|
+
* const serviceBase = new ServiceBase(appId, {
|
|
63
|
+
* observableClass: MyObservable
|
|
64
|
+
* });
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
class SBObservable {
|
|
68
|
+
observablePlugins = [];
|
|
69
|
+
observableBus = new node_events_1.EventEmitter();
|
|
70
|
+
mode = "development";
|
|
71
|
+
appId;
|
|
72
|
+
cwd;
|
|
73
|
+
sbPlugins;
|
|
74
|
+
observableBackend;
|
|
75
|
+
_ready = false;
|
|
76
|
+
/**
|
|
77
|
+
* Check if observable plugins are ready
|
|
78
|
+
* @returns true if all plugins have been initialized
|
|
79
|
+
*/
|
|
80
|
+
get isReady() {
|
|
81
|
+
return this._ready;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create an SBObservable instance
|
|
85
|
+
* @param appId - Application ID
|
|
86
|
+
* @param mode - Debug mode (development, production, production-debug)
|
|
87
|
+
* @param cwd - Current working directory
|
|
88
|
+
* @param sbPlugins - Plugin manager instance
|
|
89
|
+
*/
|
|
90
|
+
constructor(appId, mode, cwd, sbPlugins) {
|
|
91
|
+
this.appId = appId;
|
|
92
|
+
this.mode = mode;
|
|
93
|
+
this.cwd = cwd;
|
|
94
|
+
this.sbPlugins = sbPlugins;
|
|
95
|
+
const observablePluginName = "core-observable";
|
|
96
|
+
this.observableBackend = new base_1.ObservableBackend(this.mode, appId, observablePluginName, this);
|
|
97
|
+
// Setup logging events
|
|
98
|
+
if (this.mode !== "production") {
|
|
99
|
+
this.observableBus.on("debug", (plugin, trace, message, meta) => {
|
|
100
|
+
this.triggerEvent("debug", plugin, trace, message, meta);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
this.observableBus.on("info", (plugin, trace, message, meta) => {
|
|
104
|
+
this.triggerEvent("info", plugin, trace, message, meta);
|
|
105
|
+
});
|
|
106
|
+
this.observableBus.on("warn", (plugin, trace, message, meta) => {
|
|
107
|
+
this.triggerEvent("warn", plugin, trace, message, meta);
|
|
108
|
+
});
|
|
109
|
+
this.observableBus.on("error", (plugin, trace, message, meta) => {
|
|
110
|
+
this.triggerEvent("error", plugin, trace, message, meta);
|
|
111
|
+
});
|
|
112
|
+
// Setup metrics events
|
|
113
|
+
this.setupCounterEvents();
|
|
114
|
+
this.setupGaugeEvents();
|
|
115
|
+
this.setupHistogramEvents();
|
|
116
|
+
this.setupSpanEvents();
|
|
117
|
+
}
|
|
118
|
+
setupCounterEvents() {
|
|
119
|
+
this.observableBus.on("createCounter", async (timestamp, pluginName, name, description, help, labels) => {
|
|
120
|
+
this.triggerMetricEvent("counter", async (plugin) => {
|
|
121
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.createCounter?.bind(plugin), timestamp, pluginName, name, description, help, labels);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
this.observableBus.on("incrementCounter", async (timestamp, pluginName, name, value, labels) => {
|
|
125
|
+
this.triggerMetricEvent("counter", async (plugin) => {
|
|
126
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.incrementCounter?.bind(plugin), timestamp, pluginName, name, value, labels);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
setupGaugeEvents() {
|
|
131
|
+
this.observableBus.on("createGauge", async (timestamp, pluginName, name, description, help, labels) => {
|
|
132
|
+
this.triggerMetricEvent("gauge", async (plugin) => {
|
|
133
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.createGauge?.bind(plugin), timestamp, pluginName, name, description, help, labels);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
this.observableBus.on("setGauge", async (timestamp, pluginName, name, value, labels) => {
|
|
137
|
+
this.triggerMetricEvent("gauge", async (plugin) => {
|
|
138
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.setGauge?.bind(plugin), timestamp, pluginName, name, value, labels);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
setupHistogramEvents() {
|
|
143
|
+
this.observableBus.on("createHistogram", async (timestamp, pluginName, name, description, help, boundaries, labels) => {
|
|
144
|
+
this.triggerMetricEvent("histogram", async (plugin) => {
|
|
145
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.createHistogram?.bind(plugin), timestamp, pluginName, name, description, help, boundaries, labels);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
this.observableBus.on("observeHistogram", async (timestamp, pluginName, name, value, labels) => {
|
|
149
|
+
this.triggerMetricEvent("histogram", async (plugin) => {
|
|
150
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.observeHistogram?.bind(plugin), timestamp, pluginName, name, value, labels);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
setupSpanEvents() {
|
|
155
|
+
this.observableBus.on("spanStart", async (trace, pluginName, spanName, parentSpanId, attributes) => {
|
|
156
|
+
this.triggerSpanEvent("spanStart", async (plugin) => {
|
|
157
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.spanStart?.bind(plugin), trace, pluginName, spanName, parentSpanId, attributes);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
this.observableBus.on("spanEnd", async (trace, pluginName, attributes) => {
|
|
161
|
+
this.triggerSpanEvent("spanEnd", async (plugin) => {
|
|
162
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.spanEnd?.bind(plugin), trace, pluginName, attributes);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
this.observableBus.on("spanError", async (trace, pluginName, error, attributes) => {
|
|
166
|
+
this.triggerSpanEvent("spanError", async (plugin) => {
|
|
167
|
+
await (0, base_1.SmartFunctionCallAsync)(plugin, plugin.spanError?.bind(plugin), trace, pluginName, error, attributes);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
triggerEvent(eventType, pluginName, trace, message, meta) {
|
|
172
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
173
|
+
if (!this.shouldTriggerForPlugin(eventType, pluginName, observablePlugin)) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
const method = observablePlugin.plugin[eventType];
|
|
177
|
+
if (method) {
|
|
178
|
+
(0, base_1.SmartFunctionCallAsync)(observablePlugin.plugin, method.bind(observablePlugin.plugin), trace, pluginName, message, meta);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async triggerMetricEvent(eventType, executor) {
|
|
183
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
184
|
+
if (!this.shouldTriggerForPlugin(eventType, "", observablePlugin)) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
await executor(observablePlugin.plugin);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async triggerSpanEvent(eventType, executor) {
|
|
191
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
192
|
+
if (!this.shouldTriggerForPlugin(eventType, "", observablePlugin)) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
await executor(observablePlugin.plugin);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
shouldTriggerForPlugin(eventType, pluginName, observablePlugin) {
|
|
199
|
+
if (observablePlugin.onTypeof === "all") {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
if (observablePlugin.on === undefined) {
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
// Handle array filter (events)
|
|
206
|
+
if (Array.isArray(observablePlugin.on)) {
|
|
207
|
+
return observablePlugin.on.includes(eventType);
|
|
208
|
+
}
|
|
209
|
+
// Handle object filters
|
|
210
|
+
const filterValue = observablePlugin.on[eventType];
|
|
211
|
+
if (filterValue === undefined) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
// eventsState: Record<EventType, boolean>
|
|
215
|
+
if (typeof filterValue === "boolean") {
|
|
216
|
+
return filterValue;
|
|
217
|
+
}
|
|
218
|
+
// eventsPlugins: Record<EventType, Array<string>>
|
|
219
|
+
if (Array.isArray(filterValue)) {
|
|
220
|
+
return filterValue.includes(pluginName);
|
|
221
|
+
}
|
|
222
|
+
// eventsDetailed: Record<EventType, { plugins: Array<string>; enabled: boolean }>
|
|
223
|
+
if (typeof filterValue === "object" && "enabled" in filterValue) {
|
|
224
|
+
const detailed = filterValue;
|
|
225
|
+
if (!detailed.enabled) {
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
if (detailed.plugins.length === 0) {
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
return detailed.plugins.includes(pluginName);
|
|
232
|
+
}
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
determineFilterType(filter) {
|
|
236
|
+
if (!filter) {
|
|
237
|
+
return "all";
|
|
238
|
+
}
|
|
239
|
+
if (Array.isArray(filter)) {
|
|
240
|
+
return "events";
|
|
241
|
+
}
|
|
242
|
+
const keys = Object.keys(filter);
|
|
243
|
+
if (keys.length === 0) {
|
|
244
|
+
return "all";
|
|
245
|
+
}
|
|
246
|
+
const firstValue = filter[keys[0]];
|
|
247
|
+
if (typeof firstValue === "boolean") {
|
|
248
|
+
return "eventsState";
|
|
249
|
+
}
|
|
250
|
+
if (Array.isArray(firstValue)) {
|
|
251
|
+
return "eventsPlugins";
|
|
252
|
+
}
|
|
253
|
+
if (typeof firstValue === "object" && "enabled" in firstValue) {
|
|
254
|
+
return "eventsDetailed";
|
|
255
|
+
}
|
|
256
|
+
return "all";
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Setup and load observable plugins from configuration
|
|
260
|
+
*
|
|
261
|
+
* Loads configured observable plugins and initializes their filters.
|
|
262
|
+
* This is called during ServiceBase initialization.
|
|
263
|
+
*
|
|
264
|
+
* @param sbConfig - Configuration manager instance
|
|
265
|
+
*/
|
|
266
|
+
async setupObservablePlugins(sbConfig) {
|
|
267
|
+
const trace = internalTrace("setupObservablePlugins");
|
|
268
|
+
this.observableBackend.info(trace, "Setting up observable plugins");
|
|
269
|
+
const observablePluginsFromConfig = await sbConfig.getObservablePlugins(trace);
|
|
270
|
+
for (const pluginKey of Object.keys(observablePluginsFromConfig)) {
|
|
271
|
+
const pluginDef = observablePluginsFromConfig[pluginKey];
|
|
272
|
+
if (!pluginDef.enabled) {
|
|
273
|
+
this.observableBackend.info(trace, "Observable plugin {plugin} is disabled", { plugin: pluginKey });
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
try {
|
|
277
|
+
const loadResult = await this.sbPlugins.loadPlugin(this.observableBackend, pluginDef.package ?? null, pluginDef.plugin, pluginKey);
|
|
278
|
+
if (!loadResult || !loadResult.success) {
|
|
279
|
+
this.observableBackend.error(trace, "Failed to load observable plugin {plugin}", { plugin: pluginKey });
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
const loadedPlugin = loadResult.data;
|
|
283
|
+
this.observableBackend.info(trace, "Loaded observable plugin {plugin} from {package}", {
|
|
284
|
+
plugin: pluginKey,
|
|
285
|
+
package: loadedPlugin.packageCwd,
|
|
286
|
+
});
|
|
287
|
+
const config = await sbConfig.getPluginConfig(trace, "observable", pluginKey);
|
|
288
|
+
const observablePlugin = new loadedPlugin.plugin({
|
|
289
|
+
appId: this.appId,
|
|
290
|
+
mode: this.mode,
|
|
291
|
+
pluginName: pluginKey,
|
|
292
|
+
cwd: this.cwd,
|
|
293
|
+
packageCwd: loadedPlugin.packageCwd,
|
|
294
|
+
pluginCwd: loadedPlugin.pluginCwd,
|
|
295
|
+
pluginVersion: loadedPlugin.version,
|
|
296
|
+
config,
|
|
297
|
+
});
|
|
298
|
+
this.observablePlugins.push({
|
|
299
|
+
plugin: observablePlugin,
|
|
300
|
+
on: pluginDef.filter,
|
|
301
|
+
onTypeof: this.determineFilterType(pluginDef.filter),
|
|
302
|
+
});
|
|
303
|
+
this.observableBackend.info(trace, "Initialized observable plugin {plugin}", { plugin: pluginKey });
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
this.observableBackend.error(trace, "Failed to load observable plugin {plugin}: {error}", {
|
|
307
|
+
plugin: pluginKey,
|
|
308
|
+
error: error.message,
|
|
309
|
+
});
|
|
310
|
+
throw error;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (this.observablePlugins.length === 0) {
|
|
314
|
+
this.observableBackend.info(trace, "No observable plugins configured, enabling default console logger");
|
|
315
|
+
this.observablePlugins.push({
|
|
316
|
+
plugin: new index_1.Plugin({
|
|
317
|
+
appId: this.appId,
|
|
318
|
+
mode: this.mode,
|
|
319
|
+
pluginName: "observable-default",
|
|
320
|
+
cwd: this.cwd,
|
|
321
|
+
packageCwd: this.cwd,
|
|
322
|
+
pluginCwd: this.cwd,
|
|
323
|
+
pluginVersion: "0.0.0",
|
|
324
|
+
config: undefined,
|
|
325
|
+
}),
|
|
326
|
+
on: undefined,
|
|
327
|
+
onTypeof: "all",
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
this._ready = true;
|
|
331
|
+
this.observableBackend.info(trace, "Observable plugins setup complete");
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Initialize all observable plugins
|
|
335
|
+
*
|
|
336
|
+
* Calls the init lifecycle method on all loaded observable plugins.
|
|
337
|
+
* This is called during ServiceBase initialization.
|
|
338
|
+
*
|
|
339
|
+
* @param trace - DTrace for tracking initialization
|
|
340
|
+
* @param sbConfig - Configuration manager instance
|
|
341
|
+
*/
|
|
342
|
+
async init(trace, sbConfig) {
|
|
343
|
+
this.observableBackend.info(trace, "Setting up observable plugins");
|
|
344
|
+
await this.setupObservablePlugins(sbConfig);
|
|
345
|
+
this.observableBackend.info(trace, "Initializing observable plugins");
|
|
346
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
347
|
+
if (observablePlugin.plugin.init) {
|
|
348
|
+
await observablePlugin.plugin.init.call(observablePlugin.plugin);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
this.observableBackend.info(trace, "Observable plugins initialized");
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Run all observable plugins
|
|
355
|
+
*
|
|
356
|
+
* Calls the run lifecycle method on all loaded observable plugins.
|
|
357
|
+
* This is called during ServiceBase startup.
|
|
358
|
+
*
|
|
359
|
+
* @param trace - DTrace for tracking the run phase
|
|
360
|
+
*/
|
|
361
|
+
async run(trace) {
|
|
362
|
+
this.observableBackend.info(trace, "Running observable plugins");
|
|
363
|
+
// If any non-default plugin handles all events, remove the default to avoid duplicate output
|
|
364
|
+
if (this.observablePlugins.length > 1) {
|
|
365
|
+
const nonDefault = this.observablePlugins.filter((x) => x.plugin.pluginName !== "observable-default");
|
|
366
|
+
const hasAllHandler = nonDefault.some((x) => x.onTypeof === "all");
|
|
367
|
+
if (hasAllHandler) {
|
|
368
|
+
const defaultPlugin = this.observablePlugins.find((x) => x.plugin.pluginName === "observable-default");
|
|
369
|
+
if (defaultPlugin) {
|
|
370
|
+
if (defaultPlugin.plugin.dispose) {
|
|
371
|
+
await (0, base_1.SmartFunctionCallAsync)(defaultPlugin.plugin, defaultPlugin.plugin.dispose);
|
|
372
|
+
}
|
|
373
|
+
this.observablePlugins = this.observablePlugins.filter((x) => x.plugin.pluginName !== "observable-default");
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
378
|
+
if (observablePlugin.plugin.run) {
|
|
379
|
+
await observablePlugin.plugin.run.call(observablePlugin.plugin);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
this.observableBackend.info(trace, "Observable plugins running");
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Dispose all observable plugins
|
|
386
|
+
*
|
|
387
|
+
* Calls the dispose lifecycle method on all loaded observable plugins
|
|
388
|
+
* and clears the plugin list. This is called during ServiceBase shutdown.
|
|
389
|
+
*/
|
|
390
|
+
async dispose() {
|
|
391
|
+
for (const observablePlugin of this.observablePlugins) {
|
|
392
|
+
if (observablePlugin.plugin.dispose) {
|
|
393
|
+
await (0, base_1.SmartFunctionCallAsync)(observablePlugin.plugin, observablePlugin.plugin.dispose);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
this.observablePlugins = [];
|
|
397
|
+
}
|
|
398
|
+
// Logging API (for PluginLogging to use)
|
|
399
|
+
/**
|
|
400
|
+
* Emit a debug log event
|
|
401
|
+
* @param plugin - Plugin name
|
|
402
|
+
* @param trace - DTrace object
|
|
403
|
+
* @param message - Log message
|
|
404
|
+
* @param meta - Log metadata
|
|
405
|
+
*/
|
|
406
|
+
debug(plugin, trace, message, meta) {
|
|
407
|
+
this.observableBus.emit("debug", plugin, trace, message, meta);
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Emit an info log event
|
|
411
|
+
* @param plugin - Plugin name
|
|
412
|
+
* @param trace - DTrace object
|
|
413
|
+
* @param message - Log message
|
|
414
|
+
* @param meta - Log metadata
|
|
415
|
+
*/
|
|
416
|
+
info(plugin, trace, message, meta) {
|
|
417
|
+
this.observableBus.emit("info", plugin, trace, message, meta);
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Emit a warn log event
|
|
421
|
+
* @param plugin - Plugin name
|
|
422
|
+
* @param trace - DTrace object
|
|
423
|
+
* @param message - Log message
|
|
424
|
+
* @param meta - Log metadata
|
|
425
|
+
*/
|
|
426
|
+
warn(plugin, trace, message, meta) {
|
|
427
|
+
this.observableBus.emit("warn", plugin, trace, message, meta);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Emit an error log event
|
|
431
|
+
* @param plugin - Plugin name
|
|
432
|
+
* @param trace - DTrace object
|
|
433
|
+
* @param message - Log message or BSBError
|
|
434
|
+
* @param meta - Log metadata (optional)
|
|
435
|
+
*/
|
|
436
|
+
error(plugin, trace, message, meta) {
|
|
437
|
+
this.observableBus.emit("error", plugin, trace, message, meta);
|
|
438
|
+
}
|
|
439
|
+
// Metrics API (for PluginMetrics to use)
|
|
440
|
+
/**
|
|
441
|
+
* Emit counter creation event
|
|
442
|
+
* @param timestamp - Event timestamp
|
|
443
|
+
* @param pluginName - Plugin name
|
|
444
|
+
* @param name - Metric name
|
|
445
|
+
* @param description - Short description
|
|
446
|
+
* @param help - Detailed help text
|
|
447
|
+
* @param labels - Optional label names
|
|
448
|
+
*/
|
|
449
|
+
createCounter(timestamp, pluginName, name, description, help, labels) {
|
|
450
|
+
this.observableBus.emit("createCounter", timestamp, pluginName, name, description, help, labels);
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Emit counter increment event
|
|
454
|
+
* @param timestamp - Event timestamp
|
|
455
|
+
* @param pluginName - Plugin name
|
|
456
|
+
* @param name - Metric name
|
|
457
|
+
* @param value - Increment value
|
|
458
|
+
* @param labels - Optional label values
|
|
459
|
+
*/
|
|
460
|
+
incrementCounter(timestamp, pluginName, name, value, labels) {
|
|
461
|
+
this.observableBus.emit("incrementCounter", timestamp, pluginName, name, value, labels);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Emit gauge creation event
|
|
465
|
+
* @param timestamp - Event timestamp
|
|
466
|
+
* @param pluginName - Plugin name
|
|
467
|
+
* @param name - Metric name
|
|
468
|
+
* @param description - Short description
|
|
469
|
+
* @param help - Detailed help text
|
|
470
|
+
* @param labels - Optional label names
|
|
471
|
+
*/
|
|
472
|
+
createGauge(timestamp, pluginName, name, description, help, labels) {
|
|
473
|
+
this.observableBus.emit("createGauge", timestamp, pluginName, name, description, help, labels);
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Emit gauge set event
|
|
477
|
+
* @param timestamp - Event timestamp
|
|
478
|
+
* @param pluginName - Plugin name
|
|
479
|
+
* @param name - Metric name
|
|
480
|
+
* @param value - New gauge value
|
|
481
|
+
* @param labels - Optional label values
|
|
482
|
+
*/
|
|
483
|
+
setGauge(timestamp, pluginName, name, value, labels) {
|
|
484
|
+
this.observableBus.emit("setGauge", timestamp, pluginName, name, value, labels);
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Emit histogram creation event
|
|
488
|
+
* @param timestamp - Event timestamp
|
|
489
|
+
* @param pluginName - Plugin name
|
|
490
|
+
* @param name - Metric name
|
|
491
|
+
* @param description - Short description
|
|
492
|
+
* @param help - Detailed help text
|
|
493
|
+
* @param boundaries - Optional histogram boundaries
|
|
494
|
+
* @param labels - Optional label names
|
|
495
|
+
*/
|
|
496
|
+
createHistogram(timestamp, pluginName, name, description, help, boundaries, labels) {
|
|
497
|
+
this.observableBus.emit("createHistogram", timestamp, pluginName, name, description, help, boundaries, labels);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Emit histogram observation event
|
|
501
|
+
* @param timestamp - Event timestamp
|
|
502
|
+
* @param pluginName - Plugin name
|
|
503
|
+
* @param name - Metric name
|
|
504
|
+
* @param value - Observed value
|
|
505
|
+
* @param labels - Optional label values
|
|
506
|
+
*/
|
|
507
|
+
observeHistogram(timestamp, pluginName, name, value, labels) {
|
|
508
|
+
this.observableBus.emit("observeHistogram", timestamp, pluginName, name, value, labels);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Emit span start event
|
|
512
|
+
* @param timestamp - Event timestamp
|
|
513
|
+
* @param appId - Application ID
|
|
514
|
+
* @param pluginName - Plugin name
|
|
515
|
+
* @param traceId - Trace ID
|
|
516
|
+
* @param parentSpanId - Parent span ID (null for root spans)
|
|
517
|
+
* @param spanId - This span's ID
|
|
518
|
+
* @param name - Span name
|
|
519
|
+
* @param attributes - Optional span attributes
|
|
520
|
+
*/
|
|
521
|
+
startSpan(timestamp, appId, pluginName, traceId, parentSpanId, spanId, name, attributes) {
|
|
522
|
+
this.observableBus.emit("spanStart", { t: traceId, s: spanId }, pluginName, name, parentSpanId, attributes);
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Emit span end event
|
|
526
|
+
* @param timestamp - Event timestamp
|
|
527
|
+
* @param appId - Application ID
|
|
528
|
+
* @param pluginName - Plugin name
|
|
529
|
+
* @param traceId - Trace ID
|
|
530
|
+
* @param spanId - Span ID
|
|
531
|
+
* @param attributes - Optional final attributes
|
|
532
|
+
*/
|
|
533
|
+
endSpan(timestamp, appId, pluginName, traceId, spanId, attributes) {
|
|
534
|
+
this.observableBus.emit("spanEnd", { t: traceId, s: spanId }, pluginName, attributes);
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Emit span error event
|
|
538
|
+
* @param timestamp - Event timestamp
|
|
539
|
+
* @param appId - Application ID
|
|
540
|
+
* @param pluginName - Plugin name
|
|
541
|
+
* @param traceId - Trace ID
|
|
542
|
+
* @param spanId - Span ID
|
|
543
|
+
* @param error - Error to record
|
|
544
|
+
* @param attributes - Optional error attributes
|
|
545
|
+
*/
|
|
546
|
+
errorSpan(timestamp, appId, pluginName, traceId, spanId, error, attributes) {
|
|
547
|
+
this.observableBus.emit("spanError", { t: traceId, s: spanId }, pluginName, error, attributes);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
exports.SBObservable = SBObservable;
|
|
551
|
+
//# sourceMappingURL=observable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/serviceBase/observable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BSB (Better-Service-Base) is an event-bus based microservice framework.
|
|
3
|
+
* Copyright (C) 2016 - 2025 BetterCorp (PTY) Ltd
|
|
4
|
+
*
|
|
5
|
+
* This program is free software: you can redistribute it and/or modify
|
|
6
|
+
* it under the terms of the GNU Affero General Public License as published
|
|
7
|
+
* by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
* (at your option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* Alternatively, you may obtain a commercial license for this program.
|
|
11
|
+
* The commercial license allows you to use the Program in a closed-source manner,
|
|
12
|
+
* including the right to create derivative works that are not subject to the terms
|
|
13
|
+
* of the AGPL.
|
|
14
|
+
*
|
|
15
|
+
* To obtain a commercial license, please contact the copyright holders at
|
|
16
|
+
* https://www.bettercorp.dev. The terms and conditions of the commercial license
|
|
17
|
+
* will be provided upon request.
|
|
18
|
+
*
|
|
19
|
+
* This program is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
22
|
+
* GNU Affero General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
25
|
+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
26
|
+
*/
|
|
27
|
+
import { IPluginLogging, LoadedPlugin, PluginType, PluginTypeDefinitionRef, Result } from "../interfaces";
|
|
28
|
+
/**
|
|
29
|
+
* BSB Plugins Controller
|
|
30
|
+
*
|
|
31
|
+
* This class is responsible for loading the plugins in the BSB framework.
|
|
32
|
+
* If you have a specific way of loading plugins, you can extend this class and then use your own class when creating the ServiceBase instance.
|
|
33
|
+
*
|
|
34
|
+
* @group Plugins
|
|
35
|
+
* @category Core
|
|
36
|
+
*/
|
|
37
|
+
export declare class SBPlugins {
|
|
38
|
+
/**
|
|
39
|
+
* @see {@link https://bsbcode.dev/languages/nodejs/types/classes/SBPlugins.html | API: SBPlugins}
|
|
40
|
+
*/
|
|
41
|
+
protected cwd: string;
|
|
42
|
+
protected nodeModulesPluginDir: string;
|
|
43
|
+
protected referencedPluginDir: string | null;
|
|
44
|
+
protected devMode: boolean;
|
|
45
|
+
constructor(cwd: string, devMode: boolean);
|
|
46
|
+
loadPlugin<NamedType extends PluginType, ClassType extends PluginTypeDefinitionRef<NamedType> = PluginTypeDefinitionRef<NamedType>>(log: IPluginLogging, npmPackage: string | null, plugin: string, name: string): Promise<Result<LoadedPlugin<NamedType, ClassType>, Error>>;
|
|
47
|
+
loadPluginFile<NamedType extends PluginType, ClassType extends PluginTypeDefinitionRef<NamedType>>(pluginPath: string, pluginName: string, packageCwd: string, version: string): Promise<LoadedPlugin<NamedType, ClassType>>;
|
|
48
|
+
}
|