Cosmos-Server/src/status.go
2023-06-20 18:34:06 +01:00

87 lines
2.4 KiB
Go

package main
import (
"net/http"
"encoding/json"
"runtime"
"golang.org/x/sys/cpu"
"github.com/azukaar/cosmos-server/src/utils"
"github.com/azukaar/cosmos-server/src/docker"
)
func StatusRoute(w http.ResponseWriter, req *http.Request) {
config := utils.GetMainConfig()
if !config.NewInstall && (utils.LoggedInOnly(w, req) != nil) {
return
}
if(req.Method == "GET") {
utils.Log("API: Status")
databaseStatus := true
if(!config.DisableUserManagement) {
err := utils.DB()
if err != nil {
utils.Error("Status: Database error", err)
databaseStatus = false
}
} else {
utils.Log("Status: User management is disabled, skipping database check")
}
if(!docker.DockerIsConnected) {
ed := docker.Connect()
if ed != nil {
utils.Error("Status: Docker error", ed)
}
}
json.NewEncoder(w).Encode(map[string]interface{}{
"status": "OK",
"data": map[string]interface{}{
"homepage": config.HomepageConfig,
"theme": config.ThemeConfig,
"resources": map[string]interface{}{
// "ram": utils.GetRAMUsage(),
// "ramFree": utils.GetAvailableRAM(),
// "cpu": utils.GetCPUUsage(),
// "disk": utils.GetDiskUsage(),
// "network": utils.GetNetworkUsage(),
},
"database": databaseStatus,
"docker": docker.DockerIsConnected,
"letsencrypt": utils.GetMainConfig().HTTPConfig.HTTPSCertificateMode == "LETSENCRYPT" && utils.GetMainConfig().HTTPConfig.SSLEmail == "",
"domain": utils.GetMainConfig().HTTPConfig.Hostname == "localhost" || utils.GetMainConfig().HTTPConfig.Hostname == "0.0.0.0",
"HTTPSCertificateMode": utils.GetMainConfig().HTTPConfig.HTTPSCertificateMode,
"needsRestart": utils.NeedsRestart,
"newVersionAvailable": utils.NewVersionAvailable,
"hostname": utils.GetMainConfig().HTTPConfig.Hostname,
"CPU": runtime.GOARCH,
"AVX": cpu.X86.HasAVX,
},
})
} else {
utils.Error("UserList: Method not allowed" + req.Method, nil)
utils.HTTPError(w, "Method not allowed", http.StatusMethodNotAllowed, "HTTP001")
return
}
}
func CanSendEmail(w http.ResponseWriter, req *http.Request) {
if(req.Method == "GET") {
json.NewEncoder(w).Encode(map[string]interface{}{
"status": "OK",
"data": map[string]interface{}{
"canSendEmail": utils.GetMainConfig().EmailConfig.Enabled,
},
})
} else {
utils.Error("UserList: Method not allowed" + req.Method, nil)
utils.HTTPError(w, "Method not allowed", http.StatusMethodNotAllowed, "HTTP001")
return
}
}