ydb-embedded-ui 3.0.1 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +2 -0
  3. package/dist/components/DateRange/DateRange.scss +11 -0
  4. package/dist/components/DateRange/DateRange.tsx +75 -0
  5. package/dist/components/DateRange/index.ts +1 -0
  6. package/dist/components/Illustration/Illustration.tsx +4 -11
  7. package/dist/components/InfoViewer/InfoViewer.scss +2 -0
  8. package/dist/containers/Storage/DiskStateProgressBar/DiskStateProgressBar.tsx +1 -1
  9. package/dist/containers/Storage/StorageNodes/StorageNodes.tsx +16 -0
  10. package/dist/containers/Tenant/Diagnostics/Diagnostics.tsx +4 -5
  11. package/dist/containers/Tenant/Diagnostics/DiagnosticsPages.ts +7 -7
  12. package/dist/containers/Tenant/Diagnostics/OverloadedShards/OverloadedShards.scss +27 -0
  13. package/dist/containers/Tenant/Diagnostics/{TopShards/TopShards.tsx → OverloadedShards/OverloadedShards.tsx} +75 -20
  14. package/dist/containers/Tenant/Diagnostics/OverloadedShards/i18n/en.json +4 -0
  15. package/dist/containers/Tenant/Diagnostics/OverloadedShards/i18n/index.ts +11 -0
  16. package/dist/containers/Tenant/Diagnostics/OverloadedShards/i18n/ru.json +4 -0
  17. package/dist/containers/Tenant/Diagnostics/OverloadedShards/index.ts +1 -0
  18. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.scss +16 -19
  19. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.tsx +202 -0
  20. package/dist/containers/Tenant/Diagnostics/TopQueries/i18n/en.json +4 -0
  21. package/dist/containers/Tenant/Diagnostics/TopQueries/i18n/index.ts +11 -0
  22. package/dist/containers/Tenant/Diagnostics/TopQueries/i18n/ru.json +4 -0
  23. package/dist/containers/Tenant/Diagnostics/TopQueries/index.ts +1 -0
  24. package/dist/containers/UserSettings/UserSettings.tsx +1 -1
  25. package/dist/services/api.d.ts +7 -0
  26. package/dist/store/reducers/describe.ts +4 -1
  27. package/dist/store/reducers/executeTopQueries.ts +170 -0
  28. package/dist/store/reducers/settings.js +1 -1
  29. package/dist/store/reducers/shardsWorkload.ts +91 -25
  30. package/dist/store/reducers/storage.js +2 -0
  31. package/dist/store/reducers/{tablets.js → tablets.ts} +30 -17
  32. package/dist/store/state-url-mapping.js +16 -0
  33. package/dist/types/api/compute.ts +52 -0
  34. package/dist/types/api/consumer.ts +257 -0
  35. package/dist/types/api/enums.ts +2 -2
  36. package/dist/types/api/nodes.ts +5 -2
  37. package/dist/types/api/pdisk.ts +3 -0
  38. package/dist/types/api/schema.ts +1 -0
  39. package/dist/types/api/storage.ts +31 -28
  40. package/dist/types/api/tablet.ts +18 -2
  41. package/dist/types/api/tenant.ts +4 -1
  42. package/dist/types/api/topic.ts +157 -0
  43. package/dist/types/api/vdisk.ts +3 -0
  44. package/dist/types/store/executeTopQueries.ts +29 -0
  45. package/dist/types/store/schema.ts +3 -3
  46. package/dist/types/store/shardsWorkload.ts +11 -2
  47. package/dist/types/store/tablets.ts +42 -0
  48. package/dist/utils/getNodesColumns.js +8 -1
  49. package/dist/utils/query.ts +1 -1
  50. package/package.json +3 -3
  51. package/dist/containers/Tenant/Diagnostics/TopQueries/TopQueries.js +0 -188
  52. package/dist/containers/Tenant/Diagnostics/TopShards/TopShards.scss +0 -7
  53. package/dist/containers/Tenant/Diagnostics/TopShards/index.ts +0 -1
  54. package/dist/store/reducers/executeTopQueries.js +0 -66
  55. package/dist/types/api/consumers.ts +0 -3
@@ -1,7 +1,20 @@
1
- import {createRequestActionTypes, createApiRequest} from '../utils';
1
+ import type {Reducer} from 'redux';
2
2
  import '../../services/api';
3
3
 
4
- const FETCH_TABLETS = createRequestActionTypes('tablets', 'FETCH_TABLETS');
4
+ import type {ETabletState, EType} from '../../types/api/tablet';
5
+ import type {
6
+ ITabletsAction,
7
+ ITabletsApiRequestParams,
8
+ ITabletsState,
9
+ } from '../../types/store/tablets';
10
+
11
+ import {createRequestActionTypes, createApiRequest} from '../utils';
12
+
13
+ export const FETCH_TABLETS = createRequestActionTypes('tablets', 'FETCH_TABLETS');
14
+
15
+ const CLEAR_WAS_LOADING_TABLETS = 'tablets/CLEAR_WAS_LOADING_TABLETS';
16
+ const SET_STATE_FILTER = 'tablets/SET_STATE_FILTER';
17
+ const SET_TYPE_FILTER = 'tablets/SET_TYPE_FILTER';
5
18
 
6
19
  const initialState = {
7
20
  loading: true,
@@ -10,13 +23,12 @@ const initialState = {
10
23
  typeFilter: [],
11
24
  };
12
25
 
13
- const tablets = function z(state = initialState, action) {
26
+ const tablets: Reducer<ITabletsState, ITabletsAction> = (state = initialState, action) => {
14
27
  switch (action.type) {
15
28
  case FETCH_TABLETS.REQUEST: {
16
29
  return {
17
30
  ...state,
18
31
  loading: true,
19
- requestTime: new Date().getTime(),
20
32
  };
21
33
  }
22
34
  case FETCH_TABLETS.SUCCESS: {
@@ -35,20 +47,20 @@ const tablets = function z(state = initialState, action) {
35
47
  loading: false,
36
48
  };
37
49
  }
38
- case 'CLEAR_WAS_LOADING_TABLETS': {
50
+ case CLEAR_WAS_LOADING_TABLETS: {
39
51
  return {
40
52
  ...state,
41
53
  wasLoaded: false,
42
54
  loading: true,
43
55
  };
44
56
  }
45
- case 'SET_STATE_FILTER': {
57
+ case SET_STATE_FILTER: {
46
58
  return {
47
59
  ...state,
48
60
  stateFilter: action.data,
49
61
  };
50
62
  }
51
- case 'SET_TYPE_FILTER': {
63
+ case SET_TYPE_FILTER: {
52
64
  return {
53
65
  ...state,
54
66
  typeFilter: action.data,
@@ -59,25 +71,26 @@ const tablets = function z(state = initialState, action) {
59
71
  }
60
72
  };
61
73
 
62
- export const setStateFilter = (stateFilter) => {
74
+ export const setStateFilter = (stateFilter: ETabletState[]) => {
63
75
  return {
64
- type: 'SET_STATE_FILTER',
76
+ type: SET_STATE_FILTER,
65
77
  data: stateFilter,
66
- };
78
+ } as const;
67
79
  };
68
80
 
69
- export const setTypeFilter = (typeFilter) => {
81
+ export const setTypeFilter = (typeFilter: EType[]) => {
70
82
  return {
71
- type: 'SET_TYPE_FILTER',
83
+ type: SET_TYPE_FILTER,
72
84
  data: typeFilter,
73
- };
85
+ } as const;
74
86
  };
75
87
 
76
- export const clearWasLoadingFlag = () => ({
77
- type: 'CLEAR_WAS_LOADING_TABLETS',
78
- });
88
+ export const clearWasLoadingFlag = () =>
89
+ ({
90
+ type: CLEAR_WAS_LOADING_TABLETS,
91
+ } as const);
79
92
 
80
- export function getTabletsInfo(data) {
93
+ export function getTabletsInfo(data: ITabletsApiRequestParams) {
81
94
  return createApiRequest({
82
95
  request: window.api.getTabletsInfo(data),
83
96
  actions: FETCH_TABLETS,
@@ -48,6 +48,22 @@ const paramSetup = {
48
48
  generalTab: {
49
49
  stateKey: 'tenant.diagnosticsTab',
50
50
  },
51
+ shardsDateFrom: {
52
+ stateKey: 'shardsWorkload.filters.from',
53
+ type: 'number',
54
+ },
55
+ shardsDateTo: {
56
+ stateKey: 'shardsWorkload.filters.to',
57
+ type: 'number',
58
+ },
59
+ topQueriesDateFrom: {
60
+ stateKey: 'executeTopQueries.filters.from',
61
+ type: 'number',
62
+ },
63
+ topQueriesDateTo: {
64
+ stateKey: 'executeTopQueries.filters.to',
65
+ type: 'number',
66
+ },
51
67
  },
52
68
  };
53
69
 
@@ -0,0 +1,52 @@
1
+ import {EFlag} from './enums';
2
+ import {TEndpoint, TLegacyNodeLocation, TPoolStats} from './nodes';
3
+ import {TMetrics} from './tenant';
4
+
5
+ // endpoint: viewer/json/compute
6
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/viewer/protos/viewer.proto
7
+
8
+ export interface TComputeInfo {
9
+ Overall: EFlag;
10
+ Tenants?: TComputeTenantInfo[];
11
+ Errors?: string[];
12
+ }
13
+
14
+ interface TComputeTenantInfo {
15
+ Overall: EFlag;
16
+ Name: string;
17
+ Nodes?: TComputeNodeInfo[];
18
+ }
19
+
20
+ interface TComputeNodeInfo {
21
+ /** uint64 */
22
+ StartTime: string;
23
+ /** uint64 */
24
+ ChangeTime: string;
25
+ SystemLocation: TLegacyNodeLocation;
26
+ /** double */
27
+ LoadAverage: number[];
28
+ NumberOfCpus: number;
29
+ Overall: EFlag;
30
+ NodeId: number;
31
+ DataCenter: string;
32
+ Rack: string;
33
+ Host: string;
34
+ Version: string;
35
+ PoolStats?: TPoolStats[];
36
+ Endpoints?: TEndpoint[];
37
+ Roles?: string[];
38
+ /** uint64 */
39
+ MemoryUsed?: string;
40
+ /** uint64 */
41
+ MemoryLimit?: string;
42
+ Metrics: TMetrics;
43
+ Tablets?: TTabletStateInfo[];
44
+ }
45
+
46
+ // Tablets in compute nodes
47
+ // Types for tabletInfo and tablets inside nodes and storage endpoints are in tablet.ts
48
+ interface TTabletStateInfo {
49
+ Type: string;
50
+ State: EFlag;
51
+ Count: number;
52
+ }
@@ -0,0 +1,257 @@
1
+ /* eslint-disable camelcase */
2
+
3
+ /**
4
+ * endpoint: /json/describe_consumer
5
+ *
6
+ * source: https://github.com/ydb-platform/ydb/blob/main/ydb/public/api/protos/ydb_topic.proto
7
+ *
8
+ * Original proto file doesn't specify optional fields, so every field is considered optional
9
+ */
10
+ export interface DescribeConsumerResult {
11
+ self?: Entry;
12
+ consumer?: Consumer;
13
+ partitions?: PartitionInfo[];
14
+ }
15
+
16
+ /** Partition info types differs for consumer and topic, although they are very similar */
17
+ export interface PartitionInfo {
18
+ /** int64 */
19
+ partition_id?: string;
20
+
21
+ /** Is partition open for write. */
22
+ active?: boolean;
23
+
24
+ /**
25
+ * int64
26
+ *
27
+ * Ids of partitions which was formed when this partition was split or merged.
28
+ */
29
+ child_partition_ids?: string[];
30
+
31
+ /**
32
+ * int64
33
+ *
34
+ * Ids of partitions from which this partition was formed by split or merge.
35
+ */
36
+ parent_partition_ids?: string[];
37
+
38
+ /** Stats for partition, filled only when include_stats in request is true. */
39
+ partition_stats?: PartitionStats;
40
+
41
+ /** Stats for consumer of this partition, filled only when include_stats in request is true. */
42
+ partition_consumer_stats?: PartitionConsumerStats;
43
+ }
44
+
45
+ interface PartitionConsumerStats {
46
+ /**
47
+ * int64
48
+ *
49
+ * Last read offset from this partition.
50
+ */
51
+ last_read_offset?: string;
52
+
53
+ /**
54
+ * int64
55
+ *
56
+ * Committed offset for this partition.
57
+ */
58
+ committed_offset?: string;
59
+
60
+ /** Reading this partition read session identifier. */
61
+ read_session_id?: string;
62
+
63
+ /**
64
+ * google.protobuf.Timestamp
65
+ *
66
+ * Timestamp of providing this partition to this session by server.
67
+ */
68
+ partition_read_session_create_time?: string;
69
+
70
+ /**
71
+ * google.protobuf.Timestamp
72
+ *
73
+ * Timestamp of last read from this partition. */
74
+ last_read_time?: string;
75
+
76
+ /**
77
+ * google.protobuf.Duration
78
+ *
79
+ * Maximum of differences between timestamp of read and write timestamp for all messages, read during last minute.
80
+ */
81
+ max_read_time_lag?: string;
82
+
83
+ /**
84
+ * google.protobuf.Duration
85
+ *
86
+ * Maximum of differences between write timestamp and create timestamp for all messages, read during last minute.
87
+ */
88
+ max_write_time_lag?: string;
89
+
90
+ /** How much bytes were read during several windows statistics from this partiton. */
91
+ bytes_read?: MultipleWindowsStat;
92
+
93
+ /** Read session name, provided by client. */
94
+ reader_name?: string;
95
+
96
+ /** Host where read session connected. */
97
+ connection_node_id?: number;
98
+ }
99
+
100
+ export interface PartitionStats {
101
+ /** Partition contains messages with offsets in range [start, end). */
102
+ partition_offsets?: OffsetsRange;
103
+
104
+ /**
105
+ * int64
106
+ *
107
+ * Approximate size of partition.
108
+ */
109
+ store_size_bytes?: string;
110
+
111
+ /**
112
+ * google.protobuf.Timestamp
113
+ *
114
+ * Timestamp of last write.
115
+ */
116
+ last_write_time?: string;
117
+
118
+ /**
119
+ * google.protobuf.Duration
120
+ *
121
+ * Maximum of differences between write timestamp and create timestamp for all messages, written during last minute.
122
+ */
123
+ max_write_time_lag?: string;
124
+
125
+ /** How much bytes were written during several windows in this partition. */
126
+ bytes_written?: MultipleWindowsStat;
127
+
128
+ /** Host where tablet for this partition works. Useful for debugging purposes. */
129
+ partition_node_id?: number;
130
+ }
131
+
132
+ interface OffsetsRange {
133
+ /** int64 */
134
+ start?: string;
135
+ /** int64 */
136
+ end?: string;
137
+ }
138
+
139
+ export interface Consumer {
140
+ /** Must have valid not empty name as a key. */
141
+ name?: string;
142
+
143
+ /** Consumer may be marked as 'important'. It means messages for this consumer will never expire due to retention. */
144
+ important?: boolean;
145
+
146
+ /**
147
+ * google.protobuf.Timestamp
148
+ *
149
+ * All messages with smaller server written_at timestamp will be skipped.
150
+ */
151
+ read_from?: string;
152
+
153
+ /**
154
+ * List of supported codecs by this consumer.
155
+ *
156
+ * supported_codecs on topic must be contained inside this list.
157
+ */
158
+ supported_codecs?: SupportedCodecs;
159
+
160
+ /** Attributes of consumer */
161
+ attributes?: Record<string, string>;
162
+
163
+ /** Filled only when requested statistics in Describe*Request. */
164
+ consumer_stats?: ConsumerStats;
165
+ }
166
+
167
+ interface ConsumerStats {
168
+ /**
169
+ * google.protobuf.Timestamp
170
+ *
171
+ * Minimal timestamp of last read from partitions.
172
+ */
173
+ min_partitions_last_read_time?: string;
174
+
175
+ /**
176
+ * google.protobuf.Duration
177
+ *
178
+ * Maximum of differences between timestamp of read and write timestamp for all messages, read during last minute.
179
+ */
180
+ max_read_time_lag?: string;
181
+
182
+ /**
183
+ * google.protobuf.Duration
184
+ *
185
+ * Maximum of differences between write timestamp and create timestamp for all messages, read during last minute.
186
+ */
187
+ max_write_time_lag?: string;
188
+
189
+ /** Bytes read stastics. */
190
+ bytes_read?: MultipleWindowsStat;
191
+ }
192
+
193
+ export interface MultipleWindowsStat {
194
+ /** int64 */
195
+ per_minute?: string;
196
+ /** int64 */
197
+ per_hour?: string;
198
+ /** int64 */
199
+ per_day?: string;
200
+ }
201
+
202
+ export interface SupportedCodecs {
203
+ /** List of supported codecs. */
204
+ codecs?: number[];
205
+ }
206
+
207
+ export interface Entry {
208
+ /** For consumer will be topic-name/consumer-name */
209
+ name?: string;
210
+
211
+ owner?: string;
212
+ type?: Type;
213
+ effective_permissions?: Permissions[];
214
+ permissions?: Permissions[];
215
+
216
+ /**
217
+ * uint64
218
+ *
219
+ * Size of entry in bytes. Currently filled for:
220
+ * - TABLE;
221
+ * - DATABASE.
222
+ *
223
+ * Empty (zero) in other cases.
224
+ */
225
+ size_bytes?: string;
226
+
227
+ /** Virtual timestamp when the object was created */
228
+ created_at?: VirtualTimestamp;
229
+ }
230
+
231
+ interface Permissions {
232
+ subject?: string;
233
+ permission_names?: string[];
234
+ }
235
+
236
+ interface VirtualTimestamp {
237
+ /** uint64 */
238
+ plan_step?: string;
239
+ /** uint64 */
240
+ tx_id?: string;
241
+ }
242
+
243
+ enum Type {
244
+ TYPE_UNSPECIFIED = 'TYPE_UNSPECIFIED',
245
+ DIRECTORY = 'DIRECTORY',
246
+ TABLE = 'TABLE',
247
+ PERS_QUEUE_GROUP = 'PERS_QUEUE_GROUP',
248
+ DATABASE = 'DATABASE',
249
+ RTMR_VOLUME = 'RTMR_VOLUME',
250
+ BLOCK_STORE_VOLUME = 'BLOCK_STORE_VOLUME',
251
+ COORDINATION_NODE = 'COORDINATION_NODE',
252
+ COLUMN_STORE = 'COLUMN_STORE ',
253
+ COLUMN_TABLE = 'COLUMN_TABLE ',
254
+ SEQUENCE = 'SEQUENCE ',
255
+ REPLICATION = 'REPLICATION ',
256
+ TOPIC = 'TOPIC ',
257
+ }
@@ -1,6 +1,6 @@
1
1
  // Shows system status
2
- // Currently is used in response types of viewer/json/nodes and viewer/json/storage
3
- // Probably will appear in /viewer/json/tenantinfo /viewer/json/cluster /viewer/json/tabletinfo /viewer/json/compute
2
+ // Currently is used in response types viewer/json/ storage, nodes, compute
3
+ // pdiskinfo, vdiskinfo, tabletinfo, tenantinfo
4
4
  export enum EFlag {
5
5
  Grey = 'Grey',
6
6
  Green = 'Green',
@@ -2,6 +2,9 @@ import {EFlag} from './enums';
2
2
  import {TPDiskStateInfo} from './pdisk';
3
3
  import {TTabletStateInfo} from './tablet';
4
4
 
5
+ // endpoint: /viewer/json/nodes
6
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/viewer/protos/viewer.proto
7
+
5
8
  export interface TNodesInfo {
6
9
  Overall: EFlag;
7
10
  Nodes?: TNodeInfo[];
@@ -64,12 +67,12 @@ export interface TPoolStats {
64
67
  Threads?: number;
65
68
  }
66
69
 
67
- interface TEndpoint {
70
+ export interface TEndpoint {
68
71
  Name?: string;
69
72
  Address?: string;
70
73
  }
71
74
 
72
- interface TLegacyNodeLocation {
75
+ export interface TLegacyNodeLocation {
73
76
  DataCenter?: number;
74
77
  Room?: number;
75
78
  Rack?: number;
@@ -1,5 +1,8 @@
1
1
  import {EFlag} from './enums';
2
2
 
3
+ // endpoint: /viewer/json/pdiskinfo
4
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/protos/node_whiteboard.proto
5
+
3
6
  export interface TPDiskStateInfo {
4
7
  PDiskId?: number;
5
8
  /** uint64 */
@@ -37,6 +37,7 @@ enum EStatus {
37
37
  StatusResourceExhausted = 'StatusResourceExhausted',
38
38
  }
39
39
 
40
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/protos/flat_scheme_op.proto
40
41
  // incomplete interface, only currently used fields are covered
41
42
  export interface TPathDescription {
42
43
  /** info about the path itself */
@@ -1,6 +1,37 @@
1
1
  import {EFlag} from './enums';
2
2
  import {TVDiskStateInfo} from './vdisk';
3
3
 
4
+ // endpoint: /viewer/json/storage
5
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/viewer/protos/viewer.proto
6
+
7
+ export interface TStorageInfo {
8
+ Overall?: EFlag;
9
+ StoragePools?: TStoragePoolInfo[];
10
+ /** uint64 */
11
+ TotalGroups?: string;
12
+ /** uint64 */
13
+ FoundGroups?: string;
14
+ }
15
+
16
+ interface TStoragePoolInfo {
17
+ Overall?: EFlag;
18
+ Name?: string;
19
+ Kind?: string;
20
+ Groups?: (TBSGroupStateInfo & THiveStorageGroupStats)[];
21
+ /** uint64 */
22
+ AcquiredUnits?: string;
23
+ AcquiredIOPS?: number;
24
+ /** uint64 */
25
+ AcquiredThroughput?: string;
26
+ /** uint64 */
27
+ AcquiredSize?: string;
28
+ MaximumIOPS?: number;
29
+ /** uint64 */
30
+ MaximumThroughput?: string;
31
+ /** uint64 */
32
+ MaximumSize?: string;
33
+ }
34
+
4
35
  export interface TBSGroupStateInfo {
5
36
  GroupID?: number;
6
37
  ErasureSpecies?: string;
@@ -43,31 +74,3 @@ interface THiveStorageGroupStats {
43
74
  /** uint64 */
44
75
  AvailableSize?: string;
45
76
  }
46
-
47
- interface TStoragePoolInfo {
48
- Overall?: EFlag;
49
- Name?: string;
50
- Kind?: string;
51
- Groups?: (TBSGroupStateInfo & THiveStorageGroupStats)[];
52
- /** uint64 */
53
- AcquiredUnits?: string;
54
- AcquiredIOPS?: number;
55
- /** uint64 */
56
- AcquiredThroughput?: string;
57
- /** uint64 */
58
- AcquiredSize?: string;
59
- MaximumIOPS?: number;
60
- /** uint64 */
61
- MaximumThroughput?: string;
62
- /** uint64 */
63
- MaximumSize?: string;
64
- }
65
-
66
- export interface TStorageInfo {
67
- Overall?: EFlag;
68
- StoragePools?: TStoragePoolInfo[];
69
- /** uint64 */
70
- TotalGroups?: string;
71
- /** uint64 */
72
- FoundGroups?: string;
73
- }
@@ -1,5 +1,21 @@
1
1
  import {EFlag} from './enums';
2
2
 
3
+ // endpoint: /viewer/json/tabletinfo
4
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/protos/sys_view.proto
5
+
6
+ export interface TEvTabletStateResponse {
7
+ TabletStateInfo?: TTabletStateInfo[];
8
+
9
+ /** uint64 */
10
+ ResponseTime?: string;
11
+ /** uint64 */
12
+ ResponseDuration?: string;
13
+ /** uint64 */
14
+ ProcessDuration?: string;
15
+
16
+ Packed5?: unknown;
17
+ }
18
+
3
19
  export interface TTabletStateInfo {
4
20
  /** uint64 */
5
21
  TabletId?: string;
@@ -37,7 +53,7 @@ interface TDomainKey {
37
53
  PathId?: string;
38
54
  }
39
55
 
40
- enum EType {
56
+ export enum EType {
41
57
  'Unknown' = 'Unknown',
42
58
  'OldSchemeShard' = 'OldSchemeShard',
43
59
  'OldDataShard' = 'OldDataShard',
@@ -79,7 +95,7 @@ enum EType {
79
95
  'TypeInvalid' = 'TypeInvalid',
80
96
  }
81
97
 
82
- enum ETabletState {
98
+ export enum ETabletState {
83
99
  'Created' = 'Created',
84
100
  'ResolveStateStorage' = 'ResolveStateStorage',
85
101
  'Candidate' = 'Candidate',
@@ -2,6 +2,9 @@ import {EFlag} from './enums';
2
2
  import {TPoolStats, TSystemStateInfo} from './nodes';
3
3
  import {TTabletStateInfo} from './tablet';
4
4
 
5
+ // endpoint: /viewer/json/tenantinfo
6
+ // source: https://github.com/ydb-platform/ydb/blob/main/ydb/core/viewer/protos/viewer.proto
7
+
5
8
  export interface TTenants {
6
9
  Tenants?: TTenant[];
7
10
  }
@@ -51,7 +54,7 @@ interface THiveDomainStatsStateCount {
51
54
  Count?: number;
52
55
  }
53
56
 
54
- interface TMetrics {
57
+ export interface TMetrics {
55
58
  /** uint64 */
56
59
  CPU?: string;
57
60
  /** uint64 */