From f98921b205a9adeb087867ef43441b35ff5d5946 Mon Sep 17 00:00:00 2001 From: xudaotutou <13435638964@163.com> Date: Mon, 11 Sep 2023 17:25:43 +0800 Subject: [PATCH] feat(costcenter): supported for network (#3870) --- .../providers/costcenter/public/locales/en/common.json | 1 + .../providers/costcenter/public/locales/zh/common.json | 1 + .../costcenter/src/components/billing/billingTable.tsx | 7 ++++--- .../src/components/cost_overview/components/lineChart.tsx | 6 +++--- .../src/components/cost_overview/components/pieChart.tsx | 3 ++- .../costcenter/src/components/cost_overview/cost.tsx | 1 + .../costcenter/src/components/valuation/predictCard.tsx | 3 ++- frontend/providers/costcenter/src/constants/billing.ts | 3 ++- frontend/providers/costcenter/src/constants/payment.ts | 4 ++-- .../providers/costcenter/src/pages/api/billing/index.ts | 5 ++++- .../providers/costcenter/src/pages/cost_overview/index.tsx | 2 ++ frontend/providers/costcenter/src/stores/billing.ts | 4 ++++ frontend/providers/costcenter/src/types/billing.ts | 3 ++- 13 files changed, 30 insertions(+), 13 deletions(-) diff --git a/frontend/providers/costcenter/public/locales/en/common.json b/frontend/providers/costcenter/public/locales/en/common.json index e1625f72a99..f2bc714feec 100644 --- a/frontend/providers/costcenter/public/locales/en/common.json +++ b/frontend/providers/costcenter/public/locales/en/common.json @@ -34,6 +34,7 @@ "Type": "Type", "CPU": "CPU", "Memory": "Memory", + "Network": "Network", "Storage": "Storage", "Total Amount": "Total Amount", "Transfer Amount": "Transfer Amount", diff --git a/frontend/providers/costcenter/public/locales/zh/common.json b/frontend/providers/costcenter/public/locales/zh/common.json index 49736389646..8afaa5cbac5 100644 --- a/frontend/providers/costcenter/public/locales/zh/common.json +++ b/frontend/providers/costcenter/public/locales/zh/common.json @@ -36,6 +36,7 @@ "CPU": "CPU", "Memory": "内存", "Storage": "存储卷", + "Network": "网络", "Total Amount": "总金额", "Payment Result": "支付结果", "Payment Successful": "支付成功", diff --git a/frontend/providers/costcenter/src/components/billing/billingTable.tsx b/frontend/providers/costcenter/src/components/billing/billingTable.tsx index dbacd6f9bb5..f9f9ef676eb 100644 --- a/frontend/providers/costcenter/src/components/billing/billingTable.tsx +++ b/frontend/providers/costcenter/src/components/billing/billingTable.tsx @@ -31,9 +31,9 @@ export function BillingTable({ data }: { data: BillingItem[] }) { > {t(item)} - {['CPU', 'Gpu', 'Memory', 'Storage', 'Total Amount'].includes(item) && ( - - )} + {['CPU', 'Gpu', 'Memory', 'Storage', 'Network', 'Total Amount'].includes( + item + ) && } ))} @@ -89,6 +89,7 @@ export function BillingTable({ data }: { data: BillingItem[] }) { {!item.type ? {formatMoney(item.costs?.cpu || 0)} : '-'} {!item.type ? {formatMoney(item.costs?.memory || 0)} : '-'} {!item.type ? {formatMoney(item.costs?.storage || 0)} : '-'} + {!item.type ? {formatMoney(item.costs?.network || 0)} : '-'} {gpuEnabled && ( {!item.type ? {formatMoney(item.costs?.gpu || 0)} : '-'} )} diff --git a/frontend/providers/costcenter/src/components/cost_overview/components/lineChart.tsx b/frontend/providers/costcenter/src/components/cost_overview/components/lineChart.tsx index 9b1efc51d2c..47bc0adee15 100644 --- a/frontend/providers/costcenter/src/components/cost_overview/components/lineChart.tsx +++ b/frontend/providers/costcenter/src/components/cost_overview/components/lineChart.tsx @@ -16,7 +16,6 @@ import { BillingItem } from '@/types/billing'; import { parseISO, format, isSameDay, startOfDay } from 'date-fns'; import { formatMoney } from '@/utils/format'; import { useTranslation } from 'next-i18next'; -import useBillingStore from '@/stores/billing'; import useOverviewStore from '@/stores/overview'; echarts.use([ @@ -37,15 +36,16 @@ export default function Trend({ data }: { data: BillingItem[] }) { const sourceValue = data .filter((v) => v.type === 0) - .map<[Date, number, number, number, number]>((item) => [ + .map<[Date, number, number, number, number, number]>((item) => [ parseISO(item.time), item.costs?.cpu || 0, item.costs?.memory || 0, item.costs?.storage || 0, + item.costs?.network || 0, item.amount ]) // 归并为当天的开始 - .reduce<[Date, number, number, number, number][]>((pre, cur) => { + .reduce<[Date, number, number, number, number, number][]>((pre, cur) => { if (pre.length !== 0) { const precost = pre[pre.length - 1]; if (isSameDay(precost[0], cur[0])) { diff --git a/frontend/providers/costcenter/src/components/cost_overview/components/pieChart.tsx b/frontend/providers/costcenter/src/components/cost_overview/components/pieChart.tsx index 0bb47d9ca7f..dcf5fa1ae5f 100644 --- a/frontend/providers/costcenter/src/components/cost_overview/components/pieChart.tsx +++ b/frontend/providers/costcenter/src/components/cost_overview/components/pieChart.tsx @@ -22,7 +22,7 @@ echarts.use([ export default function CostChart({ data }: { data: BillingData['status']['deductionAmount'] }) { const { t } = useTranslation(); - const { cpu = 0, memory = 0, storage = 0, gpu = 0 } = data; + const { cpu = 0, memory = 0, storage = 0, gpu = 0, network = 0 } = data; const gpuEnabled = useEnvStore((state) => state.gpuEnabled); const radius = useBreakpointValue({ xl: ['45%', '70%'], @@ -42,6 +42,7 @@ export default function CostChart({ data }: { data: BillingData['status']['deduc ['cpu', formatMoney(cpu).toFixed(2)], ['memory', formatMoney(memory).toFixed(2)], ['storage', formatMoney(storage).toFixed(2)], + ['network', formatMoney(network).toFixed(2)], ...(gpuEnabled ? [['gpu', formatMoney(gpu).toFixed(2)]] : []) ], [cpu, memory, storage, gpu, gpuEnabled] diff --git a/frontend/providers/costcenter/src/components/cost_overview/cost.tsx b/frontend/providers/costcenter/src/components/cost_overview/cost.tsx index b3335c20b15..5ecb752a861 100644 --- a/frontend/providers/costcenter/src/components/cost_overview/cost.tsx +++ b/frontend/providers/costcenter/src/components/cost_overview/cost.tsx @@ -15,6 +15,7 @@ export const Cost = memo(function Cost() { cpu: _deduction?.cpu || 0, memory: _deduction?.memory || 0, storage: _deduction?.storage || 0, + network: _deduction?.network || 0, gpu: _deduction?.gpu || 0 }; return ( diff --git a/frontend/providers/costcenter/src/components/valuation/predictCard.tsx b/frontend/providers/costcenter/src/components/valuation/predictCard.tsx index 6dca2eff335..232736adcbd 100644 --- a/frontend/providers/costcenter/src/components/valuation/predictCard.tsx +++ b/frontend/providers/costcenter/src/components/valuation/predictCard.tsx @@ -15,7 +15,8 @@ export default function PredictCard() { const origin = [ { name: 'CPU', cost: state.cpu }, { name: 'Memory', cost: state.memory }, - { name: 'Storage', cost: state.storage } + { name: 'Storage', cost: state.storage }, + { name: 'Network', cost: state.network } ]; if (!gpuEnabled) { origin.push({ name: total, cost: state.cpu + state.memory + state.storage }); diff --git a/frontend/providers/costcenter/src/constants/billing.ts b/frontend/providers/costcenter/src/constants/billing.ts index efe3f98f222..cee9f747ed1 100644 --- a/frontend/providers/costcenter/src/constants/billing.ts +++ b/frontend/providers/costcenter/src/constants/billing.ts @@ -4,7 +4,8 @@ export const TableHeaders = [ 'Type', 'CPU', 'Memory', - 'Storage' + 'Storage', + 'Network' // 'GPU', // 'Total Amount' ] as const; diff --git a/frontend/providers/costcenter/src/constants/payment.ts b/frontend/providers/costcenter/src/constants/payment.ts index d008570dafc..9c0783e9503 100644 --- a/frontend/providers/costcenter/src/constants/payment.ts +++ b/frontend/providers/costcenter/src/constants/payment.ts @@ -91,6 +91,6 @@ export const valuationMap = new Map([ ['cpu', { unit: 'Core', scale: 1000, bg: '#33BABB', idx: 0 }], ['memory', { unit: 'GB', scale: 1024, bg: '#36ADEF', idx: 1 }], ['storage', { unit: 'GB', scale: 1024, bg: '#8172D8', idx: 2 }], - ['gpu', { unit: 'GPU', scale: 1000, bg: '#89CD11', idx: 3 }] - // ['network', { unit: 'M', scale: 1, bg: '#89CD11', idx: 4 }] + ['gpu', { unit: 'GPU', scale: 1000, bg: '#89CD11', idx: 3 }], + ['network', { unit: 'M', scale: 1, bg: '#89CD11', idx: 4 }] ]); diff --git a/frontend/providers/costcenter/src/pages/api/billing/index.ts b/frontend/providers/costcenter/src/pages/api/billing/index.ts index acb70802f0a..e98db87fbe1 100644 --- a/frontend/providers/costcenter/src/pages/api/billing/index.ts +++ b/frontend/providers/costcenter/src/pages/api/billing/index.ts @@ -13,6 +13,7 @@ const convertGpu = (_deduction?: RawCosts) => if (cur[0] === 'cpu') pre.cpu = cur[1]; else if (cur[0] === 'memory') pre.memory = cur[1]; else if (cur[0] === 'storage') pre.storage = cur[1]; + else if (cur[0] === 'network') pre.network = cur[1]; else if (cur[0].startsWith('gpu-')) { typeof pre.gpu === 'number' && (pre.gpu += cur[1]); } @@ -22,13 +23,15 @@ const convertGpu = (_deduction?: RawCosts) => cpu: 0, memory: 0, storage: 0, - gpu: 0 + gpu: 0, + network: 0 } ) : { cpu: 0, memory: 0, storage: 0, + network: 0, gpu: 0 }; export default async function handler(req: NextApiRequest, resp: NextApiResponse) { diff --git a/frontend/providers/costcenter/src/pages/cost_overview/index.tsx b/frontend/providers/costcenter/src/pages/cost_overview/index.tsx index 2faa8210c2f..b1b5cb2940f 100644 --- a/frontend/providers/costcenter/src/pages/cost_overview/index.tsx +++ b/frontend/providers/costcenter/src/pages/cost_overview/index.tsx @@ -26,6 +26,7 @@ function CostOverview() { const updateCPU = useBillingStore((state) => state.updateCpu); const updateMemory = useBillingStore((state) => state.updateMemory); const updateStorage = useBillingStore((state) => state.updateStorage); + const updateNetwork = useBillingStore((state) => state.updateNetwork); const updateGpu = useBillingStore((state) => state.updateGpu); const cookie = getCookie('NEXT_LOCALE'); useEffect(() => { @@ -75,6 +76,7 @@ function CostOverview() { updateCPU(item?.cpu || 0); updateMemory(item?.memory || 0); updateStorage(item?.storage || 0); + updateNetwork(item?.network || 0); updateGpu(item?.gpu || 0); }, [costBillingItems, updateCPU, updateMemory, updateStorage]); const rechargeRef = useRef(); diff --git a/frontend/providers/costcenter/src/stores/billing.ts b/frontend/providers/costcenter/src/stores/billing.ts index aed8ff4a0e8..30c897fa665 100644 --- a/frontend/providers/costcenter/src/stores/billing.ts +++ b/frontend/providers/costcenter/src/stores/billing.ts @@ -4,10 +4,12 @@ type BillingState = { cpu: number; memory: number; storage: number; + network: number; gpu: number; updateCpu: (cpu: number) => void; updateMemory: (memory: number) => void; updateStorage: (storage: number) => void; + updateNetwork: (network: number) => void; updateGpu: (gpu: number) => void; }; const useBillingStore = create((set) => ({ @@ -15,9 +17,11 @@ const useBillingStore = create((set) => ({ memory: 0, storage: 0, gpu: 0, + network: 0, updateCpu: (cpu: number) => set({ cpu: formatMoney(cpu) }), updateMemory: (memory: number) => set({ memory: formatMoney(memory) }), updateStorage: (storage: number) => set({ storage: formatMoney(storage) }), + updateNetwork: (network: number) => set({ network: formatMoney(network) }), updateGpu: (gpu: number) => set({ gpu: formatMoney(gpu) }) })); diff --git a/frontend/providers/costcenter/src/types/billing.ts b/frontend/providers/costcenter/src/types/billing.ts index 471ce001731..4af186ebe87 100644 --- a/frontend/providers/costcenter/src/types/billing.ts +++ b/frontend/providers/costcenter/src/types/billing.ts @@ -10,11 +10,12 @@ export type BillingSpec = | { orderID: string; //如果给定orderId,则查找该id的值,该值为唯一值,因此当orderId给定时忽略其他查找限定值 }; -export type RawCosts = Record<'cpu' | 'memory' | 'storage' | `gpu-${string}`, number>; +export type RawCosts = Record<'network' | 'cpu' | 'memory' | 'storage' | `gpu-${string}`, number>; export type Costs = { cpu: number; memory: number; storage: number; + network: number; gpu?: number; }; export type BillingItem = {