fix update

This commit is contained in:
JRK 2024-06-13 18:41:55 +02:00 committed by GitHub
parent bcbbf99cab
commit 96eecd5c34
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 30 deletions

View File

@ -1,10 +1,12 @@
import time
import logging import logging
import threading
import platform import platform
from flask import Flask, redirect, url_for from flask import Flask, redirect, url_for
from src.interface.ObController import ObController from src.interface.ObController import ObController
from src.util.utils import run_system_command, sudo_run_system_command, get_working_directory, am_i_in_docker from src.util.utils import run_system_command, sudo_run_system_command, get_working_directory, am_i_in_docker, restart
from src.Application import Application from src.Application import Application
@ -14,6 +16,17 @@ class GitUpdaterController(ObController):
self._app.add_url_rule('/git-updater/update/now', 'git_updater_update_now', self._auth(self.update_now), methods=['GET']) self._app.add_url_rule('/git-updater/update/now', 'git_updater_update_now', self._auth(self.update_now), methods=['GET'])
def update_now(self): def update_now(self):
secret = self._model_store.config().map().get('secret_key')
debug = self._model_store.config().map().get('debug')
thread = threading.Thread(target=self.update, args=(debug,))
thread.daemon = True
thread.start()
return redirect(url_for('manage'))
def update(self, debug: bool) -> None:
time.sleep(1)
old_version = Application.get_version() old_version = Application.get_version()
logging.info("🚧 Application update from {} to master...".format(old_version)) logging.info("🚧 Application update from {} to master...".format(old_version))
@ -38,7 +51,6 @@ class GitUpdaterController(ObController):
if os_name == "linux": if os_name == "linux":
logging.warn('Git Updater supports linux process manager, using apt...') logging.warn('Git Updater supports linux process manager, using apt...')
sudo_run_system_command(['systemctl', 'restart', Application.get_name()])
elif os_name == "windows": elif os_name == "windows":
logging.warn('Git Updater doesn\'t fully supports windows process manager, you may need to restart application manually') logging.warn('Git Updater doesn\'t fully supports windows process manager, you may need to restart application manually')
elif os_name == "darwin": elif os_name == "darwin":
@ -51,7 +63,5 @@ class GitUpdaterController(ObController):
else: else:
logging.info("🧊 Application already up to date with version {}".format(new_version)) logging.info("🧊 Application already up to date with version {}".format(new_version))
return redirect(url_for( restart(debug)
'sysinfo_restart',
secret_key=self._model_store.config().map().get('secret_key')
))

View File

@ -11,7 +11,7 @@ from src.manager.ConfigManager import ConfigManager
from src.service.ModelStore import ModelStore from src.service.ModelStore import ModelStore
from src.interface.ObController import ObController from src.interface.ObController import ObController
from src.util.utils import am_i_in_docker from src.util.utils import restart
from src.util.UtilNetwork import get_ip_address from src.util.UtilNetwork import get_ip_address
from src.service.Sysinfo import get_all_sysinfo from src.service.Sysinfo import get_all_sysinfo
@ -34,9 +34,14 @@ class SysinfoController(ObController):
) )
def sysinfo_restart(self): def sysinfo_restart(self):
debug = self._model_store.config().map().get('debug')
secret = self._model_store.config().map().get('secret_key') secret = self._model_store.config().map().get('secret_key')
challenge = request.args.get('secret_key') challenge = request.args.get('secret_key')
thread = threading.Thread(target=self.restart, args=(secret, challenge))
if secret != challenge:
return jsonify({'status': 'error'})
thread = threading.Thread(target=restart, args=(debug,))
thread.daemon = True thread.daemon = True
thread.start() thread.start()
@ -51,28 +56,6 @@ class SysinfoController(ObController):
return jsonify({'status': True}) return jsonify({'status': True})
def restart(self, secret: str, challenge: str) -> None:
time.sleep(1)
if secret != challenge:
return jsonify({'status': 'error'})
if platform.system().lower() == 'darwin':
if self._model_store.config().map().get('debug'):
python = sys.executable
os.execl(python, python, *sys.argv)
elif am_i_in_docker():
python = sys.executable
os.execl(python, python, *sys.argv)
else:
try:
subprocess.run(["sudo", "systemctl", "restart", 'obscreen-studio'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
pass
except subprocess.TimeoutExpired:
pass
except subprocess.CalledProcessError:
pass
def sysinfo_get_ipaddr(self): def sysinfo_get_ipaddr(self):
ipaddr = get_ip_address() ipaddr = get_ip_address()
return ipaddr if ipaddr else '' return ipaddr if ipaddr else ''

View File

@ -1,8 +1,11 @@
import os import os
import re import re
import sys
import time
import inspect import inspect
import subprocess import subprocess
import unicodedata import unicodedata
import platform
from typing import Optional, List, Dict from typing import Optional, List, Dict
@ -210,3 +213,24 @@ def get_function_caller(depth: int = 3) -> str:
def clamp(x: float, minimum: float, maximum: float) -> float: def clamp(x: float, minimum: float, maximum: float) -> float:
return max(minimum, min(x, maximum)) return max(minimum, min(x, maximum))
def restart(debug: bool) -> None:
time.sleep(1)
if platform.system().lower() == 'darwin':
if debug:
python = sys.executable
os.execl(python, python, *sys.argv)
elif am_i_in_docker():
python = sys.executable
os.execl(python, python, *sys.argv)
else:
try:
subprocess.run(["sudo", "systemctl", "restart", 'obscreen-studio'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
pass
except subprocess.TimeoutExpired:
pass
except subprocess.CalledProcessError:
pass