diff --git a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/doris/configuration/doris-be-conf.xml b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/doris/configuration/doris-be-conf.xml index 7299f3465..e9c59b935 100644 --- a/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/doris/configuration/doris-be-conf.xml +++ b/bigtop-manager-server/src/main/resources/stacks/extra/1.0.0/services/doris/configuration/doris-be-conf.xml @@ -100,7 +100,7 @@ JAVA_OPTS_FOR_JDK_17="-Dfile.encoding=UTF-8 -Xmx4096m -DlogPath=$LOG_DIR/jni.log # https://github.com/apache/doris/blob/master/docs/zh-CN/community/developer-guide/debug-tool.md#jemalloc-heap-profile # https://jemalloc.net/jemalloc.3.html JEMALLOC_CONF="percpu_arena:percpu,background_thread:true,metadata_thp:auto,muzzy_decay_ms:5000,dirty_decay_ms:5000,oversize_threshold:0,prof:false,lg_prof_interval:-1" -JEMALLOC_PROF_PRFIX="jemalloc_heap_profile_" +JEMALLOC_PROF_PREFIX="jemalloc_heap_profile_" # ports for admin, web, heartbeat service be_port = ${be_port} diff --git a/bigtop-manager-ui/src/api/metrics/index.ts b/bigtop-manager-ui/src/api/metrics/index.ts index e35025542..a788ad0ab 100644 --- a/bigtop-manager-ui/src/api/metrics/index.ts +++ b/bigtop-manager-ui/src/api/metrics/index.ts @@ -18,7 +18,7 @@ */ import { get } from '@/api/request-util' -import type { MetricsData, TimeRangeType } from './types' +import type { MetricsData, ServiceMetrics, TimeRangeType } from './types' export const getClusterMetricsInfo = (paramsPath: { id: number }, params: { interval: TimeRangeType }) => { return get(`/metrics/clusters/${paramsPath.id}`, params) @@ -27,3 +27,7 @@ export const getClusterMetricsInfo = (paramsPath: { id: number }, params: { inte export const getHostMetricsInfo = (paramsPath: { id: number }, params: { interval: TimeRangeType }) => { return get(`/metrics/hosts/${paramsPath.id}`, params) } + +export const getServiceMetricsInfo = (paramsPath: { id: number }, params: { interval: TimeRangeType }) => { + return get(`/metrics/services/${paramsPath.id}`, params) +} diff --git a/bigtop-manager-ui/src/api/metrics/types.ts b/bigtop-manager-ui/src/api/metrics/types.ts index 86e4ec30e..88421ea9e 100644 --- a/bigtop-manager-ui/src/api/metrics/types.ts +++ b/bigtop-manager-ui/src/api/metrics/types.ts @@ -18,6 +18,7 @@ */ export type TimeRangeType = '1m' | '5m' | '15m' | '30m' | '1h' | '2h' + export type MetricsData = { cpuUsageCur: string memoryUsageCur: string @@ -34,3 +35,29 @@ export type MetricsData = { diskWrite: string[] timestamps: string[] } + +export type ServiceMetricType = + | 'NUMBER' // Numeric value, unitless + | 'PERCENT' // Percent, followed by % + | 'BYTE' // Byte, the front end can convert it through formatFromByte in storage util, the unit is B/KB/MB, etc. + | 'MILLISECOND' // milliseconds, followed by ms + | 'BPS' // Bytes per second, followed by B/s + | 'NPS' // Numeric value per second, followed by N/s + +type ServiceMetricItemSeries = { + name: string + type: string + data: any[] + [propName: string]: any +} + +export type ServiceMetricItem = { + title: string + valueType: Lowercase + series: ServiceMetricItemSeries[] +} + +export type ServiceMetrics = { + charts: ServiceMetricItem[] + timestamps: string[] +} diff --git a/bigtop-manager-ui/src/features/create-service/components/service-configurator.vue b/bigtop-manager-ui/src/features/create-service/components/service-configurator.vue index fccbaa309..311b4614d 100644 --- a/bigtop-manager-ui/src/features/create-service/components/service-configurator.vue +++ b/bigtop-manager-ui/src/features/create-service/components/service-configurator.vue @@ -95,8 +95,8 @@ for (const service of selectedServices.value) { if (!service.name || map.has(service.name)) continue - const requireds = extractRequireds(service.configs) - if (requireds.length > 0) map.set(service.name, requireds) + const requires = extractRequires(service.configs) + if (requires.length > 0) map.set(service.name, requires) } return map @@ -168,10 +168,7 @@ const matchKeyword = (keyword: string, prop: Property, config?: ServiceConfig) => { const lowerKeyword = keyword.toLowerCase() const includesProp = - prop.name?.toLowerCase().includes(lowerKeyword) || - prop.value?.toLowerCase().includes(lowerKeyword) || - prop.displayName?.toLowerCase().includes(lowerKeyword) - + prop.name?.toLowerCase().includes(lowerKeyword) || prop.value?.toLowerCase().includes(lowerKeyword) if (config != undefined) { return config.name?.toLowerCase().includes(lowerKeyword) || includesProp } @@ -186,13 +183,13 @@ * @param configs - The service configurations to check. * @returns A list of configurations with their required properties. */ - const extractRequireds = (configs?: ServiceConfig[]) => { + const extractRequires = (configs?: ServiceConfig[]) => { const result: ServiceConfig[] = [] for (const config of configs ?? []) { - const requireds = config.properties?.filter((p) => p.attrs?.required && p.value == '') ?? [] - if (requireds.length > 0) { - result.push({ [config.name!]: requireds }) + const requires = config.properties?.filter((p) => p.attrs?.required && p.value == '') ?? [] + if (requires.length > 0) { + result.push({ [config.name!]: requires }) } } @@ -299,12 +296,12 @@ />
- {{ property.displayName ?? property.name }} + {{ property.name }}
diff --git a/bigtop-manager-ui/src/features/metric/category-chart.vue b/bigtop-manager-ui/src/features/metric/category-chart.vue index c64e4c78a..5185df2eb 100644 --- a/bigtop-manager-ui/src/features/metric/category-chart.vue +++ b/bigtop-manager-ui/src/features/metric/category-chart.vue @@ -147,10 +147,10 @@ * @param legendMap - An array of [key, displayName] pairs. * @returns An array of ECharts series config objects with populated and formatted data. */ - const generateChartSeries = (data: Partial, legendMap: [string, string][]) => { + const generateChartSeries = (data: Partial, legendMap: [string, string][], config = baseConfig) => { return legendMap.map(([key, name]) => ({ name, - ...baseConfig, + ...config, data: (data[key] || []).map((v: unknown) => roundFixed(v)) })) } @@ -164,24 +164,25 @@ watchEffect(() => { let series = [] as any, - legend = [] as any + legend = { data: [] } as any + + const { series: temp_series = [] } = data.value + const xAxis = xAxisData.value?.map((v) => dayjs(Number(v) * 1000).format('HH:mm')) ?? [] if (legendMap.value) { legend = new Map(legendMap.value).values() series = generateChartSeries(data.value, legendMap.value) } else { - series = [ - { - name: title.value.toLowerCase(), - data: data.value.map((v) => roundFixed(v)) - } - ] + if (temp_series.length > 1) { + legend.data = temp_series.map((s) => s.name) + series = [...temp_series] + } else { + series = [{ name: title.value.toLowerCase(), data: data.value.map((v) => roundFixed(v)) }] + } } setOptions({ - xAxis: xAxisData.value - ? [{ data: xAxisData.value?.map((v) => dayjs(Number(v) * 1000).format('HH:mm')) || [] }] - : [], + xAxis: [{ data: xAxis ?? xAxis }], ...config.value, legend, series diff --git a/bigtop-manager-ui/src/features/service-management/configs.vue b/bigtop-manager-ui/src/features/service-management/configs.vue index 00027c6de..a1db8c52f 100644 --- a/bigtop-manager-ui/src/features/service-management/configs.vue +++ b/bigtop-manager-ui/src/features/service-management/configs.vue @@ -119,10 +119,7 @@ const matchKeyword = (keyword: string, prop: Property, config?: ServiceConfig) => { const lowerKeyword = keyword.toLowerCase() const includesProp = - prop.name?.toLowerCase().includes(lowerKeyword) || - prop.value?.toLowerCase().includes(lowerKeyword) || - prop.displayName?.toLowerCase().includes(lowerKeyword) - + prop.name?.toLowerCase().includes(lowerKeyword) || prop.value?.toLowerCase().includes(lowerKeyword) if (config != undefined) { return config.name?.toLowerCase().includes(lowerKeyword) || includesProp } @@ -233,12 +230,12 @@ />
- {{ property.displayName ?? property.name }} + {{ property.name }}
diff --git a/bigtop-manager-ui/src/features/service-management/index.vue b/bigtop-manager-ui/src/features/service-management/index.vue index 748fac7e5..d0679b95b 100644 --- a/bigtop-manager-ui/src/features/service-management/index.vue +++ b/bigtop-manager-ui/src/features/service-management/index.vue @@ -135,7 +135,10 @@ diff --git a/bigtop-manager-ui/src/features/service-management/overview.vue b/bigtop-manager-ui/src/features/service-management/overview.vue index a55e2ca59..89e9001a7 100644 --- a/bigtop-manager-ui/src/features/service-management/overview.vue +++ b/bigtop-manager-ui/src/features/service-management/overview.vue @@ -19,63 +19,42 @@ - -
- -
-
- -
- -
-
- -
- -
-
- +
- +
diff --git a/bigtop-manager-ui/src/pages/cluster-manage/cluster/index.vue b/bigtop-manager-ui/src/pages/cluster-manage/cluster/index.vue index 5bb75204f..3df288951 100644 --- a/bigtop-manager-ui/src/pages/cluster-manage/cluster/index.vue +++ b/bigtop-manager-ui/src/pages/cluster-manage/cluster/index.vue @@ -119,8 +119,8 @@ /> diff --git a/bigtop-manager-ui/src/pages/cluster-manage/hosts/overview.vue b/bigtop-manager-ui/src/pages/cluster-manage/hosts/overview.vue index ed8ef9e77..7e375cb0c 100644 --- a/bigtop-manager-ui/src/pages/cluster-manage/hosts/overview.vue +++ b/bigtop-manager-ui/src/pages/cluster-manage/hosts/overview.vue @@ -20,7 +20,7 @@