func pluginUpdateCheck()

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)
	}
}