package tasks import ( "context" "log/slog" "time" "vctp/db" "vctp/internal/vcenter" ) // Handler handles requests. type CronTask struct { Logger *slog.Logger Database db.Database } // use gocron to check events in the Events table func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error { var ( //unixTimestamp int64 numVcpus int32 numRam int32 datacenter string ) logger.Debug("Started Events processing", "time", time.Now()) // Query events table events, err := c.Database.Queries().ListUnprocessedEvents(ctx) if err != nil { logger.Error("Unable to query for unprocessed events", "error", err) return nil // TODO - what to do with this error? } for _, evt := range events { logger.Debug("Checking event", "event", evt) c.Logger.Debug("connecting to vcenter") vc := vcenter.New(c.Logger) vc.Login(evt.Source) //vmObject, err := vc.FindVMByName(vm.CloudEvent.Data.VM.Name) //vmObject, err := vc.FindVMByID(vm.CloudEvent.Data.VM.VM.Value) vmObject, err := vc.FindVMByIDWithDatacenter(evt.VmId.String, evt.DatacenterId.String) if err != nil { c.Logger.Error("Can't locate vm in vCenter", "vmID", evt.VmId.String, "error", err) } else if vmObject == nil { c.Logger.Debug("didn't find VM", "vm_id", evt.VmId.String) numRam = 0 numVcpus = 0 datacenter = evt.DatacenterName.String } else { c.Logger.Debug("found VM") //prettyPrint(vmObject) // calculate VM properties we want to store if vmObject.Vm.Config != nil { numRam = vmObject.Vm.Config.Hardware.MemoryMB numVcpus = vmObject.Vm.Config.Hardware.NumCPU * vmObject.Vm.Config.Hardware.NumCoresPerSocket } else { c.Logger.Error("Empty VM config") } } err = vc.Logout() if err != nil { c.Logger.Error("unable to logout of vcenter", "error", err) } c.Logger.Debug("Simulate adding to Inventory", "vm_name", evt.VmName.String, "vcpus", numVcpus, "ram", numRam, "dc", datacenter) } //fmt.Printf("processing at %s", time.Now()) return nil }