Files
KnowStreaming/km-console/packages/layout-clusters-fe/src/pages/TestingConsumer/config.tsx
2022-09-01 19:46:50 +08:00

431 lines
9.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { FormItemType, IFormItem } from 'knowdesign/es/extend/x-form';
import moment from 'moment';
import React from 'react';
import { timeFormat } from '../../constants/common';
import { Select } from 'knowdesign';
import { ControlStatusMap } from '../CommonRoute';
const { Option } = Select;
export const cardList = [
{ label: 'Records Average', value: 1, key: 'string', unit: 'B' },
{ label: 'Fetch Requests', value: 1, key: 'string', unit: 'B' },
{ label: 'Fetch Size Average', value: 1, key: 'string', unit: 'B' },
{ label: 'Fetch Letency Average', value: 1, key: 'string', unit: 'B' },
];
export const filterList = [
{
label: 'none',
value: 0,
},
{
label: 'contains',
value: 1,
},
{
label: 'does not contains',
value: 2,
},
{
label: 'equals',
value: 3,
},
{
label: 'Above Size',
value: 4,
},
{
label: 'Under Size',
value: 5,
},
];
export const untilList = [
{
label: 'forever',
value: 'forever',
},
{
label: 'number of messages',
value: 'number of messages',
},
{
label: 'number of messages per partition',
value: 'number of messages per partition',
},
{
label: 'max size',
value: 'max size',
},
{
label: 'max size per partition',
value: 'max size per partition',
},
{
label: 'timestamp',
value: 'timestamp',
},
];
/**
* LATEST(0, "最新位置开始消费"): nowlatest
* EARLIEST(1, "最旧位置开始消费"): the beginning
* PRECISE_TIMESTAMP(2, "指定时间开始消费"): last hour、today、yesterday、a specific date
* PRECISE_OFFSET(3, "指定位置开始消费"),
* CONSUMER_GROUP(4, "指定消费组进行消费"),
* LATEST_MINUS_X_OFFSET(5, "近X条数据开始消费"),
*/
export const startFromMap = {
'an offset': {
type: 3,
},
'nowlatest': {
type: 0,
},
today: {
type: 2,
getDate: () => new Date(new Date().setHours(0, 0, 0, 0)).getTime(),
},
'last hour': {
type: 2,
getDate: () => new Date().getTime() - 60 * 60 * 1000,
},
yesterday: {
type: 2,
getDate: () => new Date().getTime() - 24 * 60 * 60 * 1000,
},
'a specific date': {
type: 2,
getDate: (date: any) => new Date(date).getTime(),
},
'the beginning': {
type: 1,
},
'a consumer group': {
type: 4,
},
'latest x offsets': {
type: 5,
},
} as any;
const startFromOptions = [
{
value: 'Time Base',
label: 'Time Base',
children: [
{
value: 'nowlatest',
label: 'nowlatest',
},
{
value: 'last hour',
label: 'last hour',
},
{
value: 'today',
label: 'today',
},
{
value: 'yesterday',
label: 'yesterday',
},
{
value: 'the beginning',
label: 'the beginning',
},
{
value: 'a specific date',
label: 'a specific date',
},
],
},
{
value: 'Offset based',
label: 'Offset based',
children: [
{
value: 'a consumer group',
label: 'a consumer group',
},
{
value: 'latest x offsets',
label: 'latest x offsets',
},
{
value: 'an offset',
label: 'an offset',
},
],
},
];
export const getFormConfig = (topicMetaData: any, info = {} as any, partitionLists: any, consumerGroupList: any) => {
return [
{
key: 'topic',
label: 'Topic',
type: FormItemType.select,
attrs: {
placeholder: '请选择 Topic',
showSearch: true,
filterOption: (input: string, option: any) => option.children.toLowerCase().indexOf(input.toLowerCase()) >= 0,
},
rules: [{ required: true, message: '请选择Topic' }],
options: topicMetaData,
},
{
key: 'start',
label: 'Start From',
attrs: {
placeholder: '请选择',
},
type: FormItemType.cascader,
options: startFromOptions,
rules: [
{
required: true,
message: '请选择Start From',
},
],
},
{
key: 'startDate',
label: 'Date',
type: FormItemType.datePicker,
invisible: !info?.needStartFromDate,
attrs: {
showTime: true,
},
rules: [
{
required: info?.needStartFromDate,
message: '请选择Date',
},
],
},
{
key: 'consumerGroup',
label: 'Consumer Group',
type: FormItemType.select,
options: consumerGroupList || [],
invisible: !info?.needConsumerGroup,
rules: [
{
required: info?.needConsumerGroup,
message: '请选择Consumer Group',
},
],
},
{
key: 'partitionId',
label: 'Partition',
type: FormItemType.select,
options: partitionLists || [],
colSpan: 12,
invisible: !info?.needPartitionList,
rules: [
{
required: info?.needPartitionList,
message: '请选择Partition',
},
],
},
{
key: 'offset',
label: 'Offset',
type: FormItemType.inputNumber,
colSpan: 12,
attrs: {
min: 1,
max: info?.needOffsetMax ? 99999 : Math.pow(2, 53) - 1,
},
invisible: !info?.needOffset,
rules: [
{
required: info?.needOffset,
message: '请输入Offset',
},
],
},
{
key: 'until',
label: 'Until',
type: FormItemType.select,
options: untilList,
rules: [
{
required: true,
message: '请选择Until',
},
],
},
{
key: 'untilMsgNum',
label: 'Message Number',
type: FormItemType.inputNumber,
attrs: {
min: 1,
},
invisible: !info?.needMsgNum,
rules: [
{
required: info?.needMsgNum,
message: '请输入Message Number',
},
],
},
{
key: 'unitMsgSize',
label: 'Message Size',
type: FormItemType.inputNumber,
attrs: {
min: 1,
},
invisible: !info?.needMsgSize,
rules: [
{
required: info?.needMsgSize,
message: '请输入Message Size',
},
],
},
{
key: 'untilDate',
label: 'Date',
type: FormItemType.datePicker,
invisible: !info?.needUntilDate,
attrs: {
showTime: true,
},
rules: [
{
required: info?.needUntilDate,
message: '请选择Date',
},
],
},
{
key: 'filter',
label: 'Filter',
type: FormItemType.select,
options: filterList,
rules: [
{
required: true,
message: '请选择Filter',
},
],
},
{
key: 'filterKey',
label: 'Key',
type: FormItemType.input,
invisible: !info?.needFilterKeyValue,
rules: [
{
required: info?.needFilterKeyValue,
message: '请输入Key',
},
],
},
{
key: 'filterValue',
label: 'Value',
type: FormItemType.input,
invisible: !info?.needFilterKeyValue,
rules: [
{
required: info?.needFilterKeyValue,
message: '请输入Value',
},
],
},
{
key: 'filterSize',
label: 'Size',
type: FormItemType.inputNumber,
attrs: {
min: 1,
},
invisible: !info?.needFilterSize,
rules: [
{
required: info?.needFilterSize,
message: '请输入Size',
},
],
},
] as unknown as IFormItem[];
};
export const getTableColumns = (props: any) => {
const { isShowControl } = props;
const columns = [
{
title: 'Partition',
dataIndex: 'partitionId',
width: 100,
},
{
title: 'Offset',
dataIndex: 'offset',
width: 140,
},
{
title: 'Timestamp',
dataIndex: 'timestampUnitMs',
width: 180,
render: (text: number) => {
return text ? moment(text).format(timeFormat) : '-';
},
},
{
title: 'Key',
dataIndex: 'keydata',
render: (text: string) => {
return text || '-';
},
width: 180,
needTooltip: true,
lineClampTwo: true,
},
{
title: 'Value',
dataIndex: 'value',
width: 180,
needTooltip: true,
lineClampTwo: true,
},
];
// eslint-disable-next-line no-constant-condition
if (isShowControl && isShowControl(ControlStatusMap.TESTING_CONSUMER_HEADER)) {
columns.push({
title: 'Header',
dataIndex: 'headerList',
// render: (text: any) => (text ? text?.join('、') : '-'),
render: (text: any) => {
if (text && Array.isArray(text)) {
const newText = text.map((item: any) => {
try {
return JSON.stringify(item);
} catch (error) {
return item;
}
});
return newText?.join('、') || '-';
}
return text || '-';
},
width: 180,
needTooltip: true,
lineClampTwo: true,
});
}
return columns;
};