diff options
Diffstat (limited to 'ci/invidiousCI.ts')
-rw-r--r-- | ci/invidiousCI.ts | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/ci/invidiousCI.ts b/ci/invidiousCI.ts index d27a3a4e..d97250d0 100644 --- a/ci/invidiousCI.ts +++ b/ci/invidiousCI.ts @@ -1,31 +1,34 @@ -import { InvidiousInstance, instanceMap } from "./invidiousType" +import { InvidiousInstance, monitor } from "./invidiousType" import * as data from "../ci/invidious_instances.json"; // only https servers -const mapped: instanceMap = data - .filter((i: InvidiousInstance) => i[1]?.type === "https") - .map((instance: InvidiousInstance) => { +const mapped = (data as InvidiousInstance[]) + .filter((i) => + i[1]?.type === "https" + && i[1]?.monitor?.enabled + ) + .map((instance) => { + const monitor = instance[1].monitor as monitor; return { name: instance[0], url: instance[1].uri, - dailyRatios: instance[1].monitor.dailyRatios, - thirtyDayUptime: instance[1]?.monitor["30dRatio"].ratio, + uptime: monitor.uptime || 0, + down: monitor.down ?? false, + created_at: monitor.created_at, } }); // reliability and sanity checks const reliableCheck = mapped .filter(instance => { - // 30d uptime >= 90% - const thirtyDayUptime = Number(instance.thirtyDayUptime) >= 90; - // available for at least 80/90 days - const dailyRatioCheck = instance.dailyRatios.filter(status => status.label !== "black"); - return thirtyDayUptime && dailyRatioCheck.length >= 80; + const uptime = instance.uptime > 80 && !instance.down; + const nameIncluded = instance.url.includes(instance.name); + const ninetyDays = 90 * 24 * 60 * 60 * 1000; + const ninetyDaysAgo = new Date(Date.now() - ninetyDays); + const createdAt = new Date(instance.created_at).getTime() < ninetyDaysAgo.getTime(); + return uptime && nameIncluded && createdAt; }) - // url includes name - .filter(instance => instance.url.includes(instance.name)); -export function getInvidiousList(): string[] { - return reliableCheck.map(instance => instance.name).sort() -}
\ No newline at end of file +export const getInvidiousList = (): string[] => + reliableCheck.map(instance => instance.name).sort()
\ No newline at end of file |