47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
import time
|
|
|
|
from fastmcp.server.middleware import Middleware, MiddlewareContext
|
|
|
|
import module.factory as factory
|
|
|
|
# 기본 미들웨어
|
|
class EnvironmentMiddleware(Middleware):
|
|
def __init__(self, environment):
|
|
self.environment = environment
|
|
|
|
async def on_call_tool(self, context: MiddlewareContext, call_next):
|
|
ctx = context.fastmcp_context
|
|
|
|
# time counter start
|
|
t0 = time.perf_counter()
|
|
|
|
# started_at
|
|
started_dt = datetime.now()
|
|
ctx.set_state(factory.CONTEXT_STARTED_AT, started_dt.strftime("%Y-%m-%d %H:%M:%S"))
|
|
|
|
# request id
|
|
request_id = uuid.uuid4().hex
|
|
ctx.set_state(factory.CONTEXT_REQUEST_ID, request_id)
|
|
|
|
# context setup
|
|
ctx.set_state(factory.CONTEXT_ENVIRONMENT, self.environment)
|
|
|
|
try:
|
|
result = await call_next(context)
|
|
return result
|
|
except Exception as e:
|
|
raise e
|
|
finally:
|
|
# ended at
|
|
ended_at = datetime.now()
|
|
ctx.set_state(factory.CONTEXT_ENDED_AT, ended_at.strftime("%Y-%m-%d %H:%M:%S"))
|
|
|
|
# time counter end
|
|
elapsed_sec = time.perf_counter() - t0
|
|
ctx.set_state(factory.CONTEXT_ELAPSED_SECONDS, round(elapsed_sec, 2))
|
|
|
|
|
|
|