mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-04 13:48:56 +02:00
feat: connection count usage (#9294)
This commit is contained in:
parent
8045fbe13a
commit
54766fd4a0
@ -52,6 +52,7 @@ import {
|
|||||||
type ChartDatasetType,
|
type ChartDatasetType,
|
||||||
getChartLabel,
|
getChartLabel,
|
||||||
toChartData as newToChartData,
|
toChartData as newToChartData,
|
||||||
|
toConnectionChartData,
|
||||||
} from './chart-functions';
|
} from './chart-functions';
|
||||||
import { periodsRecord, selectablePeriods } from './selectable-periods';
|
import { periodsRecord, selectablePeriods } from './selectable-periods';
|
||||||
|
|
||||||
@ -182,6 +183,7 @@ const useTrafficStats = (
|
|||||||
includedTraffic: number,
|
includedTraffic: number,
|
||||||
chartDataSelection: ChartDataSelection,
|
chartDataSelection: ChartDataSelection,
|
||||||
) => {
|
) => {
|
||||||
|
const connectionCountEnabled = useUiFlag('connectionCount');
|
||||||
const { result } = useTrafficSearch(
|
const { result } = useTrafficSearch(
|
||||||
chartDataSelection.grouping,
|
chartDataSelection.grouping,
|
||||||
toDateRange(chartDataSelection, currentDate),
|
toDateRange(chartDataSelection, currentDate),
|
||||||
@ -198,7 +200,9 @@ const useTrafficStats = (
|
|||||||
}
|
}
|
||||||
const traffic = result.data;
|
const traffic = result.data;
|
||||||
|
|
||||||
const chartData = newToChartData(traffic);
|
const chartData = connectionCountEnabled
|
||||||
|
? toConnectionChartData(traffic)
|
||||||
|
: newToChartData(traffic);
|
||||||
const usageTotal = calculateTotalUsage(traffic);
|
const usageTotal = calculateTotalUsage(traffic);
|
||||||
const overageCost = calculateOverageCost(
|
const overageCost = calculateOverageCost(
|
||||||
usageTotal,
|
usageTotal,
|
||||||
|
@ -6,6 +6,8 @@ import {
|
|||||||
addMonths,
|
addMonths,
|
||||||
differenceInCalendarDays,
|
differenceInCalendarDays,
|
||||||
differenceInCalendarMonths,
|
differenceInCalendarMonths,
|
||||||
|
getDaysInMonth,
|
||||||
|
parseISO,
|
||||||
} from 'date-fns';
|
} from 'date-fns';
|
||||||
import { formatDay, formatMonth } from './dates';
|
import { formatDay, formatMonth } from './dates';
|
||||||
import type { ChartDataSelection } from './chart-data-selection';
|
import type { ChartDataSelection } from './chart-data-selection';
|
||||||
@ -40,6 +42,46 @@ export const toChartData = (
|
|||||||
return { datasets, labels };
|
return { datasets, labels };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const toConnectionChartData = (
|
||||||
|
traffic: TrafficUsageDataSegmentedCombinedSchema,
|
||||||
|
): { datasets: ChartDatasetType[]; labels: string[] } => {
|
||||||
|
const { newRecord, labels } = getLabelsAndRecords(traffic);
|
||||||
|
const datasets = traffic.apiData
|
||||||
|
.sort(
|
||||||
|
(item1, item2) =>
|
||||||
|
endpointsInfo[item1.apiPath].order -
|
||||||
|
endpointsInfo[item2.apiPath].order,
|
||||||
|
)
|
||||||
|
.map((item) => {
|
||||||
|
const record = newRecord();
|
||||||
|
for (const dataPoint of Object.values(item.dataPoints)) {
|
||||||
|
const date = parseISO(dataPoint.period);
|
||||||
|
const requestCount = dataPoint.trafficTypes[0].count;
|
||||||
|
|
||||||
|
if (traffic.grouping === 'monthly') {
|
||||||
|
// 1 connections = 7200 * days in month requests per day
|
||||||
|
const daysInMonth = getDaysInMonth(date);
|
||||||
|
record[dataPoint.period] =
|
||||||
|
requestCount / (daysInMonth * 7200);
|
||||||
|
} else {
|
||||||
|
// 1 connection = 7200 requests per day
|
||||||
|
record[dataPoint.period] = requestCount / 7200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const epInfo = endpointsInfo[item.apiPath];
|
||||||
|
|
||||||
|
return {
|
||||||
|
label: epInfo.label,
|
||||||
|
data: Object.values(record),
|
||||||
|
backgroundColor: epInfo.color,
|
||||||
|
hoverBackgroundColor: epInfo.color,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return { datasets, labels };
|
||||||
|
};
|
||||||
|
|
||||||
const getLabelsAndRecords = (
|
const getLabelsAndRecords = (
|
||||||
traffic: TrafficUsageDataSegmentedCombinedSchema,
|
traffic: TrafficUsageDataSegmentedCombinedSchema,
|
||||||
) => {
|
) => {
|
||||||
|
@ -94,6 +94,7 @@ export type UiFlags = {
|
|||||||
frontendHeaderRedesign?: boolean;
|
frontendHeaderRedesign?: boolean;
|
||||||
dataUsageMultiMonthView?: boolean;
|
dataUsageMultiMonthView?: boolean;
|
||||||
uiGlobalFontSize?: boolean;
|
uiGlobalFontSize?: boolean;
|
||||||
|
connectionCount?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface IVersionInfo {
|
export interface IVersionInfo {
|
||||||
|
@ -65,7 +65,8 @@ export type IFlagKey =
|
|||||||
| 'uniqueSdkTracking'
|
| 'uniqueSdkTracking'
|
||||||
| 'frontendHeaderRedesign'
|
| 'frontendHeaderRedesign'
|
||||||
| 'dataUsageMultiMonthView'
|
| 'dataUsageMultiMonthView'
|
||||||
| 'uiGlobalFontSize';
|
| 'uiGlobalFontSize'
|
||||||
|
| 'connectionCount';
|
||||||
|
|
||||||
export type IFlags = Partial<{ [key in IFlagKey]: boolean | Variant }>;
|
export type IFlags = Partial<{ [key in IFlagKey]: boolean | Variant }>;
|
||||||
|
|
||||||
@ -314,6 +315,10 @@ const flags: IFlags = {
|
|||||||
process.env.EXPERIMENTAL_UI_GLOBAL_FONT_SIZE_NAME,
|
process.env.EXPERIMENTAL_UI_GLOBAL_FONT_SIZE_NAME,
|
||||||
false,
|
false,
|
||||||
),
|
),
|
||||||
|
connectionCount: parseEnvVarBoolean(
|
||||||
|
process.env.EXPERIMENTAL_CONNECTION_COUNT,
|
||||||
|
false,
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const defaultExperimentalOptions: IExperimentalOptions = {
|
export const defaultExperimentalOptions: IExperimentalOptions = {
|
||||||
|
Loading…
Reference in New Issue
Block a user