ydb-embedded-ui 4.16.1 → 4.16.2
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +8 -0
- package/dist/components/BasicNodeViewer/BasicNodeViewer.tsx +4 -4
- package/dist/containers/Cluster/Cluster.tsx +4 -4
- package/dist/containers/Node/Node.tsx +4 -4
- package/dist/containers/Node/NodeStructure/NodeStructure.tsx +5 -5
- package/dist/containers/Nodes/Nodes.tsx +3 -3
- package/dist/containers/Storage/Storage.tsx +3 -3
- package/dist/containers/Storage/StorageNodes/StorageNodes.tsx +3 -3
- package/dist/containers/Tenant/Diagnostics/DetailedOverview/DetailedOverview.tsx +3 -3
- package/dist/containers/Tenant/Diagnostics/Diagnostics.tsx +4 -4
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx +3 -3
- package/dist/containers/Tenant/ObjectGeneral/ObjectGeneral.tsx +5 -5
- package/dist/containers/Tenant/Tenant.tsx +4 -4
- package/dist/containers/Tenant/utils/queryTemplates.ts +23 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
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
|
+
|
3
11
|
## [4.16.1](https://github.com/ydb-platform/ydb-embedded-ui/compare/v4.16.0...v4.16.1) (2023-08-25)
|
4
12
|
|
5
13
|
|
@@ -13,13 +13,13 @@ const b = cn('basic-node-viewer');
|
|
13
13
|
|
14
14
|
interface BasicNodeViewerProps {
|
15
15
|
node: TSystemStateInfo;
|
16
|
-
|
16
|
+
additionalNodesProps?: AdditionalNodesProps;
|
17
17
|
className?: string;
|
18
18
|
}
|
19
19
|
|
20
|
-
export const BasicNodeViewer = ({node,
|
21
|
-
const nodeHref =
|
22
|
-
?
|
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 (
|
@@ -35,7 +35,7 @@ const b = cn('cluster');
|
|
35
35
|
|
36
36
|
interface ClusterProps {
|
37
37
|
additionalTenantsProps?: AdditionalTenantsProps;
|
38
|
-
|
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
|
-
|
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
|
107
|
+
return <Nodes additionalNodesProps={additionalNodesProps} />;
|
108
108
|
}
|
109
109
|
case clusterTabsIds.storage: {
|
110
|
-
return <Storage
|
110
|
+
return <Storage additionalNodesProps={additionalNodesProps} />;
|
111
111
|
}
|
112
112
|
case clusterTabsIds.versions: {
|
113
113
|
return <Versions versionToColor={versionToColor} />;
|
@@ -34,7 +34,7 @@ export const STORAGE_ROLE = 'Storage';
|
|
34
34
|
const autofetcher = new AutoFetcher();
|
35
35
|
|
36
36
|
interface NodeProps {
|
37
|
-
|
37
|
+
additionalNodesProps?: AdditionalNodesProps;
|
38
38
|
className?: string;
|
39
39
|
}
|
40
40
|
|
@@ -115,7 +115,7 @@ function Node(props: NodeProps) {
|
|
115
115
|
);
|
116
116
|
};
|
117
117
|
const renderTabContent = () => {
|
118
|
-
const {
|
118
|
+
const {additionalNodesProps} = props;
|
119
119
|
|
120
120
|
switch (activeTab) {
|
121
121
|
case STORAGE: {
|
@@ -138,7 +138,7 @@ function Node(props: NodeProps) {
|
|
138
138
|
<NodeStructure
|
139
139
|
className={b('node-page-wrapper')}
|
140
140
|
nodeId={nodeId}
|
141
|
-
|
141
|
+
additionalNodesProps={additionalNodesProps}
|
142
142
|
/>
|
143
143
|
);
|
144
144
|
}
|
@@ -157,7 +157,7 @@ function Node(props: NodeProps) {
|
|
157
157
|
<div className={b(null, props.className)}>
|
158
158
|
<BasicNodeViewer
|
159
159
|
node={node}
|
160
|
-
|
160
|
+
additionalNodesProps={props.additionalNodesProps}
|
161
161
|
className={b('header')}
|
162
162
|
/>
|
163
163
|
|
@@ -32,12 +32,12 @@ function generateId({type, id}: {type: 'pdisk' | 'vdisk'; id: string}) {
|
|
32
32
|
interface NodeStructureProps {
|
33
33
|
nodeId: string;
|
34
34
|
className?: string;
|
35
|
-
|
35
|
+
additionalNodesProps?: AdditionalNodesProps;
|
36
36
|
}
|
37
37
|
|
38
38
|
const autofetcher = new AutoFetcher();
|
39
39
|
|
40
|
-
function NodeStructure({nodeId, className,
|
40
|
+
function NodeStructure({nodeId, className, additionalNodesProps}: NodeStructureProps) {
|
41
41
|
const dispatch = useDispatch();
|
42
42
|
|
43
43
|
const nodeStructure = useTypedSelector(selectNodeStructure);
|
@@ -46,10 +46,10 @@ function NodeStructure({nodeId, className, additionalNodesInfo}: NodeStructurePr
|
|
46
46
|
const nodeData = useTypedSelector((state) => state.node?.data?.SystemStateInfo?.[0]);
|
47
47
|
|
48
48
|
const nodeHref = useMemo(() => {
|
49
|
-
return
|
50
|
-
?
|
49
|
+
return additionalNodesProps?.getNodeRef
|
50
|
+
? additionalNodesProps.getNodeRef(nodeData)
|
51
51
|
: undefined;
|
52
|
-
}, [nodeData,
|
52
|
+
}, [nodeData, additionalNodesProps]);
|
53
53
|
|
54
54
|
const {pdiskId: pdiskIdFromUrl, vdiskId: vdiskIdFromUrl} = url.parse(
|
55
55
|
window.location.href,
|
@@ -54,10 +54,10 @@ const b = cn('ydb-nodes');
|
|
54
54
|
interface NodesProps {
|
55
55
|
path?: string;
|
56
56
|
type?: EPathType;
|
57
|
-
|
57
|
+
additionalNodesProps?: AdditionalNodesProps;
|
58
58
|
}
|
59
59
|
|
60
|
-
export const Nodes = ({path, type,
|
60
|
+
export const Nodes = ({path, type, additionalNodesProps = {}}: NodesProps) => {
|
61
61
|
const dispatch = useDispatch();
|
62
62
|
|
63
63
|
const isClusterNodes = !path;
|
@@ -154,7 +154,7 @@ export const Nodes = ({path, type, additionalNodesInfo = {}}: NodesProps) => {
|
|
154
154
|
|
155
155
|
const renderTable = () => {
|
156
156
|
const columns = getNodesColumns({
|
157
|
-
getNodeRef:
|
157
|
+
getNodeRef: additionalNodesProps.getNodeRef,
|
158
158
|
});
|
159
159
|
|
160
160
|
if (nodes && nodes.length === 0) {
|
@@ -60,12 +60,12 @@ import './Storage.scss';
|
|
60
60
|
const b = cn('global-storage');
|
61
61
|
|
62
62
|
interface StorageProps {
|
63
|
-
|
63
|
+
additionalNodesProps?: AdditionalNodesProps;
|
64
64
|
tenant?: string;
|
65
65
|
nodeId?: string;
|
66
66
|
}
|
67
67
|
|
68
|
-
export const Storage = ({
|
68
|
+
export const Storage = ({additionalNodesProps, tenant, nodeId}: StorageProps) => {
|
69
69
|
const dispatch = useDispatch();
|
70
70
|
|
71
71
|
const {autorefresh} = useTypedSelector((state) => state.schema);
|
@@ -189,7 +189,7 @@ export const Storage = ({additionalNodesInfo, tenant, nodeId}: StorageProps) =>
|
|
189
189
|
data={storageNodes}
|
190
190
|
tableSettings={DEFAULT_TABLE_SETTINGS}
|
191
191
|
onShowAll={handleShowAllNodes}
|
192
|
-
|
192
|
+
additionalNodesProps={additionalNodesProps}
|
193
193
|
sort={nodesSort}
|
194
194
|
handleSort={handleNodesSort}
|
195
195
|
/>
|
@@ -40,7 +40,7 @@ interface StorageNodesProps {
|
|
40
40
|
visibleEntities: VisibleEntities;
|
41
41
|
nodesUptimeFilter: keyof typeof NodesUptimeFilterValues;
|
42
42
|
onShowAll?: VoidFunction;
|
43
|
-
|
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
|
-
|
66
|
+
additionalNodesProps,
|
67
67
|
sort,
|
68
68
|
handleSort,
|
69
69
|
}: StorageNodesProps) {
|
70
|
-
const getNodeRef =
|
70
|
+
const getNodeRef = additionalNodesProps?.getNodeRef;
|
71
71
|
|
72
72
|
const rawColumns: Column<PreparedStorageNode>[] = [
|
73
73
|
{
|
@@ -17,7 +17,7 @@ interface DetailedOverviewProps {
|
|
17
17
|
type?: EPathType;
|
18
18
|
className?: string;
|
19
19
|
tenantName: string;
|
20
|
-
|
20
|
+
additionalTenantProps?: AdditionalTenantsProps;
|
21
21
|
}
|
22
22
|
|
23
23
|
const b = cn('kv-detailed-overview');
|
@@ -52,7 +52,7 @@ function DetailedOverview(props: DetailedOverviewProps) {
|
|
52
52
|
};
|
53
53
|
|
54
54
|
const renderContent = () => {
|
55
|
-
const {type, tenantName,
|
55
|
+
const {type, tenantName, additionalTenantProps} = props;
|
56
56
|
const isTenant = tenantName === currentSchemaPath;
|
57
57
|
return (
|
58
58
|
<div className={b()}>
|
@@ -61,7 +61,7 @@ function DetailedOverview(props: DetailedOverviewProps) {
|
|
61
61
|
<div className={b('section')}>
|
62
62
|
<TenantOverview
|
63
63
|
tenantName={tenantName}
|
64
|
-
|
64
|
+
additionalTenantProps={additionalTenantProps}
|
65
65
|
/>
|
66
66
|
</div>
|
67
67
|
<div className={b('section')}>
|
@@ -42,8 +42,8 @@ import './Diagnostics.scss';
|
|
42
42
|
|
43
43
|
interface DiagnosticsProps {
|
44
44
|
type?: EPathType;
|
45
|
-
|
46
|
-
|
45
|
+
additionalTenantProps?: AdditionalTenantsProps;
|
46
|
+
additionalNodesProps?: AdditionalNodesProps;
|
47
47
|
}
|
48
48
|
|
49
49
|
const b = cn('kv-tenant-diagnostics');
|
@@ -108,7 +108,7 @@ function Diagnostics(props: DiagnosticsProps) {
|
|
108
108
|
<DetailedOverview
|
109
109
|
type={type}
|
110
110
|
tenantName={tenantNameString}
|
111
|
-
|
111
|
+
additionalTenantProps={props.additionalTenantProps}
|
112
112
|
/>
|
113
113
|
);
|
114
114
|
}
|
@@ -123,7 +123,7 @@ function Diagnostics(props: DiagnosticsProps) {
|
|
123
123
|
<Nodes
|
124
124
|
path={currentSchemaPath}
|
125
125
|
type={type}
|
126
|
-
|
126
|
+
additionalNodesProps={props.additionalNodesProps}
|
127
127
|
/>
|
128
128
|
);
|
129
129
|
}
|
@@ -24,10 +24,10 @@ const b = cn('tenant-overview');
|
|
24
24
|
|
25
25
|
interface TenantOverviewProps {
|
26
26
|
tenantName: string;
|
27
|
-
|
27
|
+
additionalTenantProps?: AdditionalTenantsProps;
|
28
28
|
}
|
29
29
|
|
30
|
-
export function TenantOverview({tenantName,
|
30
|
+
export function TenantOverview({tenantName, additionalTenantProps}: TenantOverviewProps) {
|
31
31
|
const {tenant, loading, wasLoaded} = useTypedSelector((state) => state.tenant);
|
32
32
|
const {autorefresh} = useTypedSelector((state) => state.schema);
|
33
33
|
const dispatch = useDispatch();
|
@@ -119,7 +119,7 @@ export function TenantOverview({tenantName, additionalTenantInfo}: TenantOvervie
|
|
119
119
|
<div className={b('top-label')}>{tenantType}</div>
|
120
120
|
<div className={b('top')}>
|
121
121
|
{renderName()}
|
122
|
-
{
|
122
|
+
{additionalTenantProps?.getMonitoringLink?.(Name, Type)}
|
123
123
|
</div>
|
124
124
|
<div className={b('system-tablets')}>
|
125
125
|
{SystemTablets &&
|
@@ -19,8 +19,8 @@ const b = cn('object-general');
|
|
19
19
|
|
20
20
|
interface ObjectGeneralProps {
|
21
21
|
type?: EPathType;
|
22
|
-
|
23
|
-
|
22
|
+
additionalTenantProps?: AdditionalTenantsProps;
|
23
|
+
additionalNodesProps?: AdditionalNodesProps;
|
24
24
|
}
|
25
25
|
|
26
26
|
function ObjectGeneral(props: ObjectGeneralProps) {
|
@@ -33,7 +33,7 @@ function ObjectGeneral(props: ObjectGeneralProps) {
|
|
33
33
|
const {name: tenantName, tenantPage = initialPage} = queryParams;
|
34
34
|
|
35
35
|
const renderTabContent = () => {
|
36
|
-
const {type,
|
36
|
+
const {type, additionalTenantProps, additionalNodesProps} = props;
|
37
37
|
switch (tenantPage) {
|
38
38
|
case TENANT_PAGES_IDS.query: {
|
39
39
|
return <Query path={tenantName as string} theme={theme} type={type} />;
|
@@ -42,8 +42,8 @@ function ObjectGeneral(props: ObjectGeneralProps) {
|
|
42
42
|
return (
|
43
43
|
<Diagnostics
|
44
44
|
type={type}
|
45
|
-
|
46
|
-
|
45
|
+
additionalTenantProps={additionalTenantProps}
|
46
|
+
additionalNodesProps={additionalNodesProps}
|
47
47
|
/>
|
48
48
|
);
|
49
49
|
}
|
@@ -38,8 +38,8 @@ const initialTenantSummaryState = {
|
|
38
38
|
};
|
39
39
|
|
40
40
|
interface TenantProps {
|
41
|
-
|
42
|
-
|
41
|
+
additionalTenantProps?: AdditionalTenantsProps;
|
42
|
+
additionalNodesProps?: AdditionalNodesProps;
|
43
43
|
}
|
44
44
|
|
45
45
|
function Tenant(props: TenantProps) {
|
@@ -125,8 +125,8 @@ function Tenant(props: TenantProps) {
|
|
125
125
|
/>
|
126
126
|
<ObjectGeneral
|
127
127
|
type={preloadedPathType || currentPathType}
|
128
|
-
|
129
|
-
|
128
|
+
additionalTenantProps={props.additionalTenantProps}
|
129
|
+
additionalNodesProps={props.additionalNodesProps}
|
130
130
|
/>
|
131
131
|
</SplitPane>
|
132
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('
|
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 =
|
77
|
-
partition_count_limit =
|
78
|
-
retention_period = Interval('
|
79
|
-
retention_storage_mb =
|
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 =
|
83
|
-
partition_write_burst_bytes =
|
84
|
-
|
85
|
-
|
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 =
|
93
|
-
|
94
|
-
|
95
|
-
ALTER CONSUMER consumer1 SET (read_from = Datetime('
|
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 =
|
99
|
-
partition_count_limit =
|
100
|
-
retention_period = Interval('
|
101
|
-
retention_storage_mb =
|
102
|
-
|
103
|
-
|
104
|
-
partition_write_speed_bytes_per_second =
|
105
|
-
partition_write_burst_bytes =
|
106
|
-
|
107
|
-
|
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
|
|