ydb-embedded-ui 4.16.0 → 4.16.2

Sign up to get free protection for your applications and to get access to all the features.
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
  ],