Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(objectstorage):fix predictCard #4501

Merged
merged 1 commit into from Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion frontend/desktop/data/config.json
@@ -1,3 +1,3 @@
{
"scripts": []
}
}
2 changes: 1 addition & 1 deletion frontend/providers/applaunchpad/next-i18next.config.js
Expand Up @@ -9,4 +9,4 @@ module.exports = {
locales: ['en', 'zh'],
localeDetection: false
}
}
};
9 changes: 9 additions & 0 deletions frontend/providers/costcenter/next.config.js
Expand Up @@ -40,6 +40,15 @@ const nextConfig = {
]
}
];
},
async redirects() {
return [
{
source: '/',
destination: '/cost_overview',
permanent: true
}
];
}
};

Expand Down
Expand Up @@ -13,8 +13,8 @@ export function StorageIcon(props: IconProps) {
<path
d="M14.0999 9.67749H1.8999V13.6425H14.0999V9.67749Z"
stroke="#24282C"
stroke-width="1.22"
stroke-linejoin="round"
strokeWidth="1.22"
strokeLinejoin="round"
/>
<path
d="M11.5074 12.4226C11.7097 12.4226 11.9036 12.3423 12.0466 12.1993C12.1896 12.0563 12.2699 11.8623 12.2699 11.6601C12.2699 11.4579 12.1896 11.2639 12.0466 11.1209C11.9036 10.9779 11.7097 10.8976 11.5074 10.8976C11.3052 10.8976 11.1113 10.9779 10.9683 11.1209C10.8253 11.2639 10.7449 11.4579 10.7449 11.6601C10.7449 11.8623 10.8253 12.0563 10.9683 12.1993C11.1113 12.3423 11.3052 12.4226 11.5074 12.4226Z"
Expand All @@ -23,8 +23,8 @@ export function StorageIcon(props: IconProps) {
<path
d="M1.8999 9.67762L3.43649 2.3573H12.581L14.0999 9.67731"
stroke="#24282C"
stroke-width="1.22"
stroke-linejoin="round"
strokeWidth="1.22"
strokeLinejoin="round"
/>
</Icon>
);
Expand Down
Expand Up @@ -9,33 +9,50 @@ import { END_TIME, valuationMap } from '@/constants/payment';
import useBillingData from '@/hooks/useBillingData';
import { BillingType, Costs } from '@/types';
import { isSameDay, isSameHour, parseISO, subHours } from 'date-fns';

export default function PredictCard() {
const { t } = useTranslation();
const NOW_TIME = new Date();

const { data } = useBillingData({
type: BillingType.CONSUME,
endTime: END_TIME,
startTime: subHours(END_TIME, 1)
endTime: NOW_TIME,
startTime: subHours(NOW_TIME, 3)
});
const _state = useMemo<Costs & { total: number }>(() => {
let times = 3;
const items = data?.data?.status.item || [];
if (items.length > 0) {
const latest = items[0];
const time = parseISO(latest.time);
const now = new Date();
if (isSameDay(time, now) && isSameHour(time, now))
return {
...latest.costs,
total: latest.amount
};
}
return {
let state = {
cpu: 0,
memory: 0,
storage: 0,
network: 0,
port: 0,
gpu: 0,
total: 0
};
while (times--) {
let existSame = false;
items.reduce((pre, cur) => {
const time = parseISO(cur.time);
if (
isSameDay(time, subHours(NOW_TIME, 3 - times)) &&
isSameHour(time, subHours(NOW_TIME, 3 - times))
) {
pre.cpu += cur.costs.cpu;
pre.memory += cur.costs.memory;
pre.storage += cur.costs.storage;
pre.network += cur.costs.network;
pre.port += cur.costs.port;
pre.gpu += cur.costs.gpu || 0;
pre.total += cur.amount;
existSame = true;
}
return pre;
}, state);
if (existSame) break;
}
return state;
}, [data?.data?.status.item]);
const currency = useEnvStore((s) => s.currency);
const gpuEnabled = useEnvStore((state) => state.gpuEnabled);
Expand Down
6 changes: 4 additions & 2 deletions frontend/providers/costcenter/src/hooks/useBillingData.tsx
Expand Up @@ -23,9 +23,11 @@ export default function useBillingData(props?: {
startTime: formatISO(start, { representation: 'complete' }),
endTime: formatISO(end, { representation: 'complete' }),
page: 1,
pageSize: props ? props.pageSize : (delta + 1) * 48,
pageSize: props?.pageSize ? props.pageSize : (delta + 1) * 48,
type: props?.type ?? -1,
orderID: ''
orderID: '',
appType: '',
namespace: ''
};
return request<any, ApiResp<BillingData>, { spec: BillingSpec }>('/api/billing', {
method: 'POST',
Expand Down
Expand Up @@ -23,7 +23,6 @@ export default async function handler(req: NextApiRequest, resp: NextApiResponse
message: 'endTime is invalid'
});
const url = process.env.BILLING_URI + '/account/v1alpha1/namespaces';
console.log(url);
const res = await (
await fetch(url, {
method: 'POST',
Expand All @@ -36,7 +35,6 @@ export default async function handler(req: NextApiRequest, resp: NextApiResponse
})
})
).json();
console.log(res);
return jsonRes(resp, {
code: 200,
data: res.data,
Expand Down
1 change: 0 additions & 1 deletion frontend/providers/costcenter/src/pages/api/getQuota.ts
Expand Up @@ -70,7 +70,6 @@ export const memoryFormatToMi = (memory: string) => {
} else if (/Ti/gi.test(memory)) {
value = value * 1024 * 1024;
} else {
console.log('Invalid memory value');
value = 0;
}

Expand Down
2 changes: 1 addition & 1 deletion frontend/providers/costcenter/src/pages/billing/index.tsx
Expand Up @@ -78,7 +78,7 @@ function InOutTabPanel({ namespace }: { namespace: string }) {
const { data, isFetching, isSuccess } = useQuery(
['billing', { currentPage, startTime, endTime, orderID, selectType, namespace, appType }],
() => {
const spec = {
const spec: BillingSpec = {
page: currentPage,
pageSize: pageSize,
type: selectType,
Expand Down
3 changes: 2 additions & 1 deletion frontend/providers/costcenter/src/types/billing.ts
Expand Up @@ -13,7 +13,8 @@ export type BillingSpec =
endTime: string;
type: BillingType; //0为扣费,1为充值;用于billing数据查找:如为-1则查找type为0和1的数据,如果给定type值则查找type为给定值的数据
owner?: string; //用于billing数据中查找的owner字段值
namespace?: string;
namespace: string;
appType: string;
}
| {
orderID: string; //如果给定orderId,则查找该id的值,该值为唯一值,因此当orderId给定时忽略其他查找限定值
Expand Down
24 changes: 16 additions & 8 deletions frontend/providers/template/src/components/Banner/index.tsx
Expand Up @@ -69,7 +69,8 @@ export default function Banner() {
'.my-prev-button, .my-next-button': {
opacity: 1
}
}}>
}}
>
<Swiper
ref={swiperRef}
slidesPerView={1}
Expand All @@ -82,7 +83,8 @@ export default function Banner() {
autoplay={{
delay: 5000,
disableOnInteraction: false
}}>
}}
>
{SlideData.map((item, index) => (
<SwiperSlide key={index}>
<Flex w="full" h="213px" gap={'16px'} overflow={'hidden'}>
Expand All @@ -91,7 +93,8 @@ export default function Banner() {
bg={item.bg}
borderRadius={item.borderRadius}
p="16px 24px"
justifyContent={'space-between'}>
justifyContent={'space-between'}
>
<Flex flexDirection={'column'} justifyContent={'space-between'}>
<Flex gap="12px" alignItems={'center'} mt="26px">
<Box
Expand All @@ -101,7 +104,8 @@ export default function Banner() {
boxShadow={'0px 1px 2px 0.5px rgba(84, 96, 107, 0.20)'}
borderRadius={'4px'}
backgroundColor={'#fff'}
border={' 1px solid rgba(255, 255, 255, 0.50)'}>
border={' 1px solid rgba(255, 255, 255, 0.50)'}
>
<Image src={item.icon} alt="" width={'36px'} height={'36px'} />
</Box>
<Text fontSize={'20px'} color={'#FFF'} fontWeight={600}>
Expand All @@ -125,7 +129,8 @@ export default function Banner() {
bg={SlideData[(index + 1) % SlideData.length].bg}
borderRadius={SlideData[(index + 1) % SlideData.length].borderRadius}
p="16px 24px"
justifyContent={'space-between'}>
justifyContent={'space-between'}
>
<Flex flexDirection={'column'} justifyContent={'space-between'}>
<Flex gap="12px" alignItems={'center'} mt="26px">
<Box
Expand All @@ -135,7 +140,8 @@ export default function Banner() {
boxShadow={'0px 1px 2px 0.5px rgba(84, 96, 107, 0.20)'}
borderRadius={'4px'}
backgroundColor={'#fff'}
border={' 1px solid rgba(255, 255, 255, 0.50)'}>
border={' 1px solid rgba(255, 255, 255, 0.50)'}
>
<Image
src={SlideData[(index + 1) % SlideData.length].icon}
alt=""
Expand Down Expand Up @@ -173,7 +179,8 @@ export default function Banner() {
zIndex={10}
top="50%"
left="-30px"
transform="translateY(-50%) rotate(180deg)">
transform="translateY(-50%) rotate(180deg)"
>
<ArrowRightIcon />
</Box>
<Box
Expand All @@ -186,7 +193,8 @@ export default function Banner() {
zIndex={10}
top="50%"
right="-30px"
transform="translateY(-50%)">
transform="translateY(-50%)"
>
<ArrowRightIcon />
</Box>
</Box>
Expand Down
Expand Up @@ -7,7 +7,8 @@ export const ArrowRightIcon = (props: IconProps) => (
viewBox="0 0 21 67"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}>
{...props}
>
<path
d="M13.7104 32.9874L5.27107 8.60709C5.08599 8.07239 5.3694 7.48889 5.90411 7.3038C6.43881 7.11871 7.02232 7.40213 7.2074 7.93683L15.7578 32.6381C15.8203 32.8188 15.8294 33.005 15.7934 33.1796C15.7846 33.2311 15.7718 33.2827 15.7548 33.3339L7.18199 59.0522C7.00306 59.589 6.42285 59.8791 5.88606 59.7002C5.34926 59.5213 5.05916 58.9411 5.23809 58.4043L13.7104 32.9874Z"
fill="#8A95A7"
Expand Down
4 changes: 2 additions & 2 deletions frontend/providers/template/src/pages/index.tsx
Expand Up @@ -83,8 +83,8 @@ export default function AppList() {
borderRadius={'12px'}
background={'linear-gradient(180deg, #FFF 0%, rgba(255, 255, 255, 0.70) 100%)'}
py={'36px'}
px="42px">
{/* <Banner /> */}
px="42px"
>
{!!FastDeployTemplates?.length ? (
<Grid
justifyContent={'center'}
Expand Down
Expand Up @@ -86,7 +86,8 @@ const DelModal = ({
variant={'solid'}
isDisabled={inputValue !== name}
isLoading={loading}
onClick={handleDelApp}>
onClick={handleDelApp}
>
{t('Confirm deletion')}
</Button>
</ModalFooter>
Expand Down