/* Handle GET /probeinfos */ func HTTPHandlerProbeinfos(w http.ResponseWriter, r *http.Request) { var returnStr string // Returned string var probeInfos dguard.ProbeInfos // DGC Probe infos var stat syscall.Statfs_t // Syscall to get disk usage var out []byte // Command output var err error // Error handling // Get load average out, err = exec.Command("sh", "-c", "uptime | awk -F\"average:\" '{print $2}' | awk '{printf \"%s%s%s\",$1,$2,$3}'").Output() if err != nil { l.Error("HTTPHandlerProbeinfos: get load avg:", err) http.Error(w, http.StatusText(500), 500) return } probeInfos.LoadAvg = string(out) // Get memory usage out, err = exec.Command("sh", "-c", "cat /proc/meminfo | grep MemTotal | awk '{printf \"%d\",$2}'").Output() if err != nil { l.Error("HTTPHandlerProbeinfos: get mem total:", err) http.Error(w, http.StatusText(500), 500) return } probeInfos.MemoryTotal, err = utils.S2F(string(out)) if err != nil { l.Error("HTTPHandlerProbeinfos: get mem total S2I:", err) http.Error(w, http.StatusText(500), 500) return } out, err = exec.Command("sh", "-c", "cat /proc/meminfo | grep MemAvailable | awk '{printf \"%d\",$2}'").Output() if err != nil { l.Error("HTTPHandlerProbeinfos: get mem available:", err) http.Error(w, http.StatusText(500), 500) return } probeInfos.MemoryAvailable, err = utils.S2F(string(out)) if err != nil { l.Error("HTTPHandlerProbeinfos: get mem available S2I:", err) http.Error(w, http.StatusText(500), 500) return } probeInfos.MemoryTotal = probeInfos.MemoryTotal * 1024 probeInfos.MemoryAvailable = probeInfos.MemoryAvailable * 1024 // Get disk usage syscall.Statfs("/", &stat) probeInfos.DiskTotal = float64(stat.Blocks * uint64(stat.Bsize)) probeInfos.DiskAvailable = float64(stat.Bavail * uint64(stat.Bsize)) // probeInfos => json tmpJSON, err := json.Marshal(probeInfos) if err != nil { l.Error("HTTPHandlerProbeinfos: marshal JSON:", err) http.Error(w, http.StatusText(500), 500) } // Add json to the returned string returnStr = string(tmpJSON) fmt.Fprint(w, returnStr) }