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