mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat(1-3267): use new api for chart
This commit is contained in:
		
							parent
							
								
									b2abeff3b7
								
							
						
					
					
						commit
						b0b80d913f
					
				@ -20,18 +20,12 @@ import {
 | 
			
		||||
} from 'chart.js';
 | 
			
		||||
 | 
			
		||||
import { Bar } from 'react-chartjs-2';
 | 
			
		||||
import {
 | 
			
		||||
    useInstanceTrafficMetrics,
 | 
			
		||||
    useInstanceTrafficMetrics2,
 | 
			
		||||
} from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
 | 
			
		||||
import { useInstanceTrafficMetrics2 } from 'hooks/api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
 | 
			
		||||
import type { Theme } from '@mui/material/styles/createTheme';
 | 
			
		||||
import Grid from '@mui/material/Grid';
 | 
			
		||||
import { NetworkTrafficUsagePlanSummary } from './NetworkTrafficUsagePlanSummary';
 | 
			
		||||
import annotationPlugin from 'chartjs-plugin-annotation';
 | 
			
		||||
import {
 | 
			
		||||
    type ChartDatasetType,
 | 
			
		||||
    useTrafficDataEstimation,
 | 
			
		||||
} from 'hooks/useTrafficData';
 | 
			
		||||
import { newToChartData, useTrafficDataEstimation } from 'hooks/useTrafficData';
 | 
			
		||||
import { customHighlightPlugin } from 'component/common/Chart/customHighlightPlugin';
 | 
			
		||||
import { formatTickValue } from 'component/common/Chart/formatTickValue';
 | 
			
		||||
import { useTrafficLimit } from './hooks/useTrafficLimit';
 | 
			
		||||
@ -214,11 +208,16 @@ export const NetworkTrafficUsage: FC = () => {
 | 
			
		||||
        );
 | 
			
		||||
    }, [theme, period]);
 | 
			
		||||
 | 
			
		||||
    const traffic = useInstanceTrafficMetrics(period);
 | 
			
		||||
    const traffic = useInstanceTrafficMetrics2({
 | 
			
		||||
        format: 'daily',
 | 
			
		||||
        month: period,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const [labels, setLabels] = useState<number[]>([]);
 | 
			
		||||
    const data = newToChartData(traffic.usage); // <- why don't we do this?
 | 
			
		||||
 | 
			
		||||
    const [datasets, setDatasets] = useState<ChartDatasetType[]>([]);
 | 
			
		||||
    // const [labels, setLabels] = useState<number[]>([]);
 | 
			
		||||
 | 
			
		||||
    // const [datasets, setDatasets] = useState<ChartDatasetType[]>([]);
 | 
			
		||||
 | 
			
		||||
    const [usageTotal, setUsageTotal] = useState<number>(0);
 | 
			
		||||
 | 
			
		||||
@ -226,30 +225,21 @@ export const NetworkTrafficUsage: FC = () => {
 | 
			
		||||
 | 
			
		||||
    const [estimatedMonthlyCost, setEstimatedMonthlyCost] = useState<number>(0);
 | 
			
		||||
 | 
			
		||||
    const data = {
 | 
			
		||||
        labels,
 | 
			
		||||
        datasets,
 | 
			
		||||
    };
 | 
			
		||||
    // const data = {
 | 
			
		||||
    //     labels,
 | 
			
		||||
    //     datasets,
 | 
			
		||||
    // };
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        setDatasets(toChartData(labels, traffic, endpointsInfo));
 | 
			
		||||
    }, [labels, traffic]);
 | 
			
		||||
    // useEffect(() => {
 | 
			
		||||
    //     setDatasets(toChartData(labels, traffic, endpointsInfo));
 | 
			
		||||
    // }, [labels, traffic]);
 | 
			
		||||
 | 
			
		||||
    // console.log(
 | 
			
		||||
    //     'data',
 | 
			
		||||
    //     data,
 | 
			
		||||
    //     'traffic',
 | 
			
		||||
    //     traffic,
 | 
			
		||||
    //     'endpointsInfo',
 | 
			
		||||
    //     endpointsInfo,
 | 
			
		||||
    // );
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (record && period) {
 | 
			
		||||
            const periodData = record[period];
 | 
			
		||||
            setLabels(getDayLabels(periodData.dayCount));
 | 
			
		||||
        }
 | 
			
		||||
    }, [period]);
 | 
			
		||||
    // useEffect(() => {
 | 
			
		||||
    //     if (record && period) {
 | 
			
		||||
    //         const periodData = record[period];
 | 
			
		||||
    //         setLabels(getDayLabels(periodData.dayCount));
 | 
			
		||||
    //     }
 | 
			
		||||
    // }, [period]);
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (data) {
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ type Selection =
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
const fromSelection = (selection: Selection) => {
 | 
			
		||||
    const fmt = (date: Date) => format(date, 'YYYY-MM-dd');
 | 
			
		||||
    const fmt = (date: Date) => format(date, 'yyyy-MM-dd');
 | 
			
		||||
    if (selection.format === 'daily') {
 | 
			
		||||
        const month = new Date(selection.month);
 | 
			
		||||
        const from = fmt(month);
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { useState } from 'react';
 | 
			
		||||
import type {
 | 
			
		||||
    IInstanceTrafficMetricsResponse,
 | 
			
		||||
    InstanceTrafficMetricsResponse2,
 | 
			
		||||
    SegmentedSchema,
 | 
			
		||||
    SegmentedSchemaApiData,
 | 
			
		||||
} from './api/getters/useInstanceTrafficMetrics/useInstanceTrafficMetrics';
 | 
			
		||||
import type { ChartDataset } from 'chart.js';
 | 
			
		||||
@ -115,29 +115,41 @@ const toPeriodsRecord = (
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const toMonthlyChartData = (
 | 
			
		||||
    traffic: InstanceTrafficMetricsResponse2,
 | 
			
		||||
    endpointsInfo: Record<string, EndpointInfo>,
 | 
			
		||||
): { datasets: ChartDatasetType[]; labels: string[] } => {
 | 
			
		||||
    if (!traffic || !traffic.usage || !traffic.usage.apiData) {
 | 
			
		||||
export const newToChartData = (
 | 
			
		||||
    traffic?: SegmentedSchema,
 | 
			
		||||
): { datasets: ChartDatasetType[]; labels: (string | number)[] } => {
 | 
			
		||||
    if (!traffic) {
 | 
			
		||||
        return { labels: [], datasets: [] };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const from = new Date(traffic.usage.period.from);
 | 
			
		||||
    const to = new Date(traffic.usage.period.to);
 | 
			
		||||
    const numMonths = Math.abs(differenceInCalendarMonths(to, from));
 | 
			
		||||
    const formatMonth = (date: Date) => format(date, 'yyyy-MM');
 | 
			
		||||
    if (traffic.format === 'monthly') {
 | 
			
		||||
        return toMonthlyChartData(traffic);
 | 
			
		||||
    } else {
 | 
			
		||||
        return toDailyChartData(traffic, endpointsInfo);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
    const datasets = traffic.usage.apiData
 | 
			
		||||
        .filter((item) => !!endpointsInfo[item.apiPath])
 | 
			
		||||
const prepareApiData = (apiData: SegmentedSchema['apiData']) =>
 | 
			
		||||
    apiData
 | 
			
		||||
        .filter((item) => item.apiPath in endpointsInfo)
 | 
			
		||||
        .sort(
 | 
			
		||||
            (item1: SegmentedSchemaApiData, item2: SegmentedSchemaApiData) =>
 | 
			
		||||
                endpointsInfo[item1.apiPath].order -
 | 
			
		||||
                endpointsInfo[item2.apiPath].order,
 | 
			
		||||
        )
 | 
			
		||||
        .map((item: SegmentedSchemaApiData) => {
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
const toMonthlyChartData = (
 | 
			
		||||
    traffic: SegmentedSchema,
 | 
			
		||||
): { datasets: ChartDatasetType[]; labels: string[] } => {
 | 
			
		||||
    const from = new Date(traffic.period.from);
 | 
			
		||||
    const to = new Date(traffic.period.to);
 | 
			
		||||
    const numMonths = Math.abs(differenceInCalendarMonths(to, from)) + 1;
 | 
			
		||||
    const formatMonth = (date: Date) => format(date, 'yyyy-MM');
 | 
			
		||||
 | 
			
		||||
    const datasets = prepareApiData(traffic.apiData).map(
 | 
			
		||||
        (item: SegmentedSchemaApiData) => {
 | 
			
		||||
            const monthsRec: { [month: string]: number } = {};
 | 
			
		||||
            for (let i = 0; i <= numMonths; i++) {
 | 
			
		||||
            for (let i = 0; i < numMonths; i++) {
 | 
			
		||||
                monthsRec[formatMonth(addMonths(from, i))] = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -153,7 +165,8 @@ const toMonthlyChartData = (
 | 
			
		||||
                backgroundColor: epInfo.color,
 | 
			
		||||
                hoverBackgroundColor: epInfo.color,
 | 
			
		||||
            };
 | 
			
		||||
        });
 | 
			
		||||
        },
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const labels = Array.from({ length: numMonths + 1 }).map((_, index) =>
 | 
			
		||||
        formatMonth(addMonths(from, index)),
 | 
			
		||||
@ -219,20 +232,16 @@ const toMonthlyChartData = (
 | 
			
		||||
//     };
 | 
			
		||||
 | 
			
		||||
const toDailyChartData = (
 | 
			
		||||
    traffic: InstanceTrafficMetricsResponse2,
 | 
			
		||||
    traffic: SegmentedSchema,
 | 
			
		||||
    endpointsInfo: Record<string, EndpointInfo>,
 | 
			
		||||
): { datasets: ChartDatasetType[]; labels: number[] } => {
 | 
			
		||||
    if (!traffic || !traffic.usage || !traffic.usage.apiData) {
 | 
			
		||||
        return { datasets: [], labels: [] };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const from = new Date(traffic.usage.period.from);
 | 
			
		||||
    const to = new Date(traffic.usage.period.to);
 | 
			
		||||
    const numDays = Math.abs(differenceInCalendarDays(to, from));
 | 
			
		||||
    const from = new Date(traffic.period.from);
 | 
			
		||||
    const to = new Date(traffic.period.to);
 | 
			
		||||
    const numDays = Math.abs(differenceInCalendarDays(to, from)) + 1;
 | 
			
		||||
    const formatDay = (date: Date) => format(date, 'yyyy-MM-dd');
 | 
			
		||||
 | 
			
		||||
    const daysRec: { [day: string]: number } = {};
 | 
			
		||||
    for (let i = 0; i <= numDays; i++) {
 | 
			
		||||
    for (let i = 0; i < numDays; i++) {
 | 
			
		||||
        daysRec[formatDay(addDays(from, i))] = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -240,7 +249,7 @@ const toDailyChartData = (
 | 
			
		||||
        ...daysRec,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const datasets = traffic.usage.apiData
 | 
			
		||||
    const datasets = traffic.apiData
 | 
			
		||||
        .filter((item) => !!endpointsInfo[item.apiPath])
 | 
			
		||||
        .sort(
 | 
			
		||||
            (item1: SegmentedSchemaApiData, item2: SegmentedSchemaApiData) =>
 | 
			
		||||
@ -264,9 +273,10 @@ const toDailyChartData = (
 | 
			
		||||
            };
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    // simplification: assumings days run in a single month from the 1st onwards
 | 
			
		||||
    // simplification: assuming days run in a single month from the 1st onwards
 | 
			
		||||
    const labels = Array.from({ length: numDays }).map((_, index) => index + 1);
 | 
			
		||||
 | 
			
		||||
    console.log(labels, datasets);
 | 
			
		||||
    return { datasets, labels };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user