Files
pyMC_Repeater/repeater/web/html/assets/dataService-KNFTsxUb.js
T
2026-05-18 14:50:45 +01:00

1 line
5.0 KiB
JavaScript

import{J as e,Y as t,o as n}from"./runtime-core.esm-bundler-C5QBTNWE.js";import{n as r}from"./pinia-DP0dFoGY.js";import{t as i}from"./api-DBiYn0RS.js";import{t as a}from"./packets-BBUX0ge1.js";import{t as o}from"./system-BfTzQTOF.js";var s={0:`Unknown`,1:`Chat Node`,2:`Repeater`,3:`Room Server`,4:`Hybrid Node`},c=r(`neighbors`,()=>{let e=t({}),r=t(!1),a=t(null),o=t(48),c=n(()=>Object.values(e.value).flat()),l=n(()=>c.value.length);function u(e=10*6e4){return a.value===null?!0:Date.now()-a.value>e}async function d(t=o.value){r.value=!0,o.value=t;let n=Object.entries(s),c=await Promise.allSettled(n.map(async([e,n])=>{try{let r=[],a=0,o=0;for(;o<200;){let e=await i.get(`/adverts_by_contact_type?contact_type=${encodeURIComponent(n)}&hours=${t}&limit=500&offset=${a}`),s=e.success&&Array.isArray(e.data)?e.data:[];if(s.length===0||(r.push(...s),s.length<500))break;a+=500,o+=1}return{typeKey:e,adverts:r}}catch{return{typeKey:e,adverts:[]}}})),l={};for(let e of c)e.status===`fulfilled`&&e.value.adverts.length>0&&(l[e.value.typeKey]=e.value.adverts);e.value=l,a.value=Date.now(),r.value=!1}function f(){e.value={},r.value=!1,a.value=null,o.value=48}return{advertsByType:e,isLoading:r,lastFetched:a,currentHours:o,allAdverts:c,totalCount:l,isStale:u,fetchAll:d,reset:f}}),l={stats:3e4,packetStats:6e4,noiseFloor:15e3,recentPackets:3e4,sparklines:3e5,advertTier:6e4,neighbors:10*6e4},u=r(`dataService`,()=>{let n=o(),r=a(),s=c(),u=t({currentTier:`unknown`,advertsAllowed:0,advertsDropped:0,activePenalties:0}),d=t(!1),f=t(null),p=e({stats:`pending`,packetStats:`pending`,noiseFloor:`pending`,recentPackets:`pending`,sparklines:`pending`,advertTier:`pending`,neighbors:`pending`}),m=new Map,h=new Map,g=[],_=!1,v=null;async function y(e,t=2){for(let n=0;n<t;n++)try{return await e()}catch(e){if(n===t-1)throw e;await new Promise(e=>setTimeout(e,500*2**n))}throw Error(`unreachable`)}async function b(){try{let e=(await i.get(`/advert_rate_limit_stats`))?.data;u.value={currentTier:typeof e?.adaptive?.current_tier==`string`?e.adaptive.current_tier:`unknown`,advertsAllowed:e?.stats?.adverts_allowed||0,advertsDropped:e?.stats?.adverts_dropped||0,activePenalties:Object.keys(e?.active_penalties||{}).length},m.set(`advertTier`,Date.now())}catch{}}async function x(e){if(e===`neighbors`){if(!s.isStale())return}else{let t=m.get(e);if(t!==void 0&&Date.now()-t<l[e])return}let t=h.get(e);if(t)return t;let i;switch(e){case`stats`:i=n.fetchStats().then(()=>{m.set(`stats`,Date.now())});break;case`packetStats`:i=r.fetchPacketStats({hours:24}).then(()=>{m.set(`packetStats`,Date.now())});break;case`noiseFloor`:i=r.fetchNoiseFloorHistory({hours:24,limit:500}).then(()=>{m.set(`noiseFloor`,Date.now())});break;case`recentPackets`:i=r.fetchRecentPackets({limit:100}).then(()=>{m.set(`recentPackets`,Date.now())});break;case`sparklines`:i=r.initializeSparklineHistory().then(()=>{m.set(`sparklines`,Date.now())});break;case`advertTier`:i=b();break;case`neighbors`:i=s.fetchAll(s.currentHours).then(()=>{});break}return h.set(e,i),i.finally(()=>h.delete(e)),i}async function S(e,t){p[e]=`loading`;try{await t(),p[e]=`done`}catch{p[e]=`error`}}async function C(){if(!_){_=!0,d.value=!0,p.stats=`loading`,f.value=`requesting`;try{await y(()=>n.fetchStats({onFirstByte:()=>{f.value=`reading`}})),m.set(`stats`,Date.now()),p.stats=`done`}catch{p.stats=`error`,console.error(`[DataService] Failed to fetch stats after retries`)}finally{f.value=null}await Promise.allSettled([S(`packetStats`,()=>r.fetchPacketStats({hours:24}).then(()=>{m.set(`packetStats`,Date.now())})),S(`noiseFloor`,()=>r.fetchNoiseFloorHistory({hours:24,limit:500}).then(()=>{m.set(`noiseFloor`,Date.now())})),S(`recentPackets`,()=>r.fetchRecentPackets({limit:100}).then(()=>{m.set(`recentPackets`,Date.now())}))]),await Promise.allSettled([S(`sparklines`,()=>r.initializeSparklineHistory().then(()=>{m.set(`sparklines`,Date.now())})),S(`advertTier`,()=>b()),S(`neighbors`,()=>s.fetchAll(s.currentHours).then(()=>{}))]),d.value=!1,w()}}function w(){O(),g.push(window.setInterval(()=>void x(`advertTier`),3e4)),g.push(window.setInterval(()=>void x(`packetStats`),6e4)),g.push(window.setInterval(()=>void x(`noiseFloor`),15e3)),g.push(window.setInterval(()=>void x(`sparklines`),3e5)),g.push(window.setInterval(()=>{let e=n.lastUpdated?.getTime()??0;Date.now()-e>25e3&&x(`stats`)},3e4))}function T(){v=Math.floor(Date.now()/1e3)}async function E(e){try{let t=await i.get(`/filtered_packets`,{start_timestamp:e,limit:1e3});t.success&&t.data&&(r.mergeRecentPackets(t.data),m.set(`recentPackets`,Date.now()))}catch{}}async function D(){await new Promise(e=>setTimeout(e,3e3));let e=Math.floor(Date.now()/1e3)-600,t=v===null?e:Math.max(v,e);v=null,await Promise.allSettled([x(`stats`),x(`packetStats`),E(t)])}function O(){for(let e of g)clearInterval(e);g=[]}function k(){O(),_=!1,m.clear(),h.clear(),d.value=!1,Object.keys(p).forEach(e=>{p[e]=`pending`}),u.value={currentTier:`unknown`,advertsAllowed:0,advertsDropped:0,activePenalties:0}}return{advertTier:u,isBootstrapping:d,statsSubStatus:f,loadProgress:p,bootstrap:C,ensure:x,noteDisconnect:T,onReconnect:D,stopPolling:O,reset:k}});export{s as n,c as r,u as t};