]>
Commit | Line | Data |
---|---|---|
58477244 C |
1 | import { Meter } from '@opentelemetry/api' |
2 | ||
3 | export class BittorrentTrackerObserversBuilder { | |
4 | ||
5 | constructor (private readonly meter: Meter, private readonly trackerServer: any) { | |
6 | ||
7 | } | |
8 | ||
9 | buildObservers () { | |
10 | const activeInfohashes = this.meter.createObservableGauge('peertube_bittorrent_tracker_active_infohashes_total', { | |
11 | description: 'Total active infohashes in the PeerTube BitTorrent Tracker' | |
12 | }) | |
13 | const inactiveInfohashes = this.meter.createObservableGauge('peertube_bittorrent_tracker_inactive_infohashes_total', { | |
14 | description: 'Total inactive infohashes in the PeerTube BitTorrent Tracker' | |
15 | }) | |
16 | const peers = this.meter.createObservableGauge('peertube_bittorrent_tracker_peers_total', { | |
17 | description: 'Total peers in the PeerTube BitTorrent Tracker' | |
18 | }) | |
19 | ||
20 | this.meter.addBatchObservableCallback(observableResult => { | |
21 | const infohashes = Object.keys(this.trackerServer.torrents) | |
22 | ||
23 | const counters = { | |
24 | activeInfohashes: 0, | |
25 | inactiveInfohashes: 0, | |
26 | peers: 0, | |
27 | uncompletedPeers: 0 | |
28 | } | |
29 | ||
30 | for (const infohash of infohashes) { | |
31 | const content = this.trackerServer.torrents[infohash] | |
32 | ||
33 | const peers = content.peers | |
34 | if (peers.keys.length !== 0) counters.activeInfohashes++ | |
35 | else counters.inactiveInfohashes++ | |
36 | ||
37 | for (const peerId of peers.keys) { | |
38 | const peer = peers.peek(peerId) | |
39 | if (peer == null) return | |
40 | ||
41 | counters.peers++ | |
42 | } | |
43 | } | |
44 | ||
45 | observableResult.observe(activeInfohashes, counters.activeInfohashes) | |
46 | observableResult.observe(inactiveInfohashes, counters.inactiveInfohashes) | |
47 | observableResult.observe(peers, counters.peers) | |
48 | }, [ activeInfohashes, inactiveInfohashes, peers ]) | |
49 | } | |
50 | ||
51 | } |