flask接口目录结构设计以及log模块初始化分享

2022-08-12  本文已影响0人  繁华丶凋零

目录结构

codebeamer-manage
├── bin
│   ├── start.sh
│   └── stop.sh
├── conf
│   └── conf.ini
├── data
├── logs
│   ├── bugsync.log
└── project
    ├── codebeamer_api.py
    ├── codebeamer_manager.py

1.codebeamer-manage/bin/start.sh

工程启动脚本

#!/bin/sh
basepath=$(cd `dirname $0`; pwd)
echo $basepath
nohup python3 $basepath/../project/codebeamer_api.py 2>&1 /dev/null &

2.codebeamer-manage/bin/stop.sh

工程停止脚本

#!/bin/bash
name='codebeamer_api.py'
pid=$(ps -ef|grep "../project/$name"|grep -v grep|awk '{print $2}')
if [ -z "$pid" ];then
    echo 'process is not alived'
else
    echo 'kill process'
    kill -9 $pid
    pid=$(ps -ef|grep "../project/$name"|grep -v grep|awk '{print $2}')
    if [ -z "$pid" ];then
        echo 'kill process success'
    else
        echo 'kill process error'
    fi
fi

3.codebeamer-manage/conf/conf.ini

工程配置文件
conf.ini里内容自行替换成 正确配置

[log]
loglevel = debug
logname = bugsync.log
interval = 1
backupCount = 7
when = MIDNIGHT
encoding = utf-8


[mongodb]
host = 1.2.3.4
dbname = dbname
user = user
password = password


[codebeamer]
url = codebeamer_url
Authorization = codebeamer_key

[bugzilla]
url = bugzilla_url
key = bugzilla_key

4.codebeamer-manage/project/codebeamer_api.py

工程接口文件

from flask import Flask, render_template, request, redirect, url_for
from flask_cors import CORS
import json
import codebeamer_manager

app = Flask(__name__)
CB = codebeamer_manager.Manager(codebeamer_manager.CONF_PATH)


@app.route('/api/codebeamer/item',methods=['POST', 'GET'])
def item_create():
    if request.method == 'POST':
        bugid = request.json['bugid']
        project = request.json['project']
        tracker = request.json['tracker']
        result = {bugid':bugid ,'project':project,'tracker':tracker }
        return(json.dumps(result))


if __name__ == '__main__':
    CORS(app, supports_credentials=True)
    app.run(host='0.0.0.0', port="50001",debug=True)

5.codebeamer-manage/project/codebeamer_manager.py

工程主功能函数文件

# -*- coding: UTF-8 -*-

import os
import sys
import time
import logging
import configparser
import re
from logging.handlers import TimedRotatingFileHandler
import json
import pymongo
from pymongo import MongoClient
import bugzilla
import codebeamer
import requests



BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CONF_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'conf','conf.ini')


def getNowTime():
    return time.strftime(r'%Y%m%d%H%M%S',time.localtime(time.time()))


class param():
    def __init__(self,confPath):
        self.conf = configparser.ConfigParser()
        self.conf.read(confPath)
        self.mongodb_init()
        self.log_init()
        self.codebeamer_init()
        self.bugzilla_init()

    def mongodb_init(self):
        self.mongodb = {}
        self.mongodb['host'] = self.conf.get('mongodb','host').split(',')
        self.mongodb['dbname'] = self.conf.get('mongodb','dbname')
        self.mongodb['user'] = self.conf.get('mongodb','user')
        self.mongodb['password'] = self.conf.get('mongodb','password')

    def log_init(self):
        self.log = {}
        self.log['loglevel'] = self.conf.get('log','loglevel')
        self.log['logname'] = self.conf.get('log','logname')
        self.log['interval'] = self.conf.getint('log','interval')
        self.log['backupCount'] = self.conf.getint('log','backupCount')
        self.log['when'] = self.conf.get('log','when')
        self.log['encoding'] = self.conf.get('log','encoding')

    def codebeamer_init(self):
        self.codebeamer = {}
        self.codebeamer['url'] = self.conf.get('codebeamer','url')
        self.codebeamer['Authorization'] = self.conf.get('codebeamer','Authorization')

    def bugzilla_init(self):
        self.bugzilla = {}
        self.bugzilla['url'] = self.conf.get('bugzilla','url')
        self.bugzilla['key'] = self.conf.get('bugzilla','key')

class Manager():
    def __init__(self,conf_path):
        self.param = param(conf_path)
        # log
        self.param.log['logname'] = os.path.join(BASE_DIR,'logs',self.param.log['logname'])
        self.logger_init(**self.param.log)
        # mongo client
        self.mongodb_init(**self.param.mongodb)
        self.codebeamer_init(**self.param.codebeamer)
        self.bugzilla_init(**self.param.bugzilla)

    # 初始化部分-------
    def logger_init(self,loglevel,logname,interval,backupCount,when,encoding):
        logger = logging.getLogger('log')
        logger.setLevel(logging.DEBUG)

        # 移除掉所有的handler
        while logger.hasHandlers():
            for i in logger.handlers:
                logger.removeHandler(i)

        # file log
        formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
        fh = TimedRotatingFileHandler(logname, when=when, interval=interval, backupCount=backupCount,encoding=encoding)
        fh.setLevel(logging.DEBUG)
        fh.setFormatter(formatter)
        logger.addHandler(fh)

        # console log
        self.logger = logger

    def mongodb_init(self,host,dbname,user,password):
        self.logger.debug("begin init mongodb connection")
        try:
            self.client = pymongo.MongoClient(host)
            self.db = self.client[dbname]
            self.db.authenticate(user,password)
        except Exception as e:
            self.logger.error("Failed to connect to MongoDB!")
            self.logger.error(str(e))
            raise e
        self.logger.debug("connect to MongoDB success!")


    def codebeamer_init(self,url,Authorization):
        self.logger.debug("begin init codebeamer connection")
        try:
            self.cli_cb = codebeamer.Codebeamer(url,Authorization)
        except Exception as e:
            self.logger.error("Failed to connect to codebeamer!")
            self.logger.error(str(e))
            raise e
        self.logger.debug("connect to codebeamer success!")


    def bugzilla_init(self,url,key):
        self.logger.debug("begin init bugzilla connection")
        try:
            self.cli_bg = bugzilla.Bugzilla(url,key)
        except Exception as e:
            self.logger.error("Failed to connect to bugzilla!")
            self.logger.error(str(e))
            raise e
        self.logger.debug("connect to bugzilla success!")

上一篇下一篇

猜你喜欢

热点阅读