60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
import os
|
|
import sys
|
|
import platform
|
|
import subprocess
|
|
|
|
from flask import Flask, render_template, jsonify
|
|
from src.manager.VariableManager import VariableManager
|
|
from src.manager.ConfigManager import ConfigManager
|
|
from src.service.ModelManager import ModelManager
|
|
|
|
from src.utils import get_ip_address
|
|
|
|
|
|
class SysinfoController:
|
|
|
|
def __init__(self, app, model_manager: ModelManager):
|
|
self._app = app
|
|
self._model_manager = model_manager
|
|
self.register()
|
|
|
|
def register(self):
|
|
self._app.add_url_rule('/sysinfo', 'sysinfo_attribute_list', self.sysinfo, methods=['GET'])
|
|
self._app.add_url_rule('/sysinfo/restart', 'sysinfo_restart', self.sysinfo_restart, methods=['POST'])
|
|
self._app.add_url_rule('/sysinfo/restart/needed', 'sysinfo_restart_needed', self.sysinfo_restart_needed, methods=['GET'])
|
|
|
|
def sysinfo(self):
|
|
ipaddr = get_ip_address()
|
|
return render_template(
|
|
'sysinfo/list.jinja.html',
|
|
ipaddr=ipaddr if ipaddr else self._model_manager.lang().map().get('common_unknown_ipaddr'),
|
|
l=self._model_manager.lang().map(),
|
|
ro_variables=self._model_manager.variable().get_readonly_variables(),
|
|
)
|
|
|
|
def sysinfo_restart(self):
|
|
if platform.system().lower() == 'darwin':
|
|
if self._model_manager.config().map().get('debug'):
|
|
python = sys.executable
|
|
os.execl(python, python, *sys.argv)
|
|
else:
|
|
try:
|
|
subprocess.run(["sudo", "systemctl", "restart", 'obscreen'], check=True, timeout=10, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
pass
|
|
except subprocess.TimeoutExpired:
|
|
pass
|
|
except subprocess.CalledProcessError:
|
|
pass
|
|
|
|
return jsonify({'status': 'ok'})
|
|
|
|
def sysinfo_restart_needed(self):
|
|
var_last_slide_update = self._model_manager.variable().get_one_by_name('last_slide_update')
|
|
var_last_restart = self._model_manager.variable().get_one_by_name('last_restart')
|
|
|
|
if var_last_slide_update.value <= var_last_restart.value:
|
|
return jsonify({'status': False})
|
|
|
|
return jsonify({'status': True})
|
|
|