Skip to content

Commit 72d43b0

Browse files
committed
feat: add proxy middleware with circuit breaker fallback
Smart proxy to Bose servers with automatic fallback to local handlers. Controlled via SOUNDCORK_MODE env var (default: local). - ProxyMiddleware intercepts /marge, /bmx, /updates prefixes - Circuit breaker per upstream server (opens on errors/404/5xx) - 5-minute cooldown before retrying failed upstreams - Traffic logging to JSONL file - Adds httpx dependency Addresses #152
1 parent 2f944d2 commit 72d43b0

File tree

4 files changed

+397
-0
lines changed

4 files changed

+397
-0
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ black==25.9.0
22
fastapi[standard]==0.120.1
33
fastapi-etag==0.4.0
44
gunicorn==23.0.0
5+
httpx==0.28.1
56
pydantic-settings==2.11.0
67
telnetlib3==2.0.8
78
upnpclient==1.0.3

soundcork/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class Settings(BaseSettings):
2020

2121
base_url: str = ""
2222
data_dir: str = ""
23+
soundcork_mode: str = "local"
24+
soundcork_log_dir: str = "./logs/traffic"
2325
model_config = SettingsConfigDict(
2426
# `.env.private` takes priority over `.env.shared`
2527
env_file=(".env.shared", ".env.private")

soundcork/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ async def lifespan(app: FastAPI):
8888
lifespan=lifespan,
8989
)
9090

91+
from soundcork.proxy import ProxyMiddleware
92+
93+
app.add_middleware(ProxyMiddleware)
94+
9195

9296
# @lru_cache
9397
# def get_settings():

0 commit comments

Comments
 (0)