mirror of
https://github.com/YunoHost-Apps/linuxdash_ynh.git
synced 2024-09-03 19:36:07 +02:00
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
listenAddress = flag.String("listen", "0.0.0.0:80", "Where the server listens for connections. [interface]:port")
|
||
|
staticPath = flag.String("static", "../", "Location of static files.")
|
||
|
scriptPath = flag.String("scripts", "./modules/shell_files", "Location of shell scripts used to gather stats.")
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
flag.Parse()
|
||
|
}
|
||
|
|
||
|
func main() {
|
||
|
http.Handle("/", http.FileServer(http.Dir(*staticPath)))
|
||
|
http.HandleFunc("/server/", func(w http.ResponseWriter, r *http.Request) {
|
||
|
module := r.URL.Query().Get("module")
|
||
|
script := filepath.Join(*scriptPath, module+".sh")
|
||
|
if module == "" {
|
||
|
http.Error(w, "No module specified, or requested module doesn't exist.", 406)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Execute the command
|
||
|
cmd := exec.Command(script)
|
||
|
var output bytes.Buffer
|
||
|
cmd.Stdout = &output
|
||
|
err := cmd.Run()
|
||
|
if err != nil {
|
||
|
fmt.Printf("Error executing '%s': %s\n\tScript output: %s\n", script, err.Error(), output.String())
|
||
|
http.Error(w, "Unable to execute module.", http.StatusInternalServerError)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
w.Write(output.Bytes())
|
||
|
})
|
||
|
|
||
|
fmt.Println("Starting http server at:", *listenAddress)
|
||
|
err := http.ListenAndServe(*listenAddress, nil)
|
||
|
if err != nil {
|
||
|
fmt.Println("Error starting http server:", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
}
|