125 lines
4.4 KiB
Python
125 lines
4.4 KiB
Python
from os import scandir
|
|
from threading import Thread
|
|
from time import sleep
|
|
from os.path import exists
|
|
from paramiko import SSHClient, AutoAddPolicy
|
|
from socket import setdefaulttimeout
|
|
from logging import DEBUG, INFO, WARNING, ERROR, CRITICAL, Formatter, StreamHandler, basicConfig
|
|
from concurrent_log_handler import ConcurrentRotatingFileHandler
|
|
|
|
ip_addr = '192.168.0.160'
|
|
RADIAN = 57.3 # 180 / 3.1415926
|
|
MAX_FRAME_SIZE = 1024
|
|
TIMEOUT = 5
|
|
setdefaulttimeout(TIMEOUT)
|
|
tab_names = {'dp': 'Data Process', 'at': 'Automatic Test', 'da': 'Duration Action', 'op': 'openapi'}
|
|
# PREFIX = '' # for pyinstaller packaging
|
|
PREFIX = '../assets/' # for source code debug
|
|
log_data = f'{PREFIX}templates/c_msg.log'
|
|
heartbeat = f'{PREFIX}templates/heartbeat'
|
|
durable_data_current_xlsx = f'{PREFIX}templates/durable/durable_data_current.xlsx'
|
|
durable_data_current_max_xlsx = f'{PREFIX}templates/durable/durable_data_current_max.xlsx'
|
|
durable_data_current = {
|
|
'time': list(range(1, 19)),
|
|
'axis1': [0 for _ in range(18)],
|
|
'axis2': [0 for _ in range(18)],
|
|
'axis3': [0 for _ in range(18)],
|
|
'axis4': [0 for _ in range(18)],
|
|
'axis5': [0 for _ in range(18)],
|
|
'axis6': [0 for _ in range(18)],
|
|
}
|
|
durable_data_current_max = {
|
|
'time': list(range(1, 19)),
|
|
'axis1': [0 for _ in range(18)],
|
|
'axis2': [0 for _ in range(18)],
|
|
'axis3': [0 for _ in range(18)],
|
|
'axis4': [0 for _ in range(18)],
|
|
'axis5': [0 for _ in range(18)],
|
|
'axis6': [0 for _ in range(18)],
|
|
}
|
|
|
|
file_handler = ConcurrentRotatingFileHandler(filename=log_data, backupCount=10, maxBytes=50*1024*1024, encoding='utf-8')
|
|
file_handler.setLevel(INFO)
|
|
console_handler = StreamHandler()
|
|
console_handler.setLevel(WARNING)
|
|
|
|
basicConfig( # level=INFO,
|
|
datefmt='%Y-%m-%dT%H:%M:%S',
|
|
format='%(asctime)s # %(levelname)s-%(filename)s-%(funcName)s # %(message)s',
|
|
handlers=[file_handler, console_handler],
|
|
)
|
|
|
|
|
|
class GetThreadResult(Thread):
|
|
def __init__(self, func, args=()):
|
|
super(GetThreadResult, self).__init__()
|
|
self.func = func
|
|
self.args = args
|
|
self.result = 0
|
|
|
|
def run(self):
|
|
sleep(1)
|
|
self.result = self.func(*self.args)
|
|
|
|
def get_result(self):
|
|
Thread.join(self) # 等待线程执行完毕
|
|
try:
|
|
return self.result
|
|
except Exception as Err:
|
|
return None
|
|
|
|
|
|
def traversal_files(path, w2t):
|
|
# 功能:以列表的形式分别返回指定路径下的文件和文件夹,不包含子目录
|
|
# 参数:路径
|
|
# 返回值:路径下的文件夹列表 路径下的文件列表
|
|
if not exists(path):
|
|
msg = f'数据文件夹{path}不存在,请确认后重试......'
|
|
w2t(msg, 0, 1, 'red')
|
|
else:
|
|
dirs = []
|
|
files = []
|
|
for item in scandir(path):
|
|
if item.is_dir():
|
|
dirs.append(item.path)
|
|
elif item.is_file():
|
|
files.append(item.path)
|
|
|
|
return dirs, files
|
|
|
|
|
|
def prj_to_xcore(prj_file):
|
|
ssh = SSHClient()
|
|
ssh.set_missing_host_key_policy(AutoAddPolicy())
|
|
ssh.connect(ip_addr, 22, username='luoshi', password='luoshi2019')
|
|
sftp = ssh.open_sftp()
|
|
sftp.put(prj_file, '/tmp/target.zip')
|
|
cmd = 'cd /tmp; rm -rf target/; mkdir target; unzip -d target/ -q target.zip; '
|
|
cmd += 'chmod 777 -R target/; rm target.zip'
|
|
ssh.exec_command(cmd)
|
|
|
|
cmd = 'sudo rm -rf /home/luoshi/bin/controller/projects/target; '
|
|
cmd += 'sudo mv /tmp/target/ /home/luoshi/bin/controller/projects/'
|
|
stdin, stdout, stderr = ssh.exec_command(cmd, get_pty=True)
|
|
stdin.write('luoshi2019' + '\n')
|
|
stdout.read().decode() # 需要read一下才能正常执行
|
|
stderr.read().decode()
|
|
|
|
cmd = 'cd /home/luoshi/bin/controller/; '
|
|
cmd += 'sudo chmod -R 755 projects; rm /tmp/*.prj; sudo mv projects/target/_build/*.prj /tmp; cd /tmp; '
|
|
cmd += 'prj=($(ls *.prj)); sudo mv ${prj[0]} /home/luoshi/bin/controller/projects/target/_build/target.prj; '
|
|
stdin, stdout, stderr = ssh.exec_command(cmd, get_pty=True)
|
|
stdin.write('luoshi2019' + '\n')
|
|
stdout.read().decode() # 需要read一下才能正常执行
|
|
stderr.read().decode()
|
|
ssh.close()
|
|
|
|
|
|
def execution(cmd, hr, w2t, tab_name, **kwargs):
|
|
_id = hr.execution(cmd, **kwargs)
|
|
_msg = hr.get_from_id(_id)
|
|
if not _msg:
|
|
w2t(f"无法获取{_id}请求的响应信息", 0, 6, 'red', tab_name)
|
|
else:
|
|
return eval(_msg.split('#')[2])
|