add log setting
This commit is contained in:
parent
a0644d2598
commit
2431ecea20
@ -1,16 +1,28 @@
|
|||||||
from pydantic import BaseConfig
|
from pydantic import BaseSettings
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from pydantic.fields import T
|
||||||
|
|
||||||
|
|
||||||
|
class Settings(BaseSettings):
|
||||||
|
app_name: str = "Kingsome API"
|
||||||
|
admin_email: str = "pengtao@kingsome.cn"
|
||||||
|
items_per_user: int = 50
|
||||||
|
is_debug: bool = True
|
||||||
|
|
||||||
class Settings(BaseConfig):
|
|
||||||
redis_host: str = "192.168.100.30" # reids 服务器IP
|
redis_host: str = "192.168.100.30" # reids 服务器IP
|
||||||
redis_port: int = 6379 # redis 端口
|
redis_port: int = 6379 # redis 端口
|
||||||
redis_db: int = 2 # redis db
|
redis_db: int = 2 # redis db
|
||||||
|
|
||||||
mail_server: str = "smtp.exmail.qq.com" # 邮箱server
|
mail_server: str = "smtp.exmail.qq.com" # 邮箱server
|
||||||
mail_user: str = "ops@kingsome.cn" # 邮箱用户名
|
mail_user: str = "ops@kingsome.cn" # 邮箱用户名
|
||||||
mail_pswd: Optional[str] = os.getenv('mail_pswd') # 邮箱密码
|
mail_pswd: Optional[str] = os.getenv('mail_pswd') # 邮箱密码
|
||||||
|
|
||||||
x_token: str = "abc"
|
x_token: str = "abc"
|
||||||
|
|
||||||
|
root_path_in_servers: Optional[bool] = False
|
||||||
|
root_path: str = '/api/v1'
|
||||||
|
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
10
log.txt
10
log.txt
@ -1,10 +0,0 @@
|
|||||||
found query:aaa
|
|
||||||
message to asa
|
|
||||||
found query:aaa
|
|
||||||
message to asa
|
|
||||||
found query:aaa
|
|
||||||
message to asa
|
|
||||||
found query:aaa
|
|
||||||
message to asa
|
|
||||||
found query:aaa
|
|
||||||
message to asa
|
|
59
main.py
59
main.py
@ -1,14 +1,16 @@
|
|||||||
# uvicorn main:app --host=127.0.0.1 --port=8000 --reload
|
# uvicorn main:app --host=127.0.0.1 --port=8000 --reload
|
||||||
|
from config.config import settings
|
||||||
from fastapi import Depends, FastAPI, BackgroundTasks, Request
|
from fastapi import Depends, FastAPI, BackgroundTasks, Request
|
||||||
from dependencies import get_query_token, get_token_header
|
from dependencies import get_query_token, get_token_header
|
||||||
# from routers import items, users
|
# from routers import items, users
|
||||||
# from internal import admin
|
# from internal import admin
|
||||||
from ops.common import common
|
from ops.common import common
|
||||||
|
from ops.deploy import deploy
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from scripts.common.redis import get_redis_pool
|
from scripts.common.redis import get_redis_pool
|
||||||
import pdb
|
import pdb
|
||||||
# import sys
|
from fastapi.logger import logger as fastapi_logger
|
||||||
# sys.path.append('.')
|
import logging
|
||||||
|
|
||||||
tags_metadata = [
|
tags_metadata = [
|
||||||
# {
|
# {
|
||||||
@ -26,10 +28,60 @@ 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():
|
def create_app():
|
||||||
application = FastAPI(dependencies=[Depends(get_token_header)],
|
application = FastAPI(dependencies=[Depends(get_token_header)],
|
||||||
openapi_tags=tags_metadata)
|
openapi_tags=tags_metadata)
|
||||||
application.include_router(common.router, prefix="/common")
|
application.include_router(common.router, prefix="/common")
|
||||||
|
application.include_router(deploy.router, prefix="/deploy")
|
||||||
|
init_log()
|
||||||
|
|
||||||
return application
|
return application
|
||||||
|
|
||||||
|
|
||||||
@ -51,6 +103,7 @@ async def shutdown_event():
|
|||||||
async def root(request: Request):
|
async def root(request: Request):
|
||||||
redis_client = request.app.state.redis
|
redis_client = request.app.state.redis
|
||||||
keys = await redis_client.get("online_devices")
|
keys = await redis_client.get("online_devices")
|
||||||
|
app_log.info("get keys was {0} with {1}".format(keys, request.url))
|
||||||
if keys:
|
if keys:
|
||||||
return {"message": "Hello Bigger Applications! {}".format(keys)}
|
return {"message": "Hello Bigger Applications! {}".format(keys)}
|
||||||
else:
|
else:
|
||||||
@ -84,4 +137,4 @@ async def send_notification(request: Request, email: str, background_tasks: Back
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import uvicorn
|
import uvicorn
|
||||||
uvicorn.run(app='main:app', host="127.0.0.1",
|
uvicorn.run(app='main:app', host="127.0.0.1",
|
||||||
port=8010, reload=True, debug=True)
|
port=8010, reload=True, debug=True, log_config=LOGGING_CONFIG)
|
||||||
|
14
ops/deploy/deploy.py
Normal file
14
ops/deploy/deploy.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# pip install fastapi-mail
|
||||||
|
from fastapi import APIRouter, BackgroundTasks, UploadFile, File, Form
|
||||||
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import JSONResponse
|
||||||
|
from config.config import settings
|
||||||
|
from scripts.common.deploy import ProjectInfo, deploy_service
|
||||||
|
|
||||||
|
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)})
|
6
requests.txt
Normal file
6
requests.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
aioredis==1.3.1
|
||||||
|
fastapi==0.65.2
|
||||||
|
fastapi-mail==0.3.7
|
||||||
|
GitPython==3.1.18
|
||||||
|
pydantic==1.8.2
|
||||||
|
redis==3.2.1
|
@ -0,0 +1,23 @@
|
|||||||
|
import subprocess
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def run_cmd(cmd, shell=True):
|
||||||
|
'''
|
||||||
|
Run command with arguments, wait to complete and return ``True`` on success.
|
||||||
|
|
||||||
|
:param cls: The class as implicit first argument.
|
||||||
|
:param cmd: Command string to be executed.
|
||||||
|
:returns : ``True`` on success, otherwise ``None``.
|
||||||
|
:rtype : ``bool``
|
||||||
|
'''
|
||||||
|
# logger = logger.getLogger('SPOT.INGEST.COMMON.UTIL')
|
||||||
|
logging.debug('Execute command: {0}'.format(cmd))
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.call(cmd, shell=shell)
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as exc:
|
||||||
|
logging.error('[{0}] {1}'.format(
|
||||||
|
exc.__class__.__name__, exc.message))
|
100
scripts/common/cvs.py
Normal file
100
scripts/common/cvs.py
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import os
|
||||||
|
from git.repo import Repo
|
||||||
|
from git.repo.fun import is_git_dir
|
||||||
|
|
||||||
|
|
||||||
|
class GitRepository(object):
|
||||||
|
"""
|
||||||
|
git仓库管理
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, local_path, repo_url, branch='master'):
|
||||||
|
self.local_path = local_path
|
||||||
|
self.repo_url = repo_url
|
||||||
|
self.repo = None
|
||||||
|
self.initial(repo_url, branch)
|
||||||
|
|
||||||
|
def initial(self, repo_url, branch):
|
||||||
|
"""
|
||||||
|
初始化git仓库
|
||||||
|
:param repo_url:
|
||||||
|
:param branch:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if not os.path.exists(self.local_path):
|
||||||
|
os.makedirs(self.local_path)
|
||||||
|
|
||||||
|
git_local_path = os.path.join(self.local_path, '.git')
|
||||||
|
if not is_git_dir(git_local_path):
|
||||||
|
self.repo = Repo.clone_from(
|
||||||
|
repo_url, to_path=self.local_path, branch=branch)
|
||||||
|
else:
|
||||||
|
self.repo = Repo(self.local_path)
|
||||||
|
|
||||||
|
def pull(self):
|
||||||
|
"""
|
||||||
|
从线上拉最新代码
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.repo.git.pull()
|
||||||
|
|
||||||
|
def branches(self):
|
||||||
|
"""
|
||||||
|
获取所有分支
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
branches = self.repo.remote().refs
|
||||||
|
return [item.remote_head for item in branches if item.remote_head not in ['HEAD', ]]
|
||||||
|
|
||||||
|
def commits(self):
|
||||||
|
"""
|
||||||
|
获取所有提交记录
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
commit_log = self.repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}',
|
||||||
|
max_count=50,
|
||||||
|
date='format:%Y-%m-%d %H:%M')
|
||||||
|
log_list = commit_log.split("\n")
|
||||||
|
return [eval(item) for item in log_list]
|
||||||
|
|
||||||
|
def tags(self):
|
||||||
|
"""
|
||||||
|
获取所有tag
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
return [tag.name for tag in self.repo.tags]
|
||||||
|
|
||||||
|
def change_to_branch(self, branch):
|
||||||
|
"""
|
||||||
|
切换分值
|
||||||
|
:param branch:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.repo.git.checkout(branch)
|
||||||
|
|
||||||
|
def change_to_commit(self, branch, commit):
|
||||||
|
"""
|
||||||
|
切换commit
|
||||||
|
:param branch:
|
||||||
|
:param commit:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.change_to_branch(branch=branch)
|
||||||
|
self.repo.git.reset('--hard', commit)
|
||||||
|
|
||||||
|
def change_to_tag(self, tag):
|
||||||
|
"""
|
||||||
|
切换tag
|
||||||
|
:param tag:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
self.repo.git.checkout(tag)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
local_path = os.path.join('codes', 'luffycity')
|
||||||
|
repo = GitRepository(local_path, 'https://gitee.com/wupeiqi/fuck.git')
|
||||||
|
branch_list = repo.branches()
|
||||||
|
print(branch_list)
|
||||||
|
repo.change_to_branch('dev')
|
||||||
|
repo.pull()
|
29
scripts/common/deploy.py
Normal file
29
scripts/common/deploy.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import re
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from scripts.common.cvs import GitRepository
|
||||||
|
import os
|
||||||
|
from fastapi import HTTPException
|
||||||
|
from . import run_cmd
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectInfo(BaseModel):
|
||||||
|
git_url: str
|
||||||
|
base_dir: str = "/data/back_apps"
|
||||||
|
host: str
|
||||||
|
pre_script: str
|
||||||
|
start_script: str
|
||||||
|
name: str
|
||||||
|
|
||||||
|
|
||||||
|
async def deploy_service(project: ProjectInfo, tag: str):
|
||||||
|
# git clone
|
||||||
|
local_path = project.base_dir+'/'+tag
|
||||||
|
#print(local_path, project.git_url, tag)
|
||||||
|
git = GitRepository(local_path=local_path, repo_url=project.git_url)
|
||||||
|
git.pull()
|
||||||
|
git.change_to_tag(tag)
|
||||||
|
# run pre scripts
|
||||||
|
run_cmd(project.pre_script)
|
||||||
|
# find tag files
|
||||||
|
pass
|
||||||
|
# run ansible-play deloy tag files && run start script in remote
|
Loading…
x
Reference in New Issue
Block a user