Commit b48cbc56 authored by wanliofficial's avatar wanliofficial

🌈 style(): 更新缓存,删除不必要文件

parent 32df1548
logs/
\ No newline at end of file
# Flask-Migrate
数据库迁移工具:使用Flask-Migrate数据库迁移框架可以保证数据库结构在发生变化时,改变数据库结构不至于丢失数据库的数据。
1. 安装
```
pip install Flask-Migrate
```
2. demo
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
```
3. 初始化
完成文件创建后就可以进行初始化了,切换到文件所在文件夹下,使用命令
```
flask db init
```
这个命令中的**db**是在*manager.py**migrate = Migrate(app, db)*这行代码中声明命令行对象名称;
init是Migrate命令,表示初始化迁移数据库,运行完成后会在当前目录下创建一个migrations文件夹,用于进行迁移的数据库脚本都放在这里。
4. 迁移数据库
可以实现数据库迁移仓库创建:
```
flask db migrate -m "Initial migration."
```
此时生成一个versions文件夹:
从数据库中能看到alembic_version表。
5. 更新数据库
```
flask db upgrade
```
6. 总结
+ 一是修改app部分代码,增加与Migrate相关的Command代码;
+ 二是准备好数据模型,即model.py文件中的内容;
+ 三是初始化和更新迁移数据库操作,即3次命令输入。
后面models目录下任何一个数据库表文件增加或者删除了字段,通过以下两步解决:
```
python manager.py db migrate
python manager.py db upgrade
```
详情参考:https://zhuanlan.zhihu.com/p/307612189
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import sys
sys.path.append("..")
from controllers import initConnect
initConnect()
\ No newline at end of file
# -*- coding: utf-8 -*-
import sys
import string
import flask_restful
from flask import Flask, abort, jsonify
from flask_jwt_extended import ( JWTManager )
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from hashids import Hashids
from webcreator.response import ResponseCode, response_result
from webcreator.log import logger
from .config import config
# 初始化app
app = Flask(__name__)
# 初始化sqlalchemy
app.config.from_object(config)
db = SQLAlchemy(app)
# 初始化marshmallow
ma = Marshmallow(app)
# 增加jwt校验
jwt = JWTManager(app)
hash_ids = Hashids(salt='hvwptlmj027d5quf', min_length=8, alphabet=string.ascii_lowercase + string.digits) # hash函数
# 保留flask原生异常处理
handle_exception = app.handle_exception
handle_user_exception = app.handle_user_exception
# 过期令牌
@jwt.expired_token_loader
def expired_token_callback(jwt_header, jwt_payload):
logger.info(jwt_payload)
return jsonify({
'code': 401,
'msg': 'token expired',
'data': jwt_header
})
# 无效令牌
@jwt.invalid_token_loader
def invalid_token_callback(error): # we have to keep the argument here, since it's passed in by the caller internally
return jsonify({
'code': 401,
'msg': 'invalid token',
'data': error
})
# 校验失败
@jwt.unauthorized_loader
def unauthorized_callback(error):
return jsonify({
'code': 401,
'msg': 'unauthorized',
'data': error
})
def _custom_abort(http_status_code, **kwargs):
"""
自定义abort 400响应数据格式
"""
logger.info(kwargs)
# if http_status_code == 400:
# message = kwargs.get('msg')
# if isinstance(message, dict):
# param, info = list(message.items())[0]
# data = '{}:{}!'.format(param, info)
# return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=data)))
# else:
# return abort(jsonify(response_result(ResponseCode.HTTP_INVAILD_REQUEST, data=message)))
return abort(jsonify({ 'code': http_status_code, 'msg': kwargs }))
# return abort(http_status_code)
def _access_control(response):
"""
解决跨域请求
"""
# response.headers['Access-Control-Allow-Origin'] = '*'
# response.headers['Access-Control-Allow-Methods'] = 'GET,HEAD,PUT,PATCH,POST,DELETE'
# response.headers['Access-Control-Allow-Headers'] = 'Content-Type'
# response.headers['Access-Control-Max-Age'] = 86400
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS'
response.headers['Access-Control-Allow-Headers'] = 'Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With, Authorization'
response.headers['Access-Control-Expose-Headers'] = 'Authorization'
response.headers['Access-Control-Max-Age'] = 86400
response.headers['Access-Control-Request-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
return response
def create_app(config):
"""
创建app
"""
# 添加配置
app.config.from_object(config)
# 解决跨域
app.after_request(_access_control)
# 自定义abort 400 响应数据格式
flask_restful.abort = _custom_abort
# 数据库初始化
# db.app = app
db.init_app(app)
# 创建表
db.create_all()
# 注册蓝图
sys.path.append("..")
from views import api_v1
app.register_blueprint(api_v1, url_prefix='/api/v1')
# 使用flask原生异常处理程序
app.handle_exception = handle_exception
app.handle_user_exception = handle_user_exception
return app
# -*- coding: utf-8 -*-
import os
import multiprocessing
MODE = 'develop' # develop: 开发模式; production: 生产模式
class ProductionConfig(object):
EPK_DIR = "D:\\projects\\scriptiot\\evm_app_store_files\\epks"
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3001'
WORKERS = multiprocessing.cpu_count() * 2 + 1
WORKER_CONNECTIONS = 10000
BACKLOG = 64
TIMEOUT = 60
LOG_LEVEL = 'INFO'
LOG_DIR_PATH = os.path.join(os.path.dirname(__file__), 'logs')
LOG_FILE_MAX_BYTES = 1024 * 1024 * 100
LOG_FILE_BACKUP_COUNT = 10
PID_FILE = 'run.pid'
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
JWT_REFRESH_TOKEN_EXPIRES = 1800
MYSQL_DB = 'qianjing_iot'
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = {
'app-store': 'sqlite:///../test.db'
}
SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
def __init__(self):
super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../test.db'
class DevelopConfig(object):
EPK_DIR = "D:\\projects\\scriptiot\\evm_app_store_files\\epks"
UPLOAD_ROOT_DIR = "D:\\projects\\scriptiot\\evm_app_store_files"
UPLOAD_ALLOWED = set(['doc', 'docs', 'csv', 'xls', 'xlsx'])
BIND = '127.0.0.1:3001'
WORKERS = 2
WORKER_CONNECTIONS = 1000
BACKLOG = 64
TIMEOUT = 30
LOG_LEVEL = 'DEBUG'
LOG_DIR_PATH = os.path.join(os.path.dirname(__file__), 'logs')
LOG_FILE_MAX_BYTES = 1024 * 1024
LOG_FILE_BACKUP_COUNT = 1
PID_FILE = 'run.pid'
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_PASSWORD = ''
REDIS_MAX_CONNECTIONS = 100
JWT_HEADER_NAME = 'Authorization'
JWT_HEADER_TYPE = 'Bearer'
JWT_SECRET_KEY = '6UdxRgs2hvWpTLmj027d5vt7dXXQX'
JWT_ACCESS_TOKEN_EXPIRES = 7200
JWT_REFRESH_TOKEN_EXPIRES = 1800
MYSQL_DB = 'qianjing_iot'
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'debian-sys-maint'
MYSQL_PWD = 'XMigC2B2uugnv18y'
SQLALCHEMY_BINDS = {
'app-store': 'sqlite:///../evue-store.db'
}
SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = False
def __init__(self):
super().__init__()
self.SQLALCHEMY_DATABASE_URI = 'sqlite:///../evue-store.db'
if MODE == 'production':
config = ProductionConfig()
else:
config = DevelopConfig()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from webcreator.event import PySignal
class SignalManager(object):
actionPostArea = PySignal()
actionDeleteArea = PySignal()
actionGetlistArea = PySignal()
actionGetArea = PySignal()
actionPutArea = PySignal()
actionPostApp = PySignal()
actionDeleteApp = PySignal()
actionGetlistApp = PySignal()
actionGetApp = PySignal()
actionPutApp = PySignal()
actionGetlistPackage = PySignal()
actionGetPackage = PySignal()
actionPostUser = PySignal()
actionDeleteUser = PySignal()
actionGetlistUser = PySignal()
actionGetUser = PySignal()
actionPutUser = PySignal()
actionPostLogin = PySignal()
actionGetlistLogin = PySignal()
actionGetLogin = PySignal()
actionPostDevice = PySignal()
actionDeleteDevice = PySignal()
actionGetlistDevice = PySignal()
actionGetDevice = PySignal()
actionPutDevice = PySignal()
actionDeleteAnnex = PySignal()
actionGetlistAnnex = PySignal()
actionGetAnnex = PySignal()
actionGetlistMonitorwatch = PySignal()
actionGetMonitorwatch = PySignal()
actionGetlistMonitorsystem = PySignal()
actionGetMonitorsystem = PySignal()
actionGetlistMonitorlvgl = PySignal()
actionGetMonitorlvgl = PySignal()
actionGetlistMonitorimage = PySignal()
actionGetMonitorimage = PySignal()
actionGetlistMonitorevm = PySignal()
actionGetMonitorevm = PySignal()
actionTreelist = PySignal()
actionTreenodes = PySignal()
actionUpdatebyid = PySignal()
actionMenuCreate = PySignal()
actionUpdateSort = PySignal()
actionMenuBatch = PySignal()
# file manager api
actionGetFileInit = PySignal()
actionGetFileContent = PySignal()
actionGetFileTree = PySignal()
actionGetFileDisk = PySignal()
actionGetFileDown = PySignal()
actionGetFilePreview = PySignal()
actionPostFileUpdate = PySignal()
actionPostFileUpload = PySignal()
actionPostFileDelete = PySignal()
actionPostFileCreate = PySignal()
actionPostFileCreateDir = PySignal()
actionPostFilePaste = PySignal()
# api
actionPostAppReview = PySignal()
actionGetLauncher = PySignal()
actionSetLauncher = PySignal()
actionGetApplication = PySignal()
actionGetAppInfo = PySignal()
actionGetAppList = PySignal()
actionGetEpk = PySignal()
actionApplicationBuild = PySignal()
actionCheckVersion = PySignal()
# workbench
actionWorkbench = PySignal()
def __init__(self):
super().__init__()
signalManager = SignalManager()
\ No newline at end of file
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-28 17:07:05
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\__init__.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.signal_manager import signalManager
from .area import areaManager
from .app import appManager
from .package import packageManager
from .user import userManager
from .login import loginManager
from .device import deviceManager
from .annex import annexManager
from .monitorWatch import monitorWatchManager
from .monitorSystem import monitorSystemManager
from .monitorLvgl import monitorLvglManager
from .monitorImage import monitorImageManager
from .monitorEvm import monitorEvmManager
from .menu import menuManager
from .api import appReview, buildAppResource
from .file import fileManager
from .workbench import workbenchResource
def initConnect():
signalManager.actionPostArea.connect(areaManager.post)
signalManager.actionDeleteArea.connect(areaManager.delete)
signalManager.actionGetlistArea.connect(areaManager.getList)
signalManager.actionGetArea.connect(areaManager.get)
signalManager.actionPutArea.connect(areaManager.put)
signalManager.actionPostApp.connect(appManager.post)
signalManager.actionDeleteApp.connect(appManager.delete)
signalManager.actionGetlistApp.connect(appManager.getList)
signalManager.actionGetApp.connect(appManager.get)
signalManager.actionPutApp.connect(appManager.put)
signalManager.actionGetlistPackage.connect(packageManager.getList)
signalManager.actionGetPackage.connect(packageManager.get)
signalManager.actionPostUser.connect(userManager.post)
signalManager.actionDeleteUser.connect(userManager.delete)
signalManager.actionGetlistUser.connect(userManager.getList)
signalManager.actionGetUser.connect(userManager.get)
signalManager.actionPutUser.connect(userManager.put)
signalManager.actionPostLogin.connect(loginManager.post)
signalManager.actionGetlistLogin.connect(loginManager.getList)
signalManager.actionGetLogin.connect(loginManager.get)
signalManager.actionPostDevice.connect(deviceManager.post)
signalManager.actionDeleteDevice.connect(deviceManager.delete)
signalManager.actionGetlistDevice.connect(deviceManager.getList)
signalManager.actionGetDevice.connect(deviceManager.get)
signalManager.actionPutDevice.connect(deviceManager.put)
signalManager.actionDeleteAnnex.connect(annexManager.delete)
signalManager.actionGetlistAnnex.connect(annexManager.getList)
signalManager.actionGetAnnex.connect(annexManager.get)
signalManager.actionGetlistMonitorwatch.connect(monitorWatchManager.getList)
signalManager.actionGetMonitorwatch.connect(monitorWatchManager.get)
signalManager.actionGetlistMonitorsystem.connect(monitorSystemManager.getList)
signalManager.actionGetMonitorsystem.connect(monitorSystemManager.get)
signalManager.actionGetlistMonitorlvgl.connect(monitorLvglManager.getList)
signalManager.actionGetMonitorlvgl.connect(monitorLvglManager.get)
signalManager.actionGetlistMonitorimage.connect(monitorImageManager.getList)
signalManager.actionGetMonitorimage.connect(monitorImageManager.get)
signalManager.actionGetlistMonitorevm.connect(monitorEvmManager.getList)
signalManager.actionGetMonitorevm.connect(monitorEvmManager.get)
signalManager.actionTreelist.connect(menuManager.treeList)
signalManager.actionTreenodes.connect(menuManager.treeNodes)
signalManager.actionUpdatebyid.connect(menuManager.updateById)
signalManager.actionMenuCreate.connect(menuManager.create)
signalManager.actionUpdateSort.connect(menuManager.updateSort)
signalManager.actionMenuBatch.connect(menuManager.batch)
# file manager api
signalManager.actionGetFileContent.connect(fileManager.content)
signalManager.actionGetFileDisk.connect(fileManager.disk)
signalManager.actionGetFileDown.connect(fileManager.download)
signalManager.actionGetFileInit.connect(fileManager.initialize)
signalManager.actionGetFilePreview.connect(fileManager.preview)
signalManager.actionGetFileTree.connect(fileManager.tree)
signalManager.actionPostFileUpdate.connect(fileManager.update_file)
signalManager.actionPostFileUpload.connect(fileManager.upload)
signalManager.actionPostFileDelete.connect(fileManager.delete)
signalManager.actionPostFileCreate.connect(fileManager.create_file)
signalManager.actionPostFileCreateDir.connect(fileManager.create_dir)
signalManager.actionPostFilePaste.connect(fileManager.paste)
# api
signalManager.actionPostAppReview.connect(appReview.post)
signalManager.actionSetLauncher.connect(appReview.get)
signalManager.actionGetLauncher.connect(appReview.getLauncher)
signalManager.actionApplicationBuild.connect(buildAppResource.post)
signalManager.actionGetAppList.connect(appReview.getAppList)
signalManager.actionGetApplication.connect(appReview.getApp)
signalManager.actionGetEpk.connect(appReview.getDownloadFile)
signalManager.actionCheckVersion.connect(appReview.checkAppVersion)
signalManager.actionWorkbench.connect(workbenchResource.get)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.annex import AnnexModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class AnnexResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [AnnexModel.is_delete==False, AnnexModel.uuid==uuid]
result = AnnexModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [AnnexModel.is_delete==False]
result = AnnexModel.query.filter(*filters).order_by(AnnexModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = AnnexModel.query.filter(AnnexModel.app == params.get('app')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = AnnexModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = AnnexModel.query.filter(AnnexModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = AnnexModel.query.filter(AnnexModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
annexManager = AnnexResource()
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.area import AreaModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class AreaResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [AreaModel.is_delete==False, AreaModel.uuid==uuid]
result = AreaModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [AreaModel.is_delete==False]
result = AreaModel.query.filter(*filters).order_by(AreaModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = AreaModel.query.filter(AreaModel.areaCode == params.get('areaCode')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = AreaModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = AreaModel.query.filter(AreaModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = AreaModel.query.filter(AreaModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
areaManager = AreaResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-22 10:35:53
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\device.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.user import UserModel
from models.device import DeviceModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class DeviceResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [DeviceModel.is_delete==False, DeviceModel.uuid==uuid]
result = DeviceModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params, jwt={}):
# handle business
user = UserModel.query.filter(UserModel.uuid==jwt.get("uuid"), UserModel.is_delete==False).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
filters = [DeviceModel.is_delete==False, DeviceModel.create_by==user.id]
if params.get("type"): filters.append(DeviceModel.type==params.get("type"))
if params.get("name"): filters.append(DeviceModel.name==params.get("name"))
if params.get("imei"): filters.append(DeviceModel.imei==params.get("imei"))
result = DeviceModel.query.filter(*filters).order_by(DeviceModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.imei == params.get('imei')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.IMEI_EXISTS
user = UserModel.query.filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
params.update({
'create_at': datetime.now(),
'create_by': user.id,
'update_at': datetime.now(),
'update_by': user.id
})
result = DeviceModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
deviceManager = DeviceResource()
\ No newline at end of file
This diff is collapsed.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import json
import pprint
from datetime import datetime
from flask_jwt_extended import (create_access_token,)
from application.app import db
from models.login import LoginModel
from models.user import UserModel
from webcreator.log import logger
from webcreator import utils
from webcreator.response import ResponseCode
@utils.ThreadMaker
def update_login_information(ip, log_id):
try:
jsonData = utils.get_location_by_ip(ip)
if (0 != jsonData['status']):
return None
record = LoginModel.query.filter(LoginModel.id==log_id).first()
record.geo_location = json.dumps(jsonData, ensure_ascii=False)
db.session.commit()
except Exception as e:
logger.error(e)
class LoginResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [LoginModel.is_delete==False, LoginModel.uuid==uuid]
result = LoginModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [LoginModel.is_delete==False]
result = LoginModel.query.filter(*filters).order_by(LoginModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
user = UserModel.query.filter(UserModel.account==params.get("account")).first()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
logger.info(params)
if user.password != utils.md5_encryption(params.get("password")):
return False, ResponseCode.USER_PASSWORD_ERROR
# 插入一条登录记录
obj = { 'user': user.id, 'user_agent': params.get("user_agent"), 'ip': params.get("ip"), 'geo_location': '', 'operator': '', 'login_at': datetime.now().strftime("%Y-%m-%d %H:%M:%S") }
result = LoginModel(**obj)
result.operator = ""
db.session.add(result)
db.session.commit()
# 获取当前登录IP地理位置信息
update_login_information(params.get("ip"), result.id)
# 生成一个token,返回给前端
result = {
'uuid': str(user.uuid),
'name': user.username,
'token': create_access_token(identity={'uuid': str(user.uuid), 'name': user.username}),
}
pprint.pprint(result)
return result, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = LoginModel.query.filter(LoginModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = LoginModel.query.filter(LoginModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
loginManager = LoginResource()
'''
Author: your name
Date: 2021-07-27 16:19:06
LastEditTime: 2021-07-28 09:28:49
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\menu.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from pprint import pprint
from datetime import datetime
from application.app import db
from models.user import UserModel
from models.menu import MenuModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MenuResource(object):
def __init__(self):
super().__init__()
def print_tree(self, group_name, tab=1):
"""
:param str group_name:要查找的树的根的名称
:param int tab: 格式化用的-数量
"""
group = db.session.query(MenuModel).filter_by(name=group_name).one_or_none()
if not group:
return
# group found - print name and find children
print('- ' * tab + group.name)
for child_group in group.children: # type: TreeGroup
# new tabulation value for child record
self.print_tree(child_group.name, tab * 2)
def batch(self, params={}, jwt={}):
# 如果id里面包含无法转换为数字的字符,那么该接口将会报错
ids = list(map(lambda x:int(x), params.get("ids").split(",")))
result = db.session.query(MenuModel).filter(MenuModel.id in ids).delete()
db.session.commit() # 这是批量删除模式
logger.info(result)
return True, ResponseCode.HTTP_SUCCESS
def updateSort(self, params={}, jwt={}):
user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
# 接口字段可能和数据库字段不一致
result = db.session.query(MenuModel).filter(MenuModel.id==params.get("id")).one_or_none()
if result:
sort = 1
if params.get("direction") == "bottom":
sort = -1
result.update_at = datetime.now()
result.update_by = user.id
result.sort = result.sort + sort
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_NOT_FOUND
def create(self, params={}, jwt={}):
user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
# 接口字段可能和数据库字段不一致
extends = MenuModel.fields_mapping()
data = dict(is_delete=False, sort=0, remarks="")
data.update({
'create_by': user.id,
'create_at': datetime.niw(),
'update_by': user.id,
'update_at': datetime.now()
})
for k in params.keys():
if k in extends:
k[extends[k]] = params[k]
continue
if hasattr(MenuModel, k):
data[k] = params[k]
if data.get("sort") == 0:
data.sort = db.session.query(MenuModel).filter().count() + 1
# 默认设置sort等于表内记录个数
logger.info(data.sort)
result = MenuModel(**data)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def treeList(self, params={}, jwt={}):
filters = [MenuModel.is_delete==False]
result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all()
data = []
if result:
print(result)
tab = 1
for item in result:
tmp = item.get_tree(session=db.session)
# print(tmp, tmp.get("node"))
for tt in tmp:
logger.info(tt)
logger.info(tt.get("node"))
# pprint(item.get_tree(session=db.session, json=True))
pprint(item.get_children(session=db.session))
# for child_group in i.children: # type: TreeGroup
# # new tabulation value for child record
# self.print_tree(child_group.name, tab * 2)
# for item in result:
# t = item.dict()
# data.append(t)
# return result, ResponseCode.HTTP_SUCCESS
return data, ResponseCode.HTTP_NOT_FOUND
def treeNodes(self, params={}, jwt={}):
filters = [MenuModel.is_delete==False, MenuModel.parent_id==0]
result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all()
logger.info(result)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def updateById(self, params={}, jwt={}):
user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
# 接口字段可能和数据库字段不一致
extends = MenuModel.fields_mapping()
data = dict(is_delete=False)
data.update({
'update_at': datetime.now(),
'update_by': user.id
})
for k in params.keys():
if k in extends:
k[extends[k]] = params[k]
continue
if hasattr(MenuModel, k):
data[k] = params[k]
logger.info(data)
# filters = [MenuModel.is_delete==False]
# result = MenuModel.query.filter(*filters).first()
result = MenuModel.query.filter(MenuModel.id==params.get("id")).update(data, synchronize_session=False)
db.session.commit()
logger.info(result)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
menuManager = MenuResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-06-29 19:24:32
LastEditTime: 2021-07-21 18:37:59
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\backend\controller\monitor.py
'''
from application.app import db
from models.device import DeviceModel
from models.monitorEvm import MonitorEvmModel
from models.monitorImage import MonitorImageModel
from models.monitorLvgl import MonitorLvglModel
from models.monitorSystem import MonitorSystemModel
from webcreator.log import logger
class SystemResource(object):
def get(self):
return MonitorSystemModel.query.all()
def post(self, params):
data = dict()
for k in params:
if hasattr(MonitorSystemModel, k):
data[k] = params[k]
result = MonitorSystemModel(**data)
db.session.add(result)
db.session.commit()
return True
class LvglResource(object):
def get(self):
return MonitorLvglModel.query.all()
def post(self, params):
data = dict()
for k in params:
if hasattr(MonitorLvglModel, k):
data[k] = params[k]
result = MonitorLvglModel(**data)
db.session.add(result)
db.session.commit()
return True
class EvmResource(object):
def get(self):
return MonitorEvmModel.query.all()
def post(self, params):
result = MonitorEvmModel(**params)
db.session.add(result)
db.session.commit()
return True
class ImageResource(object):
def get(self):
return MonitorImageModel.query.all()
def post(self, params):
data = dict()
for k in params:
if hasattr(MonitorImageModel, k):
data[k] = params[k]
result = MonitorImageModel(**data)
db.session.add(result)
db.session.commit()
return True
def post_array(self, array, watch):
t = []
for a in array:
data = dict()
for k in a:
if hasattr(MonitorImageModel, k):
data[k] = a[k]
data.update({ "watch": watch })
t.append(data)
db.session.execute(MonitorImageModel.__table__.insert(), t)
db.session.commit()
return True
systemResource = SystemResource()
lvglResource = LvglResource()
evmResource = EvmResource()
imageResource = ImageResource()
def insert_data(msg):
# 先判断手表imei是否存在,不存在则先注册手表IMEI
device_id = -1
if not msg.get("imei"):
return None
result = DeviceModel.query.filter(DeviceModel.imei==msg.get("imei")).one_or_none()
if not result:
return None
device_id = result.id
if msg.get("system") or msg.get("request"):
msg.get("system", {}).update({ "watch": device_id })
msg.get("system").update(msg.get("request", {}))
systemResource.post(msg.get("system"))
if msg.get("lvgl"):
msg.get("lvgl").update({ "watch": device_id })
lvglResource.post(msg.get("lvgl"))
if msg.get("evm"):
msg.get("evm").update({ "watch": device_id })
evmResource.post(msg.get("evm"))
if msg.get("image"):
imageResource.post_array(msg.get("image"), device_id)
return True
def get_watch_list():
result = DeviceModel.query.all()
tmp = []
for item in result:
tmp.append({
'id': item.id,
'imei': item.imei
})
return tmp
def evm_data(watch, start, end):
filters = [MonitorEvmModel.watch==watch]
if start:
filters.append(MonitorEvmModel.timestamp >= start)
if end:
filters.append(MonitorEvmModel.timestamp <= end)
result = MonitorEvmModel.query.filter(*filters).order_by(MonitorEvmModel.timestamp).all()
temp = []
for item in result:
t = item.to_dict()
if t.get("timestamp"):
t.update({ 'timestamp': t.get("timestamp").strftime("%Y-%m-%d %H:%M:%S") })
temp.append(t)
return temp
def lvgl_data(watch, start, end):
filters = [MonitorLvglModel.watch==watch]
if start:
filters.append(MonitorLvglModel.timestamp>=start)
if end:
filters.append(MonitorLvglModel.timestamp<=end)
result = MonitorLvglModel.query.filter(*filters).order_by(MonitorLvglModel.timestamp).all()
temp = []
for item in result:
t = item.to_dict()
if t.get("timestamp"):
t.update({ 'timestamp': t.get("timestamp").strftime("%Y-%m-%d %H:%M:%S") })
temp.append(t)
return temp
def image_data(watch, start, end):
filters = [MonitorImageModel.watch==watch]
if start:
filters.append(MonitorImageModel.timestamp>=start)
if end:
filters.append(MonitorImageModel.timestamp<=end)
result = MonitorImageModel.query.filter(*filters).order_by(MonitorImageModel.timestamp).all()
temp = []
for item in result:
t = item.to_dict()
if t.get("timestamp"):
t.update({ 'timestamp': t.get("timestamp").strftime("%Y-%m-%d %H:%M:%S") })
temp.append(t)
return temp
def get_monitor_list(watch, category, start, end):
# 判断watch是否存在
w = DeviceModel.query.filter(DeviceModel.id==watch).first()
if not w:
return []
if category == "system":
return []
elif category == "image":
return image_data(watch, start, end)
elif category == "lvgl":
return lvgl_data(watch, start, end)
elif category == "evm":
return evm_data(watch, start, end)
else:
return {
'evm': evm_data(watch, start, end),
'lvgl': lvgl_data(watch, start, end),
'image': image_data(watch, start, end)
}
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.monitorEvm import MonitorEvmModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MonitorEvmResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [MonitorEvmModel.is_delete==False, MonitorEvmModel.uuid==uuid]
result = MonitorEvmModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [MonitorEvmModel.is_delete==False]
result = MonitorEvmModel.query.filter(*filters).order_by(MonitorEvmModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = MonitorEvmModel.query.filter(MonitorEvmModel.watch == params.get('watch')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = MonitorEvmModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = MonitorEvmModel.query.filter(MonitorEvmModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = MonitorEvmModel.query.filter(MonitorEvmModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
monitorEvmManager = MonitorEvmResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.monitorImage import MonitorImageModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MonitorImageResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [MonitorImageModel.is_delete==False, MonitorImageModel.uuid==uuid]
result = MonitorImageModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [MonitorImageModel.is_delete==False]
result = MonitorImageModel.query.filter(*filters).order_by(MonitorImageModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = MonitorImageModel.query.filter(MonitorImageModel.watch == params.get('watch')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = MonitorImageModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = MonitorImageModel.query.filter(MonitorImageModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = MonitorImageModel.query.filter(MonitorImageModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
monitorImageManager = MonitorImageResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.monitorLvgl import MonitorLvglModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MonitorLvglResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [MonitorLvglModel.is_delete==False, MonitorLvglModel.uuid==uuid]
result = MonitorLvglModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [MonitorLvglModel.is_delete==False]
result = MonitorLvglModel.query.filter(*filters).order_by(MonitorLvglModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = MonitorLvglModel.query.filter(MonitorLvglModel.watch == params.get('watch')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = MonitorLvglModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = MonitorLvglModel.query.filter(MonitorLvglModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = MonitorLvglModel.query.filter(MonitorLvglModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
monitorLvglManager = MonitorLvglResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.monitorSystem import MonitorSystemModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MonitorSystemResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [MonitorSystemModel.is_delete==False, MonitorSystemModel.uuid==uuid]
result = MonitorSystemModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [MonitorSystemModel.is_delete==False]
result = MonitorSystemModel.query.filter(*filters).order_by(MonitorSystemModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = MonitorSystemModel.query.filter(MonitorSystemModel.watch == params.get('watch')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = MonitorSystemModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = MonitorSystemModel.query.filter(MonitorSystemModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = MonitorSystemModel.query.filter(MonitorSystemModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
monitorSystemManager = MonitorSystemResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-20 01:18:27
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\monitorWatch.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.device import DeviceModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class MonitorWatchResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [DeviceModel.is_delete==False, DeviceModel.uuid==uuid]
result = DeviceModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [DeviceModel.is_delete==False]
result = DeviceModel.query.filter(*filters).order_by(DeviceModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.imei == params.get('imei')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.HTTP_INVAILD_REQUEST
result = DeviceModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = DeviceModel.query.filter(DeviceModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
monitorWatchManager = MonitorWatchResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-06-30 18:03:41
LastEditTime: 2021-07-22 16:09:28
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\package.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import re
import shutil
from pathlib import Path
from datetime import datetime
from application.app import db, config
from models.annex import AnnexModel
from models.app import AppModel
from models.user import UserModel
from models.package import PackageModel
from webcreator.utils.epk import EpkApp
from webcreator.log import logger
from webcreator.response import ResponseCode
class PackageResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, jwt):
# handle business
filters = [PackageModel.is_delete==False, PackageModel.uuid==uuid]
result = PackageModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params, jwt):
# handle business
logger.warn(params)
# filters = [PackageModel.is_delete==False]
# result = PackageModel.query.filter(*filters).order_by(PackageModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
# if result:
# return result, ResponseCode.HTTP_SUCCESS
user = UserModel.query.filter(UserModel.uuid==jwt.get('uuid')).one_or_none()
if not user:
return False, ResponseCode.USER_NOT_EXISTS
temp = {}
if user.role == 1:
temp.update({ "is_delete": False })
else:
temp.update({ "create_by": user.id, "is_delete": False })
if "scope" in params and params.get("scope") == "list":
result = PackageModel.query.filter_by(**temp).order_by(PackageModel.create_at.desc())
temp = []
for item in result:
temp.append({ "name": item.app.app_name, "uuid": str(item.uuid) })
if len(temp):
return temp, ResponseCode.HTTP_SUCCESS
else:
return None, ResponseCode.HTTP_NOT_FOUND
temp = [PackageModel.is_delete==False, PackageModel.create_by==user.id]
if params.get("app") and isinstance(params.get("app"), str):
app = AppModel.query.filter(AppModel.uuid==params.get("app")).one_or_none()
if app:
params.update({ "app": app.id })
temp.append(PackageModel.app==app.id)
else:
return None, ResponseCode.HTTP_NOT_FOUND
if params.get("app_version"):
temp.append(PackageModel.app_version==params.get("app_version"))
if params.get("algorithm"):
temp.append(PackageModel.algorithm==params.get("algorithm"))
if params.get("source"):
temp.append(PackageModel.source==params.get("source"))
# for p in params:
# if hasattr(PackageModel, p) and params[p] != None:
# logger.info(p)
# temp[p] = params[p]
result = db.session.query(PackageModel).join(AppModel, PackageModel.app==AppModel.id).filter(*temp).order_by(PackageModel.create_at.desc()).add_entity(AppModel).paginate(params.get("page", 1), params.get("pageSize", 15), error_out=False)
if result.total and len(result.items):
return result, ResponseCode.HTTP_SUCCESS
return result, ResponseCode.HTTP_NO_DATA
def post(self, params, jwt={}):
# 判断用户是否存在
user = UserModel.query.filter(UserModel.uuid==jwt.get('uuid'))
if not user:
return False, ResponseCode.USER_NOT_EXISTS
# 判断app是否存在
app = AppModel.query.filter(AppModel.id==params.get("app"))
if not app:
return False, ResponseCode.HTTP_NOT_FOUND
# 根据应用查找有哪些源文件
source_files = AnnexModel.query.filter(AnnexModel.app==app.id).all()
if not source_files:
return None, ResponseCode.HTTP_NO_DATA
dir_format = "{}-{}-{}".format(app.app_name, app.app_version, datetime.now().strftime("%Y%m%d%H%M%S"))
upload_dir = Path(config.UPLOAD_ROOT_DIR).joinpath("uploads").joinpath("evueapps")
# upload_dir = os.sep.join([config.UPLOAD_ROOT_DIR, "uploads", "evueapps"])
target_dir = upload_dir.joinpath(user.account).joinpath(dir_format)
# target_dir = os.sep.join([upload_dir, user.account, dir_format])
dest_dir = target_dir.joinpath("src")
# dest_dir = os.sep.join([target_dir, "src"])
if not dest_dir.exists():
os.makedirs(dest_dir.resolve().as_posix())
app_files = []
for sf in source_files:
target_file = Path(config.UPLOAD_ROOT_DIR).joinpath(sf.path)
name = re.sub(r"_\d{14}$", "", target_file.stem)
suffix = target_file.suffix
dst_file = dest_dir.joinpath(name + suffix)
shutil.move(target_file.resolve().as_posix(), dst_file.resolve().as_posix())
app_files.append([sf.id, dst_file.resolve().as_posix()])
# 打包成EPK文件
app_info = {}
params = { 'appName': app.app_name, 'appDir': dest_dir, 'appVersion': app.app_version, 'output': target_dir.resolve().as_posix() }
if user.role == 1:
params['algorithm'] = "h"
epk = EpkApp(**params)
app_info = epk.pack()
if app_info:
app_info['md5'] = str(app_info['md5'])
# 更新数据库对应文件路径
# for sf in source_files:
# for af in app_files:
# if sf.id == af[0]:
# t = os.path.normpath(af[1].replace(config.UPLOAD_ROOT_DIR, "")).replace('\\', '/')
# sf.set(path=t)
# db.session.flush()
# db.session.commit()
epk_path = target_dir.relative_to(config.UPLOAD_ROOT_DIR).joinpath("{}.epk".format(app.app_name)).resolve().as_posix()
# handle business
# result = PackageModel.query.filter(PackageModel.app == params.get('app')).first()
# if result and result.is_delete:
# result.is_delete = False
# result.update_by = jwt.get("id", "")
# result.update_date = datetime.now()
# db.session.commit()
# return True, ResponseCode.HTTP_SUCCESS
# elif result and result.is_delete == False:
# return False, ResponseCode.HTTP_INVAILD_REQUEST
result = PackageModel(app=app.id, file_path=epk_path, package_info=app_info, app_version=params.get("app_version"), create_by=user.id, create_at=datetime.now(), update_by=user.id, update_at=datetime.now())
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
# handle business
result = PackageModel.query.filter(PackageModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = PackageModel.query.filter(PackageModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
packageManager = PackageResource()
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
import json
import traceback
import tempfile
import base64
from hashlib import md5
from application.config import config
from webcreator.log import logger
# 判断目录是否存在,不存在则创建
# if not os.path.exists(os.path.join(config.UPLOAD_ROOT_DIR, config.get("UPLOAD_DIR"))):
# os.makedirs(os.path.join(config.UPLOAD_ROOT_DIR, config.get("UPLOAD_DIR")))
def checkAccess(path):
realpath = os.path.realpath(path)
if not realpath.startswith(config.UPLOAD_ROOT_DIR):
return False
return True
def checkPath(path):
if not path:
return False, {"code": -1, "data": None, "message": "[%s] arg missed!" % path}
fpath = os.path.abspath(os.sep.join(
[os.path.abspath(config.UPLOAD_ROOT_DIR), path]))
if not checkAccess(fpath):
return False, {"code": -1, "data": None, "message": "You have no access to [%s]!" % fpath}
if not os.path.exists(fpath):
return False, {"code": -1, "data": None, "message": "[%s] is not existed!" % fpath}
return True, os.path.abspath(fpath)
def saveToFile(saveFile, content):
try:
tfn = tempfile.mktemp()
tf = open(tfn, 'w+b')
tf.write(content)
tf.close()
os.rename(tfn, saveFile)
return True
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return False
def getFileInfo(infofile):
info = dict()
info.update({
"isfile": os.path.isfile(infofile),
"isdir": os.path.isdir(infofile),
"size": os.path.getsize(infofile),
"atime": os.path.getatime(infofile),
"mtime": os.path.getmtime(infofile),
"ctime": os.path.getctime(infofile),
"name": os.path.basename(infofile)
})
return info
class UploadResource(object):
def __init__(self):
super(UploadResource, self).__init__()
def download(self, data):
obj = json.loads(data)
isAccessed, path = checkPath(obj["path"])
if not isAccessed:
return {"code": -1, "data": None, "message": "invaild access"}
if not os.path.isfile(path):
return {"code": -1, "data": None, "message": "Path [%s] is not a valid file!" % path}
try:
with open(path, "rb") as f:
content = base64.b64encode(f.read())
md5code = md5(content).hexdigest()
return {
"data": {
"content": content,
"md5": md5code,
"filename": os.path.basename(path)
},
"code": 0,
"message": "download file [%s] successfully!" % obj['path']
}
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return {
"data": None,
"code": -1,
"message": "upload file [%s] failed!\n %s" % (obj['path'], repr(e))
}
def delete(self, data):
try:
isAccessed, path = checkPath(data["path"])
if not isAccessed:
return {"code": -1, "data": None, "message": "invaild access"}
if os.path.isfile(path):
os.remove(path)
return {"code": 0, "data": None, "message": "delete file [%s] successfully!" % path}
elif os.path.isdir(path):
os.rmdir(path)
return {"code": 0, "data": None, "message": "delete dir [%s] successfully!" % path}
else:
return {"code": 0, "data": None, "message": "Path [%s] is not a valid file or path!" % path}
except Exception as e:
traceback.print_exc()
logger.error(str(e))
return {"code": -1, "data": None, "message": repr(e)}
def dirlist(self, data):
obj = json.loads(data)
isAccessed, path = checkPath(obj["path"])
if not isAccessed:
return {"code": -1, "data": None, "message": "invaild access"}
result = []
for p in os.listdir(path):
result.append(getFileInfo(os.path.join(config.UPLOAD_ROOT_DIR, p)))
return {"code": 0, "result": result, "message": "Get [%s] successfully!" % path}
def filemd5(self, data):
obj = json.loads(data)
isAccessed, path = checkPath(obj["path"])
if not isAccessed:
return {"code": -1, "data": None, "message": "invaild access"}
if not os.path.isfile(path):
return {"code": -1, "data": None, "message": "Path [%s] is not a valid file!" % path}
with open(path, "rb") as f:
filemd5 = md5(f.read()).hexdigest()
return {"code": 0, "result": filemd5, "message": "Get md5 of [%s] successfully!" % path}
def fileinfo(self, data):
obj = json.loads(data)
isAccessed, path = checkPath(obj["path"])
if not isAccessed:
return {"code": -1, "data": None, "message": "invaild access"}
if not os.path.isfile(path):
return {"code": -1, "data": None, "message": "Path [%s] is not a valid file!" % path}
return {"code": 0, "result": getFileInfo(path), "message": "Get md5 of [%s] successfully!" % path}
uploadResource = UploadResource()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from models.user import UserModel
from webcreator.log import logger
from webcreator.response import ResponseCode
class UserResource(object):
def __init__(self):
super().__init__()
def get(self, uuid, params):
# handle business
filters = [UserModel.is_delete==False, UserModel.uuid==uuid]
result = UserModel.query.filter(*filters).first()
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def getList(self, params):
# handle business
logger.warn(params)
filters = [UserModel.is_delete==False]
result = UserModel.query.filter(*filters).order_by(UserModel.create_at).paginate(params.get('page', 1), params.get('pageSize', 10), error_out=False)
if result:
return result, ResponseCode.HTTP_SUCCESS
return None, ResponseCode.HTTP_NOT_FOUND
def post(self, params, jwt={}):
# handle business
result = UserModel.query.filter(UserModel.account == params.get('account')).first()
if result and result.is_delete:
result.is_delete = False
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
elif result and result.is_delete == False:
return False, ResponseCode.USER_EXISTS
# 密码使用md5加密,可以使用元编程模式劫持,不用手动一个个修改了
# params.update({ "password": utils.md5_encryption(params.get("password")) })
result = UserModel(**params)
db.session.add(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
def put(self, uuid, params, jwt={}):
logger.info(uuid)
logger.info(params)
# handle business
result = UserModel.query.filter(UserModel.uuid==uuid).first()
if not result:
return None, ResponseCode.HTTP_NOT_FOUND
if params:
for key, value in params.items():
if value != None: setattr(result, key, value)
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
else:
return False, ResponseCode.HTTP_INVAILD_REQUEST
def delete(self, uuid, jwt={}):
# handle business
result = UserModel.query.filter(UserModel.uuid==uuid).first()
if not result:
return False, ResponseCode.HTTP_NOT_FOUND
result.update_by = jwt.get("id", "")
result.update_date = datetime.now()
result.is_delete = True
db.session.delete(result)
db.session.commit()
return True, ResponseCode.HTTP_SUCCESS
userManager = UserResource()
'''
Author: your name
Date: 2021-07-22 04:03:24
LastEditTime: 2021-07-23 00:51:58
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\workbench.py
'''
import datetime
from models.user import UserModel
from models.device import DeviceModel
from models.app import AppModel
from models.package import PackageModel
from webcreator.log import logger
from webcreator.response import ResponseCode
# 今日上传应用数 、历史应用总数
# 今日打包次数、历史打包总数
# 今日新增设备数,绑定设备数
# 今日新增开发者,开发者总数
'''
time_now = datetime.now()
#最近30天数据
result = UserModel.query.filter(UserModel.create_time >= time_now - timedelta(days=30)).all()
#最近一周数据
result = UserModel.query.filter(UserModel.create_time >= time_now - timedelta(days=7)).all()
#最近1天数据
result = UserModel.query.filter(UserModel.create_time >= time_now - timedelta(days=1)).all()
#最近12小时
result = UserModel.query.filter(UserModel.create_time >= time_now - timedelta(hours=12)).all()
#最近半小时
result = UserModel.query.filter(UserModel.create_time >= time_now - timedelta(seconds=30)).all()
'''
class WorkbenchResource(object):
def __init__(self):
super().__init__()
def get(self, jwt={}):
if not jwt:
return None, ResponseCode.HTTP_INVAILD_REQUEST
user = UserModel.query.filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
if not user:
return None, ResponseCode.USER_NOT_EXISTS
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
logger.info(user.role)
if user.role == 1:
total_user = UserModel.query.filter().count()
today_user = UserModel.query.filter(UserModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), UserModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_device = DeviceModel.query.filter().count()
today_device = DeviceModel.query.filter(DeviceModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), DeviceModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_app = AppModel.query.filter().count()
today_app = AppModel.query.filter(AppModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), AppModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_package = PackageModel.query.filter().count()
today_package = PackageModel.query.filter(PackageModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), PackageModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
else:
total_user = UserModel.query.filter(UserModel.create_by==user.id).count()
today_user = UserModel.query.filter(UserModel.create_by==user.id, UserModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), UserModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_device = DeviceModel.query.filter(DeviceModel.create_by==user.id).count()
today_device = DeviceModel.query.filter(DeviceModel.create_by==user.id, DeviceModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), DeviceModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_app = AppModel.query.filter(AppModel.create_by==user.id).count()
today_app = AppModel.query.filter(AppModel.create_by==user.id, AppModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), AppModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
total_package = PackageModel.query.filter(PackageModel.create_by==user.id).count()
today_package = PackageModel.query.filter(PackageModel.create_by==user.id, PackageModel.create_at >= today.strftime("%Y-%m-%d 00:00:00"), PackageModel.create_at <= tomorrow.strftime("%Y-%m-%d 00:00:00")).count()
result = {
'total_user': total_user,
'today_user': today_user,
'total_device': total_device,
'today_device': today_device,
'total_app': total_app,
'today_app': today_app,
'total_package': total_package,
'today_package': today_package
}
logger.info(result)
return result, ResponseCode.HTTP_SUCCESS
workbenchResource = WorkbenchResource()
\ No newline at end of file
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-28 19:56:22
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\manager.py
'''
'''
Author: your name
Date: 2021-06-15 17:40:09
LastEditTime: 2021-06-30 18:09:51
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\manager.py
'''
# -*- coding: utf-8 -*-
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask_script import Manager
from flask_migrate import Migrate
from application.app import create_app, db
from application.config import config
# 根据配置初始化app
app = create_app(config)
migrate = Migrate(app, db)
manager = Manager(app)
host, port = tuple(config.BIND.split(":"))
print("===============>", host, port)
@manager.command
def run():
"""
生产模式启动命令函数
To use: python3 manager.py run
"""
# app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(int(port), address=host)
IOLoop.instance().start()
@manager.command
def debug():
"""
debug模式启动命令函数
To use: python3 manager.py debug
"""
# app.logger.setLevel(logging.DEBUG)
app.run(debug=True, port=int(port), host=host)
if __name__ == '__main__':
manager.run()
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-28 15:29:13
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\__init__.py
'''
'''
Author: your name
Date: 2021-04-22 18:04:10
LastEditTime: 2021-07-27 20:04:43
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\models\__init__.py
'''
# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declared_attr, declarative_base
from application.app import config
class BaseModelMixin(object):
@declared_attr
def __tablename__(self):
return self.__name__.lower()
# __table_args__ = {'mysql_engine': 'InnoDB'}
__mapper_args__= {'always_refresh': True}
id = Column(Integer, primary_key=True)
BaseModel = declarative_base(cls=BaseModelMixin)
class MyModel(BaseModel, BaseModelMixin):
__tablename__ = 'evm_store_app_logs'
app_name = Column(String(20))
app_path = Column(String(32))
app_version = Column(String(32))
app_info = Column(String(32))
create_at = Column(String(32))
create_by = Column(Integer())
class MyModel2(BaseModel, BaseModelMixin):
__tablename__ = 'monitor_request'
host = Column(String(32))
path = Column(String(32))
protocol = Column(String(32))
create_at = Column(String(32))
# if __name__ == "__main__":
engine = create_engine(config.SQLALCHEMY_DATABASE_URI)
BaseModel.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()
# ed_user = MyModel(name='ed', fullname='Ed Jones', password='edspassword')
# session.add(ed_user)
# session.add_all(
# [
# MyModel(name='wendy', fullname='Wendy Williams', password='foobar'),
# MyModel(name='mary', fullname='Mary Contrary', password='xxg527'),
# MyModel(name='fred', fullname='Fred Flinstone', password='blah')
# ]
# )
# session.commit()
# our_user = session.query(MyModel).filter_by(name='ed').first()
# print(our_user)
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class AnnexModel(PrimaryModel):
__tablename__ = 'evm_annex'
app = db.Column(db.Integer, nullable = False)
title = db.Column(db.String(100), index = True, nullable = False, default = '')
path = db.Column(db.String(256), index = True, nullable = False, default = '')
size = db.Column(db.Integer, nullable = True, default = 0)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app, title='', path='', size=0):
self.app = app
self.title = title
self.path = path
self.size = size
def __repr__(self):
return '<AnnexModel %r>' % (self.app)
def to_dict(self):
return {
'app': self.app,
'title': self.title,
'path': self.path,
'size': self.size,
}
class DeleteAnnexSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AnnexModel
deleteAnnexSchema = DeleteAnnexSchema()
class GetlistAnnexSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AnnexModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
title = ma.auto_field()
app = ma.auto_field()
getListAnnexSchema = GetlistAnnexSchema()
getListAnnexsSchema = GetlistAnnexSchema(many=True)
class GetAnnexSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AnnexModel
app = ma.auto_field()
getAnnexSchema = GetAnnexSchema()
# -*- coding: utf-8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class AppModel(PrimaryModel):
__tablename__ = 'evm_app'
app_name = db.Column(db.String(70), index = True, nullable = False)
app_icon = db.Column(db.String(200), nullable = False)
app_version = db.Column(db.String(20), nullable = False)
category = db.Column(db.String(50), nullable = False)
launcher = db.Column(db.String(50), nullable = False)
developer = db.Column(db.String(50), nullable = False)
download_url = db.Column(db.String(200), nullable = False, default = '')
app_file_size = db.Column(db.Integer, nullable = False)
app_screen_size = db.Column(db.String(20), nullable = False)
app_arch = db.Column(db.String(20), nullable = False, default = '')
app_review = db.Column(db.Integer, nullable = False, default = 0)
meta_data = db.Column(db.String(256), nullable = True)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app_name, app_icon, app_version, category='', launcher='', developer=0, download_url='', meta_data='', app_file_size=0, app_screen_size='', app_arch='', app_review=0, create_by=None, create_at=None, update_by=None, update_at=None, remarks=""):
self.app_name = app_name
self.app_icon = app_icon
self.app_version = app_version
self.category = category
self.launcher = launcher
self.developer = developer
self.download_url = download_url
self.app_file_size = app_file_size
self.app_screen_size = app_screen_size
self.app_arch = app_arch
self.app_review = app_review
self.meta_data = meta_data
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
self.remarks = remarks
def __repr__(self):
return '<AppModel %r>' % (self.app_name)
def to_dict(self):
return {
'uuid': self.uuid,
'app_name': self.app_name,
'app_icon': self.app_icon,
'app_version': self.app_version,
'category': self.category,
'launcher': self.launcher,
'developer': self.developer,
'download_url': self.download_url,
'app_file_size': self.app_file_size,
'app_screen_size': self.app_screen_size,
'app_arch': self.app_arch,
'meta_data': self.meta_data,
'app_review': self.app_review,
'remarks': self.remarks,
"create_by": self.create_by,
"update_by": self.update_by,
"create_at": self.create_at.strftime("%Y-%m-%d %H:%M:%S") if self.create_at else None,
"update_at": self.update_at.strftime("%Y-%m-%d %H:%M:%S") if self.update_at else None,
}
class PostAppSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AppModel
meta_data = fields.String(required=False)
app_name = ma.auto_field()
app_icon = fields.String(required=False)
app_version = ma.auto_field()
category = ma.auto_field()
launcher = fields.String(required=False)
developer = fields.String(required=False)
app_screen_size = ma.auto_field()
app_arch = ma.auto_field()
app_review = ma.auto_field(required=False)
remarks = fields.String(required=False)
logo = fields.Raw(required=False)
fileList = fields.Raw(required=False)
postAppSchema = PostAppSchema()
class DeleteAppSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AppModel
deleteAppSchema = DeleteAppSchema()
class GetListAppSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AppModel
uuid = fields.String(required=False, nullable=True)
page = fields.Integer(required=False, default=1, nullable=True)
pageSize = fields.Integer(required=False, default=15, nullable=True)
scope = fields.String(required=False, nullable=True)
app_name = fields.String(required=False, nullable=True)
app_icon = fields.String(required=False, nullable=True)
app_version = fields.String(required=False, nullable=True)
algorithm = fields.String(required=False, nullable=True)
category = fields.String(required=False, nullable=True)
launcher = fields.String(required=False, nullable=True)
app_arch = fields.String(required=False, nullable=True)
meta_data = fields.String(required=False, nullable=True)
download_url = fields.String(required=False, nullable=True)
app_file_size = fields.Integer(required=False, nullable=True)
app_screen_size = fields.String(required=False, nullable=True)
app_review = fields.Integer(required=False, nullable=True)
create_at = fields.DateTime(required=False, nullable=True)
update_at = fields.DateTime(required=False, nullable=True)
remarks = fields.String(required=False)
getListAppSchema = GetListAppSchema()
getListAppsSchema = GetListAppSchema(many=True)
class GetAppSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AppModel
id = fields.Integer(required=False, nullable=True)
uuid = fields.String(required=False, nullable=True)
app_name = fields.String(required=False, nullable=True)
app_icon = fields.String(required=False, nullable=True)
app_version = fields.String(required=False, nullable=True)
algorithm = fields.String(required=False, nullable=True)
category = fields.String(required=False, nullable=True)
launcher = fields.String(required=False, nullable=True)
app_arch = fields.String(required=False, nullable=True)
meta_data = fields.String(required=False, nullable=True)
download_url = fields.String(required=False, nullable=True)
app_file_size = fields.Integer(required=False, nullable=True)
app_screen_size = fields.String(required=False, nullable=True)
app_review = fields.Integer(required=False, nullable=True)
create_at = fields.DateTime(required=False, nullable=True)
update_at = fields.DateTime(required=False, nullable=True)
remarks = fields.String(required=False)
getAppSchema = GetAppSchema()
class PutAppSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AppModel
app_name = fields.String(required=False, nullable=True)
app_icon = fields.String(required=False, nullable=True)
app_version = fields.String(required=False, nullable=True)
category = fields.String(required=False, nullable=True)
launcher = fields.String(required=False, nullable=True)
app_arch = fields.String(required=False, nullable=True)
download_url = fields.String(required=False, nullable=True)
app_file_size = fields.Integer(required=False, nullable=True)
app_screen_size = fields.String(required=False, nullable=True)
meta_data = fields.String(required=False, nullable=True)
app_review = fields.Integer(required=False, nullable=True)
remarks = fields.String(required=False, nullable=True)
putAppSchema = PutAppSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class AreaModel(PrimaryModel):
__tablename__ = 'evm_area'
areaCode = db.Column(db.String(20), index = True, nullable = False, default = '')
areaName = db.Column(db.String(20), index = True, nullable = False, default = '')
level = db.Column(db.Integer, nullable = False, default = 1)
cityCode = db.Column(db.Integer, nullable = True, default = 0)
center = db.Column(db.String(20), index = True, nullable = False, default = '')
parentId = db.Column(db.String(20), nullable = True, default = '')
hasChildren = db.Column(db.Boolean, nullable = True, default = False)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, areaCode='', areaName='', level=1, cityCode=0, center='', parentId='', hasChildren=False):
self.areaCode = areaCode
self.areaName = areaName
self.level = level
self.cityCode = cityCode
self.center = center
self.parentId = parentId
self.hasChildren = hasChildren
def __repr__(self):
return '<AreaModel %r>' % (self.areaCode)
def to_dict(self):
return {
'areaCode': self.areaCode,
'areaName': self.areaName,
'level': self.level,
'cityCode': self.cityCode,
'center': self.center,
'parentId': self.parentId,
'hasChildren': self.hasChildren,
}
class PostAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AreaModel
areaCode = ma.auto_field()
areaName = ma.auto_field()
level = ma.auto_field()
parentId = ma.auto_field()
hasChildren = ma.auto_field()
cityCode = ma.auto_field()
center = ma.auto_field()
postAreaSchema = PostAreaSchema()
class DeleteAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AreaModel
deleteAreaSchema = DeleteAreaSchema()
class GetlistAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AreaModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
areaName = ma.auto_field()
level = ma.auto_field()
parentId = ma.auto_field()
hasChildren = ma.auto_field()
field = fields.String(required=False, length=None)
getListAreaSchema = GetlistAreaSchema()
getListAreasSchema = GetlistAreaSchema(many=True)
class GetAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AreaModel
areaName = ma.auto_field()
level = ma.auto_field()
parentId = ma.auto_field()
hasChildren = ma.auto_field()
field = fields.String(required=False, length=None)
getAreaSchema = GetAreaSchema()
class PutAreaSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = AreaModel
areaName = fields.String(required=False, length=None)
level = fields.Integer(required=False)
parentId = fields.String(required=False, length=None)
hasChildren = fields.Boolean(required=False)
field = fields.String(required=False, length=None)
putAreaSchema = PutAreaSchema()
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-28 09:38:58
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\base.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import uuid
from datetime import datetime
from application.app import db
def generate_uuid():
return uuid.uuid1().hex
class BaseModel(db.Model):
# Flask-SQLAlchemy创建table时,如何声明基类(这个类不会创建表,可以被继承)
# 方法就是把__abstract__这个属性设置为True,这个类为基类,不会被创建为表!
__abstract__ = True
create_at = db.Column(db.DateTime, default=datetime.now)
create_by = db.Column(db.String(64))
update_at = db.Column(db.DateTime, default=datetime.now)
update_by = db.Column(db.String(64))
remarks = db.Column(db.String(255), default="")
is_delete = db.Column(db.BOOLEAN, default=0)
class PrimaryModel(BaseModel):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
uuid = db.Column(db.String(64), primary_key=False, default=generate_uuid)
sort = db.Column(db.Integer, default=0)
class AutoBaseModel(BaseModel):
__abstract__ = True
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
sort = db.Column(db.Integer, default=0)
class UuidBaseModel(BaseModel):
__abstract__ = True
id = db.Column(db.String(64), primary_key=True, default=generate_uuid)
sort = db.Column(db.Integer, default=0)
class SortBaseModel(BaseModel):
__abstract__ = True
sort = db.Column(db.Integer, default=0)
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class DeviceModel(PrimaryModel):
__tablename__ = 'evm_device'
imei = db.Column(db.String(20), index = True, nullable = False)
name = db.Column(db.String(20), index = True, nullable = False, default = '')
type = db.Column(db.String(20), nullable = False, default = '')
desc = db.Column(db.String(20), index = True, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, imei, name='', type='', desc='', create_by=None, create_at=None, update_by=None, update_at=None, remarks=""):
self.imei = imei
self.name = name
self.type = type
self.desc = desc
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
self.remarks = remarks
def __repr__(self):
return '<DeviceModel %r>' % (self.imei)
def to_dict(self):
return {
'uuid': self.uuid,
'imei': self.imei,
'name': self.name,
'type': self.type,
'desc': self.desc,
"create_by": self.create_by,
"update_by": self.update_by,
"create_at": self.create_at.strftime("%Y-%m-%d %H:%M:%S") if self.create_at else None,
"update_at": self.update_at.strftime("%Y-%m-%d %H:%M:%S") if self.update_at else None,
}
class PostDeviceSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = DeviceModel
imei = ma.auto_field()
name = ma.auto_field()
type = ma.auto_field()
desc = ma.auto_field()
postDeviceSchema = PostDeviceSchema()
class DeleteDeviceSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = DeviceModel
deleteDeviceSchema = DeleteDeviceSchema()
class GetListDeviceSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = DeviceModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
uuid = ma.auto_field()
imei = ma.auto_field()
name = ma.auto_field()
type = ma.auto_field()
desc = ma.auto_field()
create_at = ma.auto_field()
update_at = ma.auto_field()
getListDeviceSchema = GetListDeviceSchema()
getListDevicesSchema = GetListDeviceSchema(many=True)
class GetDeviceSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = DeviceModel
imei = ma.auto_field()
name = ma.auto_field()
type = ma.auto_field()
getDeviceSchema = GetDeviceSchema()
class PutDeviceSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = DeviceModel
imei = fields.String(required=False, length=None)
name = fields.String(required=False, length=None)
type = fields.String(required=False, length=None)
desc = fields.String(required=False, length=None)
putDeviceSchema = PutDeviceSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import json
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
from webcreator.log import logger
class LoginModel(PrimaryModel):
__tablename__ = 'evm_login'
user = db.Column(db.Integer, nullable = False)
login_at = db.Column(db.String(200), nullable = False)
user_agent = db.Column(db.String(200), nullable = False)
ip = db.Column(db.String(128), nullable = False)
geo_location = db.Column(db.String(200), nullable = False)
operator = db.Column(db.String(50), nullable = False)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, user, login_at, user_agent, ip, geo_location, operator):
self.user = user
self.login_at = login_at
self.user_agent = user_agent
self.ip = ip
self.geo_location = geo_location
self.operator = operator
# def __getattr__(self, key):
# return self.__dict__[key]
# def __getitem__(self, key):
# return self.get(key)
# def __getattribute__(self, value):
# return value
def __repr__(self):
return '<LoginModel %r>' % (self.user)
def to_dict(self):
return {
'login_at': self.login_at,
'user_agent': self.user_agent,
'ip': self.ip,
'geo_location': self.geo_location,
'operator': self.operator,
}
class PostLoginSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = LoginModel
account = fields.String(required=True, length=64)
password = fields.String(required=True, length=64)
postLoginSchema = PostLoginSchema()
class GetListLoginSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = LoginModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
user = fields.Integer(required=False)
login_at = fields.String(required=False)
user_agent = fields.String(required=False)
ip = fields.String(required=False)
geo_location = fields.String(required=False)
operator = fields.String(required=False)
getListLoginSchema = GetListLoginSchema()
getListLoginsSchema = GetListLoginSchema(many=True)
class GetLoginSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = LoginModel
user = fields.Integer(required=False)
login_at = fields.String(required=False)
user_agent = fields.String(required=False)
ip = fields.String(required=False)
geo_location = fields.String(required=False)
operator = fields.String(required=False)
getLoginSchema = GetLoginSchema()
'''
Author: your name
Date: 2021-07-27 16:19:06
LastEditTime: 2021-07-28 09:23:23
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\menu.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from datetime import datetime
from application.app import db
from .base import PrimaryModel
# from sqlalchemy.orm import relationship
from sqlalchemy_mptt.mixins import BaseNestedSets
class MenuModel(PrimaryModel, BaseNestedSets):
__tablename__ = 'evm_menu'
id = db.Column(db.Integer, primary_key=True)
visible = db.Column(db.Boolean)
name = db.Column(db.String(100), nullable = True)
# parent_id = db.Column(db.Integer, db.ForeignKey("evm_menu.id"), default=0, nullable = True) # 这句话会由mptt自动插入进去
path = db.Column(db.String(100), nullable = True)
disabled = db.Column(db.Boolean, nullable = True, default = False)
fixed = db.Column(db.Boolean, nullable = False, default = False)
has_children = db.Column(db.Boolean, nullable = True, default = False)
icon = db.Column(db.String(100), nullable = True, default = '')
# create_at = db.Column(db.DateTime, default=datetime.now) # 下面这些被注释的字段,都已经从PrimaryModel继承过来了,无需重写
# create_by = db.Column(db.String(64))
# update_at = db.Column(db.DateTime, default=datetime.now)
# update_by = db.Column(db.String(64))
# remarks = db.Column(db.String(255), default="")
# sort = db.Column(db.Integer, default=0)
# is_delete = db.Column(db.BOOLEAN, default=0)
# parent = db.Column(db.Integer, db.ForeignKey('evm_menu.id'), index=True)
# 这句话的含义请百度sqlalchemy表自关联,https://www.jianshu.com/p/fa611ab55dd2
parent = db.relationship("MenuModel", remote_side=[id], backref="ppp")
# sqlalchemy_mptt 调优
# sqlalchemy_mptt 在混入ORM对象时,只对rgt, lft, level 设置了索引,导致每次 CRUD操作都需要从头到尾查找。
# 经测试,添加tree_id索引大约能快4倍,添加parent_id大约快100倍,加起来就能够满足快速插入的需求了
# https://www.cnblogs.com/estragon/p/12298128.html
__table_args__ = (
db.Index('right_idx', 'rgt'),
db.Index('left_idx', 'lft'),
db.Index('level_idx', 'level'),
db.Index('treeid_idx', 'tree_id'),
db.Index('parent_idx', 'parent_id'),
)
def __init__(self, name=None, parentId=None, path="", disabled=False, fixed=False, hasChildren=False, icon='', is_delete=False, sort=0, remarks=""):
self.name = name
self.parent_id = parentId
self.path = path
self.disabled = disabled
self.fixed = fixed
self.has_children = hasChildren
self.icon = icon
self.is_delete = is_delete
self.sort = sort
self.remarks = remarks
def __repr__(self):
return '<MenuModel %r>' % (self.id)
@classmethod
def fields_mapping(self):
return {
'parendId': 'parent_id',
'hasChildren': 'has_children'
}
def to_dict(self):
return {
'id': self.id,
'name': self.name,
'parentId': self.parent_id,
'path': self.path,
'disabled': self.disabled,
'fixed': self.fixed,
'hasChildren': self.has_children,
'icon': self.icon,
'sort': self.sort,
'remark': self.remark,
'deleted': self.is_delete,
'createUser': self.create_by,
'updateUser': self.update_by,
'createTime': self.create_at.strftime("%Y-%m-%d %H:%M:%S") if self.create_at else None,
"updateTime": self.update_at.strftime("%Y-%m-%d %H:%M:%S") if self.update_at else None,
}
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MonitorEvmModel(PrimaryModel):
__tablename__ = 'evm_monitor_evm'
watch = db.Column(db.Integer, nullable = False)
heap_map_size = db.Column(db.Integer, nullable = True, default = 0)
heap_total_size = db.Column(db.Integer, nullable = False, default = 0)
heap_used_size = db.Column(db.Integer, nullable = True, default = 0)
stack_total_size = db.Column(db.Integer, nullable = True, default = 0)
stack_used_size = db.Column(db.Integer, nullable = False, default = 0)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, watch, heap_map_size=0, heap_total_size=0, heap_used_size=0, stack_total_size=0, stack_used_size=0):
self.watch = watch
self.heap_map_size = heap_map_size
self.heap_total_size = heap_total_size
self.heap_used_size = heap_used_size
self.stack_total_size = stack_total_size
self.stack_used_size = stack_used_size
def __repr__(self):
return '<MonitorEvmModel %r>' % (self.watch)
def to_dict(self):
return {
'watch': self.watch,
'heap_map_size': self.heap_map_size,
'heap_total_size': self.heap_total_size,
'heap_used_size': self.heap_used_size,
'stack_total_size': self.stack_total_size,
'stack_used_size': self.stack_used_size,
}
class GetListMonitorEvmSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorEvmModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
watch = ma.auto_field()
getListMonitorEvmSchema = GetListMonitorEvmSchema()
getListMonitorEvmsSchema = GetListMonitorEvmSchema(many=True)
class GetMonitorEvmSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorEvmModel
watch = ma.auto_field()
getMonitorEvmSchema = GetMonitorEvmSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MonitorImageModel(PrimaryModel):
__tablename__ = 'evm_monitor_image'
watch = db.Column(db.Integer, nullable = False)
length = db.Column(db.Integer, nullable = True, default = 0)
png_uncompressed_size = db.Column(db.Integer, nullable = False, default = 0)
png_total_count = db.Column(db.Integer, nullable = True, default = 0)
png_file_size = db.Column(db.Integer, nullable = True, default = 0)
uri = db.Column(db.String(20), index = True, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, watch, length=0, png_uncompressed_size=0, png_total_count=0, png_file_size=0, uri=''):
self.watch = watch
self.length = length
self.png_uncompressed_size = png_uncompressed_size
self.png_total_count = png_total_count
self.png_file_size = png_file_size
self.uri = uri
def __repr__(self):
return '<MonitorImageModel %r>' % (self.watch)
def to_dict(self):
return {
'watch': self.watch,
'length': self.length,
'png_uncompressed_size': self.png_uncompressed_size,
'png_total_count': self.png_total_count,
'png_file_size': self.png_file_size,
'uri': self.uri,
}
class GetListMonitorImageSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorImageModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
watch = ma.auto_field()
getListMonitorImageSchema = GetListMonitorImageSchema()
getListMonitorImagesSchema = GetListMonitorImageSchema(many=True)
class GetMonitorImageSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorImageModel
watch = ma.auto_field()
getMonitorImageSchema = GetMonitorImageSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MonitorLvglModel(PrimaryModel):
__tablename__ = 'evm_monitor_lvgl'
watch = db.Column(db.Integer, nullable = False)
total_size = db.Column(db.Integer, nullable = True, default = 0)
free_cnt = db.Column(db.Integer, nullable = False, default = 0)
free_size = db.Column(db.Integer, nullable = True, default = 0)
free_biggest_size = db.Column(db.Integer, nullable = False, default = 0)
used_cnt = db.Column(db.Integer, nullable = False, default = 0)
used_pct = db.Column(db.Integer, nullable = False, default = 0)
frag_pct = db.Column(db.Integer, nullable = False, default = 0)
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, watch, total_size=0, free_cnt=0, free_size=0, free_biggest_size=0, used_cnt=0, used_pct=0, frag_pct=0):
self.watch = watch
self.total_size = total_size
self.free_cnt = free_cnt
self.free_size = free_size
self.free_biggest_size = free_biggest_size
self.used_cnt = used_cnt
self.used_pct = used_pct
self.frag_pct = frag_pct
def __repr__(self):
return '<MonitorLvglModel %r>' % (self.watch)
def to_dict(self):
return {
'watch': self.watch,
'total_size': self.total_size,
'free_cnt': self.free_cnt,
'free_size': self.free_size,
'free_biggest_size': self.free_biggest_size,
'used_cnt': self.used_cnt,
'used_pct': self.used_pct,
'frag_pct': self.frag_pct,
}
class GetListMonitorLvglSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorLvglModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
watch = ma.auto_field()
getListMonitorLvglSchema = GetListMonitorLvglSchema()
getListMonitorLvglsSchema = GetListMonitorLvglSchema(many=True)
class GetMonitorLvglSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorLvglModel
watch = ma.auto_field()
getMonitorLvglSchema = GetMonitorLvglSchema()
'''
Author: your name
Date: 2021-07-15 09:33:39
LastEditTime: 2021-07-21 18:39:45
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\models\monitorSystem.py
'''
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MonitorSystemModel(PrimaryModel):
__tablename__ = 'evm_monitor_system'
watch = db.Column(db.Integer, nullable = False)
free_size = db.Column(db.Integer, nullable = True, default = 0)
free_space_size = db.Column(db.Integer, nullable = True, default = 0)
used_space_size = db.Column(db.Integer, nullable = True, default = 0)
host = db.Column(db.String(20), index = True, nullable = False, default = '')
path = db.Column(db.String(20), index = True, nullable = False, default = '')
protocol = db.Column(db.String(20), index = True, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, watch, free_size=0, free_space_size=0, used_space_size=0, host='', path='', protocol=''):
self.watch = watch
self.free_size = free_size
self.free_space_size = free_space_size
self.used_space_size = used_space_size
self.host = host
self.path = path
self.protocol = protocol
def __repr__(self):
return '<MonitorSystemModel %r>' % (self.watch)
def to_dict(self):
return {
'watch': self.watch,
'free_size': self.free_size,
'free_space_size': self.free_space_size,
'used_space_size': self.used_space_size,
'host': self.host,
'path': self.path,
'protocol': self.protocol,
}
class GetListMonitorSystemSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorSystemModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
watch = ma.auto_field()
getListMonitorSystemSchema = GetListMonitorSystemSchema()
getListMonitorSystemsSchema = GetListMonitorSystemSchema(many=True)
class GetMonitorSystemSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorSystemModel
watch = ma.auto_field()
getMonitorSystemSchema = GetMonitorSystemSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class MonitorWatchModel(PrimaryModel):
__tablename__ = 'evm_monitor_watch'
imei = db.Column(db.String(20), index = True, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, imei=''):
self.imei = imei
def __repr__(self):
return '<MonitorWatchModel %r>' % (self.imei)
def to_dict(self):
return {
'imei': self.imei,
}
class GetListMonitorWatchSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorWatchModel
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
imei = ma.auto_field()
getListMonitorWatchSchema = GetListMonitorWatchSchema()
getListMonitorWatchsSchema = GetListMonitorWatchSchema(many=True)
class GetMonitorWatchSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = MonitorWatchModel
imei = ma.auto_field()
getMonitorWatchSchema = GetMonitorWatchSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
class PackageModel(PrimaryModel):
__tablename__ = 'evm_package'
app = db.Column(db.Integer, nullable = False)
app_version = db.Column(db.String(200), nullable = False)
package_info = db.Column(db.String(20), nullable = False)
algorithm = db.Column(db.String(50), nullable = False, default = 'zlib')
file_path = db.Column(db.String(200), nullable = False, default = '')
source = db.Column(db.Integer, nullable = False, default = 0)
user_agent = db.Column(db.String(200), nullable = False, default = '')
download_url = db.Column(db.String(200), nullable = False, default = '')
ip = db.Column(db.String(128), nullable = False, default = '127.0.0.1')
geo_location = db.Column(db.String(200), nullable = False, default = '')
operator = db.Column(db.String(50), nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, app, app_version, package_info, algorithm='zlib', file_path='', source=0, user_agent='', download_url='', ip='127.0.0.1', geo_location='', operator='', create_by=None, create_at=None, update_by=None, update_at=None, remarks=""):
self.app = app
self.app_version = app_version
self.package_info = package_info
self.algorithm = algorithm
self.file_path = file_path
self.source = source
self.user_agent = user_agent
self.download_url = download_url
self.ip = ip
self.geo_location = geo_location
self.operator = operator
self.create_by = create_by
self.create_at = create_at
self.update_by = update_by
self.update_at = update_at
self.remarks = remarks
def __repr__(self):
return '<PackageModel %r>' % (self.app)
def to_dict(self):
return {
'uuid': self.uuid,
'app_version': self.app_version,
'package_info': self.package_info,
'algorithm': self.algorithm,
'file_path': self.file_path,
'source': self.source,
'user_agent': self.user_agent,
'download_url': self.download_url,
'ip': self.ip,
'geo_location': self.geo_location,
'operator': self.operator,
'remarks': self.remarks,
"create_at": self.create_at.strftime("%Y-%m-%d %H:%M:%S") if self.create_at else None,
"update_at": self.update_at.strftime("%Y-%m-%d %H:%M:%S") if self.update_at else None,
}
class GetListPackageSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = PackageModel
id = fields.Integer(required=False, nullable=True)
uuid = fields.String(required=False, nullable=True)
page = fields.Integer(required=False)
pageSize = fields.Integer(required=False)
app = fields.String(required=False)
app_version = ma.auto_field()
package_info = fields.String(required=False)
file_path = ma.auto_field()
source = ma.auto_field()
user_agent = ma.auto_field()
download_url = ma.auto_field()
ip = ma.auto_field()
geo_location = fields.String(required=False)
operator = ma.auto_field()
getListPackageSchema = GetListPackageSchema()
getListPackagesSchema = GetListPackageSchema(many=True)
class GetPackageSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = PackageModel
app = ma.auto_field()
app_version = ma.auto_field()
package_info = ma.auto_field()
file_path = ma.auto_field()
source = ma.auto_field()
user_agent = ma.auto_field()
download_url = ma.auto_field()
ip = ma.auto_field()
geo_location = ma.auto_field()
operator = ma.auto_field()
getPackageSchema = GetPackageSchema()
#!/usr/bin/env python
# -*- coding: utf_8 -*-
from application.app import db, ma
from .base import PrimaryModel
from marshmallow import Schema, fields, INCLUDE, EXCLUDE
from webcreator import utils
from webcreator.log import logger
class UserModel(PrimaryModel):
__tablename__ = 'evm_user'
username = db.Column(db.String(70), index = True, nullable = False)
account = db.Column(db.String(200), nullable = False)
password = db.Column(db.String(20), nullable = False)
role = db.Column(db.Integer, nullable = False, default = 0)
email = db.Column(db.String, nullable = False, default = '')
phone = db.Column(db.String, nullable = False, default = '')
# __table_args__ = (
# db.Index('idx_xxx', 'xxx', mysql_using='btree'),
# )
def __init__(self, username, account, password, role=0, email='', phone=''):
self.username = username
self.account = account
self.password = password
self.role = role
self.email = email
self.phone = phone
def __setattr__(self, key, value):
# logger.info(f"execute __setattr__:key={key}, value={value}")
if key == 'password':
self.__dict__[key] = utils.md5_encryption(value)
else:
self.__dict__[key] = value
def __repr__(self):
return '<UserModel %r>' % (self.username)
def to_dict(self):
return {
'username': self.username,
'account': self.account,
'password': self.password,
'role': self.role,
'email': self.email,
'phone': self.phone,
}
class PostUserSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
username = ma.auto_field()
account = ma.auto_field()
password = ma.auto_field()
postUserSchema = PostUserSchema()
class DeleteUserSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
deleteUserSchema = DeleteUserSchema()
class GetListUserSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
uuid = ma.auto_field()
username = ma.auto_field()
account = ma.auto_field()
getListUserSchema = GetListUserSchema()
getListUsersSchema = GetListUserSchema(many=True)
class GetUserSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
username = ma.auto_field()
account = ma.auto_field()
getUserSchema = GetUserSchema()
class PutUserSchema(ma.SQLAlchemySchema):
class Meta:
# unknown = INCLUDE # 未知字段默认包含
unknown = EXCLUDE # 未知字段默认排除
model = UserModel
account = fields.String(required=False, allow_none=True)
username = fields.String(required=False, allow_none=True)
password = fields.String(required=False, allow_none=True)
putUserSchema = PutUserSchema()
alembic==1.6.5
aniso8601==9.0.1
appdirs==1.4.4
asgiref==3.3.4
cffi==1.14.5
click==8.0.1
colorama==0.4.4
Flask==2.0.1
Flask-JWT-Extended==4.2.1
flask-marshmallow==0.14.0
Flask-Migrate==3.0.1
Flask-RESTful==0.3.9
Flask-Script==2.0.6
Flask-SQLAlchemy==2.5.1
fs==2.4.13
gevent==21.1.2
greenlet==1.1.0
gunicorn==20.1.0
h11==0.12.0
hashids==1.3.1
importlib-metadata==4.6.1
itsdangerous==2.0.1
Jinja2==3.0.1
Mako==1.1.4
MarkupSafe==2.0.1
marshmallow==3.12.1
marshmallow-sqlalchemy==0.26.1
pycparser==2.20
PyJWT==2.1.0
python-dateutil==2.8.1
python-editor==1.0.4
pytz==2021.1
six==1.16.0
SQLAlchemy==1.4.17
sqlalchemy-mptt==0.2.5
tornado==6.1
typing-extensions==3.10.0.0
uvicorn==0.14.0
Werkzeug==2.0.1
zipp==3.5.0
zope.event==4.5.0
zope.interface==5.4.0
This diff is collapsed.
#!/usr/bin/env bash
###
# @Author: your name
# @Date: 2021-07-15 09:33:39
# @LastEditTime: 2021-07-23 00:55:33
# @LastEditors: Please set LastEditors
# @Description: In User Settings Edit
# @FilePath: \evm-store\backend\start.sh
###
Cur_Dir=$(pwd)
source venv/bin/activate
nohup ${Cur_Dir}/venv/bin/python3 ${Cur_Dir}/manager.py run > running.log 2>&1 &
/*
* @Author: your name
* @Date: 2021-07-21 13:02:17
* @LastEditTime: 2021-07-21 13:09:34
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \evm-store\tools\database_migration.go
*/
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
fmt.Println("打开数据")
db, err := sql.Open("sqlite3", "./evue_store.db")
checkErr(err)
fmt.Println("生成数据表")
sql_table := `
CREATE TABLE IF NOT EXISTS "userinfo" (
"uid" INTEGER PRIMARY KEY AUTOINCREMENT,
"username" VARCHAR(64) NULL,
"departname" VARCHAR(64) NULL,
"created" TIMESTAMP default (datetime('now', 'localtime'))
);
CREATE TABLE IF NOT EXISTS "userdeatail" (
"uid" INT(10) NULL,
"intro" TEXT NULL,
"profile" TEXT NULL,
PRIMARY KEY (uid)
);
`
db.Exec(sql_table)
//插入数据
fmt.Print("插入数据, ID=")
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname) values(?, ?)")
checkErr(err)
res, err := stmt.Exec("astaxie", "研发部门")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
//更新数据
fmt.Print("更新数据 ")
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
//查询数据
fmt.Println("查询数据")
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid, username, department, created)
}
/*
//删除数据
fmt.Println("删除数据")
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
*/
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
# -*- coding: utf-8 -*-
'''
Author: your name
Date: 2021-07-20 19:04:27
LastEditTime: 2021-07-21 20:01:56
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\database_migration.py
'''
import os
import sqlite3
import uuid
from datetime import datetime
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print("####>>>", BASE_DIR)
start = datetime.now()
print("start at:", start.strftime("%Y-%m-%d %H:%M:%S"))
source_conn = sqlite3.connect(os.path.join(BASE_DIR, "app-store.db"))
source_cur = source_conn.cursor()
target_db = os.path.join(BASE_DIR, "evue-store.db")
target_conn = sqlite3.connect(target_db)
target_cur = source_conn.cursor()
with open("database_migration.sql", "w+") as fd:
# 更新user表
opts = [
[2, 39],
[3, 40],
[4, 41]
]
sqls = [
"update evm_store_apps set create_by = {a} where create_by = {b};",
"update evm_store_apps set update_by = {a} where update_by = {b};",
"update evm_store_annex set create_by = {a} where create_by = {b};",
"update evm_store_annex set update_by = {a} where update_by = {b};",
"update evm_store_app_logs set create_by = {a} where create_by = {b};",
"update evm_store_build_logs set create_by = {a} where create_by = {b};",
"update evm_store_build_logs set update_by = {a} where update_by = {b};",
"update evm_store_device set create_by = {a} where create_by = {b};",
"update evm_store_device set update_by = {a} where update_by = {b};",
"update evm_store_login_logs set create_by = {a} where create_by = {b};",
]
for s in sqls:
for o in opts:
sql_str = s.format(a=o[0], b=o[1])
source_cur.execute(sql_str)
source_conn.commit()
# 更新app logs 表
sql_str = "select create_at from evm_store_app_logs"
source_cur.execute(sql_str)
res = source_cur.fetchall()
for line in res:
sql_str = "select id from evm_store_apps where strftime('%s', evm_store_apps.create_at) - strftime('%s', '{b}') < 2".format(b=line[0])
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
if tmp:
sql_str = "UPDATE evm_store_app_logs SET remarks = {a};".format(a=tmp[0])
source_cur.execute(sql_str)
source_conn.commit()
# 先插入user表
source_cur.execute('SELECT account, username, password, email, phone, create_at, create_by, update_at, update_by FROM evm_store_user')
sql = "insert into evm_user (id, uuid, account, username, password, email, phone, create_at, create_by, update_at, update_by, is_delete, role) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', '{h}', {i}, '{j}', {k}, 0, 0);"
res = source_cur.fetchall()
i = 0
for line in res:
i += 1
sql_str = sql.format(a=i, b=uuid.uuid1().hex, c=line[0], d=line[1], e=line[2], f=line[3], g=line[4], h=line[5], i=line[6], j=line[7], k=line[8])
print("sql:", sql_str)
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# login logs
source_cur.execute('SELECT id, username, ip, address, create_at, create_by, remarks FROM evm_store_login_logs')
res = source_cur.fetchall()
sql = "insert into evm_login (uuid, user, login_at, user_agent, ip, geo_location, operator, create_at, create_by, update_at, update_by, is_delete) values ('{b}', {c}, '{d}', '{e}', '{f}', '{g}', '{h}', '{i}', {j}, '{k}', {l}, 0);"
for line in res:
sql_str = sql.format(b=uuid.uuid1().hex, c=line[5], d=line[6], e="", f=line[2], g=line[3], h="", i=line[4], j=line[5], k=line[4], l=line[5])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# 更新app_url字段
sql = "select app, app_path from evm_store_build_logs"
source_cur.execute(sql)
res = source_cur.fetchall()
for line in res:
sql_str = string = "update evm_store_apps set app_url = '{u}' where id = {a}".format(u=line[1], a=line[0])
source_cur.execute(sql_str)
# fd.write(sql_str + "\n")
target_conn.commit()
# annex
source_cur.execute('SELECT id, uuid, app, title, path, size, create_at, create_by, update_at, update_by, is_delete FROM evm_store_annex')
res = source_cur.fetchall()
sql = "insert into evm_annex (id, uuid, app, title, path, size, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', {c}, '{d}', '{e}', {f}, '{g}', {h}, '{i}', {j}, 0);"
for line in res:
if not line[2]:
continue
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[2], d=line[3], e=line[4] or "", f=line[5], g=line[6], h=line[7], i=line[8], j=line[9])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# app
source_cur.execute('SELECT id, app_name, app_icon, app_version, category, app_url, app_desc, create_at, create_by ,update_at, update_by, is_delete FROM evm_store_apps')
res = source_cur.fetchall()
sql = "insert into evm_app (id, uuid, app_name, app_icon, app_version, category, download_url, app_screen_size, app_arch, app_review, meta_data, remarks, create_at, create_by, update_at, update_by, is_delete, launcher, developer, app_file_size) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', '{h}', '{i}', '{j}', '{k}', '{l}', '{m}', {n}, '{o}', {p}, 0, `""`, `""`, 0);"
for line in res:
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[1], d=line[2], e=line[3], f=line[4], g=line[5], h="240 * 240", i="ASR3601", j=0, k='{}', l=line[6], m=line[7], n=line[8], o=line[9], p=line[10])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# device
source_cur.execute('SELECT id, name, imei, desc, type, create_at, create_by, update_at, update_by, is_delete FROM evm_store_device')
res = source_cur.fetchall()
sql = "insert into evm_device (id, uuid, name, imei, desc, type, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', '{g}', {h}, '{i}', {j}, {k});"
for line in res:
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=line[1], d=line[2], e=line[3], f=line[4], g=line[5], h=line[6], i=line[7], j=line[8], k=line[9])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# app log & build log
# 先插入app log
source_cur.execute('SELECT id, uuid, app_name, app_path, app_version, app_info, create_at, create_by, remarks FROM evm_store_app_logs')
res = source_cur.fetchall()
sql = "insert into evm_package (id, uuid, app, app_path, app_version, app_info, create_at, create_by, update_at, update_by, is_delete, source) values ({a}, '{b}', '{c}', '{d}', '{e}', `'{f}'`, '{g}', {h}, '{i}', {j}, {k}, {l});"
for line in res:
# 根据时间查找app
print(">>>>>>>>>>>>", line[6], line[8])
if not line[8] or (isinstance(line[8], str) and len(line[8]) == 0):
print("remarks is none")
continue
sql_str = "select id from evm_store_apps where id = {a}".format(a=int(line[8]))
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
if not tmp:
print("app not found")
continue
s = 1 if line[5] and isinstance(line[5], str) and line[5].find("evueapps") > -1 else 0
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=tmp[0], d=line[3], e=line[4], f=line[5], g=line[6], h=line[7], i=line[6], j=line[7], k=0, l=s)
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
# 然后查询出所有build log记录,遍历这些记录
# 在循环里,查询这一条记录是否已经存在(根据app_path),不存在则插入
source_cur.execute('SELECT id, uuid, app, app_path, app_info, source, create_at, create_by, update_at, update_by, is_delete FROM evm_store_build_logs')
res = source_cur.fetchall()
sql = "insert into evm_package (id, uuid, app_name, app_path, app_version, app_info, source, create_at, create_by, update_at, update_by, is_delete) values ({a}, '{b}', '{c}', '{d}', '{e}', '{f}', {g}, '{h}', {i}, '{j}', {k}, {l});"
for line in res:
sql_str = "select id, uuid, app_path from evm_store_app_logs where app_path = '{}'".format(line[3])
source_cur.execute(sql_str)
tmp = source_cur.fetchone()
print("=======>", line[0])
if tmp:
print("app_path not equal")
continue
print("===========>", line)
sql_str = "select app_name, app_version from evm_store_apps where id == {id}".format(id=line[2])
source_cur.execute(sql_str)
app = source_cur.fetchone()
print("app:", app)
if app:
s = 1 if line[5] and isinstance(line[5], str) and line[5].find("evueapps") > -1 else 0
sql_str = sql.format(a=line[0], b=uuid.uuid1().hex, c=app[0], d=line[3], e=app[1], f=line[4], g=s, h=line[6], i=line[7], j=line[8], k=line[9], l=line[10])
# target_cur.execute(sql_str)
fd.write(sql_str + "\n")
target_conn.commit()
print("next >>>>>>>>>>>")
print("finished!!!")
target_conn.commit()
target_conn.close()
source_conn.commit()
source_conn.close()
print("spend time:", datetime.now() - start)
\ No newline at end of file
module tool
go 1.16
require github.com/mattn/go-sqlite3 v1.14.8
github.com/mattn/go-sqlite3 v1.14.8 h1:gDp86IdQsN/xWjIEmr9MF6o9mpksUgh0fu+9ByFxzIU=
github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
'''
Author: your name
Date: 2021-07-22 19:01:41
LastEditTime: 2021-07-26 17:41:15
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\tests\http_interval.py
'''
import json
import time
import random
import requests
from threading import Timer, Thread
def send_request(imei):
payload = {
"system": {"free_size": 1769792, "free_space_size": 5156864, "used_space_size": 1134592},
"lvgl": {"total_size": 100, "free_cnt": 50, "free_size": 23, "free_biggest_size": 53, "used_cnt": 78, "used_pct":43, "frag_pct": 0},
"evm": {"heap_total_size": 2097152, "heap_used_size": 575072, "heap_map_size": 8192, "stack_total_size": 102400, "stack_used_size": 1312},
"image": [
{"uri": "evue_launcher", "length": 13515, "png_total_count": 0,
"png_uncompressed_size": 0, "png_file_size": 0},
{"uri": "kdgs_1_startup", "length": 3666, "png_total_count": 0,
"png_uncompressed_size": 0, "png_file_size": 0},
{"uri": "kdgs_1_index", "length": 5482, "png_total_count": 0,
"png_uncompressed_size": 0, "png_file_size": 0},
{"uri": "kdgs_1_story", "length": 5509, "png_total_count": 0,
"png_uncompressed_size": 0, "png_file_size": 0},
{"uri": "kdgs_1_storyList", "length": 9196, "png_total_count": 0,
"png_uncompressed_size": 0, "png_file_size": 0},
{"uri": "kdgs_1_storyPlay", "length": 25791, "png_total_count": 6, "png_uncompressed_size": 319376, "png_file_size": 10770, "png_detail": [
{
"uri": "C:/../../test/watch_appstore/kdgs_1_playBackground.png",
"filesize": 7774,
"uncompressed_size": 259200,
"ratio": 33.341908
},
{
"uri": "C:/../../test/watch_appstore/kdgs_1_playLb.png",
"filesize": 482,
"uncompressed_size": 12544,
"ratio": 26.024897
},
{
"uri": "C:/../../test/watch_appstore/kdgs_1_playNLike.png",
"filesize": 1094,
"uncompressed_size": 12544,
"ratio": 11.466179
},
{
"uri": "C:/../../test/watch_appstore/kdgs_1_playYl.png",
"filesize": 745,
"uncompressed_size": 12544,
"ratio": 16.837584
},
{
"uri": "C:/../../test/watch_appstore/kdgs_1_playNext.png",
"filesize": 484,
"uncompressed_size": 12544,
"ratio": 25.917355
},
{
"uri": "C:/../../test/watch_appstore/kdgs_1_play_bs.png",
"filesize": 191,
"uncompressed_size": 10000,
"ratio": 52.356022
}
]}
],
"imei": imei, "datetime": {"second": 55, "minute": 48, "hour": 15, "day": 21, "month": 7, "year": 2021, "weekday": 3}
}
while True:
for item in payload.get("image"):
item.update({
'length': 0,
'png_total_count': 0,
'png_uncompressed_size': 0,
'png_file_size': 0
})
rand_index = random.randint(0, len(payload.get("image")))
if rand_index < len(payload.get("image")):
print("------------------------------>")
else:
rand_index = rand_index - 1
print("rand_index ==>", rand_index)
payload.get("image")[rand_index].update({
'length': random.randint(0, 10000),
'png_total_count': random.randint(0, 10000),
'png_uncompressed_size': random.randint(100, 100000),
'png_file_size': random.randint(0, 10000)
})
r = requests.post("http://localhost:3000/api/v1/evm_store/monitor", data=json.dumps(payload))
print(r.status_code)
print(r.json())
time.sleep(3)
class myThread(Thread):
def __init__(self, threadID, name, counter, imei):
Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
self.imei = imei
def run(self):
print("开始线程:" + self.name)
print(self.counter, self.imei)
send_request(self.imei)
print("退出线程:" + self.name)
if __name__ == "__main__":
# send_request()
# 创建新线程
thread1 = myThread(1, "Thread-1", 1, "352099001761481")
thread2 = myThread(2, "Thread-2", 2, "866866040000447")
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("退出主线程")
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
# -*- coding: utf_8 -*-
\ No newline at end of file
This diff is collapsed.
'''
Author: your name
Date: 2021-04-22 18:04:15
LastEditTime: 2021-07-14 18:38:28
LastEditors: Please set LastEditors
Description: In User Settings Edit
FilePath: \evm-store\tools\resources\webcreator\log.py
'''
# -*- coding: utf_8 -*-
import os
import logging
from logging.handlers import RotatingFileHandler
logPath = os.getcwd() + os.path.sep + "logs"
if not os.path.exists(logPath):
os.makedirs(logPath)
fh = RotatingFileHandler("logs/running.log", maxBytes=10 * 1024 * 1024, backupCount=100)
fh.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('[%(asctime)s][%(levelname)7s][in %(pathname)s -> %(funcName)s line:%(lineno)s] %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
logger = logging.root
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)
logger.addHandler(ch)
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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