Commit 4360aaed authored by 崔为之's avatar 崔为之 💪🏽

Update project

parent beb4afc8
......@@ -16,6 +16,7 @@ from typing import Generator
from loguru import logger
from sqlalchemy import text
from application.libs import ServerError
from application.libs.helper import MySQLHelper
from application.models import Log
from application.utils import ElasticsearchUtil, ParseUtil
......@@ -44,14 +45,14 @@ class LogDao:
dict: The data returned from Elasticsearch.
Raises:
SystemError: If none of the required parameters are provided.
ServerError: If none of the required parameters are provided.
"""
if sid is not None:
return ElasticsearchUtil.scroll_search(sid)
elif index is not None and dsl is not None:
return ElasticsearchUtil.search(index, dsl)
else:
raise SystemError('Could not get data from Elasticsearch')
raise ServerError('Could not get data from Elasticsearch')
@classmethod
def get_mdata(cls, data: dict) -> list:
......@@ -70,7 +71,7 @@ class LogDao:
mdata = data.get('hits').get('hits')
if not mdata:
logger.error('the mdata is an empty list ...')
raise SystemError('the mdata is an empty list ...')
raise ServerError('the mdata is an empty list ...')
return mdata
@classmethod
......@@ -184,7 +185,7 @@ class LogDao:
except Exception as e:
# Log the error and raise a SystemError.
logger.error(f'The error: {e}')
raise SystemError()
raise ServerError('Operate data error')
else:
# Log the success of the process.
logger.debug('The process of inserting data succeed!')
......
......@@ -11,7 +11,8 @@
"""
from .config import ConsulConfig, LocalConfig
from .error import ConfigKeyError
from .error import ConfigKeyError, ServerError
from .flask_consul import FlaskConsulService
from .flask_elasticsearch import FlaskElasticsearch
from .flask_loguru import FlaskLoguru
from .response import JsonResponse
......@@ -10,4 +10,4 @@
# @Description : error 自定义模块
"""
from .exceptions import ConfigKeyError
from .exceptions import ConfigKeyError, ServerError
......@@ -18,3 +18,8 @@ class ConfigKeyError(Exception):
def __init__(self, key):
self.key = key
super().__init__(f'Key {self.key} not found in configuration')
class ServerError(Exception):
def __init__(self, *args, **kwargs):
pass
......@@ -14,7 +14,9 @@
import atexit
import consul
from flask import Flask
from loguru import logger
from application.libs import ServerError
from application.libs.helper import ConfigHelper
from application.libs.helper import EnvVarHelper
......@@ -59,8 +61,8 @@ class FlaskConsulService:
if self.service_id is None:
self.service_id = f'{service_name}-{service_address}-{service_port}'
try:
check = consul.Check().tcp(host=service_address, port=service_port, interval=check_interval, timeout=timeout,
deregister=deregister_after)
check = consul.Check().tcp(host=service_address, port=service_port, interval=check_interval,
timeout=timeout, deregister=deregister_after)
if self.client is None:
self.client = consul.Consul(**env_vars)
self.client.agent.service.register(
......@@ -71,7 +73,8 @@ class FlaskConsulService:
check=check
)
except Exception as e:
print(e)
logger.error(f'Failed to register service, error: {e}')
ServerError('Failed to register service')
def deregister_service(self):
self.client.agent.service.deregister(self.service_id)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
# @Version : Python 3.11.4
# @Software : Sublime Text 4
# @Author : StudentCWZ
# @Email : StudentCWZ@outlook.com
# @Date : 2023/11/21 14:09
# @File : __init__.py
# @Description :
"""
from .response import JsonResponse
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
# @Version : Python 3.11.4
# @Software : Sublime Text 4
# @Author : StudentCWZ
# @Email : StudentCWZ@outlook.com
# @Date : 2023/11/21 14:10
# @File : response.py
# @Description :
"""
from flask import Flask, jsonify
app = Flask(__name__)
class JsonResponse:
@staticmethod
def success(data, message='Success'):
return jsonify({
'status': 'success',
'message': message,
'data': data,
}), 200
@staticmethod
def error(message='Error', status_code=400):
return jsonify({
'status': 'error',
'message': message,
}), status_code
......@@ -32,7 +32,7 @@ class LogService:
The result of the log parsing as an integer.
Raises:
SystemError: If there is an issue with the process.
ServerError: If there is an issue with the process.
"""
# Retrieve the start and end date from the given item.
......
......@@ -17,6 +17,8 @@ from pydantic import ValidationError
from application.schemas import ParseLogRequestItem
from application.services import LogService
from application.libs import JsonResponse
from application.libs import ServerError
# Define the log API blueprint
......@@ -37,15 +39,21 @@ def parse():
# If no data provided, return error message
if not json_data:
logger.error('No input data provided')
return jsonify({"message": "No input data provided"}), 400
return JsonResponse.error(message='No input data provided', status_code=400)
try:
# Validate input data
item = ParseLogRequestItem(**json_data)
except ValidationError as e:
# If validation fails, return error message
return jsonify({"message": "Invalid input data", "errors": e.errors()}), 400
logger.error(f'Invalid input data, error: {e}')
return JsonResponse.error(message='Invalid input data', status_code=400)
# If validation passes, parse logs and return total number of logs parsed
try:
total = LogService.parse(item)
return jsonify(search_total=total), 200
except ServerError as e:
logger.error('Internal server error')
return JsonResponse.error(message='Internal server error', status_code=500)
else:
return JsonResponse.success(message='Successfully parsed', data=total)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment