mirror of
https://github.com/itdoginfo/podkop.git
synced 2025-12-06 11:36:50 +03:00
133 lines
3.4 KiB
TypeScript
133 lines
3.4 KiB
TypeScript
import { DIAGNOSTICS_CHECKS_MAP } from './contstants';
|
|
import { PodkopShellMethods } from '../../../methods';
|
|
import { updateCheckStore } from './updateCheckStore';
|
|
import { getMeta } from '../helpers/getMeta';
|
|
import { getDashboardSections } from '../../../methods/custom/getDashboardSections';
|
|
import { IDiagnosticsChecksItem } from '../../../services';
|
|
|
|
export async function runSectionsCheck() {
|
|
const { order, title, code } = DIAGNOSTICS_CHECKS_MAP.OUTBOUNDS;
|
|
|
|
updateCheckStore({
|
|
order,
|
|
code,
|
|
title,
|
|
description: _('Checking, please wait'),
|
|
state: 'loading',
|
|
items: [],
|
|
});
|
|
|
|
const sections = await getDashboardSections();
|
|
|
|
if (!sections.success) {
|
|
updateCheckStore({
|
|
order,
|
|
code,
|
|
title,
|
|
description: _('Cannot receive checks result'),
|
|
state: 'error',
|
|
items: [],
|
|
});
|
|
|
|
throw new Error('Sections checks failed');
|
|
}
|
|
|
|
const items = (await Promise.all(
|
|
sections.data.map(async (section) => {
|
|
async function getLatency() {
|
|
if (section.withTagSelect) {
|
|
const latencyGroup = await PodkopShellMethods.getClashApiGroupLatency(
|
|
section.code,
|
|
);
|
|
|
|
const selectedOutbound = section.outbounds.find(
|
|
(item) => item.selected,
|
|
);
|
|
|
|
const isUrlTest = selectedOutbound?.type === 'URLTest';
|
|
|
|
const success = latencyGroup.success && !latencyGroup.data.message;
|
|
|
|
if (success) {
|
|
if (isUrlTest) {
|
|
const latency = Object.values(latencyGroup.data)
|
|
.map((item) => (item ? `${item}ms` : 'n/a'))
|
|
.join(' / ');
|
|
|
|
return {
|
|
success: true,
|
|
latency: `[${_('Fastest')}] ${latency}`,
|
|
};
|
|
}
|
|
|
|
const selectedProxyDelay =
|
|
latencyGroup.data?.[selectedOutbound?.code ?? ''];
|
|
|
|
if (selectedProxyDelay) {
|
|
return {
|
|
success: true,
|
|
latency: `[${selectedOutbound?.displayName ?? ''}] ${selectedProxyDelay}ms`,
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
latency: `[${selectedOutbound?.displayName ?? ''}] ${_('Not responding')}`,
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
latency: _('Not responding'),
|
|
};
|
|
}
|
|
|
|
const latencyProxy = await PodkopShellMethods.getClashApiProxyLatency(
|
|
section.code,
|
|
);
|
|
|
|
const success = latencyProxy.success && !latencyProxy.data.message;
|
|
|
|
if (success) {
|
|
return {
|
|
success: true,
|
|
latency: `${latencyProxy.data.delay} ms`,
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
latency: _('Not responding'),
|
|
};
|
|
}
|
|
|
|
const { latency, success } = await getLatency();
|
|
|
|
return {
|
|
state: success ? 'success' : 'error',
|
|
key: section.displayName,
|
|
value: latency,
|
|
};
|
|
}),
|
|
)) as Array<IDiagnosticsChecksItem>;
|
|
|
|
const allGood = items.every((item) => item.state === 'success');
|
|
|
|
const atLeastOneGood = items.some((item) => item.state === 'success');
|
|
|
|
const { state, description } = getMeta({ atLeastOneGood, allGood });
|
|
|
|
updateCheckStore({
|
|
order,
|
|
code,
|
|
title,
|
|
description,
|
|
state,
|
|
items,
|
|
});
|
|
|
|
if (!atLeastOneGood) {
|
|
throw new Error('Sections checks failed');
|
|
}
|
|
}
|