feat(media-streaming): deepen telemetry, ledger, and orchestrator
Session history and stall ranking, contribution percentile snapshots, enterprise region SLA helpers, and latency target configuration. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -58,6 +58,23 @@ class HyperP2PContributionLedger extends EventEmitter {
|
|||||||
return this._ledger.delete(assertPeerId(peerId))
|
return this._ledger.delete(assertPeerId(peerId))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rankPercentile (peerId) {
|
||||||
|
const id = assertPeerId(peerId)
|
||||||
|
const bal = this.balance(id)
|
||||||
|
const all = [...this._ledger.values()].map((r) => r.bytes).sort((a, b) => a - b)
|
||||||
|
if (!all.length) return 0
|
||||||
|
const below = all.filter((b) => b < bal).length
|
||||||
|
return below / all.length
|
||||||
|
}
|
||||||
|
|
||||||
|
toSnapshot () {
|
||||||
|
return [...this._ledger.values()].map((r) => ({
|
||||||
|
peerId: r.peerId,
|
||||||
|
bytes: r.bytes,
|
||||||
|
streams: [...r.streams]
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
_gossip (payload) {
|
_gossip (payload) {
|
||||||
if (this._peerMsgs) {
|
if (this._peerMsgs) {
|
||||||
gossipSend(this, payload)
|
gossipSend(this, payload)
|
||||||
|
|||||||
@@ -81,6 +81,20 @@ class HyperP2PEnterpriseOrchestrator extends EventEmitter {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeRegion (region) {
|
||||||
|
return this._regions.delete(String(region))
|
||||||
|
}
|
||||||
|
|
||||||
|
setSla ({ targetUptime, maxStallRate } = {}) {
|
||||||
|
if (targetUptime != null) this._sla.targetUptime = targetUptime
|
||||||
|
if (maxStallRate != null) this._sla.maxStallRate = maxStallRate
|
||||||
|
return { ...this._sla }
|
||||||
|
}
|
||||||
|
|
||||||
|
regionNames () {
|
||||||
|
return [...this._regions.keys()]
|
||||||
|
}
|
||||||
|
|
||||||
getStats () {
|
getStats () {
|
||||||
return mediaStats(this._stats, PROTOCOL, { regions: this._regions.size })
|
return mediaStats(this._stats, PROTOCOL, { regions: this._regions.size })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@ class HyperP2PLatencyOptimizer extends EventEmitter {
|
|||||||
return glass <= this.targetGlassMs
|
return glass <= this.targetGlassMs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTargetGlassMs (ms) {
|
||||||
|
this.targetGlassMs = Math.max(100, ms | 0)
|
||||||
|
return this.targetGlassMs
|
||||||
|
}
|
||||||
|
|
||||||
getStats () {
|
getStats () {
|
||||||
return mediaStats(this._stats, PROTOCOL, { paths: this._paths.size })
|
return mediaStats(this._stats, PROTOCOL, { paths: this._paths.size })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,25 @@ class HyperP2PStreamTelemetry extends EventEmitter {
|
|||||||
return [...this._sessions.keys()]
|
return [...this._sessions.keys()]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
history (sessionId, limit = 32) {
|
||||||
|
const hist = this._sessions.get(String(sessionId))
|
||||||
|
if (!hist) return []
|
||||||
|
return hist.slice(-Math.max(0, limit | 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
clearSession (sessionId) {
|
||||||
|
return this._sessions.delete(String(sessionId))
|
||||||
|
}
|
||||||
|
|
||||||
|
worstStalls (limit = 5) {
|
||||||
|
const ranked = []
|
||||||
|
for (const [sessionId, hist] of this._sessions) {
|
||||||
|
const stalls = hist.reduce((s, h) => s + h.stallCount, 0)
|
||||||
|
ranked.push({ sessionId, stalls })
|
||||||
|
}
|
||||||
|
return ranked.sort((a, b) => b.stalls - a.stalls).slice(0, limit)
|
||||||
|
}
|
||||||
|
|
||||||
getStats () {
|
getStats () {
|
||||||
return mediaStats(this._stats, PROTOCOL, { sessions: this._sessions.size })
|
return mediaStats(this._stats, PROTOCOL, { sessions: this._sessions.size })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "hyper-p2p-stream-telemetry",
|
"name": "hyper-p2p-stream-telemetry",
|
||||||
"version": "0.0.0-scaffold",
|
"version": "0.3.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "hyper-p2p-stream-telemetry",
|
"name": "hyper-p2p-stream-telemetry",
|
||||||
"version": "0.0.0-scaffold",
|
"version": "0.3.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"b4a": "^1.6.7",
|
"b4a": "^1.6.7",
|
||||||
|
|||||||
Reference in New Issue
Block a user