1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package apiv1
import (
"net/http"
"path"
"strings"
"path/filepath"
"github.com/gin-gonic/gin"
"github.com/iotbzh/xds-agent/lib/common"
)
type XDSAgentTarball struct {
OS string `json:"os"`
Arch string `json:"arch"`
Version string `json:"version"`
RawVersion string `json:"raw-version"`
FileURL string `json:"fileUrl"`
}
type XDSAgentInfo struct {
Tarballs []XDSAgentTarball `json:"tarballs"`
}
// getXdsAgentInfo : return various information about Xds Agent
func (s *APIService) getXdsAgentInfo(c *gin.Context) {
res := XDSAgentInfo{}
tarballURL := "assets/xds-agent-tarballs"
tarballDir := filepath.Join(s.cfg.WebAppDir, "assets", "xds-agent-tarballs")
if common.Exists(tarballDir) {
files, err := filepath.Glob(path.Join(tarballDir, "xds-agent_*.zip"))
if err != nil {
s.log.Debugf("Error while retrieving xds-agent tarballs: dir=%s, error=%v", tarballDir, err)
}
for _, ff := range files {
file := filepath.Base(ff)
// Assume that tarball name format is: xds-agent_OS-ARCH-RAWVERSION.zip
fs := strings.TrimSuffix(strings.TrimPrefix(file, "xds-agent_"), ".zip")
f := strings.Split(fs, "-")
if len(f) >= 3 {
vers := strings.Split(f[2], "_")
ver := f[2]
if len(vers) > 1 {
ver = vers[0]
}
newT := XDSAgentTarball{
OS: f[0],
Arch: f[1],
Version: ver,
RawVersion: f[2],
FileURL: filepath.Join(tarballURL, file),
}
s.log.Infof("Added XDS-Agent tarball: %s", file)
res.Tarballs = append(res.Tarballs, newT)
} else {
s.log.Debugf("Error while retrieving xds-agent, decoding failure: file:%v", ff)
}
}
}
c.JSON(http.StatusOK, res)
}
|