agent/pluginmanager/remote.go (52 lines of code) (raw):
package pluginmanager
import (
"strconv"
"github.com/aliyun/aliyun_assist_client/thirdparty/sirupsen/logrus"
"github.com/aliyun/aliyun_assist_client/agent/log"
)
type RemotePlugin struct {
pui *PluginUpdateInfo
pi *PluginInfo
}
func (rp *RemotePlugin) Name() string {
if rp.pi != nil {
return rp.pi.Name
}
return rp.pui.Name
}
func (rp *RemotePlugin) Version() string {
if rp.pi != nil {
return rp.pi.Version
}
return rp.pui.Version
}
func (rp *RemotePlugin) TimeoutSecs() int {
if rp.pi != nil {
var timeout int
var err error
if timeout, err = strconv.Atoi(rp.pi.Timeout); err != nil {
timeout = 60
}
return timeout
}
return rp.pui.Timeout
}
func (rp *RemotePlugin) Url() string {
if rp.pi == nil {
fetchLogger := log.GetLogger().WithFields(logrus.Fields{
"name": rp.pui.Name,
"version": rp.pui.Version,
})
remotes, err := FetchPackageInfo(fetchLogger, rp.pui.Name, rp.pui.Version, true)
if err != nil {
fetchLogger.WithError(err).Error("Failed to fetch plugin information for package URL")
return ""
}
if len(remotes) == 0 {
fetchLogger.Error("Empty plugin information from remote for package URL")
return ""
}
rp.pi = &remotes[0]
}
return rp.pi.Url
}