add log_all_requests middleware

Add middleware to log all request/responses to confserverlog.
This commit is contained in:
Brian Martin 2019-10-12 14:04:13 -04:00
parent da9d2bbea7
commit abaf9ebae2

View file

@ -49,12 +49,13 @@ class ConfServer:
return int(round(timetoconvert * 1000)) return int(round(timetoconvert * 1000))
def confserver_app(self): def confserver_app(self):
self.app = web.Application(loop=asyncio.get_event_loop()) self.app = web.Application(loop=asyncio.get_event_loop(), middlewares=[self.log_all_requests])
self.app.add_routes( self.app.add_routes(
[ [
web.get("", self.handle_base), web.get("", self.handle_base),
web.get("/restart_{service}", self.handle_RestartService), web.get("/restart_{service}", self.handle_RestartService, name='restart-service'),
web.get( web.get(
"/{apiversion}/private/{country}/{language}/{devid}/{apptype}/{appversion}/{devtype}/{aid}/user/login", "/{apiversion}/private/{country}/{language}/{devid}/{apptype}/{appversion}/{devtype}/{aid}/user/login",
self.handle_login, self.handle_login,
@ -134,7 +135,7 @@ class ConfServer:
web.post("/api/appsvr/app.do", self.handle_appsvr_api), # EcoVacs Home web.post("/api/appsvr/app.do", self.handle_appsvr_api), # EcoVacs Home
web.get("/api/appsvr/app.do", self.handle_appsvr_api), # EcoVacs Home web.get("/api/appsvr/app.do", self.handle_appsvr_api), # EcoVacs Home
web.post( web.post(
"/api/pim/product/getProductIotMap", self.handle_getProductIotMap "/api/pim/product/getProductIotMap", self.handle_getProductIotMap, name='getProductIotMap'
), ),
web.post("/api/lg/log.do", self.handle_lg_log), # EcoVacs Home web.post("/api/lg/log.do", self.handle_lg_log), # EcoVacs Home
web.post("/api/iot/devmanager.do", self.handle_devmanager_botcommand), web.post("/api/iot/devmanager.do", self.handle_devmanager_botcommand),
@ -226,6 +227,56 @@ class ConfServer:
except Exception as e: except Exception as e:
confserverlog.exception("{}".format(e)) confserverlog.exception("{}".format(e))
@web.middleware
async def log_all_requests(self, request, handler):
try:
if request.content_length:
if request.content_type == "application/x-www-form-urlencoded":
postbody = await request.post()
elif request.content_type == "application/json":
try:
postbody = json.loads(await request.text())
except Exception as e:
confserverlog.error("Request body not json: {} - {}".format(e, e.doc))
postbody = e.doc
else:
postbody = await request.post()
else:
postbody = None
response = await handler(request)
logall = {
"request": {
"route_name": f"{request.match_info.route.name}",
"method": f"{request.method}",
"path": f"{request.path}",
"query_string": f"{request.query_string}",
"raw_path": f"{request.raw_path}",
"raw_headers": f'{",".join(map("{}".format, request.raw_headers))}',
"body": f"{postbody}",
},
"response": {
"response_body": f"{json.loads(response.body)}",
"status": f"{response.status}",
}
}
confserverlog.debug(json.dumps(logall))
return response
except web.HTTPNotFound as notfound:
confserverlog.debug("Request path {} not found".format(request.raw_path))
return notfound
except Exception as e:
confserverlog.exception("{}".format(e))
return e
async def restart_Helper(self): async def restart_Helper(self):
await bumper.mqtt_helperbot.Client.disconnect() await bumper.mqtt_helperbot.Client.disconnect()