ydb-embedded-ui 20.4.0 → 21.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +41 -0
  2. package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
  3. package/dist/components/FullNodeViewer/i18n/index.d.ts +1 -1
  4. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.d.ts +7 -0
  5. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.js +30 -0
  6. package/dist/components/Graph/BlockComponents/ConnectionBlockComponent.js.map +1 -0
  7. package/dist/components/Graph/BlockComponents/QueryBlockComponent.d.ts +5 -0
  8. package/dist/components/Graph/BlockComponents/QueryBlockComponent.js +5 -0
  9. package/dist/components/Graph/BlockComponents/QueryBlockComponent.js.map +1 -0
  10. package/dist/components/Graph/BlockComponents/ResultBlockComponent.d.ts +7 -0
  11. package/dist/components/Graph/BlockComponents/ResultBlockComponent.js +5 -0
  12. package/dist/components/Graph/BlockComponents/ResultBlockComponent.js.map +1 -0
  13. package/dist/components/Graph/BlockComponents/StageBlockComponent.d.ts +7 -0
  14. package/dist/components/Graph/BlockComponents/StageBlockComponent.js +17 -0
  15. package/dist/components/Graph/BlockComponents/StageBlockComponent.js.map +1 -0
  16. package/dist/components/Graph/FullViewportBackground.d.ts +2 -0
  17. package/dist/components/Graph/FullViewportBackground.js +67 -0
  18. package/dist/components/Graph/FullViewportBackground.js.map +1 -0
  19. package/dist/components/Graph/GraphControls.d.ts +6 -0
  20. package/dist/components/Graph/GraphControls.js +24 -0
  21. package/dist/components/Graph/GraphControls.js.map +1 -0
  22. package/dist/components/Graph/GravityGraph.d.ts +9 -0
  23. package/dist/components/Graph/GravityGraph.js +122 -0
  24. package/dist/components/Graph/GravityGraph.js.map +1 -0
  25. package/dist/components/Graph/GravityGraph.scss +131 -0
  26. package/dist/components/Graph/NonSelectableConnection.d.ts +9 -0
  27. package/dist/components/Graph/NonSelectableConnection.js +16 -0
  28. package/dist/components/Graph/NonSelectableConnection.js.map +1 -0
  29. package/dist/components/Graph/TooltipComponent.d.ts +8 -0
  30. package/dist/components/Graph/TooltipComponent.js +63 -0
  31. package/dist/components/Graph/TooltipComponent.js.map +1 -0
  32. package/dist/components/Graph/colorsConfig.d.ts +19 -0
  33. package/dist/components/Graph/colorsConfig.js +20 -0
  34. package/dist/components/Graph/colorsConfig.js.map +1 -0
  35. package/dist/components/Graph/i18n/en.json +5 -0
  36. package/dist/components/Graph/i18n/index.d.ts +2 -0
  37. package/dist/components/Graph/i18n/index.js +5 -0
  38. package/dist/components/Graph/i18n/index.js.map +1 -0
  39. package/dist/components/Graph/runTreeLayout.d.ts +12 -0
  40. package/dist/components/Graph/runTreeLayout.js +75 -0
  41. package/dist/components/Graph/runTreeLayout.js.map +1 -0
  42. package/dist/components/Graph/treeLayout.d.ts +2 -0
  43. package/dist/components/Graph/treeLayout.js +284 -0
  44. package/dist/components/Graph/treeLayout.js.map +1 -0
  45. package/dist/components/Graph/types.d.ts +52 -0
  46. package/dist/components/Graph/types.js +2 -0
  47. package/dist/components/Graph/types.js.map +1 -0
  48. package/dist/components/Graph/utils.d.ts +6 -0
  49. package/dist/components/Graph/utils.js +88 -0
  50. package/dist/components/Graph/utils.js.map +1 -0
  51. package/dist/components/InfoViewer/formatters/pqGroup.d.ts +5 -1
  52. package/dist/components/InfoViewer/formatters/pqGroup.js +24 -2
  53. package/dist/components/InfoViewer/formatters/pqGroup.js.map +1 -1
  54. package/dist/components/InfoViewer/i18n/en.json +8 -1
  55. package/dist/components/InfoViewer/i18n/index.d.ts +1 -1
  56. package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
  57. package/dist/components/VDiskInfo/i18n/index.d.ts +1 -1
  58. package/dist/containers/App/Content.js +9 -2
  59. package/dist/containers/App/Content.js.map +1 -1
  60. package/dist/containers/App/clusterRouteGuard.d.ts +5 -0
  61. package/dist/containers/App/clusterRouteGuard.js +13 -0
  62. package/dist/containers/App/clusterRouteGuard.js.map +1 -0
  63. package/dist/containers/Clusters/constants.d.ts +1 -1
  64. package/dist/containers/Nodes/i18n/index.d.ts +1 -1
  65. package/dist/containers/Operations/constants.d.ts +1 -1
  66. package/dist/containers/Tenant/Diagnostics/Overview/TableInfo/i18n/index.d.ts +1 -1
  67. package/dist/containers/Tenant/Diagnostics/Overview/TransferInfo/Credentials.d.ts +1 -1
  68. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js +17 -3
  69. package/dist/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.js.map +1 -1
  70. package/dist/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/useTenantStorageNewData.d.ts +2 -2
  71. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.js +9 -4
  72. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.js.map +1 -1
  73. package/dist/containers/Tenant/Query/QueryResult/components/Graph/Graph.scss +2 -0
  74. package/dist/containers/Tenant/TenantNavigation/useTenantNavigation.d.ts +1 -1
  75. package/dist/graphLayout.worker.d.ts +1 -0
  76. package/dist/graphLayout.worker.js +17 -0
  77. package/dist/graphLayout.worker.js.map +1 -0
  78. package/dist/lib.d.ts +1 -1
  79. package/dist/lib.js.map +1 -1
  80. package/dist/store/reducers/query/parsers/preparePlanData.js.map +1 -1
  81. package/dist/store/reducers/query/types.d.ts +38 -1
  82. package/dist/store/reducers/settings/utils.d.ts +2 -2
  83. package/dist/types/api/schema/persQueueGroup.d.ts +16 -0
  84. package/dist/types/api/schema/persQueueGroup.js +7 -0
  85. package/dist/types/api/schema/persQueueGroup.js.map +1 -1
  86. package/dist/uiFactory/types.d.ts +3 -0
  87. package/dist/utils/disks/helpers.d.ts +2 -2
  88. package/dist/utils/hooks/useChangedQuerySettings.d.ts +2 -2
  89. package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -2
  90. package/dist/utils/hooks/useQueryExecutionSettings.d.ts +2 -2
  91. package/dist/utils/prepareQueryExplain.d.ts +1 -2
  92. package/dist/utils/prepareQueryExplain.js +10 -2
  93. package/dist/utils/prepareQueryExplain.js.map +1 -1
  94. package/dist/utils/query.d.ts +1 -1
  95. package/package.json +3 -3
  96. package/src/components/Graph/BlockComponents/ConnectionBlockComponent.tsx +49 -0
  97. package/src/components/Graph/BlockComponents/QueryBlockComponent.tsx +7 -0
  98. package/src/components/Graph/BlockComponents/ResultBlockComponent.tsx +10 -0
  99. package/src/components/Graph/BlockComponents/StageBlockComponent.tsx +35 -0
  100. package/src/components/Graph/FullViewportBackground.ts +122 -0
  101. package/src/components/Graph/GraphControls.tsx +49 -0
  102. package/src/components/Graph/GravityGraph.scss +131 -0
  103. package/src/components/Graph/GravityGraph.tsx +174 -0
  104. package/src/components/Graph/NonSelectableConnection.tsx +14 -0
  105. package/src/components/Graph/TooltipComponent.tsx +114 -0
  106. package/src/components/Graph/colorsConfig.ts +21 -0
  107. package/src/components/Graph/i18n/en.json +5 -0
  108. package/src/components/Graph/i18n/index.ts +7 -0
  109. package/src/components/Graph/runTreeLayout.ts +105 -0
  110. package/src/components/Graph/treeLayout.ts +378 -0
  111. package/src/components/Graph/types.ts +56 -0
  112. package/src/components/Graph/utils.ts +112 -0
  113. package/src/components/InfoViewer/formatters/pqGroup.ts +30 -2
  114. package/src/components/InfoViewer/i18n/en.json +8 -1
  115. package/src/containers/App/Content.tsx +9 -1
  116. package/src/containers/App/clusterRouteGuard.ts +24 -0
  117. package/src/containers/Tenant/Diagnostics/Overview/utils/prepareTopicSchemaInfo.ts +23 -2
  118. package/src/containers/Tenant/Query/QueryResult/components/Graph/Graph.scss +2 -0
  119. package/src/containers/Tenant/Query/QueryResult/components/Graph/Graph.tsx +13 -7
  120. package/src/graphLayout.worker.ts +21 -0
  121. package/src/lib.ts +1 -0
  122. package/src/store/reducers/query/parsers/preparePlanData.ts +1 -3
  123. package/src/store/reducers/query/types.ts +42 -2
  124. package/src/types/api/schema/persQueueGroup.ts +19 -0
  125. package/src/uiFactory/types.ts +4 -0
  126. package/src/utils/prepareQueryExplain.ts +13 -5
  127. package/dist/components/Graph/Graph.d.ts +0 -12
  128. package/dist/components/Graph/Graph.js +0 -44
  129. package/dist/components/Graph/Graph.js.map +0 -1
  130. package/dist/components/Graph/colors.d.ts +0 -10
  131. package/dist/components/Graph/colors.js +0 -53
  132. package/dist/components/Graph/colors.js.map +0 -1
  133. package/src/components/Graph/Graph.tsx +0 -70
  134. package/src/components/Graph/colors.ts +0 -75
@@ -54,6 +54,22 @@ export interface TPQTabletConfig {
54
54
  PartitionKeySchema?: TKeyComponentSchema[];
55
55
  Partitions?: TPartition[];
56
56
  MeteringMode?: EMeteringMode;
57
+ PartitionStrategy?: TPQPartitionStrategy;
58
+ }
59
+ export declare enum EPQPartitionStrategyType {
60
+ DISABLED = "DISABLED",
61
+ CAN_SPLIT = "CAN_SPLIT",
62
+ CAN_SPLIT_AND_MERGE = "CAN_SPLIT_AND_MERGE",
63
+ PAUSED = "PAUSED"
64
+ }
65
+ /** Strategy for automatically changing the number of topic partitions depending on the load */
66
+ export interface TPQPartitionStrategy {
67
+ MinPartitionCount?: number;
68
+ MaxPartitionCount?: number;
69
+ ScaleThresholdSeconds?: number;
70
+ ScaleUpPartitionWriteSpeedThresholdPercent?: number;
71
+ ScaleDownPartitionWriteSpeedThresholdPercent?: number;
72
+ PartitionStrategyType?: EPQPartitionStrategyType;
57
73
  }
58
74
  export interface TPQPartitionConfig {
59
75
  MaxCountInPartition?: number;
@@ -1,3 +1,10 @@
1
+ export var EPQPartitionStrategyType;
2
+ (function (EPQPartitionStrategyType) {
3
+ EPQPartitionStrategyType["DISABLED"] = "DISABLED";
4
+ EPQPartitionStrategyType["CAN_SPLIT"] = "CAN_SPLIT";
5
+ EPQPartitionStrategyType["CAN_SPLIT_AND_MERGE"] = "CAN_SPLIT_AND_MERGE";
6
+ EPQPartitionStrategyType["PAUSED"] = "PAUSED";
7
+ })(EPQPartitionStrategyType || (EPQPartitionStrategyType = {}));
1
8
  export var EMeteringMode;
2
9
  (function (EMeteringMode) {
3
10
  EMeteringMode["METERING_MODE_RESERVED_CAPACITY"] = "METERING_MODE_RESERVED_CAPACITY";
@@ -1 +1 @@
1
- {"version":3,"file":"persQueueGroup.js","sourceRoot":"","sources":["../../../../src/types/api/schema/persQueueGroup.ts"],"names":[],"mappings":"AA2LA,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,oFAAmE,CAAA;IACnE,4EAA2D,CAAA;AAC/D,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"}
1
+ {"version":3,"file":"persQueueGroup.js","sourceRoot":"","sources":["../../../../src/types/api/schema/persQueueGroup.ts"],"names":[],"mappings":"AAyEA,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAChC,iDAAqB,CAAA;IACrB,mDAAuB,CAAA;IACvB,uEAA2C,CAAA;IAC3C,6CAAiB,CAAA;AACrB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAgID,MAAM,CAAN,IAAY,aAGX;AAHD,WAAY,aAAa;IACrB,oFAAmE,CAAA;IACnE,4EAA2D,CAAA;AAC/D,CAAC,EAHW,aAAa,KAAb,aAAa,QAGxB"}
@@ -13,6 +13,7 @@ import type { TUserToken } from '../types/api/whoami';
13
13
  import type { GetLogsLink } from '../utils/logs';
14
14
  import type { GetMonitoringClusterLink, GetMonitoringLink } from '../utils/monitoring';
15
15
  export type IllustrationComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>;
16
+ export type CreateGraphLayoutWorker = () => Worker;
16
17
  export type IllustrationName = 'InternalError' | 'AccessDenied' | 'Unauthenticated' | 'NoSearchResults' | 'SuccessOperation';
17
18
  export interface UIFactory<H extends string = CommonIssueCategory, T extends string = string> {
18
19
  onCreateDB?: HandleCreateDB;
@@ -34,6 +35,8 @@ export interface UIFactory<H extends string = CommonIssueCategory, T extends str
34
35
  renderNodeTooltipActions?: RenderNodeTooltipActions;
35
36
  clusterOrDatabaseAccessError?: Partial<EmptyStateProps>;
36
37
  enableMultiTabQueryEditor?: boolean;
38
+ /** Creates a fresh computation-graph layout worker for each layout run. */
39
+ createGraphLayoutWorker?: CreateGraphLayoutWorker;
37
40
  healthcheck: {
38
41
  issueCategories: ReadonlyArray<H>;
39
42
  isIssueTypeOfCategory: (type: string, category: H) => boolean;
@@ -4,7 +4,7 @@ import { EFlag } from '../../types/api/enums';
4
4
  import type { TVDiskStateInfo, TVSlotId } from '../../types/api/vdisk';
5
5
  import type { DiskColor, PreparedVDisk } from './types';
6
6
  export declare function isFullVDiskData(disk: PreparedVDisk | TVDiskStateInfo | TVSlotId): disk is PreparedVDisk | TVDiskStateInfo;
7
- export declare const getSpaceSeverity: (allocatedPercent?: number) => 21 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 22 | 11 | 16 | 17 | 18 | 19 | 20 | import("./types").DataSeverity;
7
+ export declare const getSpaceSeverity: (allocatedPercent?: number) => 9 | 13 | 14 | 15 | 8 | 16 | 12 | 20 | 22 | 6 | 7 | 10 | 11 | 17 | 18 | 19 | 21 | import("./types").DataSeverity;
8
8
  /**
9
9
  * Convert data severity (0-5) to EFlag color.
10
10
  * Used for PreparedVDisk.Severity and PreparedPDisk.Severity in Default mode.
@@ -21,7 +21,7 @@ export declare function getDataSeverityColor(severity: number | undefined): EFla
21
21
  * @returns Disk color for visualization
22
22
  */
23
23
  export declare function getDisplaySeverityColor(severity: number | undefined): DiskColor;
24
- export declare function getColorSeverity(color?: EFlag): 0 | 1 | 2 | 5 | 4 | 21 | 3 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 22 | 11 | 16 | 17 | 18 | 19 | 20;
24
+ export declare function getColorSeverity(color?: EFlag): 0 | 1 | 3 | 4 | 9 | 13 | 14 | 15 | 8 | 16 | 2 | 12 | 20 | 22 | 5 | 6 | 7 | 10 | 11 | 17 | 18 | 19 | 21;
25
25
  export declare function getPDiskId({ nodeId, pDiskId, }: {
26
26
  nodeId?: string | number | null;
27
27
  pDiskId?: string | number | null;
@@ -2,8 +2,8 @@ export declare const useChangedQuerySettings: () => {
2
2
  isBannerShown: boolean;
3
3
  closeBanner: () => void;
4
4
  resetBanner: () => void;
5
- changedCurrentSettings: ("timeout" | "statisticsMode" | "queryMode" | "transactionMode" | "tracingLevel" | "limitRows" | "outputChunkMaxSize" | "pragmas" | "resourcePool")[];
5
+ changedCurrentSettings: ("queryMode" | "transactionMode" | "statisticsMode" | "tracingLevel" | "timeout" | "limitRows" | "outputChunkMaxSize" | "pragmas" | "resourcePool")[];
6
6
  changedCurrentSettingsDescriptions: Record<string, string>;
7
- changedLastExecutionSettings: ("timeout" | "statisticsMode" | "queryMode" | "transactionMode" | "tracingLevel" | "limitRows" | "outputChunkMaxSize" | "pragmas" | "resourcePool")[];
7
+ changedLastExecutionSettings: ("queryMode" | "transactionMode" | "statisticsMode" | "tracingLevel" | "timeout" | "limitRows" | "outputChunkMaxSize" | "pragmas" | "resourcePool")[];
8
8
  changedLastExecutionSettingsDescriptions: Record<string, string>;
9
9
  };
@@ -1,5 +1,5 @@
1
1
  export declare const useLastQueryExecutionSettings: () => readonly [{
2
- queryMode: "query" | "data" | "script" | "scan";
2
+ queryMode: "scan" | "script" | "data" | "query";
3
3
  transactionMode: "serializable-read-write" | "stale-read-only" | "online-read-only" | "snapshot-read-only" | "snapshot-read-write" | "implicit";
4
4
  statisticsMode: "none" | "basic" | "full" | "profile";
5
5
  tracingLevel: "basic" | "off" | "toplevel" | "detailed" | "diagnostic" | "trace";
@@ -9,7 +9,7 @@ export declare const useLastQueryExecutionSettings: () => readonly [{
9
9
  limitRows?: number | undefined;
10
10
  outputChunkMaxSize?: number | undefined;
11
11
  } | undefined, (value: {
12
- queryMode: "query" | "data" | "script" | "scan";
12
+ queryMode: "scan" | "script" | "data" | "query";
13
13
  transactionMode: "serializable-read-write" | "stale-read-only" | "online-read-only" | "snapshot-read-only" | "snapshot-read-write" | "implicit";
14
14
  statisticsMode: "none" | "basic" | "full" | "profile";
15
15
  tracingLevel: "basic" | "off" | "toplevel" | "detailed" | "diagnostic" | "trace";
@@ -1,5 +1,5 @@
1
1
  export declare const useQueryExecutionSettings: () => readonly [{
2
- queryMode: "query" | "data" | "script" | "scan";
2
+ queryMode: "scan" | "script" | "data" | "query";
3
3
  transactionMode: "serializable-read-write" | "stale-read-only" | "online-read-only" | "snapshot-read-only" | "snapshot-read-write" | "implicit";
4
4
  statisticsMode: "none" | "basic" | "full" | "profile";
5
5
  tracingLevel: "basic" | "off" | "toplevel" | "detailed" | "diagnostic" | "trace";
@@ -9,7 +9,7 @@ export declare const useQueryExecutionSettings: () => readonly [{
9
9
  limitRows?: number | undefined;
10
10
  outputChunkMaxSize?: number | undefined;
11
11
  }, (value: {
12
- queryMode: "query" | "data" | "script" | "scan";
12
+ queryMode: "scan" | "script" | "data" | "query";
13
13
  transactionMode: "serializable-read-write" | "stale-read-only" | "online-read-only" | "snapshot-read-only" | "snapshot-read-write" | "implicit";
14
14
  statisticsMode: "none" | "basic" | "full" | "profile";
15
15
  tracingLevel: "basic" | "off" | "toplevel" | "detailed" | "diagnostic" | "trace";
@@ -1,5 +1,4 @@
1
- import type { ExplainPlanNodeData, GraphNode, Link } from '@gravity-ui/paranoid';
2
- import type { SimplifiedPlanItem } from '../store/reducers/query/types';
1
+ import type { ExplainPlanNodeData, GraphNode, Link, SimplifiedPlanItem } from '../store/reducers/query/types';
3
2
  import type { PlanNode, SimplifiedNode } from '../types/api/query';
4
3
  export declare function preparePlan(plan: PlanNode): {
5
4
  nodes: GraphNode<ExplainPlanNodeData>[];
@@ -67,11 +67,18 @@ function getNodeType(plan) {
67
67
  export function preparePlan(plan) {
68
68
  const nodes = [];
69
69
  const links = [];
70
+ let generatedNodeId = 0;
71
+ const getGraphNodeId = (node) => {
72
+ return node.PlanNodeId === undefined
73
+ ? `generated-plan-node:${generatedNodeId++}`
74
+ : String(node.PlanNodeId);
75
+ };
70
76
  function parsePlans(plans = [], from) {
71
77
  plans.forEach((p) => {
72
78
  var _a;
79
+ const nodeId = getGraphNodeId(p);
73
80
  const node = {
74
- name: String(p.PlanNodeId),
81
+ name: nodeId,
75
82
  data: {
76
83
  id: p.PlanNodeId,
77
84
  type: getNodeType(p),
@@ -87,8 +94,9 @@ export function preparePlan(plan) {
87
94
  });
88
95
  }
89
96
  const rootPlan = plan;
97
+ const rootNodeId = getGraphNodeId(rootPlan);
90
98
  const rootNode = {
91
- name: String(rootPlan.PlanNodeId),
99
+ name: rootNodeId,
92
100
  data: {
93
101
  id: rootPlan.PlanNodeId,
94
102
  type: getNodeType(rootPlan),
@@ -1 +1 @@
1
- {"version":3,"file":"prepareQueryExplain.js","sourceRoot":"","sources":["../../src/utils/prepareQueryExplain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepareQueryExplain.js","sourceRoot":"","sources":["../../src/utils/prepareQueryExplain.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,7 @@ export declare const QUERY_MODES_TITLES: Record<QueryMode, string>;
43
43
  export declare const QUERY_SYNTAX: {
44
44
  readonly yql: "yql_v1";
45
45
  };
46
- export declare const getColumnType: (type: string) => "number" | "string" | "boolean" | "date" | "binary-string" | undefined;
46
+ export declare const getColumnType: (type: string) => "string" | "number" | "boolean" | "date" | "binary-string" | undefined;
47
47
  /** parse response result from ArrayRow to KeyValueRow and format values */
48
48
  export declare const parseResult: (rows: ArrayRow[], columns: ColumnType[]) => KeyValueRow[];
49
49
  type UnsupportedQueryResponseFormat = Array<unknown> | string | null | undefined | {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ydb-embedded-ui",
3
- "version": "20.4.0",
3
+ "version": "21.0.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -22,11 +22,11 @@
22
22
  "@gravity-ui/components": "^4.18.0",
23
23
  "@gravity-ui/date-components": "^3.2.3",
24
24
  "@gravity-ui/date-utils": "^2.5.6",
25
+ "@gravity-ui/graph": "^1.11.3",
25
26
  "@gravity-ui/i18n": "^1.7.0",
26
27
  "@gravity-ui/icons": "^2.21.0",
27
28
  "@gravity-ui/illustrations": "^2.1.0",
28
29
  "@gravity-ui/navigation": "^4.0.18",
29
- "@gravity-ui/paranoid": "^3.0.0",
30
30
  "@gravity-ui/react-data-table": "^2.2.1",
31
31
  "@gravity-ui/react-unipika": "^0.5.2",
32
32
  "@gravity-ui/table": "^1.10.1",
@@ -50,7 +50,7 @@
50
50
  "numeral": "^2.0.6",
51
51
  "path-to-regexp": "^3.3.0",
52
52
  "qrcode": "^1.5.4",
53
- "qs": "^6.15.2",
53
+ "qs": "^6.16.0",
54
54
  "react-error-boundary": "^4.1.2",
55
55
  "react-helmet-async": "^2.0.5",
56
56
  "react-hook-form": "^7.55.0",
@@ -0,0 +1,49 @@
1
+ import {
2
+ ArrowsExpandHorizontal,
3
+ DatabaseFill,
4
+ GripHorizontal,
5
+ MapPin,
6
+ Shuffle,
7
+ } from '@gravity-ui/icons';
8
+ import {Icon} from '@gravity-ui/uikit';
9
+ import type {IconData} from '@gravity-ui/uikit';
10
+
11
+ import {TooltipComponent} from '../TooltipComponent';
12
+ import type {ExtendedTBlock} from '../types';
13
+
14
+ type Props = {
15
+ block: ExtendedTBlock;
16
+ className: string;
17
+ };
18
+
19
+ const getIcon = (name: string): IconData | undefined => {
20
+ switch (name) {
21
+ case 'Merge':
22
+ return DatabaseFill;
23
+ case 'UnionAll':
24
+ return GripHorizontal;
25
+ case 'HashShuffle':
26
+ return Shuffle;
27
+ case 'Map':
28
+ return MapPin;
29
+ case 'Broadcast':
30
+ return ArrowsExpandHorizontal;
31
+ default:
32
+ return undefined;
33
+ }
34
+ };
35
+
36
+ export const ConnectionBlockComponent = ({className, block}: Props) => {
37
+ const icon = getIcon(block.name);
38
+ const content = (
39
+ <div className={className}>
40
+ {icon && <Icon data={icon} />} {block.name}
41
+ </div>
42
+ );
43
+
44
+ if (!block.stats?.length) {
45
+ return content;
46
+ }
47
+
48
+ return <TooltipComponent block={block}>{content}</TooltipComponent>;
49
+ };
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ className: string;
3
+ };
4
+
5
+ export const QueryBlockComponent = ({className}: Props) => {
6
+ return <div className={className} />;
7
+ };
@@ -0,0 +1,10 @@
1
+ import type {TBlock} from '@gravity-ui/graph';
2
+
3
+ type Props = {
4
+ block: TBlock;
5
+ className: string;
6
+ };
7
+
8
+ export const ResultBlockComponent = ({className, block}: Props) => {
9
+ return <div className={className}>{block.name}</div>;
10
+ };
@@ -0,0 +1,35 @@
1
+ import {Text} from '@gravity-ui/uikit';
2
+
3
+ import {cn} from '../../../utils/cn';
4
+ import {TooltipComponent} from '../TooltipComponent';
5
+ import i18n from '../i18n';
6
+ import type {ExtendedTBlock} from '../types';
7
+
8
+ const b = cn('ydb-gravity-graph');
9
+
10
+ type Props = {
11
+ block: ExtendedTBlock;
12
+ className: string;
13
+ };
14
+
15
+ export const StageBlockComponent = ({className, block}: Props) => {
16
+ const content = (
17
+ <div className={className}>
18
+ {block.operators?.length
19
+ ? block.operators.map((item) => <div key={item}>{item}</div>)
20
+ : block.name}
21
+ {block.tables?.map((table, index) => (
22
+ <div key={`${table}-${index}`} className={b('stage-table-row')} title={table}>
23
+ {index === 0 ? <Text color="secondary">{i18n('label_tables')}: </Text> : null}
24
+ {table}
25
+ </div>
26
+ ))}
27
+ </div>
28
+ );
29
+
30
+ if (!block.stats?.length) {
31
+ return content;
32
+ }
33
+
34
+ return <TooltipComponent block={block}>{content}</TooltipComponent>;
35
+ };
@@ -0,0 +1,122 @@
1
+ import {Component} from '@gravity-ui/graph';
2
+
3
+ interface FullViewportBackgroundContext extends Record<string, unknown> {
4
+ camera: {
5
+ getCameraState(): {
6
+ relativeX: number;
7
+ relativeY: number;
8
+ relativeWidth: number;
9
+ relativeHeight: number;
10
+ scale: number;
11
+ };
12
+ };
13
+ colors: {
14
+ canvas: {
15
+ dots: string;
16
+ layerBackground: string;
17
+ };
18
+ };
19
+ constants: {
20
+ block: {
21
+ SCALES: number[];
22
+ };
23
+ system: {
24
+ GRID_SIZE: number;
25
+ };
26
+ };
27
+ ctx: CanvasRenderingContext2D;
28
+ }
29
+
30
+ const VIEWPORT_PADDING = 10;
31
+ const DOT_SIZE = 2;
32
+ const LARGE_DOT_MULTIPLIER = 3;
33
+ const PATTERN_GRID_SIZE = 5;
34
+
35
+ class FullViewportBackgroundComponent extends Component {
36
+ private patterns?: {normal: CanvasPattern; simple: CanvasPattern};
37
+ private patternsColor?: string;
38
+ private patternsGridSize?: number;
39
+
40
+ protected render() {
41
+ const {camera, colors, constants, ctx} = this.context as FullViewportBackgroundContext;
42
+ const cameraState = camera.getCameraState();
43
+ const x = -cameraState.relativeX - VIEWPORT_PADDING;
44
+ const y = -cameraState.relativeY - VIEWPORT_PADDING;
45
+ const width = cameraState.relativeWidth + VIEWPORT_PADDING * 2;
46
+ const height = cameraState.relativeHeight + VIEWPORT_PADDING * 2;
47
+
48
+ ctx.fillStyle = colors.canvas.layerBackground;
49
+ ctx.fillRect(x, y, width, height);
50
+
51
+ if (cameraState.scale < constants.block.SCALES[0]) {
52
+ return;
53
+ }
54
+
55
+ this.preparePatterns(colors.canvas.dots, constants.system.GRID_SIZE);
56
+ if (!this.patterns) {
57
+ return;
58
+ }
59
+
60
+ ctx.fillStyle =
61
+ cameraState.scale > constants.block.SCALES[2]
62
+ ? this.patterns.normal
63
+ : this.patterns.simple;
64
+ ctx.fillRect(x, y, width, height);
65
+ }
66
+
67
+ private preparePatterns(color: string, gridSize: number) {
68
+ if (this.patterns && this.patternsColor === color && this.patternsGridSize === gridSize) {
69
+ return;
70
+ }
71
+
72
+ const normal = this.createPattern(color, gridSize, false);
73
+ const simple = this.createPattern(color, gridSize, true);
74
+
75
+ if (normal && simple) {
76
+ this.patterns = {normal, simple};
77
+ this.patternsColor = color;
78
+ this.patternsGridSize = gridSize;
79
+ }
80
+ }
81
+
82
+ private createPattern(color: string, gridSize: number, simple: boolean) {
83
+ const {ctx} = this.context as FullViewportBackgroundContext;
84
+ const patternCanvas = document.createElement('canvas');
85
+ const patternSize = PATTERN_GRID_SIZE * gridSize;
86
+ patternCanvas.width = patternSize;
87
+ patternCanvas.height = patternSize;
88
+
89
+ const patternContext = patternCanvas.getContext('2d');
90
+ if (!patternContext) {
91
+ return null;
92
+ }
93
+
94
+ patternContext.fillStyle = color;
95
+
96
+ for (let row = -1; row <= PATTERN_GRID_SIZE; row += 1) {
97
+ for (let column = -1; column <= PATTERN_GRID_SIZE; column += 1) {
98
+ if (row % PATTERN_GRID_SIZE === 0 && column % PATTERN_GRID_SIZE === 0) {
99
+ const largeDotSize = DOT_SIZE * LARGE_DOT_MULTIPLIER;
100
+ patternContext.fillRect(
101
+ row * gridSize - largeDotSize / 2,
102
+ column * gridSize - largeDotSize / 2,
103
+ largeDotSize,
104
+ largeDotSize,
105
+ );
106
+ } else if (!simple) {
107
+ patternContext.fillRect(
108
+ row * gridSize - DOT_SIZE / 2,
109
+ column * gridSize - DOT_SIZE / 2,
110
+ DOT_SIZE,
111
+ DOT_SIZE,
112
+ );
113
+ }
114
+ }
115
+ }
116
+
117
+ return ctx.createPattern(patternCanvas, 'repeat');
118
+ }
119
+ }
120
+
121
+ export const FullViewportBackground =
122
+ FullViewportBackgroundComponent as unknown as typeof Component;
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+
3
+ import type {Graph} from '@gravity-ui/graph';
4
+ import {Button, Icon} from '@gravity-ui/uikit';
5
+
6
+ import {cn} from '../../utils/cn';
7
+
8
+ import i18n from './i18n';
9
+
10
+ import MagnifierMinusIcon from '@gravity-ui/icons/svgs/magnifier-minus.svg';
11
+ import MagnifierPlusIcon from '@gravity-ui/icons/svgs/magnifier-plus.svg';
12
+
13
+ const b = cn('ydb-gravity-graph');
14
+
15
+ const ZOOM_STEP = 1.25;
16
+
17
+ interface Props {
18
+ graph: Graph;
19
+ }
20
+
21
+ export const GraphControls = ({graph}: Props) => {
22
+ const onZoomInClick = React.useCallback(() => {
23
+ const cameraScale = graph.cameraService.getCameraScale();
24
+ graph.zoom({scale: cameraScale * ZOOM_STEP});
25
+ }, [graph]);
26
+
27
+ const onZoomOutClick = React.useCallback(() => {
28
+ const cameraScale = graph.cameraService.getCameraScale();
29
+ graph.zoom({scale: cameraScale / ZOOM_STEP});
30
+ }, [graph]);
31
+
32
+ const onResetZoomClick = React.useCallback(() => {
33
+ graph.zoom({scale: 1});
34
+ }, [graph]);
35
+
36
+ return (
37
+ <div className={b('zoom-controls')}>
38
+ <Button view="raised" onClick={onZoomInClick} aria-label={i18n('action_zoom-in')}>
39
+ <Icon data={MagnifierPlusIcon} size={16} />
40
+ </Button>
41
+ <Button view="raised" onClick={onZoomOutClick} aria-label={i18n('action_zoom-out')}>
42
+ <Icon data={MagnifierMinusIcon} size={16} />
43
+ </Button>
44
+ <Button view="raised" onClick={onResetZoomClick}>
45
+ 1:1
46
+ </Button>
47
+ </div>
48
+ );
49
+ };
@@ -0,0 +1,131 @@
1
+ .ydb-gravity-graph {
2
+ &__block {
3
+ cursor: auto;
4
+
5
+ border: none;
6
+ background: none;
7
+ }
8
+
9
+ &__block-content {
10
+ width: 100%;
11
+ padding: 8px 12px;
12
+
13
+ font-family: var(--g-font-family);
14
+ font-size: var(--g-text-body-short-font-size);
15
+ line-height: var(--g-text-body-short-line-height);
16
+
17
+ border: 1px solid var(--g-color-line-generic);
18
+ background: var(--g-color-base-float);
19
+ box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.3);
20
+
21
+ &[aria-haspopup='dialog'] {
22
+ cursor: pointer;
23
+ }
24
+ }
25
+
26
+ &__block-id {
27
+ position: absolute;
28
+ top: 4px;
29
+ right: 4px;
30
+
31
+ font-size: 10px;
32
+ line-height: 1;
33
+
34
+ color: var(--g-color-text-secondary);
35
+ }
36
+
37
+ &__block-content.query {
38
+ height: 100%;
39
+
40
+ border-radius: 50%;
41
+ }
42
+
43
+ &__block-content.result {
44
+ display: flex;
45
+ justify-content: center;
46
+ align-items: center;
47
+ }
48
+
49
+ &__block-content.stage {
50
+ border-radius: 6px;
51
+ }
52
+
53
+ &__stage-table-row {
54
+ overflow: hidden;
55
+
56
+ white-space: nowrap;
57
+ text-overflow: ellipsis;
58
+ }
59
+
60
+ &__block-content.connection {
61
+ display: flex;
62
+ align-items: center;
63
+ gap: 4px;
64
+
65
+ color: var(--g-color-text-info-heavy);
66
+ border: 1px solid var(--g-color-line-info);
67
+ border-radius: 6px;
68
+ background: var(--g-color-base-info-light);
69
+ box-shadow: none;
70
+ }
71
+
72
+ &__tooltip-content {
73
+ overflow: auto;
74
+
75
+ width: 300px;
76
+ max-height: 90vh;
77
+ padding: 0 8px 8px;
78
+
79
+ font-family: var(--g-font-family);
80
+ font-size: var(--g-text-body-short-font-size);
81
+ line-height: var(--g-text-body-short-line-height);
82
+ }
83
+
84
+ &__tooltip-tabs {
85
+ margin-bottom: 8px;
86
+ }
87
+
88
+ &__tooltip-stat-row {
89
+ display: grid;
90
+ grid-template-columns: 100px auto;
91
+ gap: 8px;
92
+
93
+ margin: 4px 0 0;
94
+
95
+ span {
96
+ overflow: hidden;
97
+
98
+ text-overflow: ellipsis;
99
+ }
100
+ span:nth-child(1) {
101
+ color: var(--g-color-text-secondary);
102
+ }
103
+ span:nth-child(2) {
104
+ word-wrap: break-word;
105
+ }
106
+ }
107
+
108
+ &__tooltip-stat-group {
109
+ margin-top: 8px;
110
+ }
111
+
112
+ &__tooltip-stat-group + &__tooltip-stat-group {
113
+ padding-top: 8px;
114
+
115
+ border-top: 1px dotted var(--g-color-line-generic);
116
+ }
117
+
118
+ &__tooltip-stat-group-name {
119
+ font-weight: bold;
120
+ }
121
+
122
+ &__zoom-controls {
123
+ position: absolute;
124
+ z-index: 999;
125
+ top: 8px;
126
+ right: 50px;
127
+
128
+ display: flex;
129
+ gap: 2px;
130
+ }
131
+ }