orderbook_watcher.health_checker
orderbook_watcher.health_checker
Maker health checking via direct onion connection.
This module provides functionality to verify maker availability by connecting directly to their onion addresses when possible, performing handshakes to extract features, and tracking reachability status.
Attributes
Classes
MakerHealthChecker
Checks maker reachability via direct onion connections.
This class performs periodic health checks on makers by: 1. Connecting directly to their onion addresses 2. Performing handshake to verify they're online 3. Extracting feature flags from handshake response 4. Tracking reachability history
Health checks are rate-limited to avoid stressing makers.
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | |
Attributes
check_interval = check_interval
instance-attribute
health_status: dict[str, MakerHealthStatus] = {}
instance-attribute
max_concurrent_checks = max_concurrent_checks
instance-attribute
network = network
instance-attribute
nick_identity = NickIdentity(JM_VERSION)
instance-attribute
socks_host = socks_host
instance-attribute
socks_password = socks_password
instance-attribute
socks_port = socks_port
instance-attribute
socks_username = socks_username
instance-attribute
timeout = timeout
instance-attribute
Functions
__init__(network: str, socks_host: str = '127.0.0.1', socks_port: int = 9050, timeout: float = 15.0, check_interval: float = 600.0, max_concurrent_checks: int = 10, socks_username: str | None = None, socks_password: str | None = None) -> None
Initialize MakerHealthChecker.
Args: network: Bitcoin network (mainnet, testnet, signet, regtest) socks_host: SOCKS proxy host for Tor socks_port: SOCKS proxy port for Tor timeout: Connection timeout in seconds check_interval: Minimum seconds between checks for same maker max_concurrent_checks: Maximum concurrent health checks socks_username: SOCKS5 username for Tor stream isolation (optional) socks_password: SOCKS5 password for Tor stream isolation (optional)
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | |
check_maker(nick: str, location: str, force: bool = False) -> MakerHealthStatus
async
Check if a maker is reachable via direct connection.
Args: nick: Maker's nick location: Maker's onion address (format: onion:port) force: Force check even if recently checked
Returns: MakerHealthStatus with reachability info and features
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | |
check_makers_batch(makers: list[tuple[str, str]], force: bool = False) -> dict[str, MakerHealthStatus]
async
Check health of multiple makers in parallel.
Args: makers: List of (nick, location) tuples force: Force check even if recently checked
Returns: Dict mapping location to MakerHealthStatus
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 | |
clear_status(location: str) -> None
Clear health status for a location (e.g., when maker reconnects).
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
367 368 369 | |
get_feature_map() -> dict[str, FeatureSet]
Get map of locations to their feature sets.
Only includes makers that have been successfully checked.
Returns: Dict mapping location to FeatureSet
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
352 353 354 355 356 357 358 359 360 361 362 363 364 365 | |
get_unreachable_locations(max_consecutive_failures: int = 3) -> set[str]
Get set of locations that are considered unreachable.
Args: max_consecutive_failures: Number of failures before marking unreachable
Returns: Set of location strings for unreachable makers
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 | |
MakerHealthStatus
dataclass
Health status for a maker.
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
Attributes
consecutive_failures: int
instance-attribute
error: str | None = None
class-attribute
instance-attribute
features: FeatureSet
instance-attribute
last_check_time: float
instance-attribute
last_success_time: float | None
instance-attribute
location: str
instance-attribute
nick: str
instance-attribute
reachable: bool
instance-attribute
Functions
is_healthy(max_consecutive_failures: int = 3) -> bool
Check if maker is considered healthy.
Source code in orderbook_watcher/src/orderbook_watcher/health_checker.py
41 42 43 | |