99 lines
3.2 KiB
Python
Raw Normal View History

2021-08-30 14:33:18 +08:00
__all__ = [
"CloudService",
"CloudServiceMonitor",
]
from usr.bin.components.abstract_service import AbstractService
from usr.bin.components.monitor import ServiceMonitor
from usr.utils.service_utils import Singleton
from usr.bin.components.OTA import UCloudOTA
import _thread
SH_UPGRADE = 1
BIN_UPGRADE = 0
ENABLE_ = "enable"
class CloudServiceMonitor(ServiceMonitor):
@staticmethod
def create_monitor(config=None):
if config is None:
return None
level = 0
try:
level = config.get("level", 0)
uid = config["params"]["uid"]
module_type = config["params"]["module_type"]
pk = config["params"]["pk"]
battery = config["params"].get("battery", 100)
reboot = config["params"].get("reboot", False)
cloud_service = CloudService(uid=uid, module_type=module_type, pk=pk, battery=battery, reboot=bool(reboot))
except Exception as e:
return None
else:
m = CloudServiceMonitor(cloud_service)
m.set_level(level)
if config is not None:
m.set_exception_handlers(config.get('exceptionHandlers', None))
return m
@Singleton
class CloudService(AbstractService):
def __init__(self, uid, module_type, pk, battery=100, reboot=False):
super().__init__("CLOUD")
self.reboot = reboot
self.module_type = module_type
self.pk = pk
self.uid = uid
self.ota_upgrade = UCloudOTA(battery)
self.__upgrade_status_info = {
SH_UPGRADE: None,
BIN_UPGRADE: None
}
self.server_status = {
SH_UPGRADE: {ENABLE_: True},
BIN_UPGRADE: {ENABLE_: False}
}
@property
def upgrade_status_info(self):
return self.__upgrade_status_info
def set_enable(self, sr, enable):
"""set start"""
self.server_status[sr][ENABLE_] = enable
def __upgrade_sh(self):
# 触发升级脚本操作
if self.server_status[SH_UPGRADE][ENABLE_]:
code = self.ota_upgrade.start_upgrade_sh_event(self.module_type, self.uid, self.pk, reboot=self.reboot)
self.send_msg(message=dict(code=code), msg_type=SH_UPGRADE)
def __upgrade_bin(self):
# 触发升级bin包操作
if self.server_status[BIN_UPGRADE][ENABLE_]:
code = self.ota_upgrade.start_upgrade_bin_event(self.module_type, self.uid, self.pk, reboot=self.reboot)
self.send_msg(message=dict(code=code), msg_type=BIN_UPGRADE)
def _status_update(self, *args, **kwargs):
msg = "message"
em = kwargs.get(msg, False)
if em:
msg_type = em["msg_type"]
self.__upgrade_status_info[msg_type] = em[msg]["code"]
def get_app_code(self):
return self.__upgrade_status_info[SH_UPGRADE]
def prepare_before_start(self):
self.signal.connect(self._status_update, sender="anonymous")
def start(self):
super().start()
# _thread.start_new_thread(self.__upgrade_bin, ())
_thread.start_new_thread(self.__upgrade_sh, ())
def commit_log(self, message):
self.ota_upgrade.commit_log(self.pk, message)