fix(traffic): учитывать пик только подтверждённых измерений
This commit is contained in:
1 parent
504f62fc0b
commit
7c667f8036
15 files changed
+1297
-15
No files matched your search
@@ -10,3 +10,9 @@ assert.equal(first.observations!.rxNow,false);assert.equal(first.sessions,2)
|
||||
const next=calc([sample('a',0,0,false),sample('a',30_000,0),sample('a',60_000,0),sample('a',90_000,0),sample('new',60_000,0,false),sample('new',90_000,0)])
|
||||
assert.equal(next.observations!.rxNow,true);assert.equal(next.rxNow,0);assert.equal(next.sessions,2)
|
||||
console.log('wave membership removal/addition/baseline/zero/history/active count passed')
|
||||
|
||||
const partialPeak=calc([sample('a',0,0,false),sample('a',30_000,0),sample('a',60_000,1024**2),sample('new',60_000,0,false),sample('a',90_000,1024**2),sample('new',90_000,0)])
|
||||
assert.equal(partialPeak.observations!.rxNow,true);assert.equal(partialPeak.rxPeak,0);assert.equal(partialPeak.txPeak,0);assert.equal(partialPeak.rxTotalGiB,1/1024)
|
||||
const future=calc([sample('a',0,0,false),sample('a',30_000,0),sample('a',120_000,1024**2)])
|
||||
assert.equal(future.rxPeak,0);assert.equal(future.txPeak,0)
|
||||
console.log('peak excludes incomplete waves and out-of-range points; volumes retained')
|
||||
@@ -226,8 +226,12 @@ export function buildTrafficFromSamples(
|
||||
const txSeries = bucketAvg(txPoints, rangeStartMs, rangeEndMs)
|
||||
const lastTs = [...byTs.keys()].sort((a, b) => a - b).at(-1)
|
||||
const last = lastTs != null ? byTs.get(lastTs) : undefined
|
||||
const rxPeak = rxPoints.reduce((m, p) => Math.max(m, p.v), 0)
|
||||
const txPeak = txPoints.reduce((m, p) => Math.max(m, p.v), 0)
|
||||
const peak = (points: Array<{t:number;v:number}>, side: "rxObserved"|"txObserved") => points.reduce((m,p) => {
|
||||
const wave = byTs.get(p.t)!
|
||||
return p.t >= rangeStartMs && p.t <= rangeEndMs && wave[side] && wave.count === expectedAt(p.t) ? Math.max(m,p.v) : m
|
||||
},0)
|
||||
const rxPeak = peak(rxPoints,"rxObserved")
|
||||
const txPeak = peak(txPoints,"txObserved")
|
||||
|
||||
return {
|
||||
rxNow: last?.rx ?? 0,
|
||||
|
||||
@@ -55,6 +55,10 @@ else {
|
||||
}
|
||||
await put("newInterface",0,0);await pool.query("UPDATE traffic_samples SET flags=45 WHERE server_id=$1 AND interface_name='newInterface'",[serverId]);
|
||||
s=(await get(`/traffic/servers/${serverId}?range=1h`)).server;assert.equal(s.observations.rxNow,false);assert.equal(s.sessions,2);cases++;
|
||||
await pool.query("DELETE FROM traffic_samples WHERE server_id=$1",[serverId]);
|
||||
for(const[name,offset,bytes]of[["ether1",-90_000,0],["ether1",-60_000,0],["ether1",-30_000,1024**2],["new",-30_000,0],["ether1",0,1024**2],["new",0,0]] as const)await put(name,offset,bytes);
|
||||
await pool.query("UPDATE traffic_samples SET flags=61,native_counter_identity=interface_name WHERE server_id=$1",[serverId]);await pool.query("UPDATE traffic_samples SET flags=45 WHERE server_id=$1 AND interface_name='new' AND sampled_at=$2",[serverId,new Date(Date.parse(at)-30_000).toISOString()]);
|
||||
s=(await get(`/traffic/servers/${serverId}?range=1h`)).server;assert.equal(s.observations.rxNow,true);assert.equal(s.rxPeak,0);assert.equal(s.txPeak,0);assert.equal(s.rxTotal,1/1024);assert(s.observations.rxSeries.some(Boolean));cases++;
|
||||
console.log(`traffic volume owned SQL: ${cases} cases; exact bytes/binary unit/server/user/binding/100-part aggregate/reset passed`)
|
||||
}finally{await app.close();await pool.query("DELETE FROM app_users WHERE id=$1",[userId]);if(serverId!==undefined){await pool.query("DELETE FROM traffic_samples WHERE server_id=$1",[serverId]);await pool.query("DELETE FROM servers WHERE id=$1",[serverId])}await closePool()}
|
||||
}
|
||||
Reference in new issue
Block a user