Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions src/internal/updateplatform/message_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ type ShellCheck struct {
Shell string `json:"shell"` //检查脚本的内容
}

// 发送给更新平台的状态信息
type StatusMessage struct {
Type string `json:"type"` //消息类型,info,warning,error
UpdateType string `json:"updateType"` //system.UpdateType类型
JobDescription string `json:"jobDescription"` //job.Description
Detail string `json:"detail"` //消息详情
}

type UpdatePlatformManager struct {
config *Config
allowPostSystemUpgradeMessageType system.UpdateType
Expand Down Expand Up @@ -1316,12 +1324,19 @@ func (m *UpdatePlatformManager) UpdateAllPlatformDataSync() error {
}

// PostStatusMessage 将检查\下载\安装过程中所有异常状态和每个阶段成功的正常状态上报
func (m *UpdatePlatformManager) PostStatusMessage(body string) {
logger.Debug("post status msg:", body)
func (m *UpdatePlatformManager) PostStatusMessage(message StatusMessage) {
logger.Debugf("post status msg, type:%v, detail:%v", message.Type, message.Detail)
if (m.config.PlatformDisabled & DisabledProcess) != 0 {
return
}
buf := bytes.NewBufferString(body)

msg, err := json.Marshal(message)
if err != nil {
logger.Warningf("marshal status message failed:%v", err)
return
}

buf := bytes.NewBufferString(string(msg))
filePath := fmt.Sprintf("/tmp/%s_%s.xz", "update", time.Now().Format("20231019102233444"))
response, err := m.genPostProcessResponse(buf, filePath)
if err != nil {
Expand Down
13 changes: 11 additions & 2 deletions src/lastore-daemon/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,12 @@ func NewManager(service *dbusutil.Service, updateApi system.System, c *config.Co
if c.UpgradeStatus.Status == system.UpgradeRunning {
m.rebootTimeoutTimer = time.AfterFunc(600*time.Second, func() {
// 启动后600s如果没有触发检查,那么上报更新失败
m.updatePlatform.PostStatusMessage(fmt.Sprintf("the check has not been triggered after reboot for 600 seconds"))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
Detail: "the check has not been triggered after reboot for 600 seconds",
})

err = m.delRebootCheckOption(all)
if err != nil {
logger.Warning(err)
Expand Down Expand Up @@ -895,6 +900,7 @@ func (m *Manager) sendNotify(appName string, replacesId uint32, appIcon string,
cmdArgs := []string{
"-u", username, "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/" + strconv.Itoa(int(uid)) + "/bus",
}
// 安全地添加参数,避免命令注入
cmdArgs = append(cmdArgs, args...)
cmd := exec.Command("sudo", cmdArgs...)
logger.Info(cmd.String())
Expand All @@ -909,7 +915,9 @@ func (m *Manager) sendNotify(appName string, replacesId uint32, appIcon string,
} else {
str := outBuffer.String()
if len(str) >= 12 {
num, err := strconv.ParseUint(str[8:len(str)-3], 10, 0)
// 确保解析的字符串是有效的数字
numStr := str[8 : len(str)-3]
num, err := strconv.ParseUint(numStr, 10, 32)
if err != nil {
logger.Warning(err)
} else {
Expand Down Expand Up @@ -949,6 +957,7 @@ func (m *Manager) closeNotify(id uint32) error {
cmdArgs := []string{
"-u", username, "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/" + strconv.Itoa(int(uid)) + "/bus",
}
// 安全地添加参数,避免命令注入
cmdArgs = append(cmdArgs, args...)
cmd := exec.Command("sudo", cmdArgs...)
logger.Info(cmd.String())
Expand Down
9 changes: 8 additions & 1 deletion src/lastore-daemon/manager_check.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,14 @@ func (m *Manager) checkUpgrade(sender dbus.Sender, checkMode system.UpdateType,
go func() {
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v postcheck error: %v", checkOrder.JobType(), job.Description))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: checkOrder.JobType(),
JobDescription: job.Description,
Detail: fmt.Sprintf("%v postcheck error: %v", checkOrder.JobType(), job.Description),
})

m.reportLog(upgradeStatusReport, false, job.Description)
}()
inhibit(false)
Expand Down
17 changes: 15 additions & 2 deletions src/lastore-daemon/manager_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,13 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.reportLog(downloadStatusReport, false, j.Description)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("download %v package failed, detail is %v", mode.JobType(), job.Description)) // 上报下载失败状态
// 上报下载失败状态
m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: mode.JobType(),
JobDescription: job.Description,
Detail: fmt.Sprintf("download %v package failed, detail is %v", mode.JobType(), job.Description),
})
}()
return nil
},
Expand Down Expand Up @@ -220,7 +226,14 @@ func (m *Manager) prepareDistUpgrade(sender dbus.Sender, origin system.UpdateTyp
m.inhibitAutoQuitCountSub()
}
}
m.updatePlatform.PostStatusMessage(fmt.Sprintf("download %v package success", j.updateTyp.JobType())) // 上报下载成功状态

// 上报下载成功状态
m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "info",
UpdateType: j.updateTyp.JobType(),
JobDescription: j.Description,
Detail: fmt.Sprintf("download %v package success", j.updateTyp.JobType()),
})
return nil
},
string(system.EndStatus): func() error {
Expand Down
24 changes: 20 additions & 4 deletions src/lastore-daemon/manager_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,10 @@ func (m *Manager) updateSource(sender dbus.Sender) (*Job, error) {
go func() {
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.updatePlatform.PostStatusMessage("update source success")
m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "info",
Detail: "update source success",
})
}()
m.updatePlatform.SaveCache(m.config)
job.setPropProgress(1.0)
Expand All @@ -177,7 +180,12 @@ func (m *Manager) updateSource(sender dbus.Sender) (*Job, error) {
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.reportLog(updateStatusReport, false, job.Description)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("apt-get update failed, detail is %v , option is %+v", job.Description, job.option))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
JobDescription: job.Description,
Detail: fmt.Sprintf("apt-get update failed, detail is %v , option is %+v", job.Description, job.option),
})
}()
return nil
},
Expand Down Expand Up @@ -472,7 +480,10 @@ func (m *Manager) refreshUpdateInfos(sync bool) {
go func() {
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.updatePlatform.PostStatusMessage(fmt.Sprintf("generate package list error, detail is %v:", e))
m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
Detail: fmt.Sprintf("generate package list error, detail is %v:", e),
})
}()
logger.Warning(e)
}
Expand All @@ -488,7 +499,12 @@ func (m *Manager) refreshUpdateInfos(sync bool) {
go func() {
m.inhibitAutoQuitCountAdd()
defer m.inhibitAutoQuitCountSub()
m.updatePlatform.PostStatusMessage(fmt.Sprintf("generate package list error, detail is %v:", e))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
Detail: fmt.Sprintf("generate package list error, detail is %v:", e),
})

}()
logger.Warning(e)
}
Expand Down
35 changes: 30 additions & 5 deletions src/lastore-daemon/manager_upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,13 @@ func (m *Manager) distUpgrade(sender dbus.Sender, mode system.UpdateType, needAd
uuid, err = m.prepareAptCheck(mode)
if err != nil {
logger.Warning(err)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v gen dut meta failed, detail is: %v", mode.JobType(), err.Error()))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: mode.JobType(),
Detail: fmt.Sprintf("%v gen dut meta failed, detail is: %v", mode.JobType(), err.Error()),
})

if unref != nil {
unref()
}
Expand All @@ -371,7 +377,12 @@ func (m *Manager) distUpgrade(sender dbus.Sender, mode system.UpdateType, needAd
systemErr := dut.CheckSystem(dut.PreCheck, nil) // 只是为了执行precheck的hook脚本
if systemErr != nil {
logger.Info(systemErr)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v CheckSystem failed, detail is: %v", mode.JobType(), systemErr.Error()))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: mode.JobType(),
Detail: fmt.Sprintf("%v CheckSystem failed, detail is: %v", mode.JobType(), systemErr.Error()),
})
return systemErr
}
if !system.CheckInstallAddSize(mode) {
Expand All @@ -395,7 +406,12 @@ func (m *Manager) distUpgrade(sender dbus.Sender, mode system.UpdateType, needAd
systemErr := dut.CheckSystem(dut.MidCheck, nil)
if systemErr != nil {
logger.Info(systemErr)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v CheckSystem failed, detail is: %v", mode.JobType(), systemErr.Error()))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: mode.JobType(),
Detail: fmt.Sprintf("%v CheckSystem failed, detail is: %v", mode.JobType(), systemErr.Error()),
})
return systemErr
}
if m.statusManager.abStatus == system.HasBackedUp {
Expand Down Expand Up @@ -592,7 +608,12 @@ func (m *Manager) preFailedHook(job *Job, mode system.UpdateType, uuid string) e
allErrMsg = append(allErrMsg, string(msg))
}
}
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v upgrade failed, detail is: %v; all error message is %v", mode.JobType(), job.Description, strings.Join(allErrMsg, "\n")))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "error",
UpdateType: mode.JobType(),
Detail: fmt.Sprintf("%v upgrade failed, detail is: %v; all error message is %v", mode.JobType(), job.Description, strings.Join(allErrMsg, "\n")),
})
}()
m.statusManager.SetUpdateStatus(mode, system.UpgradeErr)
// 如果安装失败,那么需要将version文件一直缓存,防止下次检查更新时version版本变高
Expand All @@ -612,7 +633,11 @@ func (m *Manager) preUpgradeCmdSuccessHook(job *Job, needChangeGrub bool, mode s
}
m.statusManager.SetUpdateStatus(mode, system.Upgraded)
job.setPropProgress(1.00)
m.updatePlatform.PostStatusMessage(fmt.Sprintf("%v install package success,need reboot and check", mode))

m.updatePlatform.PostStatusMessage(updateplatform.StatusMessage{
Type: "info",
Detail: fmt.Sprintf("%v install package success, need reboot and check", mode.JobType()),
})
return nil
}

Expand Down
Loading