From e47718cd7f5b800263336cdfc0bd00942620b9e3 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Mon, 16 Sep 2024 13:52:56 +1000 Subject: [PATCH] dont query vm folder path unless we need to --- internal/tasks/processEvents.go | 13 ++++++++++++- internal/vcenter/vcenter.go | 15 +-------------- server/handler/vmModify.go | 12 ++++++++++-- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/internal/tasks/processEvents.go b/internal/tasks/processEvents.go index e675f7a..356b02b 100644 --- a/internal/tasks/processEvents.go +++ b/internal/tasks/processEvents.go @@ -28,6 +28,7 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error { foundVm bool isTemplate int poweredOn int + folderPath string ) logger.Debug("Started Events processing", "time", time.Now()) @@ -60,6 +61,7 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error { numVcpus = 0 totalDiskGB = 0 isTemplate = 0 + folderPath = "" } else { c.Logger.Debug("found VM") srmPlaceholder = 0 // Default assumption @@ -89,6 +91,15 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error { isTemplate = 0 } + // Retrieve the full folder path of the VM + folderPath, err = vc.GetVMFolderPath(vmObject.Vm) + if err != nil { + c.Logger.Error("failed to get vm folder path", "error", err) + folderPath = "" + } else { + c.Logger.Debug("Found vm folder path", "folder_path", folderPath) + } + foundVm = true } else { c.Logger.Error("Empty VM config") @@ -125,7 +136,7 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error { InitialVcpus: sql.NullInt64{Int64: int64(numVcpus), Valid: numVcpus > 0}, InitialRam: sql.NullInt64{Int64: int64(numRam), Valid: numRam > 0}, ProvisionedDisk: sql.NullFloat64{Float64: totalDiskGB, Valid: totalDiskGB > 0}, - Folder: sql.NullString{String: vmObject.FolderPath, Valid: vmObject.FolderPath != ""}, + Folder: sql.NullString{String: folderPath, Valid: folderPath != ""}, ResourcePool: sql.NullString{String: vmObject.ResourcePool, Valid: vmObject.ResourcePool != ""}, SrmPlaceholder: sql.NullInt64{Int64: int64(srmPlaceholder), Valid: true}, IsTemplate: sql.NullInt64{Int64: int64(isTemplate), Valid: true}, diff --git a/internal/vcenter/vcenter.go b/internal/vcenter/vcenter.go index 8331fed..db07cf4 100644 --- a/internal/vcenter/vcenter.go +++ b/internal/vcenter/vcenter.go @@ -27,8 +27,6 @@ type Vcenter struct { type VmProperties struct { Vm mo.VirtualMachine ResourcePool string - FolderPath string - //Datacenter string } // New creates a new Vcenter with the given logger @@ -181,7 +179,6 @@ func (v *Vcenter) FindVMByIDWithDatacenter(vmID string, dcID string) (*VmPropert //var dcName string var err error resourcePool := "" - vmFolderPath := "" v.Logger.Debug("searching for vm id", "vm_id", vmID, "datacenter_id", dcID) finder := find.NewFinder(v.client.Client, true) @@ -226,20 +223,10 @@ func (v *Vcenter) FindVMByIDWithDatacenter(vmID string, dcID string) (*VmPropert } - // Retrieve the full folder path of the VM - folderPath, err := v.getVMFolderPath(vm) - if err != nil { - v.Logger.Error("failed to get vm folder path", "error", err) - } else { - v.Logger.Debug("Found vm folder path", "folder_path", folderPath) - vmFolderPath = folderPath - } - return &VmProperties{ //Datacenter: dcName, Vm: vm, ResourcePool: resourcePool, - FolderPath: vmFolderPath, }, nil } else if _, ok := err.(*find.NotFoundError); !ok { // If the error is not a NotFoundError, return it @@ -255,7 +242,7 @@ func (v *Vcenter) FindVMByIDWithDatacenter(vmID string, dcID string) (*VmPropert } // Helper function to retrieve the full folder path for the VM -func (v *Vcenter) getVMFolderPath(vm mo.VirtualMachine) (string, error) { +func (v *Vcenter) GetVMFolderPath(vm mo.VirtualMachine) (string, error) { //finder := find.NewFinder(v.client.Client, true) v.Logger.Debug("Commencing vm folder path search") diff --git a/server/handler/vmModify.go b/server/handler/vmModify.go index fc52fa2..1510088 100644 --- a/server/handler/vmModify.go +++ b/server/handler/vmModify.go @@ -74,6 +74,14 @@ func (h *Handler) VmModify(w http.ResponseWriter, r *http.Request) { params.NewRam = sql.NullInt64{Int64: i, Valid: i > 0} } } + + // Check if a disk was added (or maybe removed?) + if strings.Contains(change["type"], "config.hardware.device") && + strings.Contains(event.CloudEvent.Data.FullFormattedMessage, ".vmdk") { + + // TODO - recalculate total disk size + h.Logger.Debug("Detected config change for VM disk") + } } // Only create a database record if we found one of the config changes we were interested in @@ -143,7 +151,7 @@ func (h *Handler) processConfigChanges(configChanges string) []map[string]string for _, change := range changes { // Trim any extra spaces and skip empty lines change = strings.TrimSpace(change) - h.Logger.Debug("Processing config change element", "substring", change) + //h.Logger.Debug("Processing config change element", "substring", change) if change == "" { continue } @@ -156,7 +164,7 @@ func (h *Handler) processConfigChanges(configChanges string) []map[string]string "type": match[1], // config type "newValue": match[2], // new value after -> or <- } - h.Logger.Debug("Adding new entry to output", "map", changeMap) + //h.Logger.Debug("Adding new entry to output", "map", changeMap) result = append(result, changeMap) } else { h.Logger.Warn("No regex matches for string", "input", change)