@matterbridge/core 3.10.13-dev-20261004-0c9c4ee → 3.10.13-dev-20261005-49e0dbd

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.
@@ -27,6 +27,7 @@ export declare class Frontend extends EventEmitter<FrontendEvents> {
27
27
  private serverFetchTimeout;
28
28
  private readonly debug;
29
29
  private readonly verbose;
30
+ private readonly diagnostic;
30
31
  readonly readOnly: boolean;
31
32
  readonly shellyBoard: boolean;
32
33
  shellySysUpdate: boolean;
package/dist/frontend.js CHANGED
@@ -22,6 +22,7 @@ import { BroadcastServer } from '@matterbridge/thread/server';
22
22
  import { MATTER_LOGGER_FILE, MATTER_STORAGE_DIR, MATTERBRIDGE_DIAGNOSTIC_FILE, MATTERBRIDGE_HISTORY_FILE, MATTERBRIDGE_LOGGER_FILE, NODE_STORAGE_DIR, plg, } from '@matterbridge/types';
23
23
  import { isBun } from '@matterbridge/utils/bun';
24
24
  import { getParameter, hasParameter } from '@matterbridge/utils/cli';
25
+ import { writeDiagnostic } from '@matterbridge/utils/diagnostic';
25
26
  import { getEnumDescription } from '@matterbridge/utils/enum';
26
27
  import { getErrorMessage, inspectError, logError } from '@matterbridge/utils/error';
27
28
  import { formatBytes, formatPercent, formatUptime } from '@matterbridge/utils/format';
@@ -50,6 +51,7 @@ export class Frontend extends EventEmitter {
50
51
  serverFetchTimeout = 2000;
51
52
  debug = hasParameter('debug') || hasParameter('verbose');
52
53
  verbose = hasParameter('verbose');
54
+ diagnostic = hasParameter('diagnostic');
53
55
  readOnly = hasParameter('readonly') || hasParameter('shelly');
54
56
  shellyBoard = hasParameter('shelly');
55
57
  shellySysUpdate = false;
@@ -1780,13 +1782,24 @@ export class Frontend extends EventEmitter {
1780
1782
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: matter });
1781
1783
  }
1782
1784
  else if (data.method === '/api/settings') {
1783
- sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: this.getApiSettings() });
1785
+ const start = performance.now();
1786
+ const settings = this.getApiSettings();
1787
+ if (this.diagnostic)
1788
+ writeDiagnostic(`Frontend:${data.sender}`, `getApiSettings() took ${(performance.now() - start).toFixed(2)} ms`);
1789
+ sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: settings });
1784
1790
  }
1785
1791
  else if (data.method === '/api/plugins') {
1786
- sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: this.getApiPlugins() });
1792
+ const start = performance.now();
1793
+ const plugins = this.getApiPlugins();
1794
+ if (this.diagnostic)
1795
+ writeDiagnostic(`Frontend:${data.sender}`, `getApiPlugins() took ${(performance.now() - start).toFixed(2)} ms`);
1796
+ sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: plugins });
1787
1797
  }
1788
1798
  else if (data.method === '/api/devices') {
1799
+ const start = performance.now();
1789
1800
  const devices = this.getApiDevices(isValidString(data.params.pluginName) ? data.params.pluginName : undefined);
1801
+ if (this.diagnostic)
1802
+ writeDiagnostic(`Frontend:${data.sender}`, `getApiDevices() took ${(performance.now() - start).toFixed(2)} ms`);
1790
1803
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: devices });
1791
1804
  }
1792
1805
  else if (data.method === '/api/clusters') {
@@ -1798,15 +1811,18 @@ export class Frontend extends EventEmitter {
1798
1811
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: 'Wrong parameter endpoint in /api/clusters' });
1799
1812
  return;
1800
1813
  }
1801
- const response = this.getClusters(data.params.plugin, data.params.endpoint, data.params.serialNumber, data.params.uniqueId);
1802
- if (response) {
1814
+ const start = performance.now();
1815
+ const clusters = this.getClusters(data.params.plugin, data.params.endpoint, data.params.serialNumber, data.params.uniqueId);
1816
+ if (this.diagnostic)
1817
+ writeDiagnostic(`Frontend:${data.sender}`, `getClusters() took ${(performance.now() - start).toFixed(2)} ms`);
1818
+ if (clusters) {
1803
1819
  sendResponse({
1804
1820
  id: data.id,
1805
1821
  method: data.method,
1806
1822
  src: 'Matterbridge',
1807
1823
  dst: data.src,
1808
1824
  success: true,
1809
- response,
1825
+ response: clusters,
1810
1826
  });
1811
1827
  }
1812
1828
  else {
@@ -1823,8 +1839,11 @@ export class Frontend extends EventEmitter {
1823
1839
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: 'Plugin not found in /api/select/devices' });
1824
1840
  return;
1825
1841
  }
1826
- const selectDeviceValues = !plugin.platform ? [] : plugin.platform.getSelectDevices().toSorted((keyA, keyB) => keyA.name.localeCompare(keyB.name));
1827
- sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: selectDeviceValues });
1842
+ const start = performance.now();
1843
+ const selectDevices = !plugin.platform ? [] : plugin.platform.getSelectDevices().toSorted((keyA, keyB) => keyA.name.localeCompare(keyB.name));
1844
+ if (this.diagnostic)
1845
+ writeDiagnostic(`Frontend:${data.sender}`, `getSelectDevices() took ${(performance.now() - start).toFixed(2)} ms`);
1846
+ sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: selectDevices });
1828
1847
  }
1829
1848
  else if (data.method === '/api/select/entities') {
1830
1849
  if (!isValidString(data.params.plugin, 10)) {
@@ -1836,8 +1855,11 @@ export class Frontend extends EventEmitter {
1836
1855
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: 'Plugin not found in /api/select/entities' });
1837
1856
  return;
1838
1857
  }
1839
- const selectEntityValues = !plugin.platform ? [] : plugin.platform.getSelectEntities().toSorted((keyA, keyB) => keyA.name.localeCompare(keyB.name));
1840
- sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: selectEntityValues });
1858
+ const start = performance.now();
1859
+ const selectEntities = !plugin.platform ? [] : plugin.platform.getSelectEntities().toSorted((keyA, keyB) => keyA.name.localeCompare(keyB.name));
1860
+ if (this.diagnostic)
1861
+ writeDiagnostic(`Frontend:${data.sender}`, `getSelectEntities() took ${(performance.now() - start).toFixed(2)} ms`);
1862
+ sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true, response: selectEntities });
1841
1863
  }
1842
1864
  else if (data.method === '/api/action') {
1843
1865
  const localData = data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/core",
3
- "version": "3.10.13-dev-20261004-0c9c4ee",
3
+ "version": "3.10.13-dev-20261005-49e0dbd",
4
4
  "description": "Matterbridge core library",
5
5
  "author": "https://github.com/Luligu",
6
6
  "homepage": "https://matterbridge.io/",
@@ -136,10 +136,10 @@
136
136
  },
137
137
  "dependencies": {
138
138
  "@matter/main": "0.17.9",
139
- "@matterbridge/dgram": "3.10.13-dev-20261004-0c9c4ee",
140
- "@matterbridge/thread": "3.10.13-dev-20261004-0c9c4ee",
141
- "@matterbridge/types": "3.10.13-dev-20261004-0c9c4ee",
142
- "@matterbridge/utils": "3.10.13-dev-20261004-0c9c4ee",
139
+ "@matterbridge/dgram": "3.10.13-dev-20261005-49e0dbd",
140
+ "@matterbridge/thread": "3.10.13-dev-20261005-49e0dbd",
141
+ "@matterbridge/types": "3.10.13-dev-20261005-49e0dbd",
142
+ "@matterbridge/utils": "3.10.13-dev-20261005-49e0dbd",
143
143
  "escape-html": "1.0.3",
144
144
  "express": "5.2.1",
145
145
  "express-rate-limit": "8.7.0",