Tracker client session. Parameters ---------- addr : tuple The address tuple
| 300 | |
| 301 | |
| 302 | class TrackerSession: |
| 303 | """Tracker client session. |
| 304 | |
| 305 | Parameters |
| 306 | ---------- |
| 307 | addr : tuple |
| 308 | The address tuple |
| 309 | """ |
| 310 | |
| 311 | def __init__(self, addr): |
| 312 | self._addr = addr |
| 313 | self._sock = None |
| 314 | self._connect() |
| 315 | |
| 316 | def __del__(self): |
| 317 | self.close() |
| 318 | |
| 319 | def _connect(self): |
| 320 | self._sock = base.connect_with_retry(self._addr) |
| 321 | self._sock.sendall(struct.pack("<i", base.RPC_TRACKER_MAGIC)) |
| 322 | magic = struct.unpack("<i", base.recvall(self._sock, 4))[0] |
| 323 | if magic != base.RPC_TRACKER_MAGIC: |
| 324 | raise RuntimeError(f"{self._addr!s} is not RPC Tracker") |
| 325 | |
| 326 | def close(self): |
| 327 | """Close the tracker connection.""" |
| 328 | if self._sock: |
| 329 | self._sock.close() |
| 330 | self._sock = None |
| 331 | |
| 332 | def summary(self): |
| 333 | """Get the summary dict of the tracker.""" |
| 334 | base.sendjson(self._sock, [base.TrackerCode.SUMMARY]) |
| 335 | value = base.recvjson(self._sock) |
| 336 | if value[0] != base.TrackerCode.SUCCESS: |
| 337 | raise RuntimeError(f"Invalid return value {value!s}") |
| 338 | return value[1] |
| 339 | |
| 340 | def text_summary(self): |
| 341 | """Get a text summary of the tracker.""" |
| 342 | data = self.summary() |
| 343 | |
| 344 | total_ct = {} |
| 345 | |
| 346 | res = "" |
| 347 | res += "Server List\n" |
| 348 | res += "------------------------------\n" |
| 349 | res += "server-address key\n" |
| 350 | res += "------------------------------\n" |
| 351 | sorted_server = sorted(data["server_info"], key=lambda x: x["key"]) |
| 352 | for item in sorted_server: |
| 353 | addr = item["addr"] |
| 354 | res += f"{':'.join(map(str, addr)):21s} " |
| 355 | res += item["key"] + "\n" |
| 356 | key = item["key"].split(":")[1] # 'server:rasp3b` -> 'rasp3b' |
| 357 | if key not in total_ct: |
| 358 | total_ct[key] = 0 |
| 359 | total_ct[key] += 1 |
no outgoing calls
no test coverage detected
searching dependent graphs…