@mxtommy/kip 4.5.0 → 4.5.1
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/CHANGELOG.md +5 -0
- package/package.json +16 -6
- package/plugin/duckdb-parquet-storage.service.js +78 -102
- package/plugin/index.js +60 -40
- package/public/{chunk-6XFWUUDD.js → chunk-EQ2N7KDA.js} +1 -1
- package/public/{chunk-EDNYYQIZ.js → chunk-IYRLINL7.js} +1 -1
- package/public/{chunk-UYIJND2R.js → chunk-JGGMFMY5.js} +1 -1
- package/public/{chunk-DD4F6F4S.js → chunk-RONXIZ2U.js} +8 -8
- package/public/{chunk-2ICAVOT2.js → chunk-VCY32MWT.js} +1 -1
- package/public/{chunk-J3LDKVIS.js → chunk-ZV7IYYEQ.js} +1 -1
- package/public/index.html +1 -1
- package/public/{main-EG2WF4EO.js → main-FQESQQV6.js} +1 -1
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -84
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -35
- package/.github/copilot-instructions.md +0 -218
- package/.github/instructions/angular.instructions.md +0 -123
- package/.github/instructions/best-practices.instructions.md +0 -59
- package/.github/instructions/project.instructions.md +0 -468
- package/.github/workflows/ci.yml +0 -37
- package/docs/widget-schematic.md +0 -102
- package/images/ActionSidenav.png +0 -0
- package/images/ChartplotterMode.png +0 -0
- package/images/KIPDemo.png +0 -0
- package/images/KipBrightness-1024.png +0 -0
- package/images/KipConfig-Units-1024.png +0 -0
- package/images/KipConfig-display-1024x488.png +0 -0
- package/images/KipFreeboard-SK-1024.png +0 -0
- package/images/KipGaugeSample1-1024x545.png +0 -0
- package/images/KipGaugeSample2-1024x488.png +0 -0
- package/images/KipGaugeSample3-1024x508.png +0 -0
- package/images/KipNightMode-1024.png +0 -0
- package/images/KipWidgetConfig-layout-1024.png +0 -0
- package/images/KipWidgetConfig-paths-1024x488.png +0 -0
- package/images/Options.png +0 -0
- package/images/exterior_user_installs.png +0 -0
- package/images/formfactor.png +0 -0
- package/plugin-config-data/kip/historicalData/kip-history.duckdb +0 -0
- package/plugin-config-data/kip/historicalData/parquet/chart-1/1772344583976-1772344583976.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584154-1772344584154.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584191-1772344584191.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584268-1772344584268.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-2/1771502400000-1771502400000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-3/1772344584268-1772344584268.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-4/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-5/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-5/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-6/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771408800000-1771408890000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771412400000-1771412490000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771419600000-1771419650000.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584191-1772344584191.parquet +0 -0
- package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584268-1772344584268.parquet +0 -0
- package/tools/schematics/collection.json +0 -9
- package/tools/schematics/create-host2-widget/files/readme/README.md.template +0 -109
- package/tools/schematics/create-host2-widget/files/spec/widget-__name@dasherize__.component.spec.ts +0 -38
- package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.html +0 -6
- package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.scss +0 -5
- package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.ts.template +0 -94
- package/tools/schematics/create-host2-widget/index.js +0 -138
- package/tools/schematics/create-host2-widget/schema.json +0 -89
- package/tools/schematics/create-host2-widget/test/create-host2-widget.spec.ts +0 -70
- package/tools/schematics/create-host2-widget/utils/formatting.js +0 -119
package/plugin/index.js
CHANGED
|
@@ -34,10 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
const server_api_1 = require("@signalk/server-api");
|
|
37
|
+
const module_1 = require("module");
|
|
37
38
|
const openapi = __importStar(require("./openApi.json"));
|
|
38
39
|
const history_series_service_1 = require("./history-series.service");
|
|
39
40
|
const duckdb_parquet_storage_service_1 = require("./duckdb-parquet-storage.service");
|
|
40
41
|
const start = (server) => {
|
|
42
|
+
const packageRequire = (0, module_1.createRequire)(__filename);
|
|
41
43
|
const mutableOpenApi = JSON.parse(JSON.stringify(openapi.default ?? openapi));
|
|
42
44
|
const API_PATHS = {
|
|
43
45
|
DISPLAYS: `/displays`,
|
|
@@ -84,6 +86,23 @@ const start = (server) => {
|
|
|
84
86
|
let historySeriesServiceEnabled = true;
|
|
85
87
|
let registerAsHistoryApiProvider = true;
|
|
86
88
|
let historyApiProviderRegistered = false;
|
|
89
|
+
function resolveDependencyIdentity(dependencyName) {
|
|
90
|
+
try {
|
|
91
|
+
const pkg = packageRequire(`${dependencyName}/package.json`);
|
|
92
|
+
const name = typeof pkg.name === 'string' && pkg.name.trim() ? pkg.name.trim() : dependencyName;
|
|
93
|
+
const version = typeof pkg.version === 'string' && pkg.version.trim() ? pkg.version.trim() : 'unknown';
|
|
94
|
+
return `${name}@${version}`;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return `${dependencyName}@unavailable`;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function logRuntimeDependencyVersions() {
|
|
101
|
+
const nodeIdentity = `node@${process.version}`;
|
|
102
|
+
const duckDbNodeIdentity = resolveDependencyIdentity('@duckdb/node-api');
|
|
103
|
+
const parquetIdentity = resolveDependencyIdentity('@dsnp/parquetjs');
|
|
104
|
+
server.debug(`[KIP][RUNTIME] ${nodeIdentity} duckdb=${duckDbNodeIdentity} parquet=${parquetIdentity}`);
|
|
105
|
+
}
|
|
87
106
|
function resolveHistoryModeConfig(settings) {
|
|
88
107
|
const root = (settings && typeof settings === 'object' ? settings : {});
|
|
89
108
|
const historySeriesServiceEnabledSetting = typeof root.historySeriesServiceEnabled === 'boolean'
|
|
@@ -102,12 +121,12 @@ const start = (server) => {
|
|
|
102
121
|
const tail = suffix ? `.${suffix}` : '';
|
|
103
122
|
const want = `displays.${displayId}${tail}`;
|
|
104
123
|
const full = server.getSelfPath(want);
|
|
105
|
-
server.debug(`
|
|
124
|
+
server.debug(`[KIP][SELF_PATH] displayId=${displayId} suffix=${String(suffix ?? '')} requested=${want} resolved=${JSON.stringify(full)}`);
|
|
106
125
|
return typeof full === 'object' && full !== null ? full : undefined;
|
|
107
126
|
}
|
|
108
127
|
function getAvailableDisplays() {
|
|
109
128
|
const fullPath = server.getSelfPath('displays');
|
|
110
|
-
server.debug(`
|
|
129
|
+
server.debug(`[KIP][DISPLAYS] resolved=${JSON.stringify(fullPath)}`);
|
|
111
130
|
return typeof fullPath === 'object' && fullPath !== null ? fullPath : undefined;
|
|
112
131
|
}
|
|
113
132
|
function sendOk(res, body) {
|
|
@@ -212,7 +231,7 @@ const start = (server) => {
|
|
|
212
231
|
}
|
|
213
232
|
function applyDisplayWrite(displayId, suffix, value) {
|
|
214
233
|
const path = suffix ? `displays.${displayId}.${suffix}` : `displays.${displayId}`;
|
|
215
|
-
server.debug(`[WRITE
|
|
234
|
+
server.debug(`[KIP][WRITE] applyDisplayWrite path=${path} value=${JSON.stringify(value)}`);
|
|
216
235
|
try {
|
|
217
236
|
server.handleMessage(plugin.id, {
|
|
218
237
|
updates: [
|
|
@@ -226,7 +245,7 @@ const start = (server) => {
|
|
|
226
245
|
}
|
|
227
246
|
]
|
|
228
247
|
}, server_api_1.SKVersion.v1);
|
|
229
|
-
server.debug(`[WRITE
|
|
248
|
+
server.debug(`[KIP][WRITE] handleMessage success path=${path}`);
|
|
230
249
|
return completed(200);
|
|
231
250
|
}
|
|
232
251
|
catch (error) {
|
|
@@ -236,7 +255,7 @@ const start = (server) => {
|
|
|
236
255
|
}
|
|
237
256
|
}
|
|
238
257
|
function handleSetDisplay(value) {
|
|
239
|
-
server.debug(`[COMMAND
|
|
258
|
+
server.debug(`[KIP][COMMAND] handleSetDisplay payload=${JSON.stringify(value)}`);
|
|
240
259
|
const command = value;
|
|
241
260
|
if (!command || typeof command !== 'object') {
|
|
242
261
|
return completed(400, 'Command payload is required');
|
|
@@ -251,7 +270,7 @@ const start = (server) => {
|
|
|
251
270
|
return applyDisplayWrite(command.displayId, null, displayValue);
|
|
252
271
|
}
|
|
253
272
|
function handleScreenWrite(value, suffix) {
|
|
254
|
-
server.debug(`[COMMAND
|
|
273
|
+
server.debug(`[KIP][COMMAND] handleScreenWrite suffix=${suffix} payload=${JSON.stringify(value)}`);
|
|
255
274
|
const command = value;
|
|
256
275
|
if (!command || typeof command !== 'object') {
|
|
257
276
|
return completed(400, 'Command payload is required');
|
|
@@ -266,7 +285,7 @@ const start = (server) => {
|
|
|
266
285
|
return applyDisplayWrite(command.displayId, suffix, screenIdxValue);
|
|
267
286
|
}
|
|
268
287
|
function sendActionAsRest(res, result) {
|
|
269
|
-
server.debug(`[REST
|
|
288
|
+
server.debug(`[KIP][REST] sendActionAsRest statusCode=${result.statusCode} message=${result.message ?? ''}`);
|
|
270
289
|
if (result.statusCode === 200) {
|
|
271
290
|
return res.status(200).json({ state: 'SUCCESS', statusCode: 200 });
|
|
272
291
|
}
|
|
@@ -425,7 +444,7 @@ const start = (server) => {
|
|
|
425
444
|
function registerHistoryProvider() {
|
|
426
445
|
historyApiProviderRegistered = false;
|
|
427
446
|
if (!isHistoryApiProviderEnabled()) {
|
|
428
|
-
server.debug('[
|
|
447
|
+
server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=config-disabled');
|
|
429
448
|
return;
|
|
430
449
|
}
|
|
431
450
|
const host = server;
|
|
@@ -459,10 +478,10 @@ const start = (server) => {
|
|
|
459
478
|
if (typeof registry.unregisterHistoryApiProvider === 'function') {
|
|
460
479
|
historyApiRegistry = { unregisterHistoryApiProvider: registry.unregisterHistoryApiProvider.bind(registry) };
|
|
461
480
|
}
|
|
462
|
-
server.debug('[
|
|
481
|
+
server.debug('[KIP][HISTORY_PROVIDER] registration success provider=kip');
|
|
463
482
|
return;
|
|
464
483
|
}
|
|
465
|
-
server.debug('[
|
|
484
|
+
server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=api-unavailable');
|
|
466
485
|
}
|
|
467
486
|
function rebuildSeriesCaptureSubscriptions() {
|
|
468
487
|
stopSeriesCapture();
|
|
@@ -544,7 +563,7 @@ const start = (server) => {
|
|
|
544
563
|
void storageService.flush()
|
|
545
564
|
.then(result => {
|
|
546
565
|
if (result.inserted > 0 || result.exported > 0) {
|
|
547
|
-
server.debug(`[
|
|
566
|
+
server.debug(`[KIP][STORAGE] flush inserted=${result.inserted} exported=${result.exported}`);
|
|
548
567
|
}
|
|
549
568
|
})
|
|
550
569
|
.catch(error => {
|
|
@@ -558,7 +577,8 @@ const start = (server) => {
|
|
|
558
577
|
name: 'KIP',
|
|
559
578
|
description: 'KIP server plugin',
|
|
560
579
|
start: (settings) => {
|
|
561
|
-
server.debug(
|
|
580
|
+
server.debug('[KIP][LIFECYCLE] start');
|
|
581
|
+
logRuntimeDependencyVersions();
|
|
562
582
|
const modeConfig = resolveHistoryModeConfig(settings);
|
|
563
583
|
historySeriesServiceEnabled = modeConfig.historySeriesServiceEnabled;
|
|
564
584
|
registerAsHistoryApiProvider = modeConfig.registerAsHistoryApiProvider;
|
|
@@ -567,14 +587,14 @@ const start = (server) => {
|
|
|
567
587
|
debug: (msg) => server.debug(msg),
|
|
568
588
|
error: (msg) => server.error(msg)
|
|
569
589
|
});
|
|
570
|
-
const storageConfig = storageService.configure(
|
|
571
|
-
server.debug(`[
|
|
590
|
+
const storageConfig = storageService.configure();
|
|
591
|
+
server.debug(`[KIP][STORAGE] config engine=${storageConfig.engine} db=${storageConfig.databaseFile} parquetDir=${storageConfig.parquetDirectory} flushMs=${storageConfig.flushIntervalMs}`);
|
|
572
592
|
historySeries.setSampleSink(sample => {
|
|
573
593
|
storageService.enqueueSample(sample);
|
|
574
594
|
});
|
|
575
595
|
duckDbInitializationPromise = storageService.initialize();
|
|
576
596
|
void duckDbInitializationPromise.then((ready) => {
|
|
577
|
-
server.debug(`[
|
|
597
|
+
server.debug(`[KIP][STORAGE] duckdbReady=${ready}`);
|
|
578
598
|
if (ready && storageService.isDuckDbParquetEnabled()) {
|
|
579
599
|
if (isHistorySeriesServiceEnabled()) {
|
|
580
600
|
void storageService.getSeriesDefinitions()
|
|
@@ -624,12 +644,12 @@ const start = (server) => {
|
|
|
624
644
|
void storageService.pruneExpiredSamples(Date.now(), lifecycleToken)
|
|
625
645
|
.then(removedPersistedRows => {
|
|
626
646
|
if (removedPersistedRows > 0) {
|
|
627
|
-
server.debug(`[
|
|
647
|
+
server.debug(`[KIP][RETENTION] pruneExpired removedRows=${removedPersistedRows}`);
|
|
628
648
|
}
|
|
629
649
|
return storageService.pruneOrphanedSamples(lifecycleToken)
|
|
630
650
|
.then(removedOrphanRows => {
|
|
631
651
|
if (removedOrphanRows > 0) {
|
|
632
|
-
server.debug(`[
|
|
652
|
+
server.debug(`[KIP][RETENTION] pruneOrphaned removedRows=${removedOrphanRows}`);
|
|
633
653
|
}
|
|
634
654
|
});
|
|
635
655
|
})
|
|
@@ -645,21 +665,21 @@ const start = (server) => {
|
|
|
645
665
|
retentionSweepTimer.unref?.();
|
|
646
666
|
rebuildSeriesCaptureSubscriptions();
|
|
647
667
|
if (server.registerPutHandler) {
|
|
648
|
-
server.debug(`[COMMAND
|
|
668
|
+
server.debug(`[KIP][COMMAND] registerPutHandlers context=${PUT_CONTEXT}`);
|
|
649
669
|
server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.SET_DISPLAY, (context, path, value) => {
|
|
650
|
-
server.debug(`[COMMAND
|
|
670
|
+
server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.SET_DISPLAY} path=${String(path)} context=${String(context)}`);
|
|
651
671
|
void context;
|
|
652
672
|
void path;
|
|
653
673
|
return handleSetDisplay(value);
|
|
654
674
|
}, plugin.id);
|
|
655
675
|
server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.SET_SCREEN_INDEX, (context, path, value) => {
|
|
656
|
-
server.debug(`[COMMAND
|
|
676
|
+
server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.SET_SCREEN_INDEX} path=${String(path)} context=${String(context)}`);
|
|
657
677
|
void context;
|
|
658
678
|
void path;
|
|
659
679
|
return handleScreenWrite(value, 'screenIndex');
|
|
660
680
|
}, plugin.id);
|
|
661
681
|
server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.REQUEST_ACTIVE_SCREEN, (context, path, value) => {
|
|
662
|
-
server.debug(`[COMMAND
|
|
682
|
+
server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.REQUEST_ACTIVE_SCREEN} path=${String(path)} context=${String(context)}`);
|
|
663
683
|
void context;
|
|
664
684
|
void path;
|
|
665
685
|
return handleScreenWrite(value, 'activeScreen');
|
|
@@ -670,7 +690,7 @@ const start = (server) => {
|
|
|
670
690
|
server.setPluginStatus(`Starting...`);
|
|
671
691
|
},
|
|
672
692
|
stop: () => {
|
|
673
|
-
server.debug(
|
|
693
|
+
server.debug('[KIP][LIFECYCLE] stop');
|
|
674
694
|
stopSeriesCapture();
|
|
675
695
|
if (retentionSweepTimer) {
|
|
676
696
|
clearInterval(retentionSweepTimer);
|
|
@@ -688,7 +708,7 @@ const start = (server) => {
|
|
|
688
708
|
if (historyApiRegistry) {
|
|
689
709
|
try {
|
|
690
710
|
historyApiRegistry.unregisterHistoryApiProvider();
|
|
691
|
-
server.debug('[
|
|
711
|
+
server.debug('[KIP][HISTORY_PROVIDER] unregister success provider=kip');
|
|
692
712
|
}
|
|
693
713
|
catch (error) {
|
|
694
714
|
server.error(`[HISTORY PROVIDER] unregister failed: ${String(error.message || error)}`);
|
|
@@ -701,7 +721,7 @@ const start = (server) => {
|
|
|
701
721
|
},
|
|
702
722
|
schema: () => CONFIG_SCHEMA,
|
|
703
723
|
registerWithRouter(router) {
|
|
704
|
-
server.debug(`
|
|
724
|
+
server.debug(`[KIP][ROUTES] register displays=${API_PATHS.DISPLAYS} instance=${API_PATHS.INSTANCE} screenIndex=${API_PATHS.SCREEN_INDEX} activeScreen=${API_PATHS.ACTIVATE_SCREEN}`);
|
|
705
725
|
// Validate/normalize :displayId where present
|
|
706
726
|
router.param('displayId', (req, res, next, displayId) => {
|
|
707
727
|
logAuthTrace(req, 'router.param:displayId:entry');
|
|
@@ -736,7 +756,7 @@ const start = (server) => {
|
|
|
736
756
|
return sendFail(res, 400, 'Invalid displayId format');
|
|
737
757
|
}
|
|
738
758
|
req.displayId = id;
|
|
739
|
-
server.debug(`[AUTH
|
|
759
|
+
server.debug(`[KIP][AUTH] displayIdNormalized value=${id}`);
|
|
740
760
|
next();
|
|
741
761
|
}
|
|
742
762
|
catch {
|
|
@@ -746,7 +766,7 @@ const start = (server) => {
|
|
|
746
766
|
});
|
|
747
767
|
router.put(`${API_PATHS.INSTANCE}`, async (req, res) => {
|
|
748
768
|
logAuthTrace(req, 'route:PUT:INSTANCE:entry');
|
|
749
|
-
server.debug(
|
|
769
|
+
server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.INSTANCE} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
|
|
750
770
|
try {
|
|
751
771
|
const displayId = req.displayId;
|
|
752
772
|
if (!displayId) {
|
|
@@ -764,7 +784,7 @@ const start = (server) => {
|
|
|
764
784
|
});
|
|
765
785
|
router.put(`${API_PATHS.SCREEN_INDEX}`, async (req, res) => {
|
|
766
786
|
logAuthTrace(req, 'route:PUT:SCREEN_INDEX:entry');
|
|
767
|
-
server.debug(
|
|
787
|
+
server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.SCREEN_INDEX} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
|
|
768
788
|
try {
|
|
769
789
|
const displayId = req.displayId;
|
|
770
790
|
if (!displayId) {
|
|
@@ -785,7 +805,7 @@ const start = (server) => {
|
|
|
785
805
|
});
|
|
786
806
|
router.put(`${API_PATHS.ACTIVATE_SCREEN}`, async (req, res) => {
|
|
787
807
|
logAuthTrace(req, 'route:PUT:ACTIVATE_SCREEN:entry');
|
|
788
|
-
server.debug(
|
|
808
|
+
server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.ACTIVATE_SCREEN} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
|
|
789
809
|
try {
|
|
790
810
|
const displayId = req.displayId;
|
|
791
811
|
if (!displayId) {
|
|
@@ -805,7 +825,7 @@ const start = (server) => {
|
|
|
805
825
|
}
|
|
806
826
|
});
|
|
807
827
|
router.get(API_PATHS.DISPLAYS, (req, res) => {
|
|
808
|
-
server.debug(
|
|
828
|
+
server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.DISPLAYS} params=${JSON.stringify(req.params)}`);
|
|
809
829
|
try {
|
|
810
830
|
const displays = getAvailableDisplays();
|
|
811
831
|
const items = displays && typeof displays === 'object'
|
|
@@ -817,8 +837,8 @@ const start = (server) => {
|
|
|
817
837
|
displayName: v?.value?.displayName ?? null
|
|
818
838
|
}))
|
|
819
839
|
: [];
|
|
820
|
-
server.debug(`
|
|
821
|
-
server.debug(`
|
|
840
|
+
server.debug(`[KIP][DISPLAYS] raw=${JSON.stringify(displays)}`);
|
|
841
|
+
server.debug(`[KIP][DISPLAYS] count=${items.length} items=${JSON.stringify(items)}`);
|
|
822
842
|
return res.status(200).json(items);
|
|
823
843
|
}
|
|
824
844
|
catch (error) {
|
|
@@ -827,7 +847,7 @@ const start = (server) => {
|
|
|
827
847
|
}
|
|
828
848
|
});
|
|
829
849
|
router.get(`${API_PATHS.INSTANCE}`, (req, res) => {
|
|
830
|
-
server.debug(
|
|
850
|
+
server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.INSTANCE} params=${JSON.stringify(req.params)}`);
|
|
831
851
|
try {
|
|
832
852
|
const displayId = req.displayId;
|
|
833
853
|
if (!displayId) {
|
|
@@ -847,7 +867,7 @@ const start = (server) => {
|
|
|
847
867
|
}
|
|
848
868
|
});
|
|
849
869
|
router.get(`${API_PATHS.SCREEN_INDEX}`, (req, res) => {
|
|
850
|
-
server.debug(
|
|
870
|
+
server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.SCREEN_INDEX} params=${JSON.stringify(req.params)}`);
|
|
851
871
|
try {
|
|
852
872
|
const displayId = req.displayId;
|
|
853
873
|
if (!displayId) {
|
|
@@ -867,7 +887,7 @@ const start = (server) => {
|
|
|
867
887
|
}
|
|
868
888
|
});
|
|
869
889
|
router.get(`${API_PATHS.ACTIVATE_SCREEN}`, (req, res) => {
|
|
870
|
-
server.debug(
|
|
890
|
+
server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.ACTIVATE_SCREEN} params=${JSON.stringify(req.params)}`);
|
|
871
891
|
try {
|
|
872
892
|
const displayId = req.displayId;
|
|
873
893
|
if (!displayId) {
|
|
@@ -887,7 +907,7 @@ const start = (server) => {
|
|
|
887
907
|
}
|
|
888
908
|
});
|
|
889
909
|
router.get(API_PATHS.SERIES, async (req, res) => {
|
|
890
|
-
server.debug(
|
|
910
|
+
server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.SERIES} params=${JSON.stringify(req.params)}`);
|
|
891
911
|
try {
|
|
892
912
|
if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
|
|
893
913
|
return;
|
|
@@ -904,7 +924,7 @@ const start = (server) => {
|
|
|
904
924
|
}
|
|
905
925
|
});
|
|
906
926
|
router.put(API_PATHS.SERIES_INSTANCE, async (req, res) => {
|
|
907
|
-
server.debug(
|
|
927
|
+
server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.SERIES_INSTANCE} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
|
|
908
928
|
try {
|
|
909
929
|
if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
|
|
910
930
|
return;
|
|
@@ -945,7 +965,7 @@ const start = (server) => {
|
|
|
945
965
|
}
|
|
946
966
|
});
|
|
947
967
|
router.delete(API_PATHS.SERIES_INSTANCE, async (req, res) => {
|
|
948
|
-
server.debug(
|
|
968
|
+
server.debug(`[KIP][ROUTE] method=DELETE path=${API_PATHS.SERIES_INSTANCE} params=${JSON.stringify(req.params)}`);
|
|
949
969
|
try {
|
|
950
970
|
if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
|
|
951
971
|
return;
|
|
@@ -973,7 +993,7 @@ const start = (server) => {
|
|
|
973
993
|
}
|
|
974
994
|
});
|
|
975
995
|
router.post(API_PATHS.SERIES_RECONCILE, async (req, res) => {
|
|
976
|
-
server.debug(
|
|
996
|
+
server.debug(`[KIP][ROUTE] method=POST path=${API_PATHS.SERIES_RECONCILE} body=${JSON.stringify(req.body)}`);
|
|
977
997
|
try {
|
|
978
998
|
if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
|
|
979
999
|
return;
|
|
@@ -997,7 +1017,7 @@ const start = (server) => {
|
|
|
997
1017
|
await storageService.replaceSeriesDefinitions(nextSeries);
|
|
998
1018
|
const seriesOutsideScope = historySeries.listSeries();
|
|
999
1019
|
historySeries.reconcileSeries([...seriesOutsideScope, ...nextSeries]);
|
|
1000
|
-
server.debug(`[
|
|
1020
|
+
server.debug(`[KIP][SERIES_RECONCILE] created=${result.created} updated=${result.updated} deleted=${result.deleted} total=${result.total}`);
|
|
1001
1021
|
rebuildSeriesCaptureSubscriptions();
|
|
1002
1022
|
return sendOk(res, result);
|
|
1003
1023
|
}
|
|
@@ -1011,7 +1031,7 @@ const start = (server) => {
|
|
|
1011
1031
|
if (router.stack) {
|
|
1012
1032
|
router.stack.forEach((layer) => {
|
|
1013
1033
|
if (layer.route && layer.route.path) {
|
|
1014
|
-
server.debug(`
|
|
1034
|
+
server.debug(`[KIP][ROUTES] registered method=${layer.route.stack[0].method.toUpperCase()} path=${layer.route.path}`);
|
|
1015
1035
|
}
|
|
1016
1036
|
});
|
|
1017
1037
|
}
|