Skip to content

Commit

Permalink
api: sysinfo.json: respect query parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
USA-RedDragon committed Feb 21, 2024
1 parent 6910a3d commit 8b5aa2d
Showing 1 changed file with 51 additions and 13 deletions.
64 changes: 51 additions & 13 deletions internal/server/api/controllers/v1/aredn_compat.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,19 @@ func GETMetrics(c *gin.Context) {
}

func GETSysinfo(c *gin.Context) {
var sysinfoChan = make(chan *syscall.Sysinfo_t)
var sysinfoErrorChan = make(chan error)
defer close(sysinfoChan)
defer close(sysinfoErrorChan)
go func() {
var info *syscall.Sysinfo_t
err := syscall.Sysinfo(info)
if err != nil {
sysinfoErrorChan <- err
}
sysinfoChan <- info
}()

db, ok := c.MustGet("DB").(*gorm.DB)
if !ok {
fmt.Println("POSTLogin: Unable to get DB from context")
Expand Down Expand Up @@ -106,19 +119,23 @@ func GETSysinfo(c *gin.Context) {
return
}

olsrdParser, ok := c.MustGet("OLSRDHostParser").(*olsrd.HostsParser)
if !ok {
fmt.Println("GETSysinfo: OLSRDHostParser not found in context")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Try again later"})
return
hostsStr, exists := c.GetQuery("hosts")
if !exists {
hostsStr = "0"
}
doHosts := hostsStr == "1"

olsrdServicesParser, ok := c.MustGet("OLSRDServicesParser").(*olsrd.ServicesParser)
if !ok {
fmt.Println("GETSysinfo: OLSRDServicesParser not found in context")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Try again later"})
return
servicesStr, exists := c.GetQuery("services")
if !exists {
servicesStr = "0"
}
doServices := servicesStr == "1"

linkInfoStr, exists := c.GetQuery("link_info")
if !exists {
linkInfoStr = "0"
}
doLinkInfo := linkInfoStr == "1"

sysinfo := apimodels.SysinfoResponse{
Longitude: config.Longitude,
Expand Down Expand Up @@ -153,9 +170,30 @@ func GETSysinfo(c *gin.Context) {
Enabled: false,
},
Interfaces: getInterfaces(),
Hosts: getHosts(olsrdParser),
Services: getServices(olsrdServicesParser),
LinkInfo: getLinkInfo(),
}

if doHosts {
olsrdParser, ok := c.MustGet("OLSRDHostParser").(*olsrd.HostsParser)
if !ok {
fmt.Println("GETSysinfo: OLSRDHostParser not found in context")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Try again later"})
return
}
sysinfo.Hosts = getHosts(olsrdParser)
}

if doServices {
olsrdServicesParser, ok := c.MustGet("OLSRDServicesParser").(*olsrd.ServicesParser)
if !ok {
fmt.Println("GETSysinfo: OLSRDServicesParser not found in context")
c.JSON(http.StatusInternalServerError, gin.H{"error": "Try again later"})
return
}
sysinfo.Services = getServices(olsrdServicesParser)
}

if doLinkInfo {
sysinfo.LinkInfo = getLinkInfo()
}

c.JSON(http.StatusOK, sysinfo)
Expand Down

0 comments on commit 8b5aa2d

Please sign in to comment.