Merge branch 'now_dev' into backend_manual
This commit is contained in:
commit
c8be2f9f75
|
@ -401,7 +401,6 @@ class UpdateManager():
|
|||
header = ''
|
||||
desc = ''
|
||||
try:
|
||||
#第一次进入 之后update不进入
|
||||
if self.cache is None:
|
||||
self.cache = MyCache(None)
|
||||
else:
|
||||
|
|
|
@ -21,20 +21,15 @@ import dbus,time
|
|||
from gi.repository import GLib
|
||||
import os
|
||||
from importlib import reload
|
||||
from SystemUpdater.Core.utils import unLockedEnableShutdown
|
||||
|
||||
from SystemUpdater.Core.utils import unLockedEnableShutdown,LockedPreventShutdown
|
||||
|
||||
# 超时检测 秒单位
|
||||
UPDATER_IDLE_CHECK_INTERVAL = 5
|
||||
|
||||
#安装的超时检查20分钟
|
||||
INSTALL_IDLE_TIMEOUT = 20 * 60
|
||||
|
||||
#更新超时检查 5分钟
|
||||
UPDATE_IDLE_TIMEOUT = 5 * 60
|
||||
|
||||
import dbus
|
||||
from SystemUpdater.Core.utils import (LockedPreventShutdown)
|
||||
|
||||
class InstallBackendAptdaemon(InstallBackend):
|
||||
"""Makes use of aptdaemon to refresh the cache and to install updates."""
|
||||
|
@ -53,20 +48,12 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
#客户端连接aptdeamon的dbus接口
|
||||
self.client = client.AptClient()
|
||||
self.trans_failed_msg = None
|
||||
|
||||
#aptdeamon的实时进度
|
||||
self.trans_progress = 0
|
||||
|
||||
self.trans_status = ''
|
||||
self.details = ''
|
||||
|
||||
#是否在安装状态 判断依据进度>50
|
||||
self.on_install_stage = False
|
||||
if self.action == self.ACTION_INSTALL_SHUTDOWN:
|
||||
self.on_install_stage = True
|
||||
|
||||
self.trans_cancelable = False
|
||||
|
||||
if self.action == self.ACTION_UPDATE:
|
||||
#更新的超时检查机制 超时时取消下载
|
||||
self.update_timestamp = 0
|
||||
|
@ -87,10 +74,10 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
def _check_simulation_progress(self):
|
||||
self.simulation_progress += 20
|
||||
|
||||
if self.trans_progress >= 90 or self.simulation_progress > 80:
|
||||
if self.aptd_base.progress >= 90 or self.simulation_progress > 80:
|
||||
return False
|
||||
else:
|
||||
self._dist_status_changed(self.action,[],self.simulation_progress,self.trans_status,self.details)
|
||||
self._dist_status_changed(self.action,[],self.simulation_progress,self.aptd_base.status,self.aptd_base.details)
|
||||
return True
|
||||
|
||||
def _check_install_inactivity(self):
|
||||
|
@ -103,15 +90,15 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
logging.info("Installing to exit and timeout check quit...")
|
||||
return False
|
||||
#进度不同时 更新时间戳
|
||||
if self.trans_progress != self.check_progress:
|
||||
self.check_progress = self.trans_progress
|
||||
if self.aptd_base.progress != self.check_progress:
|
||||
self.check_progress = self.aptd_base.progress
|
||||
self.install_timestamp = time.time()
|
||||
|
||||
#只有安装的时候启用 下载时候不使用
|
||||
timestamp = self.install_timestamp
|
||||
if (time.time() - timestamp > INSTALL_IDLE_TIMEOUT
|
||||
and self.on_install_stage == True):
|
||||
logging.error("Quitting due to inactivity(%s)",self.details)
|
||||
logging.error("Quitting due to inactivity(%s)",self.aptd_base.details)
|
||||
|
||||
if self.action == self.ACTION_INSTALL_SHUTDOWN:
|
||||
#关机安装模式 解除禁止关机锁
|
||||
|
@ -124,7 +111,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
# is_cancelled=False, success=False,
|
||||
# #FIXME: 安装超时退出
|
||||
# error_string=_("Could not install the upgrades"),
|
||||
# error_desc=_("Installtion timeout to exit Due to inactivity") + self.details)
|
||||
# error_desc=_("Installtion timeout to exit Due to inactivity") + self.aptd_base.details)
|
||||
|
||||
# self.window_main.dbusController.Quit(None)
|
||||
return False
|
||||
|
@ -134,19 +121,19 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
def _check_update_inactivity(self):
|
||||
logging.info("Checking for inactivity in Updating...")
|
||||
#退出定时器 当更新完毕的时候
|
||||
if (self.trans_cancelable == False and self.trans_progress >= 90) or self.window_main.now_working != self.ACTION_UPDATE:
|
||||
if (self.aptd_base.cancelable == False and self.aptd_base.progress >= 90) or self.window_main.now_working != self.ACTION_UPDATE:
|
||||
logging.info("Updating to exit and timeout check quit...")
|
||||
return False
|
||||
|
||||
#当更新进入下载状态时 记录进去的时间
|
||||
timestamp = self.update_timestamp
|
||||
if self.trans_cancelable == True and timestamp == 0:
|
||||
if self.aptd_base.cancelable == True and timestamp == 0:
|
||||
self.update_timestamp = time.time()
|
||||
return True
|
||||
|
||||
#超时设置
|
||||
if self.update_timestamp != 0 and time.time() - self.update_timestamp > UPDATE_IDLE_TIMEOUT \
|
||||
and self.trans_cancelable == True:
|
||||
and self.aptd_base.cancelable == True:
|
||||
|
||||
logging.error("Quitting due to inactivity")
|
||||
self.window_main.dbusController.transaction.cancel()
|
||||
|
@ -305,14 +292,14 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
return
|
||||
|
||||
#过滤掉不是线性的进度
|
||||
if progress > self.trans_progress:
|
||||
self.trans_progress = progress
|
||||
if progress > self.aptd_base.progress:
|
||||
self.aptd_base.progress = progress
|
||||
else:
|
||||
return
|
||||
|
||||
self.trans_progress = progress
|
||||
self.aptd_base.progress = progress
|
||||
self._dist_status_changed(action,self.now_upgrade.upgrade_groups+self.now_upgrade.single_pkgs,\
|
||||
self.trans_progress,self.trans_status,self.details)
|
||||
self.aptd_base.progress,self.aptd_base.status,self.aptd_base.details)
|
||||
|
||||
|
||||
#同步状态回调
|
||||
|
@ -321,12 +308,12 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
return
|
||||
|
||||
#转化词条
|
||||
self.trans_status = get_status_string_from_enum(status)
|
||||
if self.trans_status == None:
|
||||
self.aptd_base.status = get_status_string_from_enum(status)
|
||||
if self.aptd_base.status == None:
|
||||
return
|
||||
|
||||
self._dist_status_changed(action,self.now_upgrade.upgrade_groups+self.now_upgrade.single_pkgs,\
|
||||
self.trans_progress,self.trans_status,self.details)
|
||||
self.aptd_base.progress,self.aptd_base.status,self.aptd_base.details)
|
||||
|
||||
#分发进度状态和细节信息
|
||||
def _dist_status_changed(self,action,upgrade_content = [],progress = 0,status = '',details = ''):
|
||||
|
@ -349,14 +336,14 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
|
||||
#只处理从下载切换到安装时出现的网络问题
|
||||
#当网络波动时下载某些软件包失败时属于异常状态进行重试时 不发送后续进度 等待重试正常是 进行下载安装
|
||||
if self.is_version_upgrade == True and progress >= 48 and self.on_install_stage != True and 'Failed to fetch' in self.trans_error_details:
|
||||
if self.is_version_upgrade == True and progress >= 48 and self.on_install_stage != True and 'Failed to fetch' in self.aptd_base.error_details:
|
||||
logging.warning("Arise Failed to fetch and Need retry Upgrade...")
|
||||
self.is_need_retry = True
|
||||
return
|
||||
|
||||
#在下载阶段发送取消信号
|
||||
if self.on_install_stage == False:
|
||||
self.window_main.dbusController.Cancelable(self.trans_cancelable)
|
||||
self.window_main.dbusController.Cancelable(self.aptd_base.cancelable)
|
||||
|
||||
self.window_main.dbusController.UpdateDloadAndInstStaChanged(upgrade_content,progress,status,details)
|
||||
elif action == self.ACTION_INSTALL_SHUTDOWN:
|
||||
|
@ -367,12 +354,12 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
elif action == self.ACTION_DOWNLOADONLY:
|
||||
#只处理从下载切换到安装时出现的网络问题
|
||||
#当网络波动时下载某些软件包失败时属于异常状态进行重试时 不发送后续进度 等待重试正常是 进行下载安装
|
||||
if self.is_version_upgrade == True and progress >= 48 and 'Failed to fetch' in self.trans_error_details:
|
||||
if self.is_version_upgrade == True and progress >= 48 and 'Failed to fetch' in self.aptd_base.error_details:
|
||||
logging.warning("Arise Failed to fetch and Need retry Upgrade...")
|
||||
self.is_need_retry = True
|
||||
return
|
||||
|
||||
self.window_main.dbusController.Cancelable(self.trans_cancelable)
|
||||
self.window_main.dbusController.Cancelable(self.aptd_base.cancelable)
|
||||
self.window_main.dbusController.UpdateDloadAndInstStaChanged(upgrade_content,progress,status,details)
|
||||
|
||||
elif action == self.ACTION_FIX_BROKEN:
|
||||
|
@ -384,8 +371,10 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
else:
|
||||
logging.info("Other Action:progress = %d , status = %s ,details = %s",progress,status,details)
|
||||
|
||||
def _on_details_changed(self, trans, details):
|
||||
self.details = details
|
||||
def _on_details_changed(self, trans, details,action):
|
||||
self.aptd_base.details = details
|
||||
self._dist_status_changed(action,self.now_upgrade.upgrade_groups+self.now_upgrade.single_pkgs,\
|
||||
self.aptd_base.progress,self.aptd_base.status,self.aptd_base.details)
|
||||
|
||||
def _on_download_changed(self, trans, details):
|
||||
logging.info(details)
|
||||
|
@ -415,7 +404,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
logging.info("\033[1;32m" + "Emitting" + "\033[0m" +" Cancelable: %r",Cancelable)
|
||||
self.window_main.dbusController.Cancelable(Cancelable)
|
||||
#增加取消信号的频发机制
|
||||
self.trans_cancelable = Cancelable
|
||||
self.aptd_base.cancelable = Cancelable
|
||||
|
||||
def _on_config_file_conflict(self, transaction, old, new):
|
||||
logging.info("Config file conflict oldconf = %s , newconf = %s...",str(old),str(new))
|
||||
|
@ -427,7 +416,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
#增加记录当产生错误的时候 详细信息
|
||||
def _on_error_changed(self, trans,error_code, error_details):
|
||||
# error_string = get_error_string_from_enum(error_code)
|
||||
self.trans_error_details = str(error_details)
|
||||
self.aptd_base.error_details = str(error_details)
|
||||
logging.error(str(error_details))
|
||||
|
||||
@inline_callbacks
|
||||
|
@ -441,7 +430,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
trans.connect("cancellable-changed", self._on_cancellable_changed)
|
||||
#下载的进度信息
|
||||
trans.connect("progress-details-changed", self._on_progress_download_changed)
|
||||
trans.connect("status-details-changed", self._on_details_changed)
|
||||
trans.connect("status-details-changed", self._on_details_changed,action)
|
||||
trans.connect("error", self._on_error_changed)
|
||||
|
||||
trans.connect("config-file-conflict", self._on_config_file_conflict)
|
||||
|
|
|
@ -18,6 +18,7 @@ from SystemUpdater.Core.DataAcquisition import get_east_8_time
|
|||
from apt import Cache
|
||||
import subprocess
|
||||
from SystemUpdater.Core.UpdateList import LocalUpgradeDataList
|
||||
|
||||
class NowUpgradePara:
|
||||
"""
|
||||
Represent the (potentially partial) results of an unattended-upgrades
|
||||
|
@ -32,6 +33,24 @@ class NowUpgradePara:
|
|||
#推送的可升级的单包
|
||||
self.single_pkgs = single_pkgs
|
||||
|
||||
class AptdBaseInformation:
|
||||
"""
|
||||
进度 状态 状态细节信息
|
||||
"""
|
||||
def __init__(self,
|
||||
progress = 0,
|
||||
status='',
|
||||
details='',
|
||||
cancelable = False,
|
||||
error_details = '',
|
||||
):
|
||||
|
||||
self.progress = progress
|
||||
self.status = status
|
||||
self.details = details
|
||||
self.cancelable = cancelable
|
||||
self.error_details = error_details
|
||||
|
||||
class InstallBackend():
|
||||
INSTALL_OUTPUT_JSON = "/var/lib/kylin-system-updater/json/showdown_install.json"
|
||||
|
||||
|
@ -71,7 +90,7 @@ class InstallBackend():
|
|||
|
||||
self.window_main.now_working = action
|
||||
|
||||
self.trans_error_details = ''
|
||||
self.aptd_base = AptdBaseInformation()
|
||||
|
||||
#更新的时候此对象还未生成
|
||||
if self.window_main.update_list != None:
|
||||
|
@ -646,10 +665,10 @@ class InstallBackend():
|
|||
self.window_main.dbusController.UpdateDownloadFinished(success,upgrade_content,error_string,error_desc)
|
||||
|
||||
elif action == self.ACTION_UPDATE:
|
||||
if success == False and 'The following signatures' in self.trans_error_details:
|
||||
if success == False and 'The following signatures' in self.aptd_base.error_details:
|
||||
error_desc = _("Check your source public key signature")
|
||||
#网络认证错误
|
||||
elif success == False and 'does the network require authentication?' in self.trans_error_details:
|
||||
elif success == False and 'does the network require authentication?' in self.aptd_base.error_details:
|
||||
error_desc = _("Check if your network requires authentication?")
|
||||
|
||||
if success and self.action_mode == self.MODE_UPDATE_ALL:
|
||||
|
@ -683,7 +702,7 @@ class InstallBackend():
|
|||
|
||||
elif action == self.ACTION_INSTALL_DEB:
|
||||
#FIXME: '\r\n: \r\n\r\n'就认为是验证失败
|
||||
if success == False and '\r\n: \r\n\r\n' in self.trans_error_details:
|
||||
if success == False and '\r\n: \r\n\r\n' in self.aptd_base.error_details:
|
||||
error_string = _("Package validation failed and installation was rejected.")
|
||||
error_desc = ''
|
||||
self.window_main.dbusController.InstalldebFinished(success,error_string,error_desc)
|
||||
|
@ -739,7 +758,7 @@ class InstallBackend():
|
|||
false_num = 0
|
||||
try:
|
||||
#目前去掉打印 错误日志
|
||||
# error_desc = error_desc +'\n\n'+self.trans_error_details
|
||||
# error_desc = error_desc +'\n\n'+self.aptd_base.error_details
|
||||
#在安装失败 and 不是取消升级 则走下面的 否则不计算全部直接插入数据库
|
||||
if success == False and is_cancelled == False and self.action_mode != self.MODE_INSTALL_SYSTEM:
|
||||
#获取当前系统中最新的cache
|
||||
|
|
Loading…
Reference in New Issue