This is an automated email from the ASF dual-hosted git repository.
luchunliang pushed a commit to branch branch-1.9
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/branch-1.9 by this push:
new 12df355930 [INLONG-8908][Dashboard] Support management of Tencent
cloud log service sink (#8933)
12df355930 is described below
commit 12df35593093bcdce198b0d70dc46bfd882cffb2
Author: Lizhen <[email protected]>
AuthorDate: Tue Sep 19 09:28:53 2023 +0800
[INLONG-8908][Dashboard] Support management of Tencent cloud log service
sink (#8933)
---
inlong-dashboard/src/plugins/sinks/defaults/Cls.ts | 183 +++++++++++++++++++++
.../src/plugins/sinks/defaults/index.ts | 5 +
inlong-dashboard/src/ui/locales/cn.json | 13 ++
inlong-dashboard/src/ui/locales/en.json | 13 ++
4 files changed, 214 insertions(+)
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/Cls.ts
b/inlong-dashboard/src/plugins/sinks/defaults/Cls.ts
new file mode 100644
index 0000000000..4a55390022
--- /dev/null
+++ b/inlong-dashboard/src/plugins/sinks/defaults/Cls.ts
@@ -0,0 +1,183 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { DataWithBackend } from '@/plugins/DataWithBackend';
+import { RenderRow } from '@/plugins/RenderRow';
+import { RenderList } from '@/plugins/RenderList';
+import i18n from '@/i18n';
+import EditableTable from '@/ui/components/EditableTable';
+import { SinkInfo } from '../common/SinkInfo';
+import { sourceFields } from '../common/sourceFields';
+import NodeSelect from '@/ui/components/NodeSelect';
+
+const { I18n } = DataWithBackend;
+const { FieldDecorator, SyncField } = RenderRow;
+const { ColumnDecorator } = RenderList;
+
+const targetTypes = ['int', 'long', 'float', 'double', 'string', 'date',
'timestamp'].map(item => ({
+ label: item,
+ value: item,
+}));
+
+export default class ClsSink extends SinkInfo implements DataWithBackend,
RenderRow, RenderList {
+ @FieldDecorator({
+ type: 'input',
+ rules: [{ required: true }],
+ props: values => ({
+ disabled: [110, 130].includes(values?.status),
+ }),
+ })
+ @ColumnDecorator()
+ @I18n('Topic Name')
+ @SyncField()
+ topicName: string;
+
+ @FieldDecorator({
+ type: 'input',
+ rules: [{ required: true }],
+ props: values => ({
+ disabled: [110, 130].includes(values?.status),
+ }),
+ })
+ @ColumnDecorator()
+ @I18n('meta.Sinks.Cls.Tag')
+ @SyncField()
+ tag: string;
+
+ @FieldDecorator({
+ type: 'input',
+ rules: [{ required: true }],
+ props: values => ({
+ disabled: [110, 130].includes(values?.status),
+ }),
+ })
+ @ColumnDecorator()
+ @SyncField()
+ @I18n('meta.Sinks.Cls.Tokenizer')
+ tokenizer: string;
+
+ @FieldDecorator({
+ type: 'select',
+ rules: [{ required: true }],
+ props: values => ({
+ disabled: [110, 130].includes(values?.status),
+ options: [
+ {
+ label: i18n.t('meta.Sinks.Cls.SaveTime.Week'),
+ value: 7,
+ },
+ {
+ label: i18n.t('meta.Sinks.Cls.SaveTime.Month'),
+ value: 30,
+ },
+ {
+ label: i18n.t('meta.Sinks.Cls.SaveTime.HalfAYear'),
+ value: 182,
+ },
+ {
+ label: i18n.t('meta.Sinks.Cls.SaveTime.OneYear'),
+ value: 365,
+ },
+ ],
+ }),
+ })
+ @I18n('meta.Sinks.Cls.SaveTime')
+ @SyncField()
+ saveTime: number;
+
+ @FieldDecorator({
+ type: NodeSelect,
+ rules: [{ required: true }],
+ props: values => ({
+ disabled: [110, 130].includes(values?.status),
+ nodeType: 'CLS',
+ }),
+ })
+ @I18n('meta.Sinks.DataNodeName')
+ @SyncField()
+ @ColumnDecorator()
+ dataNodeName: string;
+
+ @FieldDecorator({
+ type: EditableTable,
+ props: values => ({
+ size: 'small',
+ canDelete: ![110, 130].includes(values?.status),
+ columns: getFieldListColumns(values),
+ canBatchAdd: true,
+ upsertByFieldKey: true,
+ }),
+ })
+ sinkFieldList: Record<string, unknown>[];
+}
+
+const getFieldListColumns = sinkValues => {
+ return [
+ ...sourceFields,
+ {
+ title: `CLS${i18n.t('meta.Sinks.Cls.FieldName')}`,
+ dataIndex: 'fieldName',
+ initialValue: '',
+ rules: [
+ { required: true },
+ {
+ pattern: /^[a-z][0-9a-z_]*$/,
+ message: i18n.t('meta.Sinks.Cls.FieldNameRule'),
+ },
+ ],
+ props: (text, record, idx, isNew) => ({
+ disabled: [110, 130].includes(sinkValues?.status as number) && !isNew,
+ }),
+ },
+ {
+ title: `CLS${i18n.t('meta.Sinks.Cls.FieldType')}`,
+ dataIndex: 'fieldType',
+ initialValue: targetTypes[0].value,
+ type: 'select',
+ props: (text, record, idx, isNew) => ({
+ options: targetTypes,
+ disabled: [110, 130].includes(sinkValues?.status as number) && !isNew,
+ }),
+ rules: [{ required: true, message:
`${i18n.t('meta.Sinks.FieldTypeMessage')}` }],
+ },
+ {
+ title: i18n.t('meta.Sinks.Cls.IsMetaField'),
+ dataIndex: 'isMetaField',
+ initialValue: 0,
+ type: 'select',
+ props: (text, record, idx, isNew) => ({
+ options: [
+ {
+ label: i18n.t('basic.Yes'),
+ value: 1,
+ },
+ {
+ label: i18n.t('basic.No'),
+ value: 0,
+ },
+ ],
+ }),
+ },
+ {
+ title: i18n.t('meta.Sinks.Cls.FieldDescription'),
+ dataIndex: 'fieldComment',
+ initialValue: '',
+ },
+ ];
+};
diff --git a/inlong-dashboard/src/plugins/sinks/defaults/index.ts
b/inlong-dashboard/src/plugins/sinks/defaults/index.ts
index d404bd2a0d..1c16d86085 100644
--- a/inlong-dashboard/src/plugins/sinks/defaults/index.ts
+++ b/inlong-dashboard/src/plugins/sinks/defaults/index.ts
@@ -31,6 +31,11 @@ export const allDefaultSinks:
MetaExportWithBackendList<SinkMetaType> = [
value: 'CLICKHOUSE',
LoadEntity: () => import('./ClickHouse'),
},
+ {
+ label: 'Cls',
+ value: 'CLS',
+ LoadEntity: () => import('./Cls'),
+ },
{
label: 'Doris',
value: 'DORIS',
diff --git a/inlong-dashboard/src/ui/locales/cn.json
b/inlong-dashboard/src/ui/locales/cn.json
index 5d96950de7..fa24482312 100644
--- a/inlong-dashboard/src/ui/locales/cn.json
+++ b/inlong-dashboard/src/ui/locales/cn.json
@@ -369,6 +369,19 @@
"meta.Sinks.Pulsar.Tenant": "Pulsar 租户",
"meta.Sinks.Pulsar.Namespace": "命名空间",
"meta.Sinks.Pulsar.PartitionNum": "分区数",
+ "meta.Sinks.Cls.SaveTime": "日志保存时间",
+ "meta.Sinks.Cls.SaveTime.Week": "一周",
+ "meta.Sinks.Cls.SaveTime.Month": "一月",
+ "meta.Sinks.Cls.SaveTime.HalfAYear": "半年",
+ "meta.Sinks.Cls.SaveTime.OneYear": "一年",
+ "meta.Sinks.Cls.Tag": "标签",
+ "meta.Sinks.Cls.Tokenizer": "分词规则",
+ "meta.Sinks.Cls.FieldName": "字段名",
+ "meta.Sinks.Cls.FieldType": "字段类型",
+ "meta.Sinks.Cls.FieldDescription": "字段描述",
+ "meta.Sinks.Cls.IsMetaField": "是否为元字段",
+ "meta.Sinks.Cls.FieldFormat": "字段格式",
+ "meta.Sinks.Cls.FieldNameRule": "以英文字母或下划线开头,只能包含英文字母、数字、下划线",
"meta.Group.InlongGroupId": "数据流组 ID",
"meta.Group.InlongGroupIdRules": "只能包含英文字母、数字、点号(.)、中划线(-)、下划线(_)",
"meta.Group.InlongGroupName": "数据流组名称",
diff --git a/inlong-dashboard/src/ui/locales/en.json
b/inlong-dashboard/src/ui/locales/en.json
index 31e9e18707..d19ae4fb24 100644
--- a/inlong-dashboard/src/ui/locales/en.json
+++ b/inlong-dashboard/src/ui/locales/en.json
@@ -369,6 +369,19 @@
"meta.Sinks.Pulsar.Tenant": "Pulsar Tenant",
"meta.Sinks.Pulsar.Namespace": "Namespace",
"meta.Sinks.Pulsar.PartitionNum": "Partition Number",
+ "meta.Sinks.Cls.SaveTime": "Log save time",
+ "meta.Sinks.Cls.SaveTime.Week": "One week",
+ "meta.Sinks.Cls.SaveTime.Month": "One month",
+ "meta.Sinks.Cls.SaveTime.HalfAYear": "Half a year",
+ "meta.Sinks.Cls.SaveTime.OneYear": "One year",
+ "meta.Sinks.Cls.Tag": "Tag",
+ "meta.Sinks.Cls.Tokenizer": "Tokenizer Rule",
+ "meta.Sinks.Cls.FieldName": "FieldName",
+ "meta.Sinks.Cls.FieldType": "FieldType",
+ "meta.Sinks.Cls.FieldDescription": "Field description",
+ "meta.Sinks.Cls.IsMetaField": "IsMetaField",
+ "meta.Sinks.Cls.FieldFormat": "FieldFormat",
+ "meta.Sinks.Cls.FieldNameRule": "At the beginning of lowercase letters, only
lowercase letters, numbers, and underscores",
"meta.Group.InlongGroupId": "Inlong Group ID",
"meta.Group.InlongGroupIdRules": "Only English letters, numbers, dots(.),
minus(-), and underscores(_)",
"meta.Group.InlongGroupName": "Inlong Group Name",