コンテキストの読み込み最適化

This commit is contained in:
yuuki 2024-10-22 18:01:25 +09:00
parent 75a95ae07d
commit b5ac53f0e6

37
app.py
View file

@ -7,6 +7,7 @@ from json import dumps
from requests import post from requests import post
from fastapi import FastAPI, Response, Header, status from fastapi import FastAPI, Response, Header, status
from fastapi.responses import JSONResponse, PlainTextResponse, FileResponse from fastapi.responses import JSONResponse, PlainTextResponse, FileResponse
from contextlib import asynccontextmanager
def fastapi_serve(dir: str, ref: str, indexes: List[str] = ["index.html", "index.htm"]) -> Response: def fastapi_serve(dir: str, ref: str, indexes: List[str] = ["index.html", "index.htm"]) -> Response:
url_path = urlparse(ref or "/").path url_path = urlparse(ref or "/").path
@ -32,12 +33,20 @@ def fastapi_serve(dir: str, ref: str, indexes: List[str] = ["index.html", "index
return FileResponse(path) return FileResponse(path)
app = FastAPI() ctx = {}
@asynccontextmanager
async def lifespan(app: FastAPI):
ctx["daily"] = Path("analytics_daily.txt").read_text("UTF-8")
ctx["hourly"] = Path("analytics_hourly.txt").read_text("UTF-8")
print(ctx)
yield
ctx.clear()
app = FastAPI(lifespan=lifespan)
@app.get("/api/cloudflare") @app.get("/api/cloudflare")
async def cloudflare(zone_id: str, x_token: Union[str, None] = Header()): async def cloudflare(zone_id: str, x_token: Union[str, None] = Header()):
query = Path("analytics_daily.txt").read_text("UTF-8")
now = datetime.now() now = datetime.now()
before = now - timedelta(**{ "days": 30 }) before = now - timedelta(**{ "days": 30 })
@ -54,26 +63,24 @@ async def cloudflare(zone_id: str, x_token: Union[str, None] = Header()):
"Authorization": f"Bearer {x_token}" "Authorization": f"Bearer {x_token}"
}, },
data=dumps({ data=dumps({
"query": query, "query": ctx["daily"],
"variables": variables "variables": variables
}) })
) )
json = result.json() json = result.json()
res = JSONResponse(json) res = JSONResponse(json)
if "success" in json and not json["success"]: if "data" in json and not json["errors"]:
res.headers["Cache-Control"] = f"public, max-age=60, s-maxage=60"
res.headers["CDN-Cache-Control"] = f"max-age=60"
else:
res.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR res.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
res.headers["Cache-Control"] = f"public, max-age=0, s-maxage=0" res.headers["Cache-Control"] = f"public, max-age=0, s-maxage=0"
res.headers["CDN-Cache-Control"] = f"max-age=0" res.headers["CDN-Cache-Control"] = f"max-age=0"
else:
res.headers["Cache-Control"] = f"public, max-age=60, s-maxage=60"
res.headers["CDN-Cache-Control"] = f"max-age=60"
return res return res
@app.get("/api/cloudflare2") @app.get("/api/cloudflare2")
async def cloudflare2(zone_id: str, x_token: Union[str, None] = Header()): async def cloudflare2(zone_id: str, x_token: Union[str, None] = Header()):
query = Path("analytics_hourly.txt").read_text("UTF-8")
now = datetime.now() now = datetime.now()
before = now - timedelta(**{ "hours": 72 }) before = now - timedelta(**{ "hours": 72 })
@ -90,20 +97,20 @@ async def cloudflare2(zone_id: str, x_token: Union[str, None] = Header()):
"Authorization": f"Bearer {x_token}" "Authorization": f"Bearer {x_token}"
}, },
data=dumps({ data=dumps({
"query": query, "query": ctx["hourly"],
"variables": variables "variables": variables
}) })
) )
json = result.json() json = result.json()
res = JSONResponse(json) res = JSONResponse(json)
if "success" in json and not json["success"]: if "data" in json and not json["errors"]:
res.headers["Cache-Control"] = f"public, max-age=60, s-maxage=60"
res.headers["CDN-Cache-Control"] = f"max-age=60"
else:
res.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR res.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
res.headers["Cache-Control"] = f"public, max-age=0, s-maxage=0" res.headers["Cache-Control"] = f"public, max-age=0, s-maxage=0"
res.headers["CDN-Cache-Control"] = f"max-age=0" res.headers["CDN-Cache-Control"] = f"max-age=0"
else:
res.headers["Cache-Control"] = f"public, max-age=60, s-maxage=60"
res.headers["CDN-Cache-Control"] = f"max-age=60"
return res return res
@app.get("/") @app.get("/")