ryry-cli 2.95__tar.gz → 2.97__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ryry_cli-2.95 → ryry_cli-2.97}/PKG-INFO +1 -1
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/constant.py +2 -2
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/ryry_server_socket.py +37 -8
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/ryry_service.py +3 -59
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/ryry_webapi.py +9 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/server_func.py +4 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/task.py +68 -2
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/taskUtils.py +1 -1
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/utils.py +11 -2
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/PKG-INFO +1 -1
- {ryry_cli-2.95 → ryry_cli-2.97}/setup.py +1 -1
- {ryry_cli-2.95 → ryry_cli-2.97}/LICENSE +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/README.md +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/__init__.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/main.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/ryry_widget.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/script_template/__init__.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/script_template/main.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/script_template/run.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/store.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry/upload.py +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/SOURCES.txt +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/dependency_links.txt +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/entry_points.txt +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/requires.txt +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/ryry_cli.egg-info/top_level.txt +0 -0
- {ryry_cli-2.95 → ryry_cli-2.97}/setup.cfg +0 -0
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import os, time, json
|
|
1
|
+
import os, time, json, calendar
|
|
2
2
|
from urllib.parse import *
|
|
3
3
|
import threading
|
|
4
4
|
from datetime import datetime, timedelta
|
|
5
|
-
import calendar
|
|
6
5
|
from threading import Thread, current_thread, Lock
|
|
7
6
|
import uuid
|
|
8
7
|
import queue
|
|
9
8
|
import subprocess, platform
|
|
10
9
|
|
|
11
|
-
from ryry import store
|
|
12
|
-
from ryry import ryry_webapi
|
|
13
|
-
from ryry import task
|
|
14
|
-
from ryry import constant
|
|
15
|
-
from ryry import utils
|
|
16
|
-
from ryry import taskUtils
|
|
10
|
+
from ryry import store, ryry_widget, ryry_webapi, task, constant, utils, taskUtils
|
|
17
11
|
|
|
18
12
|
class RyryTaskExecutor(Thread):
|
|
19
13
|
THEADING_LIST = []
|
|
@@ -189,11 +183,43 @@ class RyryShortConnectThread(Thread):
|
|
|
189
183
|
self.name = f"ShortConnect"
|
|
190
184
|
self.is_running = True
|
|
191
185
|
self.executor = executor
|
|
186
|
+
self.last_check_time = calendar.timegm(time.gmtime())
|
|
192
187
|
self.start()
|
|
193
188
|
|
|
194
189
|
def taskCallback(self, taskUUID, is_ok, msg, result):
|
|
195
190
|
ryry_webapi.TaskNotify(taskUUID, is_ok, msg, result)
|
|
196
191
|
|
|
192
|
+
def checkWidgetVersion(self):
|
|
193
|
+
if calendar.timegm(time.gmtime()) - self.last_check_time > 300:
|
|
194
|
+
self.last_check_time = calendar.timegm(time.gmtime())
|
|
195
|
+
try:
|
|
196
|
+
#update widget
|
|
197
|
+
ryry_widget.UpdateWidgetFromPypi()
|
|
198
|
+
except Exception as ex:
|
|
199
|
+
print(f'update widget fail, {ex}')
|
|
200
|
+
|
|
201
|
+
# if platform.system() != 'Darwin':
|
|
202
|
+
# try:
|
|
203
|
+
# #update cli
|
|
204
|
+
# remote_version = ryry_widget._remote_package_version("ryry-cli")
|
|
205
|
+
# simple = "https://pypi.python.org/simple/"
|
|
206
|
+
# local_version, local_path = ryry_widget._local_package_info("ryry-cli")
|
|
207
|
+
# if ryry_widget.compare_versions(remote_version, local_version) > 0:
|
|
208
|
+
# print("start update progress...")
|
|
209
|
+
# utils.begin_restart("auto upgrade ryry-cli", True, simple)
|
|
210
|
+
# device_id = utils.generate_unique_id()
|
|
211
|
+
# machine_name = socket.gethostname()
|
|
212
|
+
# ver = get_distribution("ryry-cli").version
|
|
213
|
+
# taskUtils.notifyWechatRobot({
|
|
214
|
+
# "msgtype": "text",
|
|
215
|
+
# "text": {
|
|
216
|
+
# "content": f"机器<{machine_name}[{device_id}]>[{ver}] ryry-cli开始升级[{local_version}]->[{remote_version}]"
|
|
217
|
+
# }
|
|
218
|
+
# })
|
|
219
|
+
# break
|
|
220
|
+
# except Exception as ex:
|
|
221
|
+
# print(f'update ryry-cli fail, {ex}')
|
|
222
|
+
|
|
197
223
|
def run(self):
|
|
198
224
|
print(f" {self.name} start")
|
|
199
225
|
min_wait_time = 5
|
|
@@ -243,6 +269,9 @@ class RyryShortConnectThread(Thread):
|
|
|
243
269
|
except Exception as ex:
|
|
244
270
|
taskUtils.taskPrint(None, f"{self.name} === exception : {ex}")
|
|
245
271
|
time.sleep(wait_time)
|
|
272
|
+
if self.executor.isWorking() == False:
|
|
273
|
+
#自动更新widget
|
|
274
|
+
self.checkWidgetVersion()
|
|
246
275
|
|
|
247
276
|
print(f" {self.name} stop")
|
|
248
277
|
|
|
@@ -76,7 +76,6 @@ class ryryService:
|
|
|
76
76
|
self.THEADING_LIST.append(executor)
|
|
77
77
|
self.THEADING_LIST.append(TaskConnector.RyryShortConnectThread(executor))
|
|
78
78
|
self.THEADING_LIST.append(ryryStateThread())
|
|
79
|
-
self.THEADING_LIST.append(ryryPackageThread())
|
|
80
79
|
#3: service step
|
|
81
80
|
while (os.path.exists(stop_file) == False):
|
|
82
81
|
time.sleep(10)
|
|
@@ -122,64 +121,6 @@ class ryryService:
|
|
|
122
121
|
time.sleep(1)
|
|
123
122
|
print("ryryService has ended!")
|
|
124
123
|
|
|
125
|
-
class ryryPackageThread(Thread):
|
|
126
|
-
def __init__(self):
|
|
127
|
-
super().__init__()
|
|
128
|
-
self.name = f"ryryPackageThread"
|
|
129
|
-
if platform.system() == 'Windows':
|
|
130
|
-
self.time_task_file = os.path.join(constant.base_path, "update_ryry.bat")
|
|
131
|
-
elif platform.system() == 'Linux' or platform.system() == 'Darwin':
|
|
132
|
-
self.time_task_file = os.path.join(constant.base_path, "update_ryry.sh")
|
|
133
|
-
if os.path.exists(self.time_task_file):
|
|
134
|
-
os.remove(self.time_task_file)
|
|
135
|
-
self.last_check_time = calendar.timegm(time.gmtime())
|
|
136
|
-
self.start()
|
|
137
|
-
def getCommandResult(self, cmd):
|
|
138
|
-
try:
|
|
139
|
-
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
|
140
|
-
if result.returncode == 0:
|
|
141
|
-
return result.stdout.decode(encoding="utf8", errors="ignore").replace("\n","").strip()
|
|
142
|
-
except subprocess.CalledProcessError as e:
|
|
143
|
-
print(f"getCommandResult fail {e}")
|
|
144
|
-
return ""
|
|
145
|
-
def run(self):
|
|
146
|
-
while (os.path.exists(stop_thread_file) == False):
|
|
147
|
-
time.sleep(10)
|
|
148
|
-
if calendar.timegm(time.gmtime()) - self.last_check_time > 300:
|
|
149
|
-
self.last_check_time = calendar.timegm(time.gmtime())
|
|
150
|
-
try:
|
|
151
|
-
#update widget
|
|
152
|
-
ryry_widget.UpdateWidgetFromPypi()
|
|
153
|
-
except Exception as ex:
|
|
154
|
-
print(f'update widget fail, {ex}')
|
|
155
|
-
|
|
156
|
-
# if platform.system() != 'Darwin':
|
|
157
|
-
# try:
|
|
158
|
-
# #update cli
|
|
159
|
-
# remote_version = ryry_widget._remote_package_version("ryry-cli")
|
|
160
|
-
# simple = "https://pypi.python.org/simple/"
|
|
161
|
-
# local_version, local_path = ryry_widget._local_package_info("ryry-cli")
|
|
162
|
-
# if ryry_widget.compare_versions(remote_version, local_version) > 0:
|
|
163
|
-
# print("start update progress...")
|
|
164
|
-
# utils.begin_restart("auto upgrade ryry-cli", True, simple)
|
|
165
|
-
# device_id = utils.generate_unique_id()
|
|
166
|
-
# machine_name = socket.gethostname()
|
|
167
|
-
# ver = get_distribution("ryry-cli").version
|
|
168
|
-
# taskUtils.notifyWechatRobot({
|
|
169
|
-
# "msgtype": "text",
|
|
170
|
-
# "text": {
|
|
171
|
-
# "content": f"机器<{machine_name}[{device_id}]>[{ver}] ryry-cli开始升级[{local_version}]->[{remote_version}]"
|
|
172
|
-
# }
|
|
173
|
-
# })
|
|
174
|
-
# break
|
|
175
|
-
# except Exception as ex:
|
|
176
|
-
# print(f'update ryry-cli fail, {ex}')
|
|
177
|
-
time.sleep(10)
|
|
178
|
-
print(f" PackageChecker stop")
|
|
179
|
-
notify_other_stoped() #because other thread is waiting some signal to close
|
|
180
|
-
def markStop(self):
|
|
181
|
-
print(f" PackageChecker waiting stop")
|
|
182
|
-
|
|
183
124
|
class ryryStateThread(Thread):
|
|
184
125
|
def __init__(self):
|
|
185
126
|
super().__init__()
|
|
@@ -207,9 +148,12 @@ class ryryStateThread(Thread):
|
|
|
207
148
|
os.remove(os.path.join(constant.base_path, file))
|
|
208
149
|
if root != files:
|
|
209
150
|
break
|
|
151
|
+
#更新机器性能
|
|
152
|
+
store.writeDeviceInfo(utils.deviceInfo())
|
|
210
153
|
except:
|
|
211
154
|
time.sleep(60)
|
|
212
155
|
print(f" StateChecker stop")
|
|
156
|
+
notify_other_stoped() #because other thread is waiting some signal to close
|
|
213
157
|
def markStop(self):
|
|
214
158
|
print(f" StateChecker waiting stop")
|
|
215
159
|
|
|
@@ -176,6 +176,15 @@ def TaskCancel(taskUUID):
|
|
|
176
176
|
return False
|
|
177
177
|
return True
|
|
178
178
|
|
|
179
|
+
def multiTaskCancel(checkUUIDs):
|
|
180
|
+
req = {
|
|
181
|
+
"task_uuids": checkUUIDs
|
|
182
|
+
}
|
|
183
|
+
r1, r2, r3 = _aigc_post("aigc/task/taskCancels", req)
|
|
184
|
+
if r1 != 0:
|
|
185
|
+
return False
|
|
186
|
+
return True
|
|
187
|
+
|
|
179
188
|
def _upload(localFilePath, ext, keep_it_always=False):
|
|
180
189
|
with open(localFilePath, "rb") as f:
|
|
181
190
|
files = { 'file':f }
|
|
@@ -143,6 +143,10 @@ class AsyncTask:
|
|
|
143
143
|
ryry_webapi.TaskCancel(taskUUID if taskUUID else self.checkUUID)
|
|
144
144
|
return True
|
|
145
145
|
|
|
146
|
+
def multiCancel(self, taskUUIDs):
|
|
147
|
+
ryry_webapi.multiTaskCancel(taskUUIDs)
|
|
148
|
+
return True
|
|
149
|
+
|
|
146
150
|
def check(self, taskUUID=None):
|
|
147
151
|
finish, success, data, progress = ryry_webapi.checkTask(taskUUID if taskUUID else self.checkUUID)
|
|
148
152
|
return {
|
|
@@ -5,10 +5,66 @@ import sys
|
|
|
5
5
|
import signal
|
|
6
6
|
import subprocess, multiprocessing
|
|
7
7
|
from threading import Thread, current_thread, Lock
|
|
8
|
+
import xmlrpc.client
|
|
8
9
|
|
|
9
10
|
from ryry import ryry_webapi,store,taskUtils,utils,constant
|
|
10
11
|
from pathlib import Path
|
|
11
12
|
|
|
13
|
+
# _rpc_server_process = None
|
|
14
|
+
# _rpc_port = 8000
|
|
15
|
+
# _rpc_server_lock = Lock()
|
|
16
|
+
|
|
17
|
+
# def stop_rpc_server():
|
|
18
|
+
# global _rpc_server_process
|
|
19
|
+
# with _rpc_server_lock:
|
|
20
|
+
# if _rpc_server_process is not None:
|
|
21
|
+
# try:
|
|
22
|
+
# _rpc_server_process.terminate()
|
|
23
|
+
# _rpc_server_process.wait(timeout=5)
|
|
24
|
+
# except:
|
|
25
|
+
# _rpc_server_process.kill()
|
|
26
|
+
# _rpc_server_process = None
|
|
27
|
+
|
|
28
|
+
# def restart_rpc_server():
|
|
29
|
+
# stop_rpc_server()
|
|
30
|
+
# ensure_rpc_server_running()
|
|
31
|
+
|
|
32
|
+
# def ensure_rpc_server_running():
|
|
33
|
+
# global _rpc_server_process
|
|
34
|
+
# with _rpc_server_lock:
|
|
35
|
+
# if _rpc_server_process is None or _rpc_server_process.poll() is not None:
|
|
36
|
+
# backend_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'backend.py')
|
|
37
|
+
# _rpc_server_process = subprocess.Popen([sys.executable, backend_path])
|
|
38
|
+
# time.sleep(2) # 等待服务器启动
|
|
39
|
+
|
|
40
|
+
# # 检查服务器是否成功启动
|
|
41
|
+
# try:
|
|
42
|
+
# client = xmlrpc.client.ServerProxy(f'http://localhost:{_rpc_port}')
|
|
43
|
+
# client.initialize_model()
|
|
44
|
+
# except:
|
|
45
|
+
# stop_rpc_server()
|
|
46
|
+
# raise Exception("RPC server failed to start")
|
|
47
|
+
|
|
48
|
+
# def check_code_update():
|
|
49
|
+
# """检查代码是否有更新,如果有更新则重启服务"""
|
|
50
|
+
# backend_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'backend.py')
|
|
51
|
+
# current_mtime = os.path.getmtime(backend_path)
|
|
52
|
+
|
|
53
|
+
# # 获取上次记录的修改时间
|
|
54
|
+
# last_mtime_file = os.path.join(os.path.dirname(backend_path), '.last_mtime')
|
|
55
|
+
# last_mtime = 0
|
|
56
|
+
# if os.path.exists(last_mtime_file):
|
|
57
|
+
# with open(last_mtime_file, 'r') as f:
|
|
58
|
+
# last_mtime = float(f.read().strip() or 0)
|
|
59
|
+
|
|
60
|
+
# # 如果文件被修改,重启服务
|
|
61
|
+
# if current_mtime > last_mtime:
|
|
62
|
+
# print("Detected code update, restarting RPC server...")
|
|
63
|
+
# restart_rpc_server()
|
|
64
|
+
# # 更新最后修改时间
|
|
65
|
+
# with open(last_mtime_file, 'w') as f:
|
|
66
|
+
# f.write(str(current_mtime))
|
|
67
|
+
|
|
12
68
|
def runTask(it, timeout):
|
|
13
69
|
start_time = calendar.timegm(time.gmtime())
|
|
14
70
|
taskUUID = it["taskUUID"]
|
|
@@ -63,6 +119,16 @@ def cmdWithWidgetName(name):
|
|
|
63
119
|
return None
|
|
64
120
|
|
|
65
121
|
def executeLocalPython(taskUUID, cmd, param, timeout=3600):
|
|
122
|
+
# # 检查代码更新
|
|
123
|
+
# check_code_update()
|
|
124
|
+
|
|
125
|
+
# # 确保RPC服务器运行
|
|
126
|
+
# ensure_rpc_server_running()
|
|
127
|
+
|
|
128
|
+
# # 添加RPC服务器信息到环境变量
|
|
129
|
+
env = os.environ.copy()
|
|
130
|
+
# env['RPC_SERVER_PORT'] = str(_rpc_port)
|
|
131
|
+
|
|
66
132
|
inputArgs = os.path.join(constant.base_path, f"{taskUUID}.in")
|
|
67
133
|
if os.path.exists(inputArgs):
|
|
68
134
|
os.remove(inputArgs)
|
|
@@ -84,8 +150,8 @@ def executeLocalPython(taskUUID, cmd, param, timeout=3600):
|
|
|
84
150
|
process = None
|
|
85
151
|
try:
|
|
86
152
|
if timeout == 0:
|
|
87
|
-
timeout = 60*30
|
|
88
|
-
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
153
|
+
timeout = 60*30
|
|
154
|
+
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
|
|
89
155
|
timeout_killprocess(process, timeout)
|
|
90
156
|
output, error = process.communicate()
|
|
91
157
|
if process.returncode == 0:
|
|
@@ -40,7 +40,7 @@ def appendTaskAndDomain(taskUUID, subDomain):
|
|
|
40
40
|
with open(task_config_file, 'w') as f:
|
|
41
41
|
json.dump(task_config, f)
|
|
42
42
|
|
|
43
|
-
WECHAT_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=
|
|
43
|
+
WECHAT_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1b006560-7012-4bf0-8c5e-a23830bc0a0b"
|
|
44
44
|
def uploadFile2Wechat(filepath):
|
|
45
45
|
real_robot_url = WECHAT_URL
|
|
46
46
|
params = parse.parse_qs( parse.urlparse( real_robot_url ).query )
|
|
@@ -139,15 +139,24 @@ def deviceInfo():
|
|
|
139
139
|
cpu_freq = psutil.cpu_freq().max / 1000
|
|
140
140
|
except:
|
|
141
141
|
pass
|
|
142
|
+
|
|
143
|
+
virtual_mem = psutil.virtual_memory()
|
|
144
|
+
disk = psutil.disk_usage("/")
|
|
142
145
|
data = {
|
|
143
146
|
"cpu": {
|
|
144
147
|
"logical_count" : psutil.cpu_count(),
|
|
145
148
|
"count" : psutil.cpu_count(logical=False),
|
|
146
149
|
"max_freq" : f"{cpu_freq} GHz",
|
|
147
150
|
},
|
|
151
|
+
"disk": {
|
|
152
|
+
"total": f"{(disk.total / G):.1f} G",
|
|
153
|
+
"used": f"{(disk.used / G):.1f} G",
|
|
154
|
+
"free": f"{(disk.free / G):.1f} G",
|
|
155
|
+
"percent": f"{disk.percent}%"
|
|
156
|
+
},
|
|
148
157
|
"memory": {
|
|
149
|
-
"total"
|
|
150
|
-
"free"
|
|
158
|
+
"total": f"{(virtual_mem.total / G):.1f} G",
|
|
159
|
+
"free": f"{(virtual_mem.free / G):.1f} G"
|
|
151
160
|
},
|
|
152
161
|
"gpu": {
|
|
153
162
|
"count" : 0,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|