cleanups and code fixes incl templ
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-03-20 13:21:15 +11:00
parent 4fbb2582e3
commit 9a561f3b07
24 changed files with 425 additions and 141 deletions

View File

@@ -1,8 +1,10 @@
package handler
import (
"context"
"database/sql"
"net/http"
"time"
"vctp/db/queries"
"vctp/internal/vcenter"
)
@@ -17,6 +19,11 @@ import (
// @Failure 500 {object} models.ErrorResponse "Server error"
// @Router /api/inventory/vm/update [post]
func (h *Handler) VmUpdateDetails(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
writeJSONError(w, http.StatusMethodNotAllowed, "method not allowed")
return
}
if h.denyLegacyAPI(w, "/api/inventory/vm/update") {
return
}
@@ -31,20 +38,42 @@ func (h *Handler) VmUpdateDetails(w http.ResponseWriter, r *http.Request) {
defer cancel()
// reload settings in case vcenter list has changed
h.Settings.ReadYMLSettings()
if err := h.Settings.ReadYMLSettings(); err != nil {
h.Logger.Error("unable to reload settings", "error", err)
writeJSONError(w, http.StatusInternalServerError, "Unable to reload settings")
return
}
for _, url := range h.Settings.Values.Settings.VcenterAddresses {
h.Logger.Debug("connecting to vcenter", "url", url)
vc := vcenter.New(h.Logger, h.VcCreds)
vc.Login(url)
if err := vc.Login(url); err != nil {
h.Logger.Error("unable to connect to vcenter", "url", url, "error", err)
writeJSONError(w, http.StatusInternalServerError, "Unable to connect to vcenter")
return
}
logout := func() {
logoutCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
defer cancel()
if err := vc.Logout(logoutCtx); err != nil {
h.Logger.Warn("vcenter logout failed", "url", url, "error", err)
}
}
// Get list of VMs from vcenter
vms, err := vc.GetAllVmReferences()
if err != nil {
logout()
h.Logger.Error("Unable to query vcenter VM references", "url", url, "error", err)
writeJSONError(w, http.StatusInternalServerError, "Unable to query vcenter VM references")
return
}
// Get list of VMs from inventory table
h.Logger.Debug("Querying inventory table")
results, err := h.Database.Queries().GetInventoryByVcenter(ctx, url)
if err != nil {
logout()
h.Logger.Error("Unable to query inventory table", "error", err)
writeJSONError(w, http.StatusInternalServerError, "Unable to query inventory table")
return
@@ -116,6 +145,7 @@ func (h *Handler) VmUpdateDetails(w http.ResponseWriter, r *http.Request) {
}
}
logout()
}
h.Logger.Debug("Processed vm update successfully")