Open diagutierrezro opened 6 days ago
En el MID se agrega el método http Post para poder enviar la información del log a buscar:
@documentNamespaceController.route('/buscarLog', strict_slashes=False)
class FilterLogs(Resource):
@documentDoc.doc(responses={
200: 'Success',
400: 'Bad request',
500: 'Server error'
}, body=auditoria_params['filtro_log_model'])
@documentNamespaceController.expect(auditoria_params['filtro_log_model'])
@cross_origin(**api_cors_config)
def post(self):
"""
Filtra los logs de AWS con base en parámetros específicos.
Parameters
----------
request : json
Un JSON que contiene:
- fechaInicio (str): Fecha de inicio en formato dd-mm-aaaa-hh:mm
- fechaFin (str): Fecha de fin en formato dd-mm-aaaa-hh:mm
- tipoLog (str): Tipo de log (GET, POST, PUT, etc.)
- codigoResponsable (int): Código del responsable
- rolResponsable (str): Rol del responsable
Returns
-------
Response
Respuesta con los logs filtrados en formato JSON.
"""
params = request.args
return auditoria.postBuscarLog(params)
def postBuscarLog(data): """ Consulta un log específico en CloudWatch en un rango de tiempo
Parameters
----------
body : json
json con parametros como fechaInicio (str), fechaFin (str), tipoLog (str), codigoResponsable (int), rolResponsable (str)
Returns
-------
json : información del log a consultar
"""
response_array=[]
try:
return auditoriaService.getOneLog(data)
except Exception as e:
return False
def getOneLog(params): """ Consulta un solo evento de logs en CloudWatch para un grupo de logs específico con filtros adicionales.
Parameters
----------
params : MultiDict
Parámetros que incluyen:
- logGroupName (str): Nombre del grupo de logs.
- logStreamNames (list): Lista de streams dentro del grupo de logs.
- startTime (str): Tiempo de inicio (formato: 'YYYY-MM-DD HH:MM').
- endTime (str): Tiempo de fin (formato: 'YYYY-MM-DD HH:MM').
- filterPattern (str): Patrón para filtrar los logs.
- limit (int): Límite de eventos a devolver.
Returns
-------
json : Evento de log o información de error.
"""
try:
log_group_name = params.get('logGroupName', '/ecs/polux_crud_test')
log_stream_names = params.getlist('logStreamNames')
filter_pattern = params.get('filterPattern', '')
limit = int(params.get('limit', 1))
start_time = int(time.mktime(datetime.strptime(params.get('startTime', '2024-08-01 00:00'), "%Y-%m-%d %H:%M").timetuple()) * 1000)
end_time = int(time.mktime(datetime.strptime(params.get('endTime', '2024-08-02 23:59'), "%Y-%m-%d %H:%M").timetuple()) * 1000)
response = client.filter_log_events(
logGroupName=log_group_name,
logStreamNames=log_stream_names if log_stream_names else None,
startTime=start_time,
endTime=end_time,
filterPattern=filter_pattern,
limit=limit
)
events = [{"timestamp": event['timestamp'], "message": event['message']} for event in response.get('events', [])]
if not events:
return Response(json.dumps({'Status': 'No logs found', 'Code': '404', 'Data': []}), status=404, mimetype='application/json')
# Devuelve el primer evento encontrado
return Response(json.dumps({'Status': 'Successful request', 'Code': '200', 'Data': events[0]}), status=200, mimetype='application/json')
except Exception as e:
return Response(json.dumps({'Status': 'Internal Error', 'Code': '500', 'Error': str(e)}), status=500, mimetype='application/json')
from flask_restx import fields
def define_parameters(api):
filtro_log_model = api.model('filtro_log_request', {
'fechaInicio': fields.String(
required=True
),
'fechaFin': fields.String(
required=True
),
'tipoLog': fields.String(
required=True
),
'codigoResponsable': fields.Integer(
required=True
),
'rolResponsable': fields.String(
required=True
)
})
return filtro_log_model
Se realiza el filtro de busqueda por fechas y por tipo de log:
Los datos que envia el cliente en angular al MID, mostrados en la consola del navegador solo para saber que al momento de desarrollo se estan enviando los datos, la respuesta que recibe el cliente de la api MID y los datos que recibe el cliente del MID:
En la terminal de desarrollo del MID muestra los logs con las características de filtro que enviamos desde el cliente:
Se requiere realizar la interoperabilidad entre el microcliente de auditoría con el MID, inicialmente modificar el endpoint para que sea una petición POST que reciba como parametros inicialmente las fechas de consulta y el API a revisar.
Realizar ajustes en el cliente para que una vez se presione el botón de busqueda se envíen los parametros seleccionados y se realice la busqueda y se realice el listado de logs.
Sub Tareas
Criterios de aceptación
Requerimientos
No aplica
Definition of Ready - DoR
Definition of Done - DoD - Desarrollo