in agent/pluginmanager/pluginmanager.go [446:518]
func pluginUpdateCheck() {
log.GetLogger().Info("pluginUpdateCheck start")
// get upgradable plugin list
upgradables, err := LocalManager.FindUpgradable(log.GetLogger())
if err != nil || len(upgradables) == 0 {
log.GetLogger().WithError(err).Info("pluginUpdateCheck cancel: there is no persist plugin")
return
}
// request for update check
osType := osutil.GetOsType()
arch, _ := GetArch()
updateChecks := make([]PluginUpdateCheck, 0, len(upgradables))
for _, u := range upgradables {
updateChecks = append(updateChecks, PluginUpdateCheck{
Name: u.Name(),
Version: u.Version(),
})
}
pluginUpdateCheckRequest := PluginUpdateCheckRequest{
Os: osType,
Arch: arch,
Plugin: updateChecks,
}
requestPayloadBytes, err := json.Marshal(pluginUpdateCheckRequest)
if err != nil {
log.GetLogger().WithError(err).Error("pluginUpdateCheck fail: pluginUpdateCheckRequest marshal fail")
return
}
requestPayload := string(requestPayloadBytes)
url := util.GetPluginUpdateCheckService()
resp, err := util.HttpPost(url, requestPayload, "")
for i := 0; i < 2 && err != nil; i++ {
log.GetLogger().Infof("request updateCheck fail, need retry: %s", requestPayload)
time.Sleep(time.Duration(3) * time.Second)
resp, err = util.HttpPost(url, requestPayload, "")
}
if err != nil {
log.GetLogger().WithError(err).Error("pluginUpdateCheck fail: post pluginStatusList fail")
return
}
// update plugins
var pluginUpdateCheckResp PluginUpdateCheckResponse
pluginUpdateCheckResp, err = parsePluginUpdateCheck(resp)
if err != nil {
log.GetLogger().WithError(err).Errorf("pluginUpdateCheck fail: parse pluginUpdateInfo from resp fail: %s", resp)
return
}
for _, plugin := range pluginUpdateCheckResp.Plugin {
updateOneLogger := log.GetLogger().WithFields(logrus.Fields{
"name": plugin.Name,
"version": plugin.Version,
"timeout": plugin.Timeout,
})
err := LocalManager.Update(updateOneLogger, &RemotePlugin{pui: &plugin})
if err != nil {
updateOneLogger.WithError(err).Error("pluginUpdateCheck: failed to update one plugin to new version in specified time")
}
}
log.GetLogger().Infof("pluginUpdateCheck done, updated [%d] plugins", len(pluginUpdateCheckResp.Plugin))
if pluginUpdateCheckResp.NextInterval > 0 {
pluginUpdateCheckInterval = pluginUpdateCheckResp.NextInterval
}
if err := refreshTimer(pluginUpdateTimer, pluginUpdateCheckInterval); err != nil {
log.GetLogger().Errorf("pluginUpdateCheck: refresh pluginUpdateTimer nextInterval [%d] second failed: %s", pluginUpdateCheckInterval, err.Error())
} else {
log.GetLogger().Errorf("pluginUpdateCheck: refresh pluginUpdateTimer nextInterval [%d] second", pluginUpdateCheckInterval)
}
}