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

Update project

parent beb4afc8
...@@ -16,6 +16,7 @@ from typing import Generator ...@@ -16,6 +16,7 @@ from typing import Generator
from loguru import logger from loguru import logger
from sqlalchemy import text from sqlalchemy import text
from application.libs import ServerError
from application.libs.helper import MySQLHelper from application.libs.helper import MySQLHelper
from application.models import Log from application.models import Log
from application.utils import ElasticsearchUtil, ParseUtil from application.utils import ElasticsearchUtil, ParseUtil
...@@ -44,14 +45,14 @@ class LogDao: ...@@ -44,14 +45,14 @@ class LogDao:
dict: The data returned from Elasticsearch. dict: The data returned from Elasticsearch.
Raises: Raises:
SystemError: If none of the required parameters are provided. ServerError: If none of the required parameters are provided.
""" """
if sid is not None: if sid is not None:
return ElasticsearchUtil.scroll_search(sid) return ElasticsearchUtil.scroll_search(sid)
elif index is not None and dsl is not None: elif index is not None and dsl is not None:
return ElasticsearchUtil.search(index, dsl) return ElasticsearchUtil.search(index, dsl)
else: else:
raise SystemError('Could not get data from Elasticsearch') raise ServerError('Could not get data from Elasticsearch')
@classmethod @classmethod
def get_mdata(cls, data: dict) -> list: def get_mdata(cls, data: dict) -> list:
...@@ -70,7 +71,7 @@ class LogDao: ...@@ -70,7 +71,7 @@ class LogDao:
mdata = data.get('hits').get('hits') mdata = data.get('hits').get('hits')
if not mdata: if not mdata:
logger.error('the mdata is an empty list ...') 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 return mdata
@classmethod @classmethod
...@@ -184,7 +185,7 @@ class LogDao: ...@@ -184,7 +185,7 @@ class LogDao:
except Exception as e: except Exception as e:
# Log the error and raise a SystemError. # Log the error and raise a SystemError.
logger.error(f'The error: {e}') logger.error(f'The error: {e}')
raise SystemError() raise ServerError('Operate data error')
else: else:
# Log the success of the process. # Log the success of the process.
logger.debug('The process of inserting data succeed!') logger.debug('The process of inserting data succeed!')
......
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
""" """
from .config import ConsulConfig, LocalConfig from .config import ConsulConfig, LocalConfig
from .error import ConfigKeyError from .error import ConfigKeyError, ServerError
from .flask_consul import FlaskConsulService from .flask_consul import FlaskConsulService
from .flask_elasticsearch import FlaskElasticsearch from .flask_elasticsearch import FlaskElasticsearch
from .flask_loguru import FlaskLoguru from .flask_loguru import FlaskLoguru
from .response import JsonResponse
...@@ -10,4 +10,4 @@ ...@@ -10,4 +10,4 @@
# @Description : error 自定义模块 # @Description : error 自定义模块
""" """
from .exceptions import ConfigKeyError from .exceptions import ConfigKeyError, ServerError
...@@ -18,3 +18,8 @@ class ConfigKeyError(Exception): ...@@ -18,3 +18,8 @@ class ConfigKeyError(Exception):
def __init__(self, key): def __init__(self, key):
self.key = key self.key = key
super().__init__(f'Key {self.key} not found in configuration') super().__init__(f'Key {self.key} not found in configuration')
class ServerError(Exception):
def __init__(self, *args, **kwargs):
pass
...@@ -14,7 +14,9 @@ ...@@ -14,7 +14,9 @@
import atexit import atexit
import consul import consul
from flask import Flask from flask import Flask
from loguru import logger
from application.libs import ServerError
from application.libs.helper import ConfigHelper from application.libs.helper import ConfigHelper
from application.libs.helper import EnvVarHelper from application.libs.helper import EnvVarHelper
...@@ -59,8 +61,8 @@ class FlaskConsulService: ...@@ -59,8 +61,8 @@ class FlaskConsulService:
if self.service_id is None: if self.service_id is None:
self.service_id = f'{service_name}-{service_address}-{service_port}' self.service_id = f'{service_name}-{service_address}-{service_port}'
try: try:
check = consul.Check().tcp(host=service_address, port=service_port, interval=check_interval, timeout=timeout, check = consul.Check().tcp(host=service_address, port=service_port, interval=check_interval,
deregister=deregister_after) timeout=timeout, deregister=deregister_after)
if self.client is None: if self.client is None:
self.client = consul.Consul(**env_vars) self.client = consul.Consul(**env_vars)
self.client.agent.service.register( self.client.agent.service.register(
...@@ -71,7 +73,8 @@ class FlaskConsulService: ...@@ -71,7 +73,8 @@ class FlaskConsulService:
check=check check=check
) )
except Exception as e: except Exception as e:
print(e) logger.error(f'Failed to register service, error: {e}')
ServerError('Failed to register service')
def deregister_service(self): def deregister_service(self):
self.client.agent.service.deregister(self.service_id) 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: ...@@ -32,7 +32,7 @@ class LogService:
The result of the log parsing as an integer. The result of the log parsing as an integer.
Raises: 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. # Retrieve the start and end date from the given item.
......
...@@ -17,6 +17,8 @@ from pydantic import ValidationError ...@@ -17,6 +17,8 @@ from pydantic import ValidationError
from application.schemas import ParseLogRequestItem from application.schemas import ParseLogRequestItem
from application.services import LogService from application.services import LogService
from application.libs import JsonResponse
from application.libs import ServerError
# Define the log API blueprint # Define the log API blueprint
...@@ -37,15 +39,21 @@ def parse(): ...@@ -37,15 +39,21 @@ def parse():
# If no data provided, return error message # If no data provided, return error message
if not json_data: if not json_data:
logger.error('No input data provided') 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: try:
# Validate input data # Validate input data
item = ParseLogRequestItem(**json_data) item = ParseLogRequestItem(**json_data)
except ValidationError as e: except ValidationError as e:
# If validation fails, return error message # 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 # If validation passes, parse logs and return total number of logs parsed
total = LogService.parse(item) try:
return jsonify(search_total=total), 200 total = LogService.parse(item)
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