feat: base go mkiso
This commit is contained in:
69
internal/handler/health.go
Normal file
69
internal/handler/health.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"os/exec"
|
||||
|
||||
"mkiso-server/internal/config"
|
||||
"mkiso-server/pkg/dicom"
|
||||
)
|
||||
|
||||
// Health returns a handler that checks and reports the status of
|
||||
// all external dependencies.
|
||||
func Health(cfg *config.Config) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
deps := []struct {
|
||||
Name string `json:"name"`
|
||||
Path string `json:"path"`
|
||||
Status string `json:"status"`
|
||||
}{
|
||||
{"storescp", cfg.DCMTK.Storescp, ""},
|
||||
{"movescu", cfg.DCMTK.Movescu, ""},
|
||||
{"storescu", cfg.DCMTK.Storescu, ""},
|
||||
}
|
||||
|
||||
allOK := true
|
||||
for i, dep := range deps {
|
||||
if dep.Path == "" {
|
||||
deps[i].Status = "not configured"
|
||||
allOK = false
|
||||
continue
|
||||
}
|
||||
if dicom.FileExists(dep.Path) {
|
||||
// Quick check: can we execute it?
|
||||
cmd := exec.Command(dep.Path, "--version")
|
||||
if err := cmd.Run(); err == nil {
|
||||
deps[i].Status = "ok"
|
||||
} else {
|
||||
deps[i].Status = "executable not found"
|
||||
allOK = false
|
||||
}
|
||||
} else {
|
||||
deps[i].Status = "file not found"
|
||||
allOK = false
|
||||
}
|
||||
}
|
||||
|
||||
// Check microdicom path
|
||||
microdicomOK := dicom.DirExists(cfg.ISO.MicrodicomPath)
|
||||
|
||||
response := map[string]interface{}{
|
||||
"status": "ok",
|
||||
"dependencies": deps,
|
||||
"microdicom_path": cfg.ISO.MicrodicomPath,
|
||||
"microdicom_exists": microdicomOK,
|
||||
"auth_enabled": cfg.Auth.Enabled,
|
||||
}
|
||||
|
||||
statusCode := http.StatusOK
|
||||
if !allOK {
|
||||
response["status"] = "degraded"
|
||||
statusCode = http.StatusOK // still return 200, status field indicates degraded
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(statusCode)
|
||||
json.NewEncoder(w).Encode(response)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user