diff --git a/main.py b/main.py
index 5384be2..0068707 100644
--- a/main.py
+++ b/main.py
@@ -1,16 +1,13 @@
# uvicorn main:app --host=127.0.0.1 --port=8000 --reload
from config.config import settings
from fastapi import Depends, FastAPI, BackgroundTasks, Request
-from dependencies import get_query_token, get_token_header
-# from routers import items, users
-# from internal import admin
+from dependencies import get_token_header
from ops.common import common
from ops.deploy import deploy
from typing import Optional
from scripts.common.redis import get_redis_pool
import pdb
-from fastapi.logger import logger as fastapi_logger
-import logging
+from scripts.logger import logger
tags_metadata = [
# {
@@ -28,60 +25,11 @@ tags_metadata = [
]
-app_log = None
-root = None
-
-LOGGING_CONFIG = {
- "version": 1,
- "disable_existing_loggers": False,
- "formatters": {
- "default": {
- "()": "uvicorn.logging.DefaultFormatter",
- "fmt": "%(asctime)s %(levelname)s %(name)s %(processName)s.%(threadName)s[%(process)d.%(thread)d]: %(message)s",
- "use_colors": None,
- },
- "access": {
- "()": "uvicorn.logging.AccessFormatter",
- "fmt": '%(asctime)s %(levelname)s %(name)s %(processName)s.%(threadName)s[%(process)d.%(thread)d]: %(client_addr)s - "%(request_line)s" %(status_code)s',
- },
- },
- "handlers": {
- "default": {
- "formatter": "default",
- "class": "logging.StreamHandler",
- "stream": "ext://sys.stderr",
- },
- "access": {
- "formatter": "access",
- "class": "logging.StreamHandler",
- "stream": "ext://sys.stdout",
- },
- },
- "loggers": {
- "": {"handlers": ["default"], "level": "INFO"},
- "uvicorn.error": {"level": "INFO"},
- "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
- },
-}
-
-
-def init_log():
- if settings.is_debug:
- LOGGING_CONFIG["loggers"] = {
- "": {"handlers": ["default"], "level": "DEBUG"},
- "uvicorn.error": {"level": "DEBUG"},
- "uvicorn.access": {"handlers": ["access"], "level": "DEBUG", "propagate": False},
- }
- return LOGGING_CONFIG
-
-
def create_app():
application = FastAPI(dependencies=[Depends(get_token_header)],
openapi_tags=tags_metadata)
application.include_router(common.router, prefix="/common")
application.include_router(deploy.router, prefix="/deploy")
- init_log()
-
return application
@@ -103,7 +51,7 @@ async def shutdown_event():
async def root(request: Request):
redis_client = request.app.state.redis
keys = await redis_client.get("online_devices")
- app_log.info("get keys was {0} with {1}".format(keys, request.url))
+ logger.info("get keys was {0} with {1}".format(keys, request.url))
if keys:
return {"message": "Hello Bigger Applications! {}".format(keys)}
else:
@@ -128,6 +76,7 @@ async def send_notification(request: Request, email: str, background_tasks: Back
# pdb.set_trace()
redis_client = request.app.state.redis
keys = await redis_client.get("online_devices")
+ logger.info("get keys = {}".format(keys))
# print(keys)
message = f"message to {email} \n"
background_tasks.add_task(write_log, message)
@@ -137,4 +86,4 @@ async def send_notification(request: Request, email: str, background_tasks: Back
if __name__ == '__main__':
import uvicorn
uvicorn.run(app='main:app', host="127.0.0.1",
- port=8010, reload=True, debug=True, log_config=LOGGING_CONFIG)
+ port=8010, reload=True, debug=True)
diff --git a/ops/deploy/deploy.py b/ops/deploy/deploy.py
index f44bd76..54f8f37 100644
--- a/ops/deploy/deploy.py
+++ b/ops/deploy/deploy.py
@@ -4,11 +4,12 @@ from starlette.requests import Request
from starlette.responses import JSONResponse
from config.config import settings
from scripts.common.deploy import ProjectInfo, deploy_service
-
+from uuid import uuid1
router = APIRouter()
@router.post("/server")
async def simple_send(project: ProjectInfo, tag: str, background_tasks: BackgroundTasks) -> JSONResponse:
- background_tasks.add_task(deploy_service, project, tag)
- return JSONResponse(status_code=200, content={"message": "{0} {1} deploy success!".format(project.name, tag)})
+ uuid = uuid1
+ background_tasks.add_task(deploy_service, project, tag, uuid)
+ return JSONResponse(status_code=200, content={"message": "{0} {1} deploy success,uuid={2}!".format(project.name, tag, uuid)})
diff --git a/scripts/common/deploy.py b/scripts/common/deploy.py
index 7d9efb0..d6c73ba 100644
--- a/scripts/common/deploy.py
+++ b/scripts/common/deploy.py
@@ -2,8 +2,10 @@ import re
from pydantic import BaseModel
from scripts.common.cvs import GitRepository
import os
-from fastapi import HTTPException
+from fastapi import HTTPException, Request
from . import run_cmd
+from .ansible import AnsibleAPI, write_host
+from scripts.logger import logger
class ProjectInfo(BaseModel):
@@ -15,7 +17,9 @@ class ProjectInfo(BaseModel):
name: str
-async def deploy_service(project: ProjectInfo, tag: str):
+async def deploy_service(request: Request, project: ProjectInfo, tag: str, uuid: str):
+ client = request.app.state.redis
+ dd = await client.set('x_token')
# git clone
local_path = project.base_dir+'/'+tag
#print(local_path, project.git_url, tag)
@@ -25,5 +29,11 @@ async def deploy_service(project: ProjectInfo, tag: str):
# run pre scripts
run_cmd(project.pre_script)
# find tag files
- pass
+ hosts = write_host(project.host)
+ an = AnsibleAPI(hosts)
+ run_data = {
+ "desc": "a"
+ }
+ run_out = an.run_playbook('test,yml', run_data)
+ logger.info(run_out)
# run ansible-play deloy tag files && run start script in remote
diff --git a/scripts/log.py b/scripts/log.py
new file mode 100644
index 0000000..39b973a
--- /dev/null
+++ b/scripts/log.py
@@ -0,0 +1,52 @@
+# pip install loguru
+import logging
+from types import FrameType
+from typing import cast
+import os
+import sys
+from loguru import logger
+
+BASE_DIR = os.path.abspath('.')
+
+
+class InterceptHandler(logging.Handler):
+ def emit(self, record: logging.LogRecord) -> None: # pragma: no cover
+ # Get corresponding Loguru level if it exists
+ try:
+ level = logger.level(record.levelname).name
+ except ValueError:
+ level = str(record.levelno)
+
+ # Find caller from where originated the logged message
+ frame, depth = logging.currentframe(), 2
+ while frame.f_code.co_filename == logging.__file__: # noqa: WPS609
+ frame = cast(FrameType, frame.f_back)
+ depth += 1
+
+ logger.opt(depth=depth, exception=record.exc_info).log(
+ level, record.getMessage(),
+ )
+
+
+LOGGING_LEVEL = logging.DEBUG if logging.DEBUG else logging.INFO
+LOGGERS = ("uvicorn.asgi", "uvicorn.access")
+
+logging.getLogger().handlers = [InterceptHandler()]
+for logger_name in LOGGERS:
+ logging_logger = logging.getLogger(logger_name)
+ logging_logger.handlers = [InterceptHandler(level=LOGGING_LEVEL)]
+
+log_file_path = os.path.join(BASE_DIR, 'logs/wise.log')
+err_log_file_path = os.path.join(BASE_DIR, 'logs/wise.err.log')
+
+loguru_config = {
+ "handlers": [
+ {"sink": sys.stderr, "level": "INFO",
+ "format": "{time:YYYY-mm-dd HH:mm:ss.SSS} | {thread.name} | {level} | "
+ "{module}:{function}:{line} - {message}"},
+ {"sink": log_file_path, "rotation": "500 MB", "encoding": 'utf-8'},
+ {"sink": err_log_file_path, "serialize": True, "level": 'ERROR', "rotation": "500 MB",
+ "encoding": 'utf-8'},
+ ],
+}
+logger.configure(**loguru_config)
diff --git a/scripts/logger.py b/scripts/logger.py
new file mode 100644
index 0000000..dc30da9
--- /dev/null
+++ b/scripts/logger.py
@@ -0,0 +1,20 @@
+import os
+import time
+from loguru import logger
+
+basedir = os.path.dirname(os.path.dirname(
+ os.path.dirname(os.path.abspath(__file__))))
+
+# print(f"log basedir{basedir}") # /xxx/python_code/FastAdmin/backend/app
+# 定位到log日志文件
+log_path = os.path.join(basedir, 'logs')
+
+if not os.path.exists(log_path):
+ os.mkdir(log_path)
+
+log_path_error = os.path.join(
+ log_path, f'{time.strftime("%Y-%m-%d")}_error.log')
+
+# 日志简单配置
+# 具体其他配置 可自行参考 https://github.com/Delgan/loguru
+logger.add(log_path_error, rotation="12:00", retention="5 days", enqueue=True)