1010from starlette .requests import Request
1111from starlette .types import ASGIApp , Message , Receive , Scope , Send
1212
13- from tilebench import parse_rasterio_io_logs
13+ from tilebench import parse_rasterio_io_logs , parse_vsifile_io_logs
1414
1515
1616class VSIStatsMiddleware (BaseHTTPMiddleware ):
@@ -27,6 +27,10 @@ def __init__(
2727 super ().__init__ (app )
2828 self .config : Dict = config or {}
2929 self .exclude_paths : List = exclude_paths or []
30+
31+ if io not in ["rasterio" , "vsifile" ]:
32+ raise ValueError (f"Unsupported { io } IO backend" )
33+
3034 self .io_backend = io
3135
3236 async def dispatch (self , request : Request , call_next ):
@@ -49,9 +53,14 @@ async def dispatch(self, request: Request, call_next):
4953 handler .close ()
5054
5155 if io_stream :
52- io_lines = io_stream .getvalue ().splitlines ()
56+ logs = io_stream .getvalue ().splitlines ()
57+
58+ results = {}
59+ if self .io_backend == "vsifile" :
60+ results .update (parse_vsifile_io_logs (logs ))
61+ else :
62+ results .update (parse_rasterio_io_logs (logs ))
5363
54- results = parse_rasterio_io_logs (io_lines )
5564 head_results = "head;count={count}" .format (** results ["HEAD" ])
5665 get_results = "get;count={count};size={bytes}" .format (** results ["GET" ])
5766 ranges_results = "ranges; values={}" .format (
0 commit comments