ydb-embedded-ui 4.16.0 → 4.16.2

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 CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.16.2](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.16.1...v4.16.2) (2023-08-28)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * fix topic templates ([#524](https://github.com/ydb-platform/ydb-embedded-ui/issues/524)) ([f593b57](https://github.com/ydb-platform/ydb-embedded-ui/commit/f593b575fb64d0c69b56e743fd4cd6faba1e9d0e))
9
+ * rename additionalInfo params to additionalProps ([#525](https://github.com/ydb-platform/ydb-embedded-ui/issues/525)) ([dd2b040](https://github.com/ydb-platform/ydb-embedded-ui/commit/dd2b04039cd80072fe11744f3490c176fe21b16b))
10
+
11
+ ## [4.16.1](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.16.0...v4.16.1) (2023-08-25)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * fix types for external props ([#522](https://github.com/ydb-platform/ydb-embedded-ui/issues/522)) ([173081f](https://github.com/ydb-platform/ydb-embedded-ui/commit/173081f2f0d2814b2311757988d91fbffc2a509f))
17
+
3
18
  ## [4.16.0](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.15.1...v4.16.0) (2023-08-25)
4
19
 
5
20
 
@@ -1,7 +1,7 @@
1
1
  import cn from 'bem-cn-lite';
2
2
 
3
3
  import type {TSystemStateInfo} from '../../types/api/nodes';
4
- import type {AdditionalNodesInfo} from '../../utils/nodes';
4
+ import type {AdditionalNodesProps} from '../../types/additionalProps';
5
5
 
6
6
  import EntityStatus from '../EntityStatus/EntityStatus';
7
7
  import {Tags} from '../Tags';
@@ -13,13 +13,13 @@ const b = cn('basic-node-viewer');
13
13
 
14
14
  interface BasicNodeViewerProps {
15
15
  node: TSystemStateInfo;
16
- additionalNodesInfo?: AdditionalNodesInfo;
16
+ additionalNodesProps?: AdditionalNodesProps;
17
17
  className?: string;
18
18
  }
19
19
 
20
- export const BasicNodeViewer = ({node, additionalNodesInfo, className}: BasicNodeViewerProps) => {
21
- const nodeHref = additionalNodesInfo?.getNodeRef
22
- ? additionalNodesInfo.getNodeRef(node) + 'internal'
20
+ export const BasicNodeViewer = ({node, additionalNodesProps, className}: BasicNodeViewerProps) => {
21
+ const nodeHref = additionalNodesProps?.getNodeRef
22
+ ? additionalNodesProps.getNodeRef(node) + 'internal'
23
23
  : undefined;
24
24
 
25
25
  return (
@@ -3,8 +3,9 @@ import block from 'bem-cn-lite';
3
3
  import {Button, Popover, PopoverBehavior} from '@gravity-ui/uikit';
4
4
 
5
5
  import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
6
+ import type {NodeAddress} from '../../types/additionalProps';
6
7
  import {getDefaultNodePath} from '../../containers/Node/NodePages';
7
- import {isUnavailableNode, NodeAddress} from '../../utils/nodes';
8
+ import {isUnavailableNode} from '../../utils/nodes';
8
9
 
9
10
  import EntityStatus from '../EntityStatus/EntityStatus';
10
11
  import {NodeEndpointsTooltipContent} from '../TooltipsContent';
@@ -10,8 +10,8 @@ import type {
10
10
  AdditionalClusterProps,
11
11
  AdditionalTenantsProps,
12
12
  AdditionalVersionsProps,
13
+ AdditionalNodesProps,
13
14
  } from '../../types/additionalProps';
14
- import type {AdditionalNodesInfo} from '../../utils/nodes';
15
15
  import routes from '../../routes';
16
16
 
17
17
  import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
@@ -35,7 +35,7 @@ const b = cn('cluster');
35
35
 
36
36
  interface ClusterProps {
37
37
  additionalTenantsProps?: AdditionalTenantsProps;
38
- additionalNodesInfo?: AdditionalNodesInfo;
38
+ additionalNodesProps?: AdditionalNodesProps;
39
39
  additionalClusterProps?: AdditionalClusterProps;
40
40
  additionalVersionsProps?: AdditionalVersionsProps;
41
41
  }
@@ -43,7 +43,7 @@ interface ClusterProps {
43
43
  function Cluster({
44
44
  additionalClusterProps,
45
45
  additionalTenantsProps,
46
- additionalNodesInfo,
46
+ additionalNodesProps,
47
47
  additionalVersionsProps,
48
48
  }: ClusterProps) {
49
49
  const dispatch = useDispatch();
@@ -104,10 +104,10 @@ function Cluster({
104
104
  return <Tenants additionalTenantsProps={additionalTenantsProps} />;
105
105
  }
106
106
  case clusterTabsIds.nodes: {
107
- return <Nodes additionalNodesInfo={additionalNodesInfo} />;
107
+ return <Nodes additionalNodesProps={additionalNodesProps} />;
108
108
  }
109
109
  case clusterTabsIds.storage: {
110
- return <Storage additionalNodesInfo={additionalNodesInfo} />;
110
+ return <Storage additionalNodesProps={additionalNodesProps} />;
111
111
  }
112
112
  case clusterTabsIds.versions: {
113
113
  return <Versions versionToColor={versionToColor} />;
@@ -21,6 +21,8 @@ import {setHeaderBreadcrumbs} from '../../store/reducers/header/header';
21
21
  import {AutoFetcher} from '../../utils/autofetcher';
22
22
  import {useTypedSelector} from '../../utils/hooks';
23
23
 
24
+ import type {AdditionalNodesProps} from '../../types/additionalProps';
25
+
24
26
  import {clusterTabsIds} from '../Cluster/utils';
25
27
 
26
28
  import './Node.scss';
@@ -32,7 +34,7 @@ export const STORAGE_ROLE = 'Storage';
32
34
  const autofetcher = new AutoFetcher();
33
35
 
34
36
  interface NodeProps {
35
- additionalNodesInfo?: any;
37
+ additionalNodesProps?: AdditionalNodesProps;
36
38
  className?: string;
37
39
  }
38
40
 
@@ -113,7 +115,7 @@ function Node(props: NodeProps) {
113
115
  );
114
116
  };
115
117
  const renderTabContent = () => {
116
- const {additionalNodesInfo} = props;
118
+ const {additionalNodesProps} = props;
117
119
 
118
120
  switch (activeTab) {
119
121
  case STORAGE: {
@@ -136,7 +138,7 @@ function Node(props: NodeProps) {
136
138
  <NodeStructure
137
139
  className={b('node-page-wrapper')}
138
140
  nodeId={nodeId}
139
- additionalNodesInfo={additionalNodesInfo}
141
+ additionalNodesProps={additionalNodesProps}
140
142
  />
141
143
  );
142
144
  }
@@ -155,7 +157,7 @@ function Node(props: NodeProps) {
155
157
  <div className={b(null, props.className)}>
156
158
  <BasicNodeViewer
157
159
  node={node}
158
- additionalNodesInfo={props.additionalNodesInfo}
160
+ additionalNodesProps={props.additionalNodesProps}
159
161
  className={b('header')}
160
162
  />
161
163
 
@@ -13,6 +13,8 @@ import {selectNodeStructure} from '../../../store/reducers/node/selectors';
13
13
  import {AutoFetcher} from '../../../utils/autofetcher';
14
14
  import {useTypedSelector} from '../../../utils/hooks';
15
15
 
16
+ import type {AdditionalNodesProps} from '../../../types/additionalProps';
17
+
16
18
  import {PDisk} from './Pdisk';
17
19
 
18
20
  import './NodeStructure.scss';
@@ -30,12 +32,12 @@ function generateId({type, id}: {type: 'pdisk' | 'vdisk'; id: string}) {
30
32
  interface NodeStructureProps {
31
33
  nodeId: string;
32
34
  className?: string;
33
- additionalNodesInfo?: any;
35
+ additionalNodesProps?: AdditionalNodesProps;
34
36
  }
35
37
 
36
38
  const autofetcher = new AutoFetcher();
37
39
 
38
- function NodeStructure({nodeId, className, additionalNodesInfo}: NodeStructureProps) {
40
+ function NodeStructure({nodeId, className, additionalNodesProps}: NodeStructureProps) {
39
41
  const dispatch = useDispatch();
40
42
 
41
43
  const nodeStructure = useTypedSelector(selectNodeStructure);
@@ -44,10 +46,10 @@ function NodeStructure({nodeId, className, additionalNodesInfo}: NodeStructurePr
44
46
  const nodeData = useTypedSelector((state) => state.node?.data?.SystemStateInfo?.[0]);
45
47
 
46
48
  const nodeHref = useMemo(() => {
47
- return additionalNodesInfo?.getNodeRef
48
- ? additionalNodesInfo.getNodeRef(nodeData)
49
+ return additionalNodesProps?.getNodeRef
50
+ ? additionalNodesProps.getNodeRef(nodeData)
49
51
  : undefined;
50
- }, [nodeData, additionalNodesInfo]);
52
+ }, [nodeData, additionalNodesProps]);
51
53
 
52
54
  const {pdiskId: pdiskIdFromUrl, vdiskId: vdiskIdFromUrl} = url.parse(
53
55
  window.location.href,
@@ -27,7 +27,7 @@ interface PDiskProps {
27
27
  unfolded?: boolean;
28
28
  id: string;
29
29
  selectedVdiskId?: string;
30
- nodeHref?: string;
30
+ nodeHref?: string | null;
31
31
  }
32
32
 
33
33
  enum VDiskTableColumnsIds {
@@ -62,7 +62,7 @@ function getColumns({
62
62
  }: {
63
63
  pDiskId: number;
64
64
  selectedVdiskId?: string;
65
- nodeHref?: string;
65
+ nodeHref?: string | null;
66
66
  }) {
67
67
  const columns: Column<RowType>[] = [
68
68
  {
@@ -26,7 +26,7 @@ import {
26
26
  useNodesRequestParams,
27
27
  useTableSort,
28
28
  } from '../../utils/hooks';
29
- import {AdditionalNodesInfo, isUnavailableNode, NodesUptimeFilterValues} from '../../utils/nodes';
29
+ import {isUnavailableNode, NodesUptimeFilterValues} from '../../utils/nodes';
30
30
 
31
31
  import {
32
32
  getNodes,
@@ -39,6 +39,7 @@ import {
39
39
  } from '../../store/reducers/nodes/nodes';
40
40
  import {selectFilteredNodes} from '../../store/reducers/nodes/selectors';
41
41
  import {changeFilter, ProblemFilterValues} from '../../store/reducers/settings/settings';
42
+ import type {AdditionalNodesProps} from '../../types/additionalProps';
42
43
 
43
44
  import {isDatabaseEntityType} from '../Tenant/utils/schema';
44
45
 
@@ -53,10 +54,10 @@ const b = cn('ydb-nodes');
53
54
  interface NodesProps {
54
55
  path?: string;
55
56
  type?: EPathType;
56
- additionalNodesInfo?: AdditionalNodesInfo;
57
+ additionalNodesProps?: AdditionalNodesProps;
57
58
  }
58
59
 
59
- export const Nodes = ({path, type, additionalNodesInfo = {}}: NodesProps) => {
60
+ export const Nodes = ({path, type, additionalNodesProps = {}}: NodesProps) => {
60
61
  const dispatch = useDispatch();
61
62
 
62
63
  const isClusterNodes = !path;
@@ -153,7 +154,7 @@ export const Nodes = ({path, type, additionalNodesInfo = {}}: NodesProps) => {
153
154
 
154
155
  const renderTable = () => {
155
156
  const columns = getNodesColumns({
156
- getNodeRef: additionalNodesInfo.getNodeRef,
157
+ getNodeRef: additionalNodesProps.getNodeRef,
157
158
  });
158
159
 
159
160
  if (nodes && nodes.length === 0) {
@@ -6,11 +6,13 @@ import ProgressViewer from '../../components/ProgressViewer/ProgressViewer';
6
6
  import {TabletsStatistic} from '../../components/TabletsStatistic';
7
7
  import {NodeHostWrapper} from '../../components/NodeHostWrapper/NodeHostWrapper';
8
8
 
9
- import {isSortableNodesProperty, type NodeAddress} from '../../utils/nodes';
9
+ import {isSortableNodesProperty} from '../../utils/nodes';
10
10
  import {formatBytesToGigabyte} from '../../utils/index';
11
11
 
12
12
  import type {NodesPreparedEntity} from '../../store/reducers/nodes/types';
13
13
 
14
+ import type {NodeAddress} from '../../types/additionalProps';
15
+
14
16
  const NODES_COLUMNS_IDS = {
15
17
  NodeId: 'NodeId',
16
18
  Host: 'Host',
@@ -15,6 +15,7 @@ import type {
15
15
  VisibleEntities,
16
16
  } from '../../store/reducers/storage/types';
17
17
  import type {NodesSortParams} from '../../store/reducers/nodes/types';
18
+ import type {AdditionalNodesProps} from '../../types/additionalProps';
18
19
  import {
19
20
  setInitialState,
20
21
  setVisibleEntities,
@@ -45,7 +46,7 @@ import {
45
46
  useTableSort,
46
47
  useTypedSelector,
47
48
  } from '../../utils/hooks';
48
- import {AdditionalNodesInfo, NodesUptimeFilterValues} from '../../utils/nodes';
49
+ import {NodesUptimeFilterValues} from '../../utils/nodes';
49
50
  import {DEFAULT_TABLE_SETTINGS} from '../../utils/constants';
50
51
 
51
52
  import {StorageGroups} from './StorageGroups/StorageGroups';
@@ -59,12 +60,12 @@ import './Storage.scss';
59
60
  const b = cn('global-storage');
60
61
 
61
62
  interface StorageProps {
62
- additionalNodesInfo?: AdditionalNodesInfo;
63
+ additionalNodesProps?: AdditionalNodesProps;
63
64
  tenant?: string;
64
65
  nodeId?: string;
65
66
  }
66
67
 
67
- export const Storage = ({additionalNodesInfo, tenant, nodeId}: StorageProps) => {
68
+ export const Storage = ({additionalNodesProps, tenant, nodeId}: StorageProps) => {
68
69
  const dispatch = useDispatch();
69
70
 
70
71
  const {autorefresh} = useTypedSelector((state) => state.schema);
@@ -188,7 +189,7 @@ export const Storage = ({additionalNodesInfo, tenant, nodeId}: StorageProps) =>
188
189
  data={storageNodes}
189
190
  tableSettings={DEFAULT_TABLE_SETTINGS}
190
191
  onShowAll={handleShowAllNodes}
191
- additionalNodesInfo={additionalNodesInfo}
192
+ additionalNodesProps={additionalNodesProps}
192
193
  sort={nodesSort}
193
194
  handleSort={handleNodesSort}
194
195
  />
@@ -5,10 +5,10 @@ import DataTable, {Column, Settings, SortOrder} from '@gravity-ui/react-data-tab
5
5
  import type {ValueOf} from '../../../types/common';
6
6
  import type {PreparedStorageNode, VisibleEntities} from '../../../store/reducers/storage/types';
7
7
  import type {HandleSort} from '../../../utils/hooks/useTableSort';
8
+ import type {AdditionalNodesProps} from '../../../types/additionalProps';
8
9
 
9
10
  import {VISIBLE_ENTITIES} from '../../../store/reducers/storage/constants';
10
11
  import {
11
- AdditionalNodesInfo,
12
12
  isSortableNodesProperty,
13
13
  isUnavailableNode,
14
14
  NodesUptimeFilterValues,
@@ -40,7 +40,7 @@ interface StorageNodesProps {
40
40
  visibleEntities: VisibleEntities;
41
41
  nodesUptimeFilter: keyof typeof NodesUptimeFilterValues;
42
42
  onShowAll?: VoidFunction;
43
- additionalNodesInfo?: AdditionalNodesInfo;
43
+ additionalNodesProps?: AdditionalNodesProps;
44
44
  sort?: SortOrder;
45
45
  handleSort?: HandleSort;
46
46
  }
@@ -63,11 +63,11 @@ export function StorageNodes({
63
63
  visibleEntities,
64
64
  onShowAll,
65
65
  nodesUptimeFilter,
66
- additionalNodesInfo,
66
+ additionalNodesProps,
67
67
  sort,
68
68
  handleSort,
69
69
  }: StorageNodesProps) {
70
- const getNodeRef = additionalNodesInfo?.getNodeRef;
70
+ const getNodeRef = additionalNodesProps?.getNodeRef;
71
71
 
72
72
  const rawColumns: Column<PreparedStorageNode>[] = [
73
73
  {
@@ -5,6 +5,7 @@ import cn from 'bem-cn-lite';
5
5
  import {Button, Modal} from '@gravity-ui/uikit';
6
6
 
7
7
  import type {EPathType} from '../../../../types/api/schema';
8
+ import type {AdditionalTenantsProps} from '../../../../types/additionalProps';
8
9
  import {Icon} from '../../../../components/Icon';
9
10
  import Overview from '../Overview/Overview';
10
11
  import {Healthcheck} from '../Healthcheck';
@@ -16,7 +17,7 @@ interface DetailedOverviewProps {
16
17
  type?: EPathType;
17
18
  className?: string;
18
19
  tenantName: string;
19
- additionalTenantInfo?: any;
20
+ additionalTenantProps?: AdditionalTenantsProps;
20
21
  }
21
22
 
22
23
  const b = cn('kv-detailed-overview');
@@ -51,7 +52,7 @@ function DetailedOverview(props: DetailedOverviewProps) {
51
52
  };
52
53
 
53
54
  const renderContent = () => {
54
- const {type, tenantName, additionalTenantInfo} = props;
55
+ const {type, tenantName, additionalTenantProps} = props;
55
56
  const isTenant = tenantName === currentSchemaPath;
56
57
  return (
57
58
  <div className={b()}>
@@ -60,7 +61,7 @@ function DetailedOverview(props: DetailedOverviewProps) {
60
61
  <div className={b('section')}>
61
62
  <TenantOverview
62
63
  tenantName={tenantName}
63
- additionalTenantInfo={additionalTenantInfo}
64
+ additionalTenantProps={additionalTenantProps}
64
65
  />
65
66
  </div>
66
67
  <div className={b('section')}>
@@ -8,6 +8,7 @@ import {useLocation} from 'react-router';
8
8
  import {Switch, Tabs} from '@gravity-ui/uikit';
9
9
 
10
10
  import type {EPathType} from '../../../types/api/schema';
11
+ import type {AdditionalTenantsProps, AdditionalNodesProps} from '../../../types/additionalProps';
11
12
 
12
13
  import {useTypedSelector} from '../../../utils/hooks';
13
14
  import routes, {createHref} from '../../../routes';
@@ -41,8 +42,8 @@ import './Diagnostics.scss';
41
42
 
42
43
  interface DiagnosticsProps {
43
44
  type?: EPathType;
44
- additionalTenantInfo?: any;
45
- additionalNodesInfo?: any;
45
+ additionalTenantProps?: AdditionalTenantsProps;
46
+ additionalNodesProps?: AdditionalNodesProps;
46
47
  }
47
48
 
48
49
  const b = cn('kv-tenant-diagnostics');
@@ -107,7 +108,7 @@ function Diagnostics(props: DiagnosticsProps) {
107
108
  <DetailedOverview
108
109
  type={type}
109
110
  tenantName={tenantNameString}
110
- additionalTenantInfo={props.additionalTenantInfo}
111
+ additionalTenantProps={props.additionalTenantProps}
111
112
  />
112
113
  );
113
114
  }
@@ -122,7 +123,7 @@ function Diagnostics(props: DiagnosticsProps) {
122
123
  <Nodes
123
124
  path={currentSchemaPath}
124
125
  type={type}
125
- additionalNodesInfo={props.additionalNodesInfo}
126
+ additionalNodesProps={props.additionalNodesProps}
126
127
  />
127
128
  );
128
129
  }
@@ -13,7 +13,8 @@ import {TABLET_STATES, TENANT_DEFAULT_TITLE} from '../../../../utils/constants';
13
13
  import {bytesToGB} from '../../../../utils/utils';
14
14
  import {mapDatabaseTypeToDBName} from '../../utils/schema';
15
15
  import {useAutofetcher, useTypedSelector} from '../../../../utils/hooks';
16
- import {ETabletVolatileState} from '../../../../types/api/tenant';
16
+ import type {ETabletVolatileState} from '../../../../types/api/tenant';
17
+ import type {AdditionalTenantsProps} from '../../../../types/additionalProps';
17
18
  import {getTenantInfo, setDataWasNotLoaded} from '../../../../store/reducers/tenant/tenant';
18
19
 
19
20
  import i18n from './i18n';
@@ -23,10 +24,10 @@ const b = cn('tenant-overview');
23
24
 
24
25
  interface TenantOverviewProps {
25
26
  tenantName: string;
26
- additionalTenantInfo?: any;
27
+ additionalTenantProps?: AdditionalTenantsProps;
27
28
  }
28
29
 
29
- export function TenantOverview({tenantName, additionalTenantInfo}: TenantOverviewProps) {
30
+ export function TenantOverview({tenantName, additionalTenantProps}: TenantOverviewProps) {
30
31
  const {tenant, loading, wasLoaded} = useTypedSelector((state) => state.tenant);
31
32
  const {autorefresh} = useTypedSelector((state) => state.schema);
32
33
  const dispatch = useDispatch();
@@ -118,7 +119,7 @@ export function TenantOverview({tenantName, additionalTenantInfo}: TenantOvervie
118
119
  <div className={b('top-label')}>{tenantType}</div>
119
120
  <div className={b('top')}>
120
121
  {renderName()}
121
- {tenant && additionalTenantInfo && additionalTenantInfo(tenant.Name, tenant.Type)}
122
+ {additionalTenantProps?.getMonitoringLink?.(Name, Type)}
122
123
  </div>
123
124
  <div className={b('system-tablets')}>
124
125
  {SystemTablets &&
@@ -4,6 +4,7 @@ import cn from 'bem-cn-lite';
4
4
  import {useThemeValue} from '@gravity-ui/uikit';
5
5
 
6
6
  import type {EPathType} from '../../../types/api/schema';
7
+ import type {AdditionalTenantsProps, AdditionalNodesProps} from '../../../types/additionalProps';
7
8
  import {TENANT_PAGES_IDS} from '../../../store/reducers/tenant/constants';
8
9
  import {useSetting} from '../../../utils/hooks';
9
10
  import {TENANT_INITIAL_PAGE_KEY} from '../../../utils/constants';
@@ -18,8 +19,8 @@ const b = cn('object-general');
18
19
 
19
20
  interface ObjectGeneralProps {
20
21
  type?: EPathType;
21
- additionalTenantInfo?: any;
22
- additionalNodesInfo?: any;
22
+ additionalTenantProps?: AdditionalTenantsProps;
23
+ additionalNodesProps?: AdditionalNodesProps;
23
24
  }
24
25
 
25
26
  function ObjectGeneral(props: ObjectGeneralProps) {
@@ -32,7 +33,7 @@ function ObjectGeneral(props: ObjectGeneralProps) {
32
33
  const {name: tenantName, tenantPage = initialPage} = queryParams;
33
34
 
34
35
  const renderTabContent = () => {
35
- const {type, additionalTenantInfo, additionalNodesInfo} = props;
36
+ const {type, additionalTenantProps, additionalNodesProps} = props;
36
37
  switch (tenantPage) {
37
38
  case TENANT_PAGES_IDS.query: {
38
39
  return <Query path={tenantName as string} theme={theme} type={type} />;
@@ -41,8 +42,8 @@ function ObjectGeneral(props: ObjectGeneralProps) {
41
42
  return (
42
43
  <Diagnostics
43
44
  type={type}
44
- additionalTenantInfo={additionalTenantInfo}
45
- additionalNodesInfo={additionalNodesInfo}
45
+ additionalTenantProps={additionalTenantProps}
46
+ additionalNodesProps={additionalNodesProps}
46
47
  />
47
48
  );
48
49
  }
@@ -5,6 +5,7 @@ import {useLocation} from 'react-router';
5
5
  import qs from 'qs';
6
6
 
7
7
  import type {TEvDescribeSchemeResult} from '../../types/api/schema';
8
+ import type {AdditionalTenantsProps, AdditionalNodesProps} from '../../types/additionalProps';
8
9
 
9
10
  import {DEFAULT_IS_TENANT_SUMMARY_COLLAPSED, DEFAULT_SIZE_TENANT_KEY} from '../../utils/constants';
10
11
  import {useTypedSelector} from '../../utils/hooks';
@@ -37,8 +38,8 @@ const initialTenantSummaryState = {
37
38
  };
38
39
 
39
40
  interface TenantProps {
40
- additionalTenantInfo?: any;
41
- additionalNodesInfo?: any;
41
+ additionalTenantProps?: AdditionalTenantsProps;
42
+ additionalNodesProps?: AdditionalNodesProps;
42
43
  }
43
44
 
44
45
  function Tenant(props: TenantProps) {
@@ -124,8 +125,8 @@ function Tenant(props: TenantProps) {
124
125
  />
125
126
  <ObjectGeneral
126
127
  type={preloadedPathType || currentPathType}
127
- additionalTenantInfo={props.additionalTenantInfo}
128
- additionalNodesInfo={props.additionalNodesInfo}
128
+ additionalTenantProps={props.additionalTenantProps}
129
+ additionalNodesProps={props.additionalNodesProps}
129
130
  />
130
131
  </SplitPane>
131
132
  )}
@@ -69,42 +69,42 @@ export const createTopicTemplate = (path: string) => {
69
69
  return `-- docs: https://ydb.tech/en/docs/yql/reference/syntax/create_topic
70
70
  CREATE TOPIC \`${path}/my_topic\` (
71
71
  CONSUMER consumer1,
72
- CONSUMER consumer2 WITH (read_from = Datetime('2022-12-01T12:13:22Z')) -- Sets up the message write time starting from which the consumer will receive data.
72
+ CONSUMER consumer2 WITH (read_from = Datetime('1970-01-01T00:00:00Z')) -- Sets up the message write time starting from which the consumer will receive data.
73
73
  -- Value type: Datetime OR Timestamp OR integer (unix-timestamp in the numeric format).
74
74
  -- Default value: now
75
75
  ) WITH (
76
- min_active_partitions = 5, -- Minimum number of topic partitions.
77
- partition_count_limit = 10, -- Maximum number of active partitions in the topic. 0 is interpreted as unlimited.
78
- retention_period = Interval('PT12H'), -- Data retention period in the topic. Value type: Interval, default value: 18h.
79
- retention_storage_mb = 1, -- Limit on the maximum disk space occupied by the topic data.
76
+ min_active_partitions = 1, -- Minimum number of topic partitions.
77
+ partition_count_limit = 0, -- Maximum number of active partitions in the topic. 0 is interpreted as unlimited.
78
+ retention_period = Interval('PT18H'), -- Data retention period in the topic. Value type: Interval.
79
+ retention_storage_mb = 0, -- Limit on the maximum disk space occupied by the topic data.
80
80
  -- When this value is exceeded, the older data is cleared, like under a retention policy.
81
81
  -- 0 is interpreted as unlimited.
82
- partition_write_speed_bytes_per_second = 2097152, -- Maximum allowed write speed per partition.
83
- partition_write_burst_bytes = 2097152 -- Write quota allocated for write bursts.
84
- -- When set to zero, the actual write_burst value is equalled to
85
- -- the quota value (this allows write bursts of up to one second).
82
+ partition_write_speed_bytes_per_second = 1048576, -- Maximum allowed write speed per partition.
83
+ partition_write_burst_bytes = 0 -- Write quota allocated for write bursts.
84
+ -- When set to zero, the actual write_burst value is equalled to
85
+ -- the quota value (this allows write bursts of up to one second).
86
86
  );`;
87
87
  };
88
88
 
89
89
  export const alterTopicTemplate = (path: string) => {
90
90
  return `-- docs: https://ydb.tech/en/docs/yql/reference/syntax/alter_topic
91
91
  ALTER TOPIC \`${path}\`
92
- ADD CONSUMER new_consumer WITH (read_from = 0), -- Sets up the message write time starting from which the consumer will receive data.
93
- -- Value type: Datetime OR Timestamp OR integer (unix-timestamp in the numeric format).
94
- -- Default value: now
95
- ALTER CONSUMER consumer1 SET (read_from = Datetime('2023-12-01T12:13:22Z')),
92
+ ADD CONSUMER new_consumer WITH (read_from = Datetime('1970-01-01T00:00:00Z')), -- Sets up the message write time starting from which the consumer will receive data.
93
+ -- Value type: Datetime OR Timestamp OR integer (unix-timestamp in the numeric format).
94
+ -- Default value: now
95
+ ALTER CONSUMER consumer1 SET (read_from = Datetime('1970-01-01T00:00:00Z')),
96
96
  DROP CONSUMER consumer2,
97
97
  SET (
98
- min_active_partitions = 10, -- Minimum number of topic partitions.
99
- partition_count_limit = 15, -- Maximum number of active partitions in the topic. 0 is interpreted as unlimited.
100
- retention_period = Interval('PT36H'), -- Data retention period in the topic. Value type: Interval, default value: 18h.
101
- retention_storage_mb = 10, -- Limit on the maximum disk space occupied by the topic data.
102
- -- When this value is exceeded, the older data is cleared, like under a retention policy.
103
- -- 0 is interpreted as unlimited.
104
- partition_write_speed_bytes_per_second = 3145728, -- Maximum allowed write speed per partition.
105
- partition_write_burst_bytes = 1048576 -- Write quota allocated for write bursts.
106
- -- When set to zero, the actual write_burst value is equalled to
107
- -- the quota value (this allows write bursts of up to one second).
98
+ min_active_partitions = 1, -- Minimum number of topic partitions.
99
+ partition_count_limit = 0, -- Maximum number of active partitions in the topic. 0 is interpreted as unlimited.
100
+ retention_period = Interval('PT18H'), -- Data retention period in the topic. Value type: Interval.
101
+ retention_storage_mb = 0, -- Limit on the maximum disk space occupied by the topic data.
102
+ -- When this value is exceeded, the older data is cleared, like under a retention policy.
103
+ -- 0 is interpreted as unlimited.
104
+ partition_write_speed_bytes_per_second = 1048576, -- Maximum allowed write speed per partition.
105
+ partition_write_burst_bytes = 0 -- Write quota allocated for write bursts.
106
+ -- When set to zero, the actual write_burst value is equalled to
107
+ -- the quota value (this allows write bursts of up to one second).
108
108
  );`;
109
109
  };
110
110
 
@@ -106,9 +106,7 @@ export const Tenants = ({additionalTenantsProps}: TenantsProps) => {
106
106
  backend,
107
107
  })}
108
108
  />
109
- {row.Name &&
110
- row.Type &&
111
- additionalTenantsProps?.getMonitoringLink?.(row.Name, row.Type)}
109
+ {additionalTenantsProps?.getMonitoringLink?.(row.Name, row.Type)}
112
110
  </div>
113
111
  );
114
112
  },
@@ -2,6 +2,7 @@ import type {ReactNode} from 'react';
2
2
 
3
3
  import type {InfoViewerItem} from '../components/InfoViewer';
4
4
  import type {ETenantType} from './api/tenant';
5
+ import type {TSystemStateInfo} from './api/nodes';
5
6
  import type {VersionToColorMap} from './versions';
6
7
 
7
8
  export interface AdditionalVersionsProps {
@@ -20,5 +21,11 @@ export interface AdditionalClusterProps {
20
21
 
21
22
  export interface AdditionalTenantsProps {
22
23
  prepareTenantBackend?: (backend: string | undefined) => string | undefined;
23
- getMonitoringLink?: (name: string, type: ETenantType) => ReactNode;
24
+ getMonitoringLink?: (name?: string, type?: ETenantType) => ReactNode;
25
+ }
26
+
27
+ export type NodeAddress = Pick<TSystemStateInfo, 'Host' | 'Endpoints'>;
28
+
29
+ export interface AdditionalNodesProps extends Record<string, unknown> {
30
+ getNodeRef?: (node?: NodeAddress) => string | null;
24
31
  }
@@ -18,12 +18,6 @@ export const NodesUptimeFilterTitles = {
18
18
  export const isUnavailableNode = (node: NodesPreparedEntity | TSystemStateInfo) =>
19
19
  !node.SystemState || node.SystemState === EFlag.Grey;
20
20
 
21
- export type NodeAddress = Pick<TSystemStateInfo, 'Host' | 'Endpoints'>;
22
-
23
- export interface AdditionalNodesInfo extends Record<string, unknown> {
24
- getNodeRef?: (node?: NodeAddress) => string | null;
25
- }
26
-
27
21
  export const prepareNodesMap = (nodesList?: TNodeInfo[]) => {
28
22
  return nodesList?.reduce<NodesMap>((nodesMap, node) => {
29
23
  if (node.Id && node.Host) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ydb-embedded-ui",
3
- "version": "4.16.0",
3
+ "version": "4.16.2",
4
4
  "files": [
5
5
  "dist"
6
6
  ],