def handle_response(response): response.headers["_RV"] = str(version) PROJECT_VERSION = get_project_configuration("project.version", default=None) if PROJECT_VERSION is not None: response.headers["Version"] = str(PROJECT_VERSION) # If it is an upload, DO NOT consume request.data or request.json, # otherwise the content gets lost try: if request.mimetype in ["application/octet-stream", "multipart/form-data"]: data = "STREAM_UPLOAD" elif request.data: data = handle_log_output(request.data) elif request.form: data = obfuscate_dict(request.form) else: data = "" if data: data = f" {data}" except Exception as e: # pragma: no cover log.debug(e) data = "" url = obfuscate_query_parameters(request.url) if GZIP_ENABLE and "gzip" in request.headers.get("Accept-Encoding", "").lower(): response.direct_passthrough = False content, headers = ResponseMaker.gzip_response( response.data, response.status_code, response.headers.get("Content-Encoding"), response.headers.get("Content-Type"), ) if content: response.data = content try: response.headers.update(headers) # Back-compatibility for Werkzeug 0.16.1 as used in B2STAGE except AttributeError: # pragma: no cover for k, v in headers.items(): response.headers.set(k, v) resp = str(response).replace("<Response ", "").replace(">", "") log.info( "{} {} {}{} -> {}", BaseAuthentication.get_remote_ip(), request.method, url, data, resp, ) return response
def prepare_message(instance, user=None, isjson=False, **params): """ { # start "request_id": # build a hash for the current request "edmo_code": # which eudat centre is "json": "the json input file" # parameters maris "datetime":"20180328T10:08:30", # timestamp "ip_number":"544.544.544.544", # request.remote_addr "program":"program/function name", # what's mine? "url" ? "user":"******", # from maris? marine id? "log_string":"start" } { # end "datetime":"20180328T10:08:30", "request_id":"from the json input file", "ip_number":"544.544.544.544", "program":"program of function = name", "user":"******", "edmo_code":"sample 353", "log_string":"end" } """ logmsg = dict(params) instance_id = str(id(instance)) logmsg['request_id'] = instance_id # logmsg['request_id'] = instance_id[len(instance_id) - 6:] from seadata.apis.commons.seadatacloud import seadata_vars logmsg['edmo_code'] = seadata_vars.get('edmo_code') from datetime import datetime logmsg['datetime'] = datetime.now().strftime("%Y%m%dT%H:%M:%S") if isjson: return logmsg # TODO Why this? Why does isjson exist at all? from restapi.services.authentication import BaseAuthentication as Service ip = Service.get_remote_ip() logmsg['ip_number'] = ip from flask import request # http://localhost:8080/api/pids/<PID> import re endpoint = re.sub(r"https?://[^\/]+", '', request.url) logmsg['program'] = request.method + ':' + endpoint if user is None: user = '******' # TODO: True? Not sure! logmsg['user'] = user # log.pp(logmsg) return logmsg
def handle_response(response: FlaskResponse) -> FlaskResponse: response.headers["_RV"] = str(version) PROJECT_VERSION = get_project_configuration("project.version", default="0") if PROJECT_VERSION is not None: response.headers["Version"] = str(PROJECT_VERSION) data_string = get_data_from_request() url = obfuscate_query_parameters(request.url) if (GZIP_ENABLE and not response.is_streamed and "gzip" in request.headers.get("Accept-Encoding", "").lower()): response.direct_passthrough = False content, headers = ResponseMaker.gzip_response( response.data, response.status_code, response.headers.get("Content-Encoding"), response.headers.get("Content-Type"), ) if content: response.data = content response.headers.update(headers) resp = str(response).replace("<Response ", "").replace(">", "") ip = BaseAuthentication.get_remote_ip(raise_warnings=False) is_healthcheck = (ip == "127.0.0.1" and request.method == "GET" and url == "/api/status") if is_healthcheck: log.debug( "{} {} {}{} -> {} [HEALTHCHECK]", ip, request.method, url, data_string, resp, ) else: log.info( "{} {} {}{} -> {}", ip, request.method, url, data_string, resp, ) return response
def log_event( self, event: Events, target: Optional[Any] = None, payload: Optional[Dict[str, Any]] = None, user: Optional[Any] = None, ) -> None: if not user: user = self.get_user() save_event_log( event=event, target=target, payload=payload, user=user, ip=BaseAuthentication.get_remote_ip(), )
def log_event( self, event: Events, target: Optional[Any] = None, payload: Optional[Dict[str, Any]] = None, user: Optional[Any] = None, ) -> None: if not user: user = self.auth.get_user(user_id=self.authorized_user) save_event_log( event=event, target=target, payload=payload, user=user, ip=BaseAuthentication.get_remote_ip(), url=request.path, )