cache tenant database
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
import time
|
import time
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from app.db.cruddb import domainService
|
from app.db.cruddb import domainService,tenantService
|
||||||
from app.db.cruddb import tenantService
|
from app.db.session import Database
|
||||||
|
|
||||||
class MemoryCache:
|
class MemoryCache:
|
||||||
def __init__(self, max_cache_size: int = 100, ttl: int = 60):
|
def __init__(self, max_cache_size: int = 100, ttl: int = 60):
|
||||||
@@ -60,12 +60,13 @@ class tenantCache:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.memoryCache = MemoryCache(max_cache_size=50, ttl=120)
|
self.memoryCache = MemoryCache(max_cache_size=50, ttl=120)
|
||||||
|
|
||||||
def get_tenant_db(self,db: Session, tenantid: str):
|
def get_tenant_db(self,db: Session, tenantid: str):
|
||||||
if not self.memoryCache.get(f"TENANT_{tenantid}"):
|
if not self.memoryCache.get(f"TENANT_{tenantid}"):
|
||||||
tenant = tenantService.get_tenant(db,tenantid)
|
tenant = tenantService.get_tenant(db,tenantid)
|
||||||
if tenant:
|
if tenant:
|
||||||
self.memoryCache.set(f"TENANT_{tenantid}",tenant.db)
|
database = Database(tenant.db)
|
||||||
return self.memoryCache.get(f"TENANT_{tenantid}")
|
self.memoryCache.set(f"TENANT_{tenantid}",database)
|
||||||
|
return self.memoryCache.get(f"TENANT_{tenantid}")
|
||||||
|
|
||||||
tenantCacheService =tenantCache()
|
tenantCacheService =tenantCache()
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
from fastapi import Depends,Request
|
from fastapi import Depends,Request
|
||||||
from app.db.session import get_tenant_db,get_user_db
|
from app.db.session import get_tenant_db
|
||||||
from app.core import tenantCacheService
|
from app.core import tenantCacheService
|
||||||
from app.db.session import tenantdb
|
from app.db.session import tenantdb
|
||||||
|
|
||||||
def get_db(request: Request,tenant:str = "1",tenantdb = Depends(get_tenant_db)):
|
def get_db(request: Request,tenant:str = "1",tenantdb = Depends(get_tenant_db)):
|
||||||
db_url = tenantCacheService.get_tenant_db(tenantdb,tenant)
|
database = tenantCacheService.get_tenant_db(tenantdb,tenant)
|
||||||
db = get_user_db(db_url)
|
|
||||||
try:
|
try:
|
||||||
|
db = database.get_db()
|
||||||
request.state.tenant = tenant
|
request.state.tenant = tenant
|
||||||
request.state.db = db
|
request.state.db = db
|
||||||
yield db
|
yield db
|
||||||
|
|||||||
Reference in New Issue
Block a user