diff --git a/components/core/header.templ b/components/core/header.templ
index 456f813..c544950 100644
--- a/components/core/header.templ
+++ b/components/core/header.templ
@@ -7,7 +7,7 @@ templ Header() {
-
Test Page
+ vCTP API
diff --git a/db/migrations/20240915232747_extend_inventory.sql b/db/migrations/20240915232747_extend_inventory.sql
new file mode 100644
index 0000000..2ed89a9
--- /dev/null
+++ b/db/migrations/20240915232747_extend_inventory.sql
@@ -0,0 +1,11 @@
+-- +goose Up
+-- +goose StatementBegin
+ALTER TABLE "Inventory" ADD COLUMN IsTemplate INTEGER;
+ALTER TABLE "Inventory" ADD COLUMN PowerState INTEGER;
+-- +goose StatementEnd
+
+-- +goose Down
+-- +goose StatementBegin
+ALTER TABLE "Updates" DROP COLUMN PowerState;
+ALTER TABLE "Updates" DROP COLUMN IsTemplate;
+-- +goose StatementEnd
diff --git a/db/queries/models.go b/db/queries/models.go
index baaa08f..fa66029 100644
--- a/db/queries/models.go
+++ b/db/queries/models.go
@@ -23,6 +23,7 @@ type Events struct {
DatacenterId sql.NullString
ComputeResourceId sql.NullString
VmName sql.NullString
+ EventType sql.NullString
}
type Inventory struct {
@@ -43,6 +44,8 @@ type Inventory struct {
InitialVcpus sql.NullInt64
InitialRam sql.NullInt64
SrmPlaceholder sql.NullInt64
+ IsTemplate sql.NullInt64
+ PowerState sql.NullInt64
}
type Updates struct {
diff --git a/db/queries/query.sql b/db/queries/query.sql
index f5ba6a8..6f8792c 100644
--- a/db/queries/query.sql
+++ b/db/queries/query.sql
@@ -16,9 +16,9 @@ WHERE "EventId" = ? LIMIT 1;
-- name: CreateInventory :one
INSERT INTO "Inventory" (
- "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder"
+ "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "IsTemplate", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder", "PowerState"
) VALUES(
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
)
RETURNING *;
diff --git a/db/queries/query.sql.go b/db/queries/query.sql.go
index 3e4588a..b0ff838 100644
--- a/db/queries/query.sql.go
+++ b/db/queries/query.sql.go
@@ -16,7 +16,7 @@ INSERT INTO "Events" (
) VALUES(
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
)
-RETURNING Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName
+RETURNING Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType
`
type CreateEventParams struct {
@@ -65,17 +65,18 @@ func (q *Queries) CreateEvent(ctx context.Context, arg CreateEventParams) (Event
&i.DatacenterId,
&i.ComputeResourceId,
&i.VmName,
+ &i.EventType,
)
return i, err
}
const createInventory = `-- name: CreateInventory :one
INSERT INTO "Inventory" (
- "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder"
+ "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "IsTemplate", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder", "PowerState"
) VALUES(
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
)
-RETURNING Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder
+RETURNING Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder, IsTemplate, PowerState
`
type CreateInventoryParams struct {
@@ -87,6 +88,7 @@ type CreateInventoryParams struct {
CreationTime sql.NullInt64
ResourcePool sql.NullString
VmType sql.NullString
+ IsTemplate sql.NullInt64
Datacenter sql.NullString
Cluster sql.NullString
Folder sql.NullString
@@ -94,6 +96,7 @@ type CreateInventoryParams struct {
InitialVcpus sql.NullInt64
InitialRam sql.NullInt64
SrmPlaceholder sql.NullInt64
+ PowerState sql.NullInt64
}
func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams) (Inventory, error) {
@@ -106,6 +109,7 @@ func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams
arg.CreationTime,
arg.ResourcePool,
arg.VmType,
+ arg.IsTemplate,
arg.Datacenter,
arg.Cluster,
arg.Folder,
@@ -113,6 +117,7 @@ func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams
arg.InitialVcpus,
arg.InitialRam,
arg.SrmPlaceholder,
+ arg.PowerState,
)
var i Inventory
err := row.Scan(
@@ -133,6 +138,8 @@ func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams
&i.InitialVcpus,
&i.InitialRam,
&i.SrmPlaceholder,
+ &i.IsTemplate,
+ &i.PowerState,
)
return i, err
}
@@ -184,7 +191,7 @@ func (q *Queries) CreateUpdate(ctx context.Context, arg CreateUpdateParams) (Upd
}
const getInventoryByName = `-- name: GetInventoryByName :many
-SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder FROM "Inventory"
+SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder, IsTemplate, PowerState FROM "Inventory"
WHERE "Name" = ?
`
@@ -215,6 +222,8 @@ func (q *Queries) GetInventoryByName(ctx context.Context, name string) ([]Invent
&i.InitialVcpus,
&i.InitialRam,
&i.SrmPlaceholder,
+ &i.IsTemplate,
+ &i.PowerState,
); err != nil {
return nil, err
}
@@ -230,7 +239,7 @@ func (q *Queries) GetInventoryByName(ctx context.Context, name string) ([]Invent
}
const getInventoryEventId = `-- name: GetInventoryEventId :one
-SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder FROM "Inventory"
+SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder, IsTemplate, PowerState FROM "Inventory"
WHERE "EventId" = ? LIMIT 1
`
@@ -255,12 +264,14 @@ func (q *Queries) GetInventoryEventId(ctx context.Context, eventid sql.NullStrin
&i.InitialVcpus,
&i.InitialRam,
&i.SrmPlaceholder,
+ &i.IsTemplate,
+ &i.PowerState,
)
return i, err
}
const getInventoryVmId = `-- name: GetInventoryVmId :one
-SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder FROM "Inventory"
+SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder, IsTemplate, PowerState FROM "Inventory"
WHERE "VmId" = ? LIMIT 1
`
@@ -285,12 +296,14 @@ func (q *Queries) GetInventoryVmId(ctx context.Context, vmid sql.NullString) (In
&i.InitialVcpus,
&i.InitialRam,
&i.SrmPlaceholder,
+ &i.IsTemplate,
+ &i.PowerState,
)
return i, err
}
const listEvents = `-- name: ListEvents :many
-SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName FROM "Events"
+SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType FROM "Events"
ORDER BY "EventTime"
`
@@ -318,6 +331,7 @@ func (q *Queries) ListEvents(ctx context.Context) ([]Events, error) {
&i.DatacenterId,
&i.ComputeResourceId,
&i.VmName,
+ &i.EventType,
); err != nil {
return nil, err
}
@@ -333,7 +347,7 @@ func (q *Queries) ListEvents(ctx context.Context) ([]Events, error) {
}
const listInventory = `-- name: ListInventory :many
-SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder FROM "Inventory"
+SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder, IsTemplate, PowerState FROM "Inventory"
ORDER BY "Name"
`
@@ -364,6 +378,8 @@ func (q *Queries) ListInventory(ctx context.Context) ([]Inventory, error) {
&i.InitialVcpus,
&i.InitialRam,
&i.SrmPlaceholder,
+ &i.IsTemplate,
+ &i.PowerState,
); err != nil {
return nil, err
}
@@ -379,7 +395,7 @@ func (q *Queries) ListInventory(ctx context.Context) ([]Inventory, error) {
}
const listUnprocessedEvents = `-- name: ListUnprocessedEvents :many
-SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName FROM "Events"
+SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType FROM "Events"
WHERE "Processed" = 0
ORDER BY "EventTime"
`
@@ -408,6 +424,7 @@ func (q *Queries) ListUnprocessedEvents(ctx context.Context) ([]Events, error) {
&i.DatacenterId,
&i.ComputeResourceId,
&i.VmName,
+ &i.EventType,
); err != nil {
return nil, err
}
diff --git a/internal/tasks/processEvents.go b/internal/tasks/processEvents.go
index 56ec72e..e675f7a 100644
--- a/internal/tasks/processEvents.go
+++ b/internal/tasks/processEvents.go
@@ -26,6 +26,8 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
totalDiskGB float64
srmPlaceholder int
foundVm bool
+ isTemplate int
+ poweredOn int
)
logger.Debug("Started Events processing", "time", time.Now())
@@ -57,6 +59,7 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
numRam = 0
numVcpus = 0
totalDiskGB = 0
+ isTemplate = 0
} else {
c.Logger.Debug("found VM")
srmPlaceholder = 0 // Default assumption
@@ -80,11 +83,27 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
srmPlaceholder = 1
}
+ if vmObject.Vm.Config.Template {
+ isTemplate = 1
+ } else {
+ isTemplate = 0
+ }
+
foundVm = true
} else {
c.Logger.Error("Empty VM config")
}
+ //if (types.VirtualMachineRuntimeInfo{}) != vmObject.Vm.Runtime {
+ //if runtime, ok := vmObject.Vm.Runtime.(types.VirtualMachineRuntimeInfo); ok {
+ c.Logger.Debug("VM has runtime data", "power_state", vmObject.Vm.Runtime.PowerState)
+ if vmObject.Vm.Runtime.PowerState == "" {
+ poweredOn = 0
+ } else {
+ poweredOn = 1
+ }
+ //}
+
}
err = vc.Logout()
if err != nil {
@@ -109,6 +128,8 @@ func (c *CronTask) RunVmCheck(ctx context.Context, logger *slog.Logger) error {
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},
+ IsTemplate: sql.NullInt64{Int64: int64(isTemplate), Valid: true},
+ PowerState: sql.NullInt64{Int64: int64(poweredOn), Valid: true},
}
c.Logger.Debug("database params", "params", params)