updates
This commit is contained in:
@@ -2,10 +2,14 @@ package tasks
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"log/slog"
|
||||
"time"
|
||||
"vctp/db"
|
||||
"vctp/db/queries"
|
||||
"vctp/internal/vcenter"
|
||||
|
||||
"github.com/vmware/govmomi/vim25/types"
|
||||
)
|
||||
|
||||
// Handler handles requests.
|
||||
@@ -18,10 +22,11 @@ type CronTask struct {
|
||||
func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
|
||||
var (
|
||||
//unixTimestamp int64
|
||||
numVcpus int32
|
||||
numRam int32
|
||||
datacenter string
|
||||
foundVm bool
|
||||
numVcpus int32
|
||||
numRam int32
|
||||
totalDiskGB float64
|
||||
srmPlaceholder int
|
||||
foundVm bool
|
||||
)
|
||||
|
||||
logger.Debug("Started Events processing", "time", time.Now())
|
||||
@@ -43,7 +48,7 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
|
||||
vc := vcenter.New(c.Logger)
|
||||
vc.Login(evt.Source)
|
||||
|
||||
datacenter = evt.DatacenterName.String
|
||||
//datacenter = evt.DatacenterName.String
|
||||
vmObject, err := vc.FindVMByIDWithDatacenter(evt.VmId.String, evt.DatacenterId.String)
|
||||
|
||||
if err != nil {
|
||||
@@ -52,8 +57,10 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
|
||||
c.Logger.Debug("didn't find VM", "vm_id", evt.VmId.String)
|
||||
numRam = 0
|
||||
numVcpus = 0
|
||||
totalDiskGB = 0
|
||||
} else {
|
||||
c.Logger.Debug("found VM")
|
||||
srmPlaceholder = 0 // Default assumption
|
||||
//prettyPrint(vmObject)
|
||||
|
||||
// calculate VM properties we want to store
|
||||
@@ -61,6 +68,20 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
|
||||
numRam = vmObject.Vm.Config.Hardware.MemoryMB
|
||||
//numVcpus = vmObject.Vm.Config.Hardware.NumCPU * vmObject.Vm.Config.Hardware.NumCoresPerSocket
|
||||
numVcpus = vmObject.Vm.Config.Hardware.NumCPU
|
||||
|
||||
// Calculate the total disk allocated in GB
|
||||
for _, device := range vmObject.Vm.Config.Hardware.Device {
|
||||
if disk, ok := device.(*types.VirtualDisk); ok {
|
||||
totalDiskGB += float64(disk.CapacityInBytes / 1024 / 1024 / 1024) // Convert from bytes to GB
|
||||
}
|
||||
}
|
||||
|
||||
// Determine if the VM is a normal VM or an SRM placeholder
|
||||
if vmObject.Vm.Config.ManagedBy != nil && vmObject.Vm.Config.ManagedBy.Type == "com.vmware.vcDr" {
|
||||
c.Logger.Debug("VM ManagedBy indicates managed by SRM")
|
||||
srmPlaceholder = 1
|
||||
}
|
||||
|
||||
foundVm = true
|
||||
} else {
|
||||
c.Logger.Error("Empty VM config")
|
||||
@@ -73,17 +94,44 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
|
||||
}
|
||||
|
||||
if foundVm {
|
||||
c.Logger.Debug("Simulate adding to Inventory", "vm_name", evt.VmName.String, "vcpus", numVcpus, "ram", numRam, "dc", datacenter)
|
||||
c.Logger.Debug("Simulate adding to Inventory", "vm_name", evt.VmName.String, "vcpus", numVcpus, "ram", numRam, "dc", evt.DatacenterId.String)
|
||||
|
||||
// mark this event as processed
|
||||
err = c.Database.Queries().UpdateEventsProcessed(ctx, evt.Eid)
|
||||
params := queries.CreateInventoryParams{
|
||||
Name: vmObject.Vm.Name,
|
||||
Vcenter: evt.Source,
|
||||
EventId: sql.NullString{String: evt.CloudId, Valid: evt.CloudId != ""},
|
||||
EventKey: sql.NullString{String: evt.EventKey.String, Valid: evt.EventKey.Valid},
|
||||
VmId: sql.NullString{String: evt.VmId.String, Valid: evt.VmId.Valid},
|
||||
Datacenter: sql.NullString{String: evt.DatacenterName.String, Valid: evt.DatacenterName.Valid},
|
||||
Cluster: sql.NullString{String: evt.ComputeResourceName.String, Valid: evt.ComputeResourceName.Valid},
|
||||
CreationTime: sql.NullInt64{Int64: evt.EventTime.Int64, Valid: evt.EventTime.Valid},
|
||||
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 != ""},
|
||||
ResourcePool: sql.NullString{String: vmObject.ResourcePool, Valid: vmObject.ResourcePool != ""},
|
||||
SrmPlaceholder: sql.NullInt64{Int64: int64(srmPlaceholder), Valid: true},
|
||||
}
|
||||
|
||||
c.Logger.Debug("database params", "params", params)
|
||||
|
||||
// Insert the new inventory record into the database
|
||||
result, err := c.Database.Queries().CreateInventory(ctx, params)
|
||||
if err != nil {
|
||||
c.Logger.Error("Unable to mark this event as processed", "event_id", evt.Eid, "error", err)
|
||||
c.Logger.Error("unable to perform database insert", "error", err)
|
||||
} else {
|
||||
c.Logger.Debug("Marked event as processed", "event_id", evt.Eid)
|
||||
c.Logger.Debug("created database record", "insert_result", result)
|
||||
|
||||
// mark this event as processed
|
||||
err = c.Database.Queries().UpdateEventsProcessed(ctx, evt.Eid)
|
||||
if err != nil {
|
||||
c.Logger.Error("Unable to mark this event as processed", "event_id", evt.Eid, "error", err)
|
||||
} else {
|
||||
c.Logger.Debug("Marked event as processed", "event_id", evt.Eid)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
c.Logger.Debug("Not simulate adding to Inventory due to missing vcenter config property", "vm_name", evt.VmName.String)
|
||||
c.Logger.Debug("Not adding to Inventory due to missing vcenter config property", "vm_name", evt.VmName.String)
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user