@xh/hoist 71.0.0-SNAPSHOT.1735861709598 → 71.0.0-SNAPSHOT.1736120910674

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +5 -2
  2. package/admin/AppModel.ts +15 -8
  3. package/admin/tabs/cluster/ClusterTab.ts +14 -63
  4. package/admin/tabs/cluster/{BaseInstanceModel.ts → instances/BaseInstanceModel.ts} +2 -2
  5. package/admin/tabs/cluster/instances/InstancesTab.ts +73 -0
  6. package/admin/tabs/cluster/{ClusterTabModel.ts → instances/InstancesTabModel.ts} +16 -16
  7. package/admin/tabs/cluster/{connpool → instances/connpool}/ConnPoolMonitorModel.ts +1 -1
  8. package/admin/tabs/cluster/{connpool → instances/connpool}/ConnPoolMonitorPanel.ts +1 -1
  9. package/admin/tabs/cluster/{environment → instances/environment}/ServerEnvModel.ts +1 -1
  10. package/admin/tabs/cluster/{environment → instances/environment}/ServerEnvPanel.ts +1 -1
  11. package/admin/tabs/cluster/{logs → instances/logs}/LogViewer.ts +1 -1
  12. package/admin/tabs/cluster/{logs → instances/logs}/LogViewerModel.ts +1 -1
  13. package/admin/tabs/cluster/{logs → instances/logs}/levels/LogLevelDialog.ts +1 -1
  14. package/admin/tabs/cluster/{logs → instances/logs}/levels/LogLevelDialogModel.ts +1 -1
  15. package/admin/tabs/cluster/{memory → instances/memory}/MemoryMonitorModel.ts +1 -1
  16. package/admin/tabs/cluster/{memory → instances/memory}/MemoryMonitorPanel.ts +1 -1
  17. package/admin/tabs/cluster/{services → instances/services}/DetailsPanel.ts +1 -1
  18. package/admin/tabs/cluster/{services → instances/services}/ServiceModel.ts +3 -3
  19. package/admin/tabs/cluster/{services → instances/services}/ServicePanel.ts +1 -1
  20. package/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketModel.ts +1 -1
  21. package/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketPanel.ts +1 -1
  22. package/admin/tabs/cluster/objects/ClusterObjects.scss +25 -0
  23. package/admin/tabs/cluster/objects/ClusterObjectsModel.ts +427 -0
  24. package/admin/tabs/cluster/objects/ClusterObjectsPanel.ts +114 -0
  25. package/admin/tabs/cluster/objects/DetailModel.ts +158 -0
  26. package/admin/tabs/cluster/objects/DetailPanel.ts +51 -0
  27. package/build/types/admin/tabs/cluster/ClusterTab.d.ts +1 -4
  28. package/build/types/admin/tabs/cluster/{BaseInstanceModel.d.ts → instances/BaseInstanceModel.d.ts} +2 -2
  29. package/build/types/admin/tabs/cluster/instances/InstancesTab.d.ts +4 -0
  30. package/build/types/admin/tabs/cluster/{ClusterTabModel.d.ts → instances/InstancesTabModel.d.ts} +2 -1
  31. package/build/types/admin/tabs/cluster/{connpool → instances/connpool}/ConnPoolMonitorModel.d.ts +1 -1
  32. package/build/types/admin/tabs/cluster/{connpool → instances/connpool}/ConnPoolMonitorPanel.d.ts +1 -1
  33. package/build/types/admin/tabs/cluster/{environment → instances/environment}/ServerEnvModel.d.ts +1 -1
  34. package/build/types/admin/tabs/cluster/{environment → instances/environment}/ServerEnvPanel.d.ts +1 -1
  35. package/build/types/admin/tabs/cluster/{logs → instances/logs}/LogViewerModel.d.ts +1 -1
  36. package/build/types/admin/tabs/cluster/{logs → instances/logs}/levels/LogLevelDialog.d.ts +1 -1
  37. package/build/types/admin/tabs/cluster/{logs → instances/logs}/levels/LogLevelDialogModel.d.ts +1 -1
  38. package/build/types/admin/tabs/cluster/{memory → instances/memory}/MemoryMonitorModel.d.ts +1 -1
  39. package/build/types/admin/tabs/cluster/{memory → instances/memory}/MemoryMonitorPanel.d.ts +1 -1
  40. package/build/types/admin/tabs/cluster/{services → instances/services}/DetailsPanel.d.ts +1 -1
  41. package/build/types/admin/tabs/cluster/{services → instances/services}/ServiceModel.d.ts +1 -1
  42. package/build/types/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketModel.d.ts +1 -1
  43. package/build/types/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketPanel.d.ts +1 -1
  44. package/build/types/admin/tabs/cluster/objects/ClusterObjectsModel.d.ts +30 -0
  45. package/build/types/admin/tabs/cluster/objects/ClusterObjectsPanel.d.ts +3 -0
  46. package/build/types/admin/tabs/cluster/objects/DetailModel.d.ts +19 -0
  47. package/build/types/admin/tabs/cluster/objects/DetailPanel.d.ts +3 -0
  48. package/package.json +1 -1
  49. package/tsconfig.tsbuildinfo +1 -1
  50. package/admin/tabs/cluster/distobjects/DistributedObjectsModel.ts +0 -199
  51. package/admin/tabs/cluster/distobjects/DistributedObjectsPanel.ts +0 -99
  52. package/build/types/admin/tabs/cluster/distobjects/DistributedObjectsModel.d.ts +0 -16
  53. package/build/types/admin/tabs/cluster/distobjects/DistributedObjectsPanel.d.ts +0 -2
  54. /package/admin/tabs/cluster/{logs → instances/logs}/LogDisplay.ts +0 -0
  55. /package/admin/tabs/cluster/{logs → instances/logs}/LogDisplayModel.ts +0 -0
  56. /package/admin/tabs/cluster/{logs → instances/logs}/LogViewer.scss +0 -0
  57. /package/admin/tabs/cluster/{services → instances/services}/DetailsModel.ts +0 -0
  58. /package/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketColumns.ts +0 -0
  59. /package/build/types/admin/tabs/cluster/{logs → instances/logs}/LogDisplay.d.ts +0 -0
  60. /package/build/types/admin/tabs/cluster/{logs → instances/logs}/LogDisplayModel.d.ts +0 -0
  61. /package/build/types/admin/tabs/cluster/{logs → instances/logs}/LogViewer.d.ts +0 -0
  62. /package/build/types/admin/tabs/cluster/{services → instances/services}/DetailsModel.d.ts +0 -0
  63. /package/build/types/admin/tabs/cluster/{services → instances/services}/ServicePanel.d.ts +0 -0
  64. /package/build/types/admin/tabs/cluster/{websocket → instances/websocket}/WebSocketColumns.d.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -2,9 +2,10 @@
2
2
 
3
3
  ## v71.0.0-SNAPSHOT - unreleased
4
4
 
5
- ### 💥 Breaking Changes
5
+ ### 💥 Breaking Changes (upgrade 🟢 Medium - Hoist core update, adjust imports)
6
6
 
7
- * Requires `hoist-core >= 26.1` with new APIs to support `ViewManager`.
7
+ * Requires `hoist-core >= 27.0` with new APIs to support `ViewManager` and additional cluster
8
+ synchronization monitor in admin client.
8
9
  * `ErrorMessage` is now cross-platform - update imports from `@xh/hoist/desktop/cmp/error`
9
10
  or `@xh/hoist/mobile/cmp/error` to `@xh/hoist/cmp/error`.
10
11
  * `Mask` is now cross-platform - update imports from `@xh/hoist/desktop/cmp/mask` or
@@ -34,6 +35,8 @@
34
35
  * Updated sorting on grouped grids to place ungrouped items at the bottom.
35
36
  * `DashCanvas` views can now be resized left and up in addition to right and down.
36
37
  * `FetchService.autoGenCorrelationIds` now supports a functional form for per-request behavior.
38
+ * New `Objects` tab in admin client supports comparing state across the cluster, and flagging any
39
+ persistent state inconsistencies.
37
40
 
38
41
  ### 🐞 Bug Fixes
39
42
 
package/admin/AppModel.ts CHANGED
@@ -71,14 +71,21 @@ export class AppModel extends HoistAppModel {
71
71
  name: 'cluster',
72
72
  path: '/cluster',
73
73
  children: [
74
- {name: 'logs', path: '/logs'},
75
- {name: 'memory', path: '/memory'},
76
- {name: 'jdbcPool', path: '/jdbcPool'},
77
- {name: 'environment', path: '/environment'},
78
- {name: 'services', path: '/services'},
79
- {name: 'objects', path: '/objects'},
80
- {name: 'hibernate', path: '/hibernate'},
81
- {name: 'webSockets', path: '/webSockets'}
74
+ {
75
+ name: 'instances',
76
+ path: '/instances',
77
+ children: [
78
+ {name: 'logs', path: '/logs'},
79
+ {name: 'memory', path: '/memory'},
80
+ {name: 'jdbcPool', path: '/jdbcPool'},
81
+ {name: 'environment', path: '/environment'},
82
+ {name: 'services', path: '/services'},
83
+ {name: 'hibernate', path: '/hibernate'},
84
+ {name: 'consistency', path: '/consistency'},
85
+ {name: 'webSockets', path: '/webSockets'}
86
+ ]
87
+ },
88
+ {name: 'objects', path: '/objects'}
82
89
  ]
83
90
  },
84
91
  {
@@ -4,70 +4,21 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {grid} from '@xh/hoist/cmp/grid';
7
+ import {clusterObjectsPanel} from '@xh/hoist/admin/tabs/cluster/objects/ClusterObjectsPanel';
8
+ import {instancesTab} from '@xh/hoist/admin/tabs/cluster/instances/InstancesTab';
8
9
  import {tabContainer} from '@xh/hoist/cmp/tab';
9
- import {creates, hoistCmp} from '@xh/hoist/core';
10
- import {mask} from '@xh/hoist/cmp/mask';
11
- import {panel} from '@xh/hoist/desktop/cmp/panel';
12
- import {tabSwitcher} from '@xh/hoist/desktop/cmp/tab';
13
- import {box, div, hspacer, p, placeholder, vframe} from '@xh/hoist/cmp/layout';
14
- import {ClusterTabModel} from './ClusterTabModel';
10
+ import {hoistCmp} from '@xh/hoist/core';
15
11
  import {Icon} from '@xh/hoist/icon';
16
12
 
17
- export const clusterTab = hoistCmp.factory({
18
- model: creates(ClusterTabModel),
19
- render({model}) {
20
- return vframe(
21
- panel({
22
- modelConfig: {
23
- side: 'top',
24
- defaultSize: 105,
25
- minSize: 75,
26
- collapsible: false,
27
- persistWith: model.persistWith
28
- },
29
- item: grid()
30
- }),
31
- detailPanel(),
32
- failedConnectionMask()
33
- );
34
- }
35
- });
36
-
37
- export const detailPanel = hoistCmp.factory<ClusterTabModel>({
38
- render({model}) {
39
- const {instance, lastLoadException} = model;
40
- if (!instance?.isReady) {
41
- return placeholder({
42
- items: [Icon.server(), 'Select a running instance above.'],
43
- omit: lastLoadException
44
- });
13
+ export const clusterTab = hoistCmp.factory(() =>
14
+ tabContainer({
15
+ modelConfig: {
16
+ route: 'default.cluster',
17
+ switcher: {orientation: 'left', testId: 'cluster-tab-switcher'},
18
+ tabs: [
19
+ {id: 'instances', icon: Icon.info(), content: instancesTab},
20
+ {id: 'objects', icon: Icon.diff(), content: clusterObjectsPanel}
21
+ ]
45
22
  }
46
-
47
- return panel({
48
- compactHeader: true,
49
- tbar: [
50
- Icon.server(),
51
- box({width: 150, item: model.formatInstance(instance)}),
52
- hspacer(25),
53
- tabSwitcher()
54
- ],
55
- flex: 1,
56
- item: tabContainer()
57
- });
58
- }
59
- });
60
-
61
- export const failedConnectionMask = hoistCmp.factory<ClusterTabModel>({
62
- render({model}) {
63
- return mask({
64
- message: div(
65
- p('Attempting to connect to cluster.'),
66
- p('Local instance may be unavailable, please wait.')
67
- ),
68
- isDisplayed: true,
69
- spinner: true,
70
- omit: !model.lastLoadException
71
- });
72
- }
73
- });
23
+ })
24
+ );
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {ClusterTabModel} from '@xh/hoist/admin/tabs/cluster/ClusterTabModel';
7
+ import {InstancesTabModel} from '@xh/hoist/admin/tabs/cluster/instances/InstancesTabModel';
8
8
  import {HoistModel, LoadSpec, lookup, PlainObject, XH} from '@xh/hoist/core';
9
9
  import {fmtDateTimeSec, fmtJson} from '@xh/hoist/format';
10
10
  import {DAYS} from '@xh/hoist/utils/datetime';
@@ -15,7 +15,7 @@ import {isDisplayed} from '@xh/hoist/utils/js';
15
15
  export class BaseInstanceModel extends HoistModel {
16
16
  viewRef = createRef<HTMLElement>();
17
17
 
18
- @lookup(() => ClusterTabModel) parent: ClusterTabModel;
18
+ @lookup(() => InstancesTabModel) parent: InstancesTabModel;
19
19
 
20
20
  get instanceName(): string {
21
21
  return this.parent.instanceName;
@@ -0,0 +1,73 @@
1
+ /*
2
+ * This file belongs to Hoist, an application development toolkit
3
+ * developed by Extremely Heavy Industries (www.xh.io | info@xh.io)
4
+ *
5
+ * Copyright © 2024 Extremely Heavy Industries Inc.
6
+ */
7
+ import {grid} from '@xh/hoist/cmp/grid';
8
+ import {tabContainer} from '@xh/hoist/cmp/tab';
9
+ import {creates, hoistCmp} from '@xh/hoist/core';
10
+ import {mask} from '@xh/hoist/cmp/mask';
11
+ import {panel} from '@xh/hoist/desktop/cmp/panel';
12
+ import {tabSwitcher} from '@xh/hoist/desktop/cmp/tab';
13
+ import {box, div, hspacer, p, placeholder, vframe} from '@xh/hoist/cmp/layout';
14
+ import {InstancesTabModel} from '@xh/hoist/admin/tabs/cluster/instances/InstancesTabModel';
15
+ import {Icon} from '@xh/hoist/icon';
16
+
17
+ export const instancesTab = hoistCmp.factory({
18
+ model: creates(InstancesTabModel),
19
+ render({model}) {
20
+ return vframe(
21
+ panel({
22
+ modelConfig: {
23
+ side: 'top',
24
+ defaultSize: 105,
25
+ minSize: 75,
26
+ collapsible: false,
27
+ persistWith: model.persistWith
28
+ },
29
+ item: grid()
30
+ }),
31
+ detailPanel(),
32
+ failedConnectionMask()
33
+ );
34
+ }
35
+ });
36
+
37
+ export const detailPanel = hoistCmp.factory<InstancesTabModel>({
38
+ render({model}) {
39
+ const {instance, lastLoadException} = model;
40
+ if (!instance?.isReady) {
41
+ return placeholder({
42
+ items: [Icon.server(), 'Select a running instance above.'],
43
+ omit: lastLoadException
44
+ });
45
+ }
46
+
47
+ return panel({
48
+ compactHeader: true,
49
+ tbar: [
50
+ Icon.server(),
51
+ box({width: 150, item: model.formatInstance(instance)}),
52
+ hspacer(25),
53
+ tabSwitcher()
54
+ ],
55
+ flex: 1,
56
+ item: tabContainer()
57
+ });
58
+ }
59
+ });
60
+
61
+ export const failedConnectionMask = hoistCmp.factory<InstancesTabModel>({
62
+ render({model}) {
63
+ return mask({
64
+ message: div(
65
+ p('Attempting to connect to cluster.'),
66
+ p('Local instance may be unavailable, please wait.')
67
+ ),
68
+ isDisplayed: true,
69
+ spinner: true,
70
+ omit: !model.lastLoadException
71
+ });
72
+ }
73
+ });
@@ -6,14 +6,16 @@
6
6
  */
7
7
  import {AppModel} from '@xh/hoist/admin/AppModel';
8
8
  import {timestampNoYear} from '@xh/hoist/admin/columns';
9
- import {connPoolMonitorPanel} from '@xh/hoist/admin/tabs/cluster/connpool/ConnPoolMonitorPanel';
10
- import {distributedObjectsPanel} from '@xh/hoist/admin/tabs/cluster/distobjects/DistributedObjectsPanel';
11
- import {serverEnvPanel} from '@xh/hoist/admin/tabs/cluster/environment/ServerEnvPanel';
12
- import {logViewer} from '@xh/hoist/admin/tabs/cluster/logs/LogViewer';
13
- import {usedHeapMb, usedPctMax} from '@xh/hoist/admin/tabs/cluster/memory/MemoryMonitorModel';
14
- import {memoryMonitorPanel} from '@xh/hoist/admin/tabs/cluster/memory/MemoryMonitorPanel';
15
- import {servicePanel} from '@xh/hoist/admin/tabs/cluster/services/ServicePanel';
16
- import {webSocketPanel} from '@xh/hoist/admin/tabs/cluster/websocket/WebSocketPanel';
9
+ import {connPoolMonitorPanel} from '@xh/hoist/admin/tabs/cluster/instances/connpool/ConnPoolMonitorPanel';
10
+ import {serverEnvPanel} from '@xh/hoist/admin/tabs/cluster/instances/environment/ServerEnvPanel';
11
+ import {logViewer} from '@xh/hoist/admin/tabs/cluster/instances/logs/LogViewer';
12
+ import {
13
+ usedHeapMb,
14
+ usedPctMax
15
+ } from '@xh/hoist/admin/tabs/cluster/instances/memory/MemoryMonitorModel';
16
+ import {memoryMonitorPanel} from '@xh/hoist/admin/tabs/cluster/instances/memory/MemoryMonitorPanel';
17
+ import {servicePanel} from '@xh/hoist/admin/tabs/cluster/instances/services/ServicePanel';
18
+ import {webSocketPanel} from '@xh/hoist/admin/tabs/cluster/instances/websocket/WebSocketPanel';
17
19
  import {badge} from '@xh/hoist/cmp/badge';
18
20
  import {GridModel, numberCol} from '@xh/hoist/cmp/grid';
19
21
  import {hbox} from '@xh/hoist/cmp/layout';
@@ -27,7 +29,7 @@ import {Timer} from '@xh/hoist/utils/async';
27
29
  import {SECONDS} from '@xh/hoist/utils/datetime';
28
30
  import {ReactNode} from 'react';
29
31
 
30
- export class ClusterTabModel extends HoistModel {
32
+ export class InstancesTabModel extends HoistModel {
31
33
  override persistWith = {localStorageKey: 'xhAdminClusterTabState'};
32
34
 
33
35
  @lookup(TabModel) private tabModel: TabModel;
@@ -57,6 +59,10 @@ export class ClusterTabModel extends HoistModel {
57
59
  return this.gridModel.store.allCount > 1;
58
60
  }
59
61
 
62
+ get instanceNames(): string[] {
63
+ return this.gridModel.store.records.map(r => r.data.name);
64
+ }
65
+
60
66
  override async doLoadAsync(loadSpec: LoadSpec) {
61
67
  const {gridModel} = this;
62
68
 
@@ -182,7 +188,7 @@ export class ClusterTabModel extends HoistModel {
182
188
 
183
189
  private createTabContainerModel() {
184
190
  return new TabContainerModel({
185
- route: 'default.cluster',
191
+ route: 'default.cluster.instances',
186
192
  switcher: false,
187
193
  tabs: [
188
194
  {id: 'logs', icon: Icon.fileText(), content: logViewer},
@@ -195,12 +201,6 @@ export class ClusterTabModel extends HoistModel {
195
201
  },
196
202
  {id: 'environment', icon: Icon.globe(), content: serverEnvPanel},
197
203
  {id: 'services', icon: Icon.gears(), content: servicePanel},
198
- {
199
- id: 'objects',
200
- title: 'Distributed Objects',
201
- icon: Icon.grip(),
202
- content: distributedObjectsPanel
203
- },
204
204
  {id: 'webSockets', title: 'WebSockets', icon: Icon.bolt(), content: webSocketPanel}
205
205
  ]
206
206
  });
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import {timestampNoYear} from '@xh/hoist/admin/columns';
9
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
9
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
10
10
  import {ChartModel} from '@xh/hoist/cmp/chart';
11
11
  import {GridModel} from '@xh/hoist/cmp/grid';
12
12
  import {LoadSpec, managed, PlainObject, XH} from '@xh/hoist/core';
@@ -5,7 +5,7 @@
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
7
  import {AppModel} from '@xh/hoist/admin/AppModel';
8
- import {ConnPoolMonitorModel} from '@xh/hoist/admin/tabs/cluster/connpool/ConnPoolMonitorModel';
8
+ import {ConnPoolMonitorModel} from '@xh/hoist/admin/tabs/cluster/instances/connpool/ConnPoolMonitorModel';
9
9
  import {chart} from '@xh/hoist/cmp/chart';
10
10
  import {grid, gridCountLabel} from '@xh/hoist/cmp/grid';
11
11
  import {filler, hframe, vframe} from '@xh/hoist/cmp/layout';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
7
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
8
8
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
9
9
  import {GridModel} from '@xh/hoist/cmp/grid';
10
10
  import {LoadSpec, managed, XH} from '@xh/hoist/core';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {ServerEnvModel} from '@xh/hoist/admin/tabs/cluster/environment/ServerEnvModel';
7
+ import {ServerEnvModel} from '@xh/hoist/admin/tabs/cluster/instances/environment/ServerEnvModel';
8
8
  import {grid, gridCountLabel} from '@xh/hoist/cmp/grid';
9
9
  import {filler} from '@xh/hoist/cmp/layout';
10
10
  import {storeFilterField} from '@xh/hoist/cmp/store';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {logLevelDialog} from '@xh/hoist/admin/tabs/cluster/logs/levels/LogLevelDialog';
7
+ import {logLevelDialog} from '@xh/hoist/admin/tabs/cluster/instances/logs/levels/LogLevelDialog';
8
8
  import {grid} from '@xh/hoist/cmp/grid';
9
9
  import {hframe} from '@xh/hoist/cmp/layout';
10
10
  import {storeFilterField} from '@xh/hoist/cmp/store';
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import {AppModel} from '@xh/hoist/admin/AppModel';
9
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
9
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
10
10
  import {GridModel} from '@xh/hoist/cmp/grid';
11
11
  import {LoadSpec, managed, XH} from '@xh/hoist/core';
12
12
  import {RecordActionSpec} from '@xh/hoist/data';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {LogLevelDialogModel} from '@xh/hoist/admin/tabs/cluster/logs/levels/LogLevelDialogModel';
7
+ import {LogLevelDialogModel} from '@xh/hoist/admin/tabs/cluster/instances/logs/levels/LogLevelDialogModel';
8
8
  import {filler, span} from '@xh/hoist/cmp/layout';
9
9
  import {creates, hoistCmp} from '@xh/hoist/core';
10
10
  import {button} from '@xh/hoist/desktop/cmp/button';
@@ -7,7 +7,7 @@
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import {AppModel} from '@xh/hoist/admin/AppModel';
9
9
  import * as Col from '@xh/hoist/admin/columns/Rest';
10
- import {LogViewerModel} from '@xh/hoist/admin/tabs/cluster/logs/LogViewerModel';
10
+ import {LogViewerModel} from '@xh/hoist/admin/tabs/cluster/instances/logs/LogViewerModel';
11
11
  import {HoistModel, managed, lookup, LoadSpec} from '@xh/hoist/core';
12
12
  import {FieldSpec} from '@xh/hoist/data';
13
13
  import {textInput} from '@xh/hoist/desktop/cmp/input';
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import {timestampNoYear} from '@xh/hoist/admin/columns';
9
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
9
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
10
10
  import {ChartModel} from '@xh/hoist/cmp/chart';
11
11
  import {ColumnSpec, GridModel} from '@xh/hoist/cmp/grid';
12
12
  import {LoadSpec, managed, XH} from '@xh/hoist/core';
@@ -5,7 +5,7 @@
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
7
  import {AppModel} from '@xh/hoist/admin/AppModel';
8
- import {MemoryMonitorModel} from '@xh/hoist/admin/tabs/cluster/memory/MemoryMonitorModel';
8
+ import {MemoryMonitorModel} from '@xh/hoist/admin/tabs/cluster/instances/memory/MemoryMonitorModel';
9
9
  import {chart} from '@xh/hoist/cmp/chart';
10
10
  import {grid, gridCountLabel} from '@xh/hoist/cmp/grid';
11
11
  import {code, filler, fragment, hbox, hspacer, span, vframe} from '@xh/hoist/cmp/layout';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {DetailsModel} from '@xh/hoist/admin/tabs/cluster/services/DetailsModel';
7
+ import {DetailsModel} from '@xh/hoist/admin/tabs/cluster/instances/services/DetailsModel';
8
8
  import {placeholder} from '@xh/hoist/cmp/layout';
9
9
  import {creates, hoistCmp, XH} from '@xh/hoist/core';
10
10
  import {errorMessage} from '@xh/hoist/cmp/error';
@@ -7,7 +7,7 @@
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import {AppModel} from '@xh/hoist/admin/AppModel';
9
9
  import {timestampNoYear} from '@xh/hoist/admin/columns';
10
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
10
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
11
11
  import {GridModel} from '@xh/hoist/cmp/grid';
12
12
  import {br, fragment} from '@xh/hoist/cmp/layout';
13
13
  import {LoadSpec, managed, XH} from '@xh/hoist/core';
@@ -25,7 +25,7 @@ export class ServiceModel extends BaseInstanceModel {
25
25
  textFilter: FilterTestFn = null;
26
26
 
27
27
  clearCachesAction: RecordActionSpec = {
28
- text: 'Clear Caches',
28
+ text: 'Clear Service Caches',
29
29
  icon: Icon.reset(),
30
30
  intent: 'warning',
31
31
  actionFn: () => this.clearCachesAsync(false),
@@ -37,7 +37,7 @@ export class ServiceModel extends BaseInstanceModel {
37
37
  };
38
38
 
39
39
  clearClusterCachesAction: RecordActionSpec = {
40
- text: 'Clear Caches (entire cluster)',
40
+ text: 'Clear Service Caches (entire cluster)',
41
41
  icon: Icon.reset(),
42
42
  intent: 'warning',
43
43
  actionFn: () => this.clearCachesAsync(true),
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {detailsPanel} from '@xh/hoist/admin/tabs/cluster/services/DetailsPanel';
7
+ import {detailsPanel} from '@xh/hoist/admin/tabs/cluster/instances/services/DetailsPanel';
8
8
  import {grid, gridCountLabel} from '@xh/hoist/cmp/grid';
9
9
  import {filler, hframe} from '@xh/hoist/cmp/layout';
10
10
  import {storeFilterField} from '@xh/hoist/cmp/store';
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import {exportFilenameWithDate} from '@xh/hoist/admin/AdminUtils';
8
8
  import * as Col from '@xh/hoist/admin/columns';
9
- import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/BaseInstanceModel';
9
+ import {BaseInstanceModel} from '@xh/hoist/admin/tabs/cluster/instances/BaseInstanceModel';
10
10
  import {GridModel} from '@xh/hoist/cmp/grid';
11
11
  import {div, p} from '@xh/hoist/cmp/layout';
12
12
  import {LoadSpec, managed, XH} from '@xh/hoist/core';
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Copyright © 2025 Extremely Heavy Industries Inc.
6
6
  */
7
- import {WebSocketModel} from '@xh/hoist/admin/tabs/cluster/websocket/WebSocketModel';
7
+ import {WebSocketModel} from '@xh/hoist/admin/tabs/cluster/instances/websocket/WebSocketModel';
8
8
  import {grid, gridCountLabel} from '@xh/hoist/cmp/grid';
9
9
  import {box, filler, fragment, p} from '@xh/hoist/cmp/layout';
10
10
  import {relativeTimestamp} from '@xh/hoist/cmp/relativetimestamp';
@@ -0,0 +1,25 @@
1
+ /*
2
+ * This file belongs to Hoist, an application development toolkit
3
+ * developed by Extremely Heavy Industries (www.xh.io | info@xh.io)
4
+ *
5
+ * Copyright © 2024 Extremely Heavy Industries Inc.
6
+ */
7
+
8
+ .xh-cluster-objects-row-has-break:not(.ag-row-selected) {
9
+ background-color: var(--xh-intent-danger-trans1) !important;
10
+ }
11
+
12
+ .xh-cluster-objects-cell-danger {
13
+ background-color: var(--xh-intent-danger-trans1) !important;
14
+ }
15
+
16
+ .xh-cluster-objects-cell-success {
17
+ background-color: var(--xh-intent-success-trans1) !important;
18
+ }
19
+
20
+ .xh-cluster-objects-result-count {
21
+ align-items: center;
22
+ .xh-icon {
23
+ margin-right: 0.5em;
24
+ }
25
+ }