You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by le...@apache.org on 2022/11/01 10:26:05 UTC
[inlong] branch master updated: [INLONG-6330][Dashboard] Other sinks support asynchronous loading of plugins (#6355)
This is an automated email from the ASF dual-hosted git repository.
leezng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new 0dec6e278 [INLONG-6330][Dashboard] Other sinks support asynchronous loading of plugins (#6355)
0dec6e278 is described below
commit 0dec6e2785be4be873e544b5ebf43e3dd6787057
Author: Lizhen <88...@users.noreply.github.com>
AuthorDate: Tue Nov 1 18:25:59 2022 +0800
[INLONG-6330][Dashboard] Other sinks support asynchronous loading of plugins (#6355)
---
.../src/metas/sinks/defaults/Clickhouse.ts | 2 +-
.../src/metas/sinks/{es.tsx => defaults/Es.ts} | 132 ++++++++++++---------
.../sinks/{greenplum.tsx => defaults/Greenplum.ts} | 81 +++++++------
.../metas/sinks/{hbase.tsx => defaults/HBase.ts} | 120 ++++++++++---------
.../sinks/{iceberg.tsx => defaults/Iceberg.ts} | 108 ++++++++++-------
inlong-dashboard/src/metas/sinks/defaults/Kafka.ts | 2 +-
.../metas/sinks/{mysql.tsx => defaults/Mysql.ts} | 78 ++++++------
.../metas/sinks/{oracle.tsx => defaults/Oracle.ts} | 78 ++++++------
.../{postgreSql.tsx => defaults/PostgreSql.ts} | 89 ++++++++------
.../sinks/{sqlServer.tsx => defaults/SQLServer.ts} | 110 +++++++++--------
.../TDSQLPostgreSql.ts} | 88 ++++++++------
inlong-dashboard/src/metas/sinks/defaults/index.ts | 45 +++++++
12 files changed, 552 insertions(+), 381 deletions(-)
diff --git a/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts b/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts
index 277c27399..35994561e 100644
--- a/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts
+++ b/inlong-dashboard/src/metas/sinks/defaults/Clickhouse.ts
@@ -40,7 +40,7 @@ const clickhouseTargetTypes = [
value: item,
}));
-export default class HiveSink extends SinkInfo implements DataWithBackend {
+export default class ClickhouseSink extends SinkInfo implements DataWithBackend {
@FormField({
type: 'input',
rules: [{ required: true }],
diff --git a/inlong-dashboard/src/metas/sinks/es.tsx b/inlong-dashboard/src/metas/sinks/defaults/Es.ts
similarity index 81%
rename from inlong-dashboard/src/metas/sinks/es.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/Es.ts
index bb104a2d4..4367ac511 100644
--- a/inlong-dashboard/src/metas/sinks/es.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/Es.ts
@@ -18,9 +18,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { sourceFields } from '../common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const esTypes = [
'text',
@@ -40,21 +43,20 @@ const esTypes = [
value: item,
}));
-export const es: FieldItemType[] = [
- {
- name: 'indexName',
+export default class EsSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Es.IndexName'),
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
- name: 'enableCreateResource',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.IndexName')
+ indexName: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -71,93 +73,109 @@ export const es: FieldItemType[] = [
},
],
}),
- },
- {
- name: 'username',
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
- name: 'password',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- type: 'input',
- label: i18n.t('meta.Sinks.Es.Host'),
- name: 'host',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
+ type: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'port',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.Host')
+ host: string;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.Es.Port'),
initialValue: 9200,
+ rules: [{ required: true }],
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
max: 65535,
+ disabled: [110, 130].includes(values?.status),
}),
- rules: [{ required: true }],
- },
- {
- name: 'flushInterval',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.Port')
+ port: number;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.Es.FlushInterval'),
initialValue: 1,
+ rules: [{ required: true }],
+ suffix: i18n.t('meta.Sinks.Es.FlushIntervalUnit'),
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
+ disabled: [110, 130].includes(values?.status),
}),
- rules: [{ required: true }],
- suffix: i18n.t('meta.Sinks.Es.FlushIntervalUnit'),
- },
- {
- name: 'flushRecord',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.FlushInterval')
+ flushInterval: number;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.Es.FlushRecord'),
initialValue: 1000,
+ rules: [{ required: true }],
+ suffix: i18n.t('meta.Sinks.Es.FlushRecordUnit'),
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
+ disabled: [110, 130].includes(values?.status),
}),
- rules: [{ required: true }],
- suffix: i18n.t('meta.Sinks.Es.FlushRecordUnit'),
- },
- {
- name: 'retryTime',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.FlushRecord')
+ flushRecord: number;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.Es.RetryTimes'),
initialValue: 3,
+ rules: [{ required: true }],
+ suffix: i18n.t('meta.Sinks.Es.RetryTimesUnit'),
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
+ disabled: [110, 130].includes(values?.status),
}),
- rules: [{ required: true }],
- suffix: i18n.t('meta.Sinks.Es.RetryTimesUnit'),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Es.RetryTimes')
+ retryTime: number;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/greenplum.tsx b/inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts
similarity index 85%
rename from inlong-dashboard/src/metas/sinks/greenplum.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts
index 8af638901..6b3313cd2 100644
--- a/inlong-dashboard/src/metas/sinks/greenplum.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/Greenplum.ts
@@ -16,9 +16,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { sourceFields } from '../common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const fieldTypesConf = {
SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
@@ -55,41 +58,43 @@ const greenplumFieldTypes = Object.keys(fieldTypesConf).reduce(
[],
);
-export const greenplum: FieldItemType[] = [
- {
+export default class GreenplumSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'jdbc:postgresql://127.0.0.1:5432/write',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Greenplum.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Greenplum.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Greenplum.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -106,36 +111,42 @@ export const greenplum: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
- canDelete: ![110, 130].includes(values?.status),
+ editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/hbase.tsx b/inlong-dashboard/src/metas/sinks/defaults/HBase.ts
similarity index 76%
rename from inlong-dashboard/src/metas/sinks/hbase.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/HBase.ts
index e1c39d4c8..b9ff6c231 100644
--- a/inlong-dashboard/src/metas/sinks/hbase.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/HBase.ts
@@ -16,9 +16,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+import { SinkInfo } from '../common/SinkInfo';
+import { sourceFields } from '../common/sourceFields';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const hbaseFieldTypes = [
'int',
@@ -35,103 +38,114 @@ const hbaseFieldTypes = [
value: item,
}));
-export const hbase: FieldItemType[] = [
- {
+export default class HBaseSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.HBase.Namespace'),
- name: 'namespace',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.Namespace')
+ namespace: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.HBase.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.HBase.RowKey'),
- name: 'rowKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.RowKey')
+ rowKey: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.HBase.ZkQuorum'),
- name: 'zkQuorum',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: '127.0.0.1:2181,127.0.0.2:2181',
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.ZkQuorum')
+ zkQuorum: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.HBase.ZkNodeParent'),
- name: 'zkNodeParent',
- initialValue: '/hbase',
rules: [{ required: true }],
+ initialValue: '/hbase',
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.ZkNodeParent')
+ zkNodeParent: string;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.HBase.BufferFlushMaxSize'),
- name: 'bufferFlushMaxSize',
- initialValue: 2,
rules: [{ required: true }],
+ initialValue: 2,
+ suffix: 'mb',
props: values => ({
disabled: [110, 130].includes(values?.status),
- min: 1,
}),
- suffix: 'mb',
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.BufferFlushMaxSize')
+ bufferFlushMaxSize: number;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.HBase.BufferFlushMaxRows'),
- name: 'bufferFlushMaxRows',
- initialValue: 1000,
rules: [{ required: true }],
+ initialValue: 1000,
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
+ disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.BufferFlushMaxRows')
+ bufferFlushMaxRows: number;
+
+ @FormField({
type: 'inputnumber',
- label: i18n.t('meta.Sinks.HBase.BufferFlushInterval'),
- name: 'bufferFlushInterval',
- initialValue: 1,
rules: [{ required: true }],
+ initialValue: 1,
+ suffix: i18n.t('meta.Sinks.HBase.FlushIntervalUnit'),
props: values => ({
- disabled: [110, 130].includes(values?.status),
min: 1,
+ disabled: [110, 130].includes(values?.status),
}),
- suffix: i18n.t('meta.Sinks.HBase.FlushIntervalUnit'),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.HBase.BufferFlushInterval')
+ bufferFlushInterval: number;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
- canDelete: ![110, 130].includes(values?.status),
+ editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/iceberg.tsx b/inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts
similarity index 85%
rename from inlong-dashboard/src/metas/sinks/iceberg.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts
index 458dcb644..7a944c705 100644
--- a/inlong-dashboard/src/metas/sinks/iceberg.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/Iceberg.ts
@@ -18,9 +18,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { sourceFields } from '../common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const icebergFieldTypes = [
'string',
@@ -98,31 +101,31 @@ const matchPartitionStrategies = fieldType => {
return data.filter(item => !item.disabled);
};
-export const iceberg: FieldItemType[] = [
- {
- name: 'dbName',
+export default class IcebergSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Iceberg.DbName'),
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
- name: 'tableName',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.DbName')
+ dbName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Iceberg.TableName'),
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.TableName')
+ tableName: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -139,33 +142,38 @@ export const iceberg: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: 'Catalog URI',
- name: 'catalogUri',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'thrift://127.0.0.1:9083',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('Catalog URI')
+ catalogUri: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Iceberg.Warehouse'),
- name: 'warehouse',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'hdfs://127.0.0.1:9000/user/iceberg/warehouse',
}),
- },
- {
- name: 'fileFormat',
- type: 'radio',
- label: i18n.t('meta.Sinks.Iceberg.FileFormat'),
- initialValue: 'Parquet',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.Warehouse')
+ warehouse: string;
+
+ @FormField({
+ type: 'select',
rules: [{ required: true }],
+ initialValue: 'Parquet',
props: values => ({
disabled: [110, 130].includes(values?.status),
options: [
@@ -183,11 +191,15 @@ export const iceberg: FieldItemType[] = [
},
],
}),
- },
- {
- name: 'extList',
- label: i18n.t('meta.Sinks.Iceberg.ExtList'),
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.FileFormat')
+ fileFormat: string;
+
+ @FormField({
type: EditableTable,
+ rules: [{ required: true }],
+ initialValue: [],
props: values => ({
size: 'small',
columns: [
@@ -207,13 +219,16 @@ export const iceberg: FieldItemType[] = [
},
],
}),
- initialValue: [],
- },
- {
- name: 'dataConsistency',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.ExtList')
+ extList: string;
+
+ @FormField({
type: 'select',
- label: i18n.t('meta.Sinks.Iceberg.DataConsistency'),
+ rules: [{ required: true }],
initialValue: 'EXACTLY_ONCE',
+ isPro: true,
props: values => ({
disabled: [110, 130].includes(values?.status),
options: [
@@ -227,18 +242,21 @@ export const iceberg: FieldItemType[] = [
},
],
}),
- isPro: true,
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Iceberg.DataConsistency')
+ dataConsistency: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts b/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts
index 8ccf526b8..2fe41b67c 100644
--- a/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts
+++ b/inlong-dashboard/src/metas/sinks/defaults/Kafka.ts
@@ -22,7 +22,7 @@ import { SinkInfo } from '../common/SinkInfo';
const { I18n, FormField, TableColumn } = DataWithBackend;
-export default class HiveSink extends SinkInfo implements DataWithBackend {
+export default class KafkaSink extends SinkInfo implements DataWithBackend {
@FormField({
type: 'input',
rules: [{ required: true }],
diff --git a/inlong-dashboard/src/metas/sinks/mysql.tsx b/inlong-dashboard/src/metas/sinks/defaults/Mysql.ts
similarity index 86%
rename from inlong-dashboard/src/metas/sinks/mysql.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/Mysql.ts
index 28f8c48e2..898ade561 100644
--- a/inlong-dashboard/src/metas/sinks/mysql.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/Mysql.ts
@@ -16,9 +16,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { sourceFields } from '../common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const fieldTypesConf = {
TINYINT: (m, d) => (1 <= m && m <= 4 ? '' : '1<=M<=4'),
@@ -55,41 +58,43 @@ const fieldTypes = Object.keys(fieldTypesConf).reduce(
[],
);
-export const mysql: FieldItemType[] = [
- {
+export default class HiveSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'jdbc:mysql://127.0.0.1:3306/write',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.MySQL.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.MySQL.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Greenplum.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.MySQL.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -106,35 +111,42 @@ export const mysql: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/oracle.tsx b/inlong-dashboard/src/metas/sinks/defaults/Oracle.ts
similarity index 86%
rename from inlong-dashboard/src/metas/sinks/oracle.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/Oracle.ts
index 495ac91c8..f351c992c 100644
--- a/inlong-dashboard/src/metas/sinks/oracle.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/Oracle.ts
@@ -17,8 +17,12 @@
import i18n from '@/i18n';
import type { FieldItemType } from '@/metas/common';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+import { SinkInfo } from '../common/SinkInfo';
+import { sourceFields } from '../common/sourceFields';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const fieldTypesConf = {
BINARY_FLOAT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
@@ -51,41 +55,43 @@ const oracleFieldTypes = Object.keys(fieldTypesConf).reduce(
[],
);
-export const oracle: FieldItemType[] = [
- {
+export default class OracleSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'jdbc:oracle:thin://127.0.0.1:1521/db_name',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Oracle.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Oracle.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Oracle.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Oracle.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -102,36 +108,42 @@ export const oracle: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/postgreSql.tsx b/inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts
similarity index 86%
rename from inlong-dashboard/src/metas/sinks/postgreSql.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts
index dcac339c3..59e68d4f5 100644
--- a/inlong-dashboard/src/metas/sinks/postgreSql.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/PostgreSql.ts
@@ -16,9 +16,12 @@
*/
import i18n from '@/i18n';
-import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+import { SinkInfo } from '../common/SinkInfo';
+import { sourceFields } from '../common/sourceFields';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const fieldTypesConf = {
SMALLINT: (m, d) => (1 <= m && m <= 6 ? '' : '1 <= M <= 6'),
@@ -55,51 +58,54 @@ const postgreSqlFieldTypes = Object.keys(fieldTypesConf).reduce(
[],
);
-export const postgreSql: FieldItemType[] = [
- {
+export default class HiveSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'jdbc:postgresql://127.0.0.1:5432/db_name',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.PostgreSQL.DbName'),
- name: 'dbName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.PostgreSQL.DbName')
+ dbName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.PostgreSQL.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.PostgreSQL.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.PostgreSQL.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.PostgreSQL.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -116,35 +122,42 @@ export const postgreSql: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/sqlServer.tsx b/inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts
similarity index 85%
rename from inlong-dashboard/src/metas/sinks/sqlServer.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts
index 108f20ac6..41fbd37b5 100644
--- a/inlong-dashboard/src/metas/sinks/sqlServer.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/SQLServer.ts
@@ -18,7 +18,11 @@
import i18n from '@/i18n';
import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+import { sourceFields } from '../common/sourceFields';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const fieldTypesConf = {
CHAR: (m, d) => (1 <= m && m <= 8000 ? '' : '1 <= M <= 8000'),
@@ -56,62 +60,68 @@ const sqlserverFieldTypes = Object.keys(fieldTypesConf).reduce(
[],
);
-export const sqlServer: FieldItemType[] = [
- {
+export default class SqlServerSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
placeholder: 'jdbc:sqlserver://127.0.0.1:1433;database=db_name',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.SQLServer.SchemaName'),
- name: 'schemaName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.SQLServer.SchemaName')
+ schemaName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.SQLServer.ServerTimezone'),
- name: 'serverTimezone',
- initialValue: 'UTC',
rules: [{ required: true }],
+ initialValue: 'UTC',
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.SQLServer.ServerTimezone')
+ serverTimezone: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.SQLServer.TableName'),
- name: 'tableName',
rules: [{ required: true }],
+ initialValue: 'UTC',
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.SQLServer.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.SQLServer.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
+ initialValue: 'UTC',
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.SQLServer.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -128,11 +138,12 @@ export const sqlServer: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.SQLServer.AllMigration'),
- name: 'allMigration',
rules: [{ required: true }],
initialValue: true,
props: values => ({
@@ -148,35 +159,40 @@ export const sqlServer: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.AllMigration')
+ allMigration: boolean;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx b/inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts
similarity index 81%
rename from inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx
rename to inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts
index a790336f7..628a364fe 100644
--- a/inlong-dashboard/src/metas/sinks/tdsqlPostgreSql.tsx
+++ b/inlong-dashboard/src/metas/sinks/defaults/TDSQLPostgreSql.ts
@@ -18,7 +18,11 @@
import i18n from '@/i18n';
import type { FieldItemType } from '@/metas/common';
import EditableTable from '@/components/EditableTable';
-import { sourceFields } from './common/sourceFields';
+import { DataWithBackend } from '@/metas/DataWithBackend';
+import { sourceFields } from '../common/sourceFields';
+import { SinkInfo } from '../common/SinkInfo';
+
+const { I18n, FormField, TableColumn } = DataWithBackend;
const tdsqlPostgreSQLFieldTypes = [
'SMALLINT',
@@ -49,51 +53,54 @@ const tdsqlPostgreSQLFieldTypes = [
value: item,
}));
-export const tdsqlPostgreSQL: FieldItemType[] = [
- {
+export default class TDSQLPostgreSqlSink extends SinkInfo implements DataWithBackend {
+ @FormField({
type: 'input',
- label: 'JDBC URL',
- name: 'jdbcUrl',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
- placeholder: 'jdbc:postgresql://127.0.0.1:5432/db_name',
+ placeholder: 'jdbc:sqlserver://127.0.0.1:1433;database=db_name',
}),
- },
- {
+ })
+ @TableColumn()
+ @I18n('JDBC URL')
+ jdbcUrl: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.TDSQLPostgreSQL.SchemaName'),
- name: 'schemaName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.TDSQLPostgreSQL.SchemaName')
+ schemaName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.TDSQLPostgreSQL.TableName'),
- name: 'tableName',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.TDSQLPostgreSQL.TableName')
+ tableName: string;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.TDSQLPostgreSQL.PrimaryKey'),
- name: 'primaryKey',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- _renderTable: true,
- },
- {
+ })
+ @TableColumn()
+ @I18n('meta.Sinks.TDSQLPostgreSQL.PrimaryKey')
+ primaryKey: string;
+
+ @FormField({
type: 'radio',
- label: i18n.t('meta.Sinks.EnableCreateResource'),
- name: 'enableCreateResource',
rules: [{ required: true }],
initialValue: 1,
tooltip: i18n.t('meta.Sinks.EnableCreateResourceHelp'),
@@ -110,35 +117,40 @@ export const tdsqlPostgreSQL: FieldItemType[] = [
},
],
}),
- },
- {
+ })
+ @I18n('meta.Sinks.EnableCreateResource')
+ enableCreateResource: number;
+
+ @FormField({
type: 'input',
- label: i18n.t('meta.Sinks.Username'),
- name: 'username',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
+ })
+ @I18n('meta.Sinks.Username')
+ username: string;
+
+ @FormField({
type: 'password',
- label: i18n.t('meta.Sinks.Password'),
- name: 'password',
rules: [{ required: true }],
props: values => ({
disabled: [110, 130].includes(values?.status),
}),
- },
- {
- name: 'sinkFieldList',
+ })
+ @I18n('meta.Sinks.Password')
+ password: string;
+
+ @FormField({
type: EditableTable,
props: values => ({
size: 'small',
editing: ![110, 130].includes(values?.status),
columns: getFieldListColumns(values),
}),
- },
-];
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
const getFieldListColumns = sinkValues => {
return [
diff --git a/inlong-dashboard/src/metas/sinks/defaults/index.ts b/inlong-dashboard/src/metas/sinks/defaults/index.ts
index 0cda577da..c48571b27 100644
--- a/inlong-dashboard/src/metas/sinks/defaults/index.ts
+++ b/inlong-dashboard/src/metas/sinks/defaults/index.ts
@@ -35,14 +35,59 @@ export const allDefaultSinks: MetaExportWithBackendList = [
value: 'DORIS',
LoadEntity: () => import('./Doris'),
},
+ {
+ label: 'Elasticsearch',
+ value: 'ELASTICSEARCH',
+ LoadEntity: () => import('./Es'),
+ },
+ {
+ label: 'Greenplum',
+ value: 'GREENPLUM',
+ LoadEntity: () => import('./Greenplum'),
+ },
{
label: 'Hive',
value: 'HIVE',
LoadEntity: () => import('./Hive'),
},
+ {
+ label: 'HBase',
+ value: 'HBASE',
+ LoadEntity: () => import('./HBase'),
+ },
+ {
+ label: 'Iceberg',
+ value: 'ICEBERG',
+ LoadEntity: () => import('./Iceberg'),
+ },
{
label: 'Kafka',
value: 'KAFKA',
LoadEntity: () => import('./Kafka'),
},
+ {
+ label: 'MySQL',
+ value: 'MYSQL',
+ LoadEntity: () => import('./Mysql'),
+ },
+ {
+ label: 'Oracle',
+ value: 'ORACLE',
+ LoadEntity: () => import('./Oracle'),
+ },
+ {
+ label: 'PostgreSQL',
+ value: 'POSTGRESQL',
+ LoadEntity: () => import('./PostgreSql'),
+ },
+ {
+ label: 'SQLServer',
+ value: 'SQLSERVER',
+ LoadEntity: () => import('./SQLServer'),
+ },
+ {
+ label: 'TDSQLPostgreSQL',
+ value: 'TDSQLPOSTGRESQL',
+ LoadEntity: () => import('./TDSQLPostgreSql'),
+ },
];