diff --git a/.!31628!.DS_Store b/.!31628!.DS_Store new file mode 100644 index 0000000..37954fb Binary files /dev/null and b/.!31628!.DS_Store differ diff --git a/Makefile b/Makefile index 1c40747..d9a735a 100644 --- a/Makefile +++ b/Makefile @@ -21,4 +21,4 @@ run: @go run main.go build: @echo "Building..." - @go build -o ./build/wnzl-snow -ldflags="-s -w -X version.Value=1.0.0" + @go build -o ./build/mocksnow -ldflags="-s -w -X version.Value=1.0.0" diff --git a/components/core/header.templ b/components/core/header.templ index b9f7d2e..980c6e6 100644 --- a/components/core/header.templ +++ b/components/core/header.templ @@ -1,13 +1,13 @@ package core -import "wnzl-snow/version" +import "mocksnow/version" templ Header() { - - wnzl-snow API + + mocksnow API diff --git a/components/core/header_templ.go b/components/core/header_templ.go index aa4fd5f..1c6c909 100644 --- a/components/core/header_templ.go +++ b/components/core/header_templ.go @@ -8,7 +8,7 @@ package core import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "wnzl-snow/version" +import "mocksnow/version" func Header() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { @@ -31,7 +31,7 @@ func Header() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("wnzl-snow APImocksnow API diff --git a/components/views/incoming.templ b/components/views/incoming.templ index 77cb0fd..40b86d6 100644 --- a/components/views/incoming.templ +++ b/components/views/incoming.templ @@ -2,7 +2,7 @@ package views import ( "strconv" - "wnzl-snow/components/core" + "mocksnow/components/core" ) type IncomingRow struct { diff --git a/components/views/incoming_templ.go b/components/views/incoming_templ.go index 4d3f5df..8d1affd 100644 --- a/components/views/incoming_templ.go +++ b/components/views/incoming_templ.go @@ -10,7 +10,7 @@ import templruntime "github.com/a-h/templ/runtime" import ( "strconv" - "wnzl-snow/components/core" + "mocksnow/components/core" ) type IncomingRow struct { diff --git a/components/views/index.templ b/components/views/index.templ index 4f3a7db..3f6808a 100644 --- a/components/views/index.templ +++ b/components/views/index.templ @@ -1,7 +1,7 @@ package views import ( - "wnzl-snow/components/core" + "mocksnow/components/core" ) type BuildInfo struct { diff --git a/components/views/index_templ.go b/components/views/index_templ.go index 20e1a4c..4dcf9f8 100644 --- a/components/views/index_templ.go +++ b/components/views/index_templ.go @@ -9,7 +9,7 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "wnzl-snow/components/core" + "mocksnow/components/core" ) type BuildInfo struct { diff --git a/db/db.go b/db/db.go index 9f213ad..a5417c8 100644 --- a/db/db.go +++ b/db/db.go @@ -5,7 +5,7 @@ import ( "embed" "log/slog" "reflect" - "wnzl-snow/db/queries" + "mocksnow/db/queries" "github.com/jmoiron/sqlx" "github.com/pressly/goose/v3" diff --git a/db/local.go b/db/local.go index 696a885..fafb781 100644 --- a/db/local.go +++ b/db/local.go @@ -4,7 +4,7 @@ import ( "database/sql" "fmt" "log/slog" - "wnzl-snow/db/queries" + "mocksnow/db/queries" //_ "github.com/tursodatabase/libsql-client-go/libsql" "github.com/jmoiron/sqlx" diff --git a/db/queries/models.go b/db/queries/models.go index 22229ab..b72a653 100644 --- a/db/queries/models.go +++ b/db/queries/models.go @@ -8,71 +8,19 @@ import ( "database/sql" ) -type Events struct { - Eid int64 - CloudId string - Source string - EventTime sql.NullInt64 - ChainId string - VmId sql.NullString - EventKey sql.NullString - DatacenterName sql.NullString - ComputeResourceName sql.NullString - UserName sql.NullString - Processed int64 - DatacenterId sql.NullString - ComputeResourceId sql.NullString - VmName sql.NullString - EventType sql.NullString -} - -type Inventory struct { - Iid int64 - Name string - Vcenter string - VmId sql.NullString - EventKey sql.NullString - CloudId sql.NullString - CreationTime sql.NullInt64 - DeletionTime sql.NullInt64 - ResourcePool sql.NullString - VmType sql.NullString - Datacenter sql.NullString - Cluster sql.NullString - Folder sql.NullString - ProvisionedDisk sql.NullFloat64 - InitialVcpus sql.NullInt64 - InitialRam sql.NullInt64 - IsTemplate interface{} - PoweredOn interface{} - SrmPlaceholder interface{} - VmUuid sql.NullString -} - -type InventoryHistory struct { - Hid int64 - InventoryId sql.NullInt64 - ReportDate sql.NullInt64 - UpdateTime sql.NullInt64 - PreviousVcpus sql.NullInt64 - PreviousRam sql.NullInt64 - PreviousResourcePool sql.NullString - PreviousProvisionedDisk sql.NullFloat64 -} - -type Updates struct { - Uid int64 - InventoryId sql.NullInt64 - UpdateTime sql.NullInt64 - UpdateType string - NewVcpus sql.NullInt64 - NewRam sql.NullInt64 - NewResourcePool sql.NullString - EventKey sql.NullString - EventId sql.NullString - NewProvisionedDisk sql.NullFloat64 - UserName sql.NullString - PlaceholderChange sql.NullString - Name sql.NullString - RawChangeString []byte -} +type Incoming struct { + ID int64 + IncidentNumber sql.NullString + Description sql.NullString + ShortDescription sql.NullString + Urgency sql.NullString + Impact sql.NullString + State sql.NullString + ExternalID sql.NullString + WorkNotes sql.NullString + AssignmentGroup sql.NullString + AssignedTo sql.NullString + Category sql.NullString + Subcategory sql.NullString + CreatedAt sql.NullTime +} \ No newline at end of file diff --git a/db/queries/query.sql b/db/queries/query.sql index 13475eb..2ac1991 100644 --- a/db/queries/query.sql +++ b/db/queries/query.sql @@ -1,121 +1,12 @@ --- name: ListInventory :many -SELECT * FROM "Inventory" -ORDER BY "Name"; +-- name: ListIncoming :many +SELECT * FROM "Incoming" +ORDER BY "id"; --- name: GetReportInventory :many -SELECT * FROM "Inventory" -ORDER BY "CreationTime"; --- name: GetInventoryByName :many -SELECT * FROM "Inventory" -WHERE "Name" = ?; - --- name: GetInventoryByVcenter :many -SELECT * FROM "Inventory" -WHERE "Vcenter" = ?; - --- name: GetInventoryVmId :one -SELECT * FROM "Inventory" -WHERE "VmId" = sqlc.arg('vmId') AND "Datacenter" = sqlc.arg('datacenterName'); - --- name: GetInventoryVmUuid :one -SELECT * FROM "Inventory" -WHERE "VmUuid" = sqlc.arg('vmUuid') AND "Datacenter" = sqlc.arg('datacenterName'); - --- name: GetInventoryVcUrl :many -SELECT * FROM "Inventory" -WHERE "Vcenter" = sqlc.arg('vc'); - --- name: GetInventoryEventId :one -SELECT * FROM "Inventory" -WHERE "CloudId" = ? LIMIT 1; - --- name: CreateInventory :one -INSERT INTO "Inventory" ( - "Name", "Vcenter", "VmId", "VmUuid", "EventKey", "CloudId", "CreationTime", "ResourcePool", "VmType", "IsTemplate", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder", "PoweredOn" -) VALUES( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? -) -RETURNING *; - --- name: InventoryUpdate :exec -UPDATE "Inventory" -SET "VmUuid" = sqlc.arg('uuid'), "SrmPlaceholder" = sqlc.arg('srmPlaceholder') -WHERE "Iid" = sqlc.arg('iid'); - --- name: InventoryMarkDeleted :exec -UPDATE "Inventory" -SET "DeletionTime" = sqlc.arg('deletionTime') -WHERE "VmId" = sqlc.arg('vmId') AND "Datacenter" = sqlc.arg('datacenterName'); - --- name: InventoryCleanup :exec -DELETE FROM "Inventory" -WHERE "VmId" = sqlc.arg('vmId') AND "Datacenter" = sqlc.arg('datacenterName') -RETURNING *; - --- name: InventoryCleanupVcenter :exec -DELETE FROM "Inventory" -WHERE "Vcenter" = sqlc.arg('vc') -RETURNING *; - --- name: InventoryCleanupTemplates :exec -DELETE FROM "Inventory" -WHERE "IsTemplate" = "TRUE" -RETURNING *; - --- name: CreateUpdate :one -INSERT INTO "Updates" ( - "InventoryId", "Name", "EventKey", "EventId", "UpdateTime", "UpdateType", "NewVcpus", "NewRam", "NewResourcePool", "NewProvisionedDisk", "UserName", "PlaceholderChange", "RawChangeString" +-- name: CreateIncoming :one +INSERT INTO "Incoming" ( + "incident_number", "description", "short_description", "urgency", "impact", "state", "external_id", "work_notes", "assignment_group", "assigned_to", "category", "subcategory", "created_at" ) VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -RETURNING *; - --- name: GetReportUpdates :many -SELECT * FROM "Updates" -ORDER BY "UpdateTime"; - --- name: GetVmUpdates :many -SELECT * FROM "Updates" -WHERE "UpdateType" = sqlc.arg('updateType') AND "InventoryId" = sqlc.arg('InventoryId'); - --- name: CleanupUpdates :exec -DELETE FROM "Updates" -WHERE "UpdateType" = sqlc.arg('updateType') AND "UpdateTime" <= sqlc.arg('updateTime') -RETURNING *; - --- name: CleanupUpdatesNullVm :exec -DELETE FROM "Updates" -WHERE "InventoryId" IS NULL -RETURNING *; - --- name: CreateEvent :one -INSERT INTO "Events" ( - "CloudId", "Source", "EventTime", "ChainId", "VmId", "VmName", "EventType", "EventKey", "DatacenterId", "DatacenterName", "ComputeResourceId", "ComputeResourceName", "UserName" -) VALUES( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? -) -RETURNING *; - --- name: ListEvents :many -SELECT * FROM "Events" -ORDER BY "EventTime"; - --- name: ListUnprocessedEvents :many -SELECT * FROM "Events" -WHERE "Processed" = 0 -AND "EventTime" > sqlc.arg('eventTime') -ORDER BY "EventTime"; - --- name: UpdateEventsProcessed :exec -UPDATE "Events" -SET "Processed" = 1 -WHERE "Eid" = sqlc.arg('eid'); - --- name: CreateInventoryHistory :one -INSERT INTO "InventoryHistory" ( - "InventoryId", "ReportDate", "UpdateTime", "PreviousVcpus", "PreviousRam", "PreviousResourcePool", "PreviousProvisionedDisk" -) VALUES( - ?, ?, ?, ?, ?, ?, ? -) RETURNING *; \ No newline at end of file diff --git a/db/queries/query.sql.go b/db/queries/query.sql.go index 3d59c2b..00dd482 100644 --- a/db/queries/query.sql.go +++ b/db/queries/query.sql.go @@ -10,311 +10,96 @@ import ( "database/sql" ) -const cleanupUpdates = `-- name: CleanupUpdates :exec -DELETE FROM "Updates" -WHERE "UpdateType" = ?1 AND "UpdateTime" <= ?2 -RETURNING Uid, InventoryId, UpdateTime, UpdateType, NewVcpus, NewRam, NewResourcePool, EventKey, EventId, NewProvisionedDisk, UserName, PlaceholderChange, Name, RawChangeString -` - -type CleanupUpdatesParams struct { - UpdateType string - UpdateTime sql.NullInt64 -} - -func (q *Queries) CleanupUpdates(ctx context.Context, arg CleanupUpdatesParams) error { - _, err := q.db.ExecContext(ctx, cleanupUpdates, arg.UpdateType, arg.UpdateTime) - return err -} - -const cleanupUpdatesNullVm = `-- name: CleanupUpdatesNullVm :exec -DELETE FROM "Updates" -WHERE "InventoryId" IS NULL -RETURNING Uid, InventoryId, UpdateTime, UpdateType, NewVcpus, NewRam, NewResourcePool, EventKey, EventId, NewProvisionedDisk, UserName, PlaceholderChange, Name, RawChangeString -` - -func (q *Queries) CleanupUpdatesNullVm(ctx context.Context) error { - _, err := q.db.ExecContext(ctx, cleanupUpdatesNullVm) - return err -} - -const createEvent = `-- name: CreateEvent :one -INSERT INTO "Events" ( - "CloudId", "Source", "EventTime", "ChainId", "VmId", "VmName", "EventType", "EventKey", "DatacenterId", "DatacenterName", "ComputeResourceId", "ComputeResourceName", "UserName" +const createIncoming = `-- name: CreateIncoming :one +INSERT INTO "Incoming" ( + "incident_number", "description", "short_description", "urgency", "impact", "state", "external_id", "work_notes", "assignment_group", "assigned_to", "category", "subcategory", "created_at" ) VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) -RETURNING Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType +RETURNING id, incident_number, description, short_description, urgency, impact, state, external_id, work_notes, assignment_group, assigned_to, category, subcategory, created_at ` -type CreateEventParams struct { - CloudId string - Source string - EventTime sql.NullInt64 - ChainId string - VmId sql.NullString - VmName sql.NullString - EventType sql.NullString - EventKey sql.NullString - DatacenterId sql.NullString - DatacenterName sql.NullString - ComputeResourceId sql.NullString - ComputeResourceName sql.NullString - UserName sql.NullString +type CreateIncomingParams struct { + IncidentNumber sql.NullString + Description sql.NullString + ShortDescription sql.NullString + Urgency sql.NullString + Impact sql.NullString + State sql.NullString + ExternalID sql.NullString + WorkNotes sql.NullString + AssignmentGroup sql.NullString + AssignedTo sql.NullString + Category sql.NullString + Subcategory sql.NullString + CreatedAt sql.NullTime } -func (q *Queries) CreateEvent(ctx context.Context, arg CreateEventParams) (Events, error) { - row := q.db.QueryRowContext(ctx, createEvent, - arg.CloudId, - arg.Source, - arg.EventTime, - arg.ChainId, - arg.VmId, - arg.VmName, - arg.EventType, - arg.EventKey, - arg.DatacenterId, - arg.DatacenterName, - arg.ComputeResourceId, - arg.ComputeResourceName, - arg.UserName, +func (q *Queries) CreateIncoming(ctx context.Context, arg CreateIncomingParams) (Incoming, error) { + row := q.db.QueryRowContext(ctx, createIncoming, + arg.IncidentNumber, + arg.Description, + arg.ShortDescription, + arg.Urgency, + arg.Impact, + arg.State, + arg.ExternalID, + arg.WorkNotes, + arg.AssignmentGroup, + arg.AssignedTo, + arg.Category, + arg.Subcategory, + arg.CreatedAt, ) - var i Events + var i Incoming err := row.Scan( - &i.Eid, - &i.CloudId, - &i.Source, - &i.EventTime, - &i.ChainId, - &i.VmId, - &i.EventKey, - &i.DatacenterName, - &i.ComputeResourceName, - &i.UserName, - &i.Processed, - &i.DatacenterId, - &i.ComputeResourceId, - &i.VmName, - &i.EventType, + &i.ID, + &i.IncidentNumber, + &i.Description, + &i.ShortDescription, + &i.Urgency, + &i.Impact, + &i.State, + &i.ExternalID, + &i.WorkNotes, + &i.AssignmentGroup, + &i.AssignedTo, + &i.Category, + &i.Subcategory, + &i.CreatedAt, ) return i, err } -const createInventory = `-- name: CreateInventory :one -INSERT INTO "Inventory" ( - "Name", "Vcenter", "VmId", "VmUuid", "EventKey", "CloudId", "CreationTime", "ResourcePool", "VmType", "IsTemplate", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder", "PoweredOn" -) VALUES( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? -) -RETURNING Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid +const listIncoming = `-- name: ListIncoming :many +SELECT id, incident_number, description, short_description, urgency, impact, state, external_id, work_notes, assignment_group, assigned_to, category, subcategory, created_at FROM "Incoming" +ORDER BY "id" ` -type CreateInventoryParams struct { - Name string - Vcenter string - VmId sql.NullString - VmUuid sql.NullString - EventKey sql.NullString - CloudId sql.NullString - CreationTime sql.NullInt64 - ResourcePool sql.NullString - VmType sql.NullString - IsTemplate interface{} - Datacenter sql.NullString - Cluster sql.NullString - Folder sql.NullString - ProvisionedDisk sql.NullFloat64 - InitialVcpus sql.NullInt64 - InitialRam sql.NullInt64 - SrmPlaceholder interface{} - PoweredOn interface{} -} - -func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams) (Inventory, error) { - row := q.db.QueryRowContext(ctx, createInventory, - arg.Name, - arg.Vcenter, - arg.VmId, - arg.VmUuid, - arg.EventKey, - arg.CloudId, - arg.CreationTime, - arg.ResourcePool, - arg.VmType, - arg.IsTemplate, - arg.Datacenter, - arg.Cluster, - arg.Folder, - arg.ProvisionedDisk, - arg.InitialVcpus, - arg.InitialRam, - arg.SrmPlaceholder, - arg.PoweredOn, - ) - var i Inventory - err := row.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ) - return i, err -} - -const createInventoryHistory = `-- name: CreateInventoryHistory :one -INSERT INTO "InventoryHistory" ( - "InventoryId", "ReportDate", "UpdateTime", "PreviousVcpus", "PreviousRam", "PreviousResourcePool", "PreviousProvisionedDisk" -) VALUES( - ?, ?, ?, ?, ?, ?, ? -) -RETURNING Hid, InventoryId, ReportDate, UpdateTime, PreviousVcpus, PreviousRam, PreviousResourcePool, PreviousProvisionedDisk -` - -type CreateInventoryHistoryParams struct { - InventoryId sql.NullInt64 - ReportDate sql.NullInt64 - UpdateTime sql.NullInt64 - PreviousVcpus sql.NullInt64 - PreviousRam sql.NullInt64 - PreviousResourcePool sql.NullString - PreviousProvisionedDisk sql.NullFloat64 -} - -func (q *Queries) CreateInventoryHistory(ctx context.Context, arg CreateInventoryHistoryParams) (InventoryHistory, error) { - row := q.db.QueryRowContext(ctx, createInventoryHistory, - arg.InventoryId, - arg.ReportDate, - arg.UpdateTime, - arg.PreviousVcpus, - arg.PreviousRam, - arg.PreviousResourcePool, - arg.PreviousProvisionedDisk, - ) - var i InventoryHistory - err := row.Scan( - &i.Hid, - &i.InventoryId, - &i.ReportDate, - &i.UpdateTime, - &i.PreviousVcpus, - &i.PreviousRam, - &i.PreviousResourcePool, - &i.PreviousProvisionedDisk, - ) - return i, err -} - -const createUpdate = `-- name: CreateUpdate :one -INSERT INTO "Updates" ( - "InventoryId", "Name", "EventKey", "EventId", "UpdateTime", "UpdateType", "NewVcpus", "NewRam", "NewResourcePool", "NewProvisionedDisk", "UserName", "PlaceholderChange", "RawChangeString" -) VALUES( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? -) -RETURNING Uid, InventoryId, UpdateTime, UpdateType, NewVcpus, NewRam, NewResourcePool, EventKey, EventId, NewProvisionedDisk, UserName, PlaceholderChange, Name, RawChangeString -` - -type CreateUpdateParams struct { - InventoryId sql.NullInt64 - Name sql.NullString - EventKey sql.NullString - EventId sql.NullString - UpdateTime sql.NullInt64 - UpdateType string - NewVcpus sql.NullInt64 - NewRam sql.NullInt64 - NewResourcePool sql.NullString - NewProvisionedDisk sql.NullFloat64 - UserName sql.NullString - PlaceholderChange sql.NullString - RawChangeString []byte -} - -func (q *Queries) CreateUpdate(ctx context.Context, arg CreateUpdateParams) (Updates, error) { - row := q.db.QueryRowContext(ctx, createUpdate, - arg.InventoryId, - arg.Name, - arg.EventKey, - arg.EventId, - arg.UpdateTime, - arg.UpdateType, - arg.NewVcpus, - arg.NewRam, - arg.NewResourcePool, - arg.NewProvisionedDisk, - arg.UserName, - arg.PlaceholderChange, - arg.RawChangeString, - ) - var i Updates - err := row.Scan( - &i.Uid, - &i.InventoryId, - &i.UpdateTime, - &i.UpdateType, - &i.NewVcpus, - &i.NewRam, - &i.NewResourcePool, - &i.EventKey, - &i.EventId, - &i.NewProvisionedDisk, - &i.UserName, - &i.PlaceholderChange, - &i.Name, - &i.RawChangeString, - ) - return i, err -} - -const getInventoryByName = `-- name: GetInventoryByName :many -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "Name" = ? -` - -func (q *Queries) GetInventoryByName(ctx context.Context, name string) ([]Inventory, error) { - rows, err := q.db.QueryContext(ctx, getInventoryByName, name) +func (q *Queries) ListIncoming(ctx context.Context) ([]Incoming, error) { + rows, err := q.db.QueryContext(ctx, listIncoming) if err != nil { return nil, err } defer rows.Close() - var items []Inventory + var items []Incoming for rows.Next() { - var i Inventory + var i Incoming if err := rows.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, + &i.ID, + &i.IncidentNumber, + &i.Description, + &i.ShortDescription, + &i.Urgency, + &i.Impact, + &i.State, + &i.ExternalID, + &i.WorkNotes, + &i.AssignmentGroup, + &i.AssignedTo, + &i.Category, + &i.Subcategory, + &i.CreatedAt, ); err != nil { return nil, err } @@ -328,572 +113,3 @@ func (q *Queries) GetInventoryByName(ctx context.Context, name string) ([]Invent } return items, nil } - -const getInventoryByVcenter = `-- name: GetInventoryByVcenter :many -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "Vcenter" = ? -` - -func (q *Queries) GetInventoryByVcenter(ctx context.Context, vcenter string) ([]Inventory, error) { - rows, err := q.db.QueryContext(ctx, getInventoryByVcenter, vcenter) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Inventory - for rows.Next() { - var i Inventory - if err := rows.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getInventoryEventId = `-- name: GetInventoryEventId :one -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "CloudId" = ? LIMIT 1 -` - -func (q *Queries) GetInventoryEventId(ctx context.Context, cloudid sql.NullString) (Inventory, error) { - row := q.db.QueryRowContext(ctx, getInventoryEventId, cloudid) - var i Inventory - err := row.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ) - return i, err -} - -const getInventoryVcUrl = `-- name: GetInventoryVcUrl :many -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "Vcenter" = ?1 -` - -func (q *Queries) GetInventoryVcUrl(ctx context.Context, vc string) ([]Inventory, error) { - rows, err := q.db.QueryContext(ctx, getInventoryVcUrl, vc) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Inventory - for rows.Next() { - var i Inventory - if err := rows.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getInventoryVmId = `-- name: GetInventoryVmId :one -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "VmId" = ?1 AND "Datacenter" = ?2 -` - -type GetInventoryVmIdParams struct { - VmId sql.NullString - DatacenterName sql.NullString -} - -func (q *Queries) GetInventoryVmId(ctx context.Context, arg GetInventoryVmIdParams) (Inventory, error) { - row := q.db.QueryRowContext(ctx, getInventoryVmId, arg.VmId, arg.DatacenterName) - var i Inventory - err := row.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ) - return i, err -} - -const getInventoryVmUuid = `-- name: GetInventoryVmUuid :one -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -WHERE "VmUuid" = ?1 AND "Datacenter" = ?2 -` - -type GetInventoryVmUuidParams struct { - VmUuid sql.NullString - DatacenterName sql.NullString -} - -func (q *Queries) GetInventoryVmUuid(ctx context.Context, arg GetInventoryVmUuidParams) (Inventory, error) { - row := q.db.QueryRowContext(ctx, getInventoryVmUuid, arg.VmUuid, arg.DatacenterName) - var i Inventory - err := row.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ) - return i, err -} - -const getReportInventory = `-- name: GetReportInventory :many -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -ORDER BY "CreationTime" -` - -func (q *Queries) GetReportInventory(ctx context.Context) ([]Inventory, error) { - rows, err := q.db.QueryContext(ctx, getReportInventory) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Inventory - for rows.Next() { - var i Inventory - if err := rows.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getReportUpdates = `-- name: GetReportUpdates :many -SELECT Uid, InventoryId, UpdateTime, UpdateType, NewVcpus, NewRam, NewResourcePool, EventKey, EventId, NewProvisionedDisk, UserName, PlaceholderChange, Name, RawChangeString FROM "Updates" -ORDER BY "UpdateTime" -` - -func (q *Queries) GetReportUpdates(ctx context.Context) ([]Updates, error) { - rows, err := q.db.QueryContext(ctx, getReportUpdates) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Updates - for rows.Next() { - var i Updates - if err := rows.Scan( - &i.Uid, - &i.InventoryId, - &i.UpdateTime, - &i.UpdateType, - &i.NewVcpus, - &i.NewRam, - &i.NewResourcePool, - &i.EventKey, - &i.EventId, - &i.NewProvisionedDisk, - &i.UserName, - &i.PlaceholderChange, - &i.Name, - &i.RawChangeString, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getVmUpdates = `-- name: GetVmUpdates :many -SELECT Uid, InventoryId, UpdateTime, UpdateType, NewVcpus, NewRam, NewResourcePool, EventKey, EventId, NewProvisionedDisk, UserName, PlaceholderChange, Name, RawChangeString FROM "Updates" -WHERE "UpdateType" = ?1 AND "InventoryId" = ?2 -` - -type GetVmUpdatesParams struct { - UpdateType string - InventoryId sql.NullInt64 -} - -func (q *Queries) GetVmUpdates(ctx context.Context, arg GetVmUpdatesParams) ([]Updates, error) { - rows, err := q.db.QueryContext(ctx, getVmUpdates, arg.UpdateType, arg.InventoryId) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Updates - for rows.Next() { - var i Updates - if err := rows.Scan( - &i.Uid, - &i.InventoryId, - &i.UpdateTime, - &i.UpdateType, - &i.NewVcpus, - &i.NewRam, - &i.NewResourcePool, - &i.EventKey, - &i.EventId, - &i.NewProvisionedDisk, - &i.UserName, - &i.PlaceholderChange, - &i.Name, - &i.RawChangeString, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const inventoryCleanup = `-- name: InventoryCleanup :exec -DELETE FROM "Inventory" -WHERE "VmId" = ?1 AND "Datacenter" = ?2 -RETURNING Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid -` - -type InventoryCleanupParams struct { - VmId sql.NullString - DatacenterName sql.NullString -} - -func (q *Queries) InventoryCleanup(ctx context.Context, arg InventoryCleanupParams) error { - _, err := q.db.ExecContext(ctx, inventoryCleanup, arg.VmId, arg.DatacenterName) - return err -} - -const inventoryCleanupTemplates = `-- name: InventoryCleanupTemplates :exec -DELETE FROM "Inventory" -WHERE "IsTemplate" = "TRUE" -RETURNING Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid -` - -func (q *Queries) InventoryCleanupTemplates(ctx context.Context) error { - _, err := q.db.ExecContext(ctx, inventoryCleanupTemplates) - return err -} - -const inventoryCleanupVcenter = `-- name: InventoryCleanupVcenter :exec -DELETE FROM "Inventory" -WHERE "Vcenter" = ?1 -RETURNING Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid -` - -func (q *Queries) InventoryCleanupVcenter(ctx context.Context, vc string) error { - _, err := q.db.ExecContext(ctx, inventoryCleanupVcenter, vc) - return err -} - -const inventoryMarkDeleted = `-- name: InventoryMarkDeleted :exec -UPDATE "Inventory" -SET "DeletionTime" = ?1 -WHERE "VmId" = ?2 AND "Datacenter" = ?3 -` - -type InventoryMarkDeletedParams struct { - DeletionTime sql.NullInt64 - VmId sql.NullString - DatacenterName sql.NullString -} - -func (q *Queries) InventoryMarkDeleted(ctx context.Context, arg InventoryMarkDeletedParams) error { - _, err := q.db.ExecContext(ctx, inventoryMarkDeleted, arg.DeletionTime, arg.VmId, arg.DatacenterName) - return err -} - -const inventoryUpdate = `-- name: InventoryUpdate :exec -UPDATE "Inventory" -SET "VmUuid" = ?1, "SrmPlaceholder" = ?2 -WHERE "Iid" = ?3 -` - -type InventoryUpdateParams struct { - Uuid sql.NullString - SrmPlaceholder interface{} - Iid int64 -} - -func (q *Queries) InventoryUpdate(ctx context.Context, arg InventoryUpdateParams) error { - _, err := q.db.ExecContext(ctx, inventoryUpdate, arg.Uuid, arg.SrmPlaceholder, arg.Iid) - return err -} - -const listEvents = `-- name: ListEvents :many -SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType FROM "Events" -ORDER BY "EventTime" -` - -func (q *Queries) ListEvents(ctx context.Context) ([]Events, error) { - rows, err := q.db.QueryContext(ctx, listEvents) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Events - for rows.Next() { - var i Events - if err := rows.Scan( - &i.Eid, - &i.CloudId, - &i.Source, - &i.EventTime, - &i.ChainId, - &i.VmId, - &i.EventKey, - &i.DatacenterName, - &i.ComputeResourceName, - &i.UserName, - &i.Processed, - &i.DatacenterId, - &i.ComputeResourceId, - &i.VmName, - &i.EventType, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listInventory = `-- name: ListInventory :many -SELECT Iid, Name, Vcenter, VmId, EventKey, CloudId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, IsTemplate, PoweredOn, SrmPlaceholder, VmUuid FROM "Inventory" -ORDER BY "Name" -` - -func (q *Queries) ListInventory(ctx context.Context) ([]Inventory, error) { - rows, err := q.db.QueryContext(ctx, listInventory) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Inventory - for rows.Next() { - var i Inventory - if err := rows.Scan( - &i.Iid, - &i.Name, - &i.Vcenter, - &i.VmId, - &i.EventKey, - &i.CloudId, - &i.CreationTime, - &i.DeletionTime, - &i.ResourcePool, - &i.VmType, - &i.Datacenter, - &i.Cluster, - &i.Folder, - &i.ProvisionedDisk, - &i.InitialVcpus, - &i.InitialRam, - &i.IsTemplate, - &i.PoweredOn, - &i.SrmPlaceholder, - &i.VmUuid, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listUnprocessedEvents = `-- name: ListUnprocessedEvents :many -SELECT Eid, CloudId, Source, EventTime, ChainId, VmId, EventKey, DatacenterName, ComputeResourceName, UserName, Processed, DatacenterId, ComputeResourceId, VmName, EventType FROM "Events" -WHERE "Processed" = 0 -AND "EventTime" > ?1 -ORDER BY "EventTime" -` - -func (q *Queries) ListUnprocessedEvents(ctx context.Context, eventtime sql.NullInt64) ([]Events, error) { - rows, err := q.db.QueryContext(ctx, listUnprocessedEvents, eventtime) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Events - for rows.Next() { - var i Events - if err := rows.Scan( - &i.Eid, - &i.CloudId, - &i.Source, - &i.EventTime, - &i.ChainId, - &i.VmId, - &i.EventKey, - &i.DatacenterName, - &i.ComputeResourceName, - &i.UserName, - &i.Processed, - &i.DatacenterId, - &i.ComputeResourceId, - &i.VmName, - &i.EventType, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const updateEventsProcessed = `-- name: UpdateEventsProcessed :exec -UPDATE "Events" -SET "Processed" = 1 -WHERE "Eid" = ?1 -` - -func (q *Queries) UpdateEventsProcessed(ctx context.Context, eid int64) error { - _, err := q.db.ExecContext(ctx, updateEventsProcessed, eid) - return err -} diff --git a/dist/.!31629!.DS_Store b/dist/.!31629!.DS_Store new file mode 100644 index 0000000..e69de29 diff --git a/dist/assets/.!31631!.DS_Store b/dist/assets/.!31631!.DS_Store new file mode 100644 index 0000000..e69de29 diff --git a/go.mod b/go.mod index 00c5f6e..d6ea523 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module wnzl-snow +module mocksnow go 1.24.1 diff --git a/internal/report/create.go b/internal/report/create.go deleted file mode 100644 index dd10e39..0000000 --- a/internal/report/create.go +++ /dev/null @@ -1,303 +0,0 @@ -package report - -import ( - "bytes" - "context" - "database/sql" - "fmt" - "log/slog" - "reflect" - "strconv" - "time" - "unicode/utf8" - "wnzl-snow/db" - - "github.com/xuri/excelize/v2" -) - -func CreateInventoryReport(logger *slog.Logger, Database db.Database, ctx context.Context) ([]byte, error) { - //var xlsx *excelize.File - sheetName := "Inventory Report" - var buffer bytes.Buffer - var cell string - - logger.Debug("Querying inventory table") - results, err := Database.Queries().GetReportInventory(ctx) - if err != nil { - logger.Error("Unable to query inventory table", "error", err) - return nil, err - } - - if len(results) == 0 { - logger.Error("Empty inventory results") - return nil, fmt.Errorf("Empty inventory results") - } - - // Create excel workbook - xlsx := excelize.NewFile() - err = xlsx.SetSheetName("Sheet1", sheetName) - if err != nil { - logger.Error("Error setting sheet name", "error", err, "sheet_name", sheetName) - return nil, err - } - - // Set the document properties - err = xlsx.SetDocProps(&excelize.DocProperties{ - Creator: "json2excel", - Created: time.Now().Format(time.RFC3339), - }) - if err != nil { - logger.Error("Error setting document properties", "error", err, "sheet_name", sheetName) - } - - // Use reflection to determine column headings from the first item - firstItem := results[0] - v := reflect.ValueOf(firstItem) - typeOfItem := v.Type() - - // Create column headers dynamically - for i := 0; i < v.NumField(); i++ { - column := string(rune('A'+i)) + "1" // A1, B1, C1, etc. - xlsx.SetCellValue(sheetName, column, typeOfItem.Field(i).Name) - } - - // Set autofilter on heading row - cell, _ = excelize.CoordinatesToCellName(v.NumField(), 1) - filterRange := "A1:" + cell - logger.Debug("Setting autofilter", "range", filterRange) - // As per docs any filters applied need to be manually processed by us (eg hiding rows with blanks) - err = xlsx.AutoFilter(sheetName, filterRange, nil) - if err != nil { - logger.Error("Error setting autofilter", "error", err) - } - - // Bold top row - headerStyle, err := xlsx.NewStyle(&excelize.Style{ - Font: &excelize.Font{ - Bold: true, - }, - }) - if err != nil { - logger.Error("Error generating header style", "error", err) - } else { - err = xlsx.SetRowStyle(sheetName, 1, 1, headerStyle) - if err != nil { - logger.Error("Error setting header style", "error", err) - } - } - - // Populate the Excel file with data from the Inventory table - for i, item := range results { - v = reflect.ValueOf(item) - for j := 0; j < v.NumField(); j++ { - column := string(rune('A'+j)) + strconv.Itoa(i+2) // Start from row 2 - value := getFieldValue(v.Field(j)) - xlsx.SetCellValue(sheetName, column, value) - } - } - - // Freeze top row - err = xlsx.SetPanes(sheetName, &excelize.Panes{ - Freeze: true, - Split: false, - XSplit: 0, - YSplit: 1, - TopLeftCell: "A2", - ActivePane: "bottomLeft", - Selection: []excelize.Selection{ - {SQRef: "A2", ActiveCell: "A2", Pane: "bottomLeft"}, - }, - }) - if err != nil { - logger.Error("Error freezing top row", "error", err) - } - - // Set column autowidth - /* - err = SetColAutoWidth(xlsx, sheetName) - if err != nil { - fmt.Printf("Error setting auto width : '%s'\n", err) - } - */ - - // Save the Excel file into a byte buffer - if err := xlsx.Write(&buffer); err != nil { - return nil, err - } - - return buffer.Bytes(), nil -} - -func CreateUpdatesReport(logger *slog.Logger, Database db.Database, ctx context.Context) ([]byte, error) { - //var xlsx *excelize.File - sheetName := "Updates Report" - var buffer bytes.Buffer - var cell string - - logger.Debug("Querying updates table") - results, err := Database.Queries().GetReportUpdates(ctx) - if err != nil { - logger.Error("Unable to query updates table", "error", err) - return nil, err - } - - if len(results) == 0 { - logger.Error("Empty updates results") - return nil, fmt.Errorf("Empty updates results") - } - - // Create excel workbook - xlsx := excelize.NewFile() - err = xlsx.SetSheetName("Sheet1", sheetName) - if err != nil { - logger.Error("Error setting sheet name", "error", err, "sheet_name", sheetName) - return nil, err - } - - // Set the document properties - err = xlsx.SetDocProps(&excelize.DocProperties{ - Creator: "json2excel", - Created: time.Now().Format(time.RFC3339), - }) - if err != nil { - logger.Error("Error setting document properties", "error", err, "sheet_name", sheetName) - } - - // Use reflection to determine column headings from the first item - firstItem := results[0] - v := reflect.ValueOf(firstItem) - typeOfItem := v.Type() - - // Create column headers dynamically - for i := 0; i < v.NumField(); i++ { - column := string(rune('A'+i)) + "1" // A1, B1, C1, etc. - xlsx.SetCellValue(sheetName, column, typeOfItem.Field(i).Name) - } - - // Set autofilter on heading row - cell, _ = excelize.CoordinatesToCellName(v.NumField(), 1) - filterRange := "A1:" + cell - logger.Debug("Setting autofilter", "range", filterRange) - // As per docs any filters applied need to be manually processed by us (eg hiding rows with blanks) - err = xlsx.AutoFilter(sheetName, filterRange, nil) - if err != nil { - logger.Error("Error setting autofilter", "error", err) - } - - // Bold top row - headerStyle, err := xlsx.NewStyle(&excelize.Style{ - Font: &excelize.Font{ - Bold: true, - }, - }) - if err != nil { - logger.Error("Error generating header style", "error", err) - } else { - err = xlsx.SetRowStyle(sheetName, 1, 1, headerStyle) - if err != nil { - logger.Error("Error setting header style", "error", err) - } - } - - // Populate the Excel file with data from the Inventory table - for i, item := range results { - v = reflect.ValueOf(item) - for j := 0; j < v.NumField(); j++ { - column := string(rune('A'+j)) + strconv.Itoa(i+2) // Start from row 2 - value := getFieldValue(v.Field(j)) - xlsx.SetCellValue(sheetName, column, value) - } - } - - // Freeze top row - err = xlsx.SetPanes(sheetName, &excelize.Panes{ - Freeze: true, - Split: false, - XSplit: 0, - YSplit: 1, - TopLeftCell: "A2", - ActivePane: "bottomLeft", - Selection: []excelize.Selection{ - {SQRef: "A2", ActiveCell: "A2", Pane: "bottomLeft"}, - }, - }) - if err != nil { - logger.Error("Error freezing top row", "error", err) - } - - // Set column autowidth - /* - err = SetColAutoWidth(xlsx, sheetName) - if err != nil { - fmt.Printf("Error setting auto width : '%s'\n", err) - } - */ - - // Save the Excel file into a byte buffer - if err := xlsx.Write(&buffer); err != nil { - return nil, err - } - - return buffer.Bytes(), nil -} - -// Helper function to get the actual value of sql.Null types -func getFieldValue(field reflect.Value) interface{} { - switch field.Kind() { - case reflect.Struct: - // Handle sql.Null types based on their concrete type - switch field.Interface().(type) { - case sql.NullString: - ns := field.Interface().(sql.NullString) - if ns.Valid { - return ns.String - } - return "" - case sql.NullInt64: - ni := field.Interface().(sql.NullInt64) - if ni.Valid { - return ni.Int64 - } - return -1 - case sql.NullFloat64: - nf := field.Interface().(sql.NullFloat64) - if nf.Valid { - return nf.Float64 - } - return nil - case sql.NullBool: - nb := field.Interface().(sql.NullBool) - if nb.Valid { - return nb.Bool - } - return false - } - } - return field.Interface() // Return the value as-is for non-sql.Null types -} - -// Taken from https://github.com/qax-os/excelize/issues/92#issuecomment-821578446 -func SetColAutoWidth(xlsx *excelize.File, sheetName string) error { - // Autofit all columns according to their text content - cols, err := xlsx.GetCols(sheetName) - if err != nil { - return err - } - for idx, col := range cols { - largestWidth := 0 - for _, rowCell := range col { - cellWidth := utf8.RuneCountInString(rowCell) + 2 // + 2 for margin - if cellWidth > largestWidth { - largestWidth = cellWidth - } - } - //fmt.Printf("SetColAutoWidth calculated largest width for column index '%d' is '%d'\n", idx, largestWidth) - name, err := excelize.ColumnNumberToName(idx + 1) - if err != nil { - return err - } - xlsx.SetColWidth(sheetName, name, name, float64(largestWidth)) - } - // No errors at this point - return nil -} diff --git a/internal/settings/settings.go b/internal/settings/settings.go index 43cb699..56e3f89 100644 --- a/internal/settings/settings.go +++ b/internal/settings/settings.go @@ -5,7 +5,7 @@ import ( "fmt" "log/slog" "os" - "wnzl-snow/internal/utils" + "mocksnow/internal/utils" "gopkg.in/yaml.v2" ) diff --git a/internal/tasks/tasks.go b/internal/tasks/tasks.go index ea243f8..389075d 100644 --- a/internal/tasks/tasks.go +++ b/internal/tasks/tasks.go @@ -2,8 +2,8 @@ package tasks import ( "log/slog" - "wnzl-snow/db" - "wnzl-snow/internal/settings" + "mocksnow/db" + "mocksnow/internal/settings" ) // CronTask stores runtime information to be used by tasks diff --git a/internal/utils/utils.go b/internal/utils/utils.go index 85c09a6..1812646 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -7,6 +7,7 @@ import ( "net" "os" "path/filepath" + "reflect" "time" ) @@ -66,3 +67,40 @@ func SleepWithContext(ctx context.Context, d time.Duration) { case <-timer.C: } } + +// Generic converter using reflection +func ConvertStruct(src interface{}, dst interface{}) { + srcVal := reflect.ValueOf(src) + srcType := reflect.TypeOf(src) + dstVal := reflect.ValueOf(dst).Elem() + + for i := 0; i < srcVal.NumField(); i++ { + srcField := srcVal.Field(i) + dstField := dstVal.FieldByName(srcType.Field(i).Name) + + if !dstField.IsValid() || !dstField.CanSet() { + continue + } + + switch srcField.Type().Name() { + case "NullString": + if srcField.FieldByName("Valid").Bool() { + dstField.SetString(srcField.FieldByName("String").String()) + } else { + dstField.SetString("") + } + case "NullTime": + if srcField.FieldByName("Valid").Bool() { + t := srcField.FieldByName("Time").Interface().(time.Time) + dstField.SetString(t.Format("2006-01-02 15:04:05")) + } else { + dstField.SetString("") + } + default: + // Handle int64 -> int conversion + if srcField.Kind() == reflect.Int64 && dstField.Kind() == reflect.Int { + dstField.SetInt(srcField.Int()) + } + } + } +} diff --git a/main.go b/main.go index a2b9b15..87dbb07 100644 --- a/main.go +++ b/main.go @@ -5,12 +5,12 @@ import ( "os" "runtime" "time" - "wnzl-snow/db" - "wnzl-snow/internal/settings" - utils "wnzl-snow/internal/utils" - "wnzl-snow/log" - "wnzl-snow/server" - "wnzl-snow/server/router" + "mocksnow/db" + "mocksnow/internal/settings" + utils "mocksnow/internal/utils" + "mocksnow/log" + "mocksnow/server" + "mocksnow/server/router" "github.com/go-co-op/gocron/v2" "github.com/joho/godotenv" diff --git a/server/handler/handler.go b/server/handler/handler.go index 4cad9dc..968cb96 100644 --- a/server/handler/handler.go +++ b/server/handler/handler.go @@ -4,9 +4,9 @@ import ( "context" "log/slog" "net/http" - "wnzl-snow/db" - "wnzl-snow/internal/secrets" - "wnzl-snow/internal/settings" + "mocksnow/db" + "mocksnow/internal/secrets" + "mocksnow/internal/settings" "github.com/a-h/templ" ) diff --git a/server/handler/home.go b/server/handler/home.go index 66928a0..4ca7027 100644 --- a/server/handler/home.go +++ b/server/handler/home.go @@ -6,7 +6,7 @@ import ( "net/http" "runtime" "time" - "wnzl-snow/components/views" + "mocksnow/components/views" ) // Home handles the home page. diff --git a/server/handler/incomingReport.go b/server/handler/incomingReport.go index 63e2838..23e7f38 100644 --- a/server/handler/incomingReport.go +++ b/server/handler/incomingReport.go @@ -5,80 +5,16 @@ import ( "encoding/json" "fmt" "net/http" - "wnzl-snow/components/views" + "mocksnow/components/views" + "mocksnow/db/queries" + "mocksnow/internal/utils" ) func (h *Handler) RenderIncomingTable(w http.ResponseWriter, r *http.Request) { - /* - db, err := sql.Open("sqlite3", "./your.db") - if err != nil { - http.Error(w, "Failed to connect to the database", http.StatusInternalServerError) - return - } - defer db.Close() - - query := ` - SELECT - id, - incident_number, - description, - short_description, - urgency, - impact, - state, - external_id, - work_notes, - assignment_group, - assigned_to, - category, - subcategory, - created_at - FROM incoming - ORDER BY created_at DESC - ` - - rows, err := db.Query(query) - if err != nil { - http.Error(w, "Failed to query the database", http.StatusInternalServerError) - return - } - defer rows.Close() - - var results []views.IncomingRow - for rows.Next() { - var row views.IncomingRow - err := rows.Scan( - &row.ID, - &row.IncidentNumber, - &row.Description, - &row.ShortDescription, - &row.Urgency, - &row.Impact, - &row.State, - &row.ExternalID, - &row.WorkNotes, - &row.AssignmentGroup, - &row.AssignedTo, - &row.Category, - &row.Subcategory, - &row.CreatedAt, - ) - if err != nil { - log.Printf("Scan error: %v", err) - continue - } - results = append(results, row) - } - - if err := rows.Err(); err != nil { - log.Printf("Row iteration error: %v", err) - } - */ - ctx := context.Background() h.Logger.Debug("Querying updates table") - results, err := h.Database.Queries().GetReportUpdates(ctx) + results, err := h.Database.Queries().ListIncoming(ctx) if err != nil { h.Logger.Error("Unable to query incoming table", "error", err) w.Header().Set("Content-Type", "application/json") @@ -101,5 +37,16 @@ func (h *Handler) RenderIncomingTable(w http.ResponseWriter, r *http.Request) { return } - views.IncomingTable(results).Render(r.Context(), w) + views.IncomingTable(ConvertIncomingList(results)).Render(r.Context(), w) +} + +// Converts a slice of Incoming to []IncomingRow +func ConvertIncomingList(list []queries.Incoming) []views.IncomingRow { + rows := make([]views.IncomingRow, 0, len(list)) + for _, in := range list { + var row views.IncomingRow + utils.ConvertStruct(in, &row) + rows = append(rows, row) + } + return rows } diff --git a/server/handler/newSnow.go b/server/handler/newSnow.go index c9f7fe8..2d5b1f6 100644 --- a/server/handler/newSnow.go +++ b/server/handler/newSnow.go @@ -1,9 +1,11 @@ package handler import ( + "encoding/json" "fmt" "io" "net/http" + "mocksnow/server/models" ) // NewSnow receives data from the DMSP Snow New() function @@ -19,4 +21,15 @@ func (h *Handler) NewSnow(w http.ResponseWriter, r *http.Request) { } else { h.Logger.Debug("received input data", "length", len(reqBody)) } + + // Decode the JSON body + var inc models.Incident + if err := json.Unmarshal(reqBody, &inc); err != nil { + h.Logger.Error("unable to decode json", "error", err) + http.Error(w, "Invalid JSON body", http.StatusBadRequest) + return + } else { + h.Logger.Debug("successfully decoded JSON") + prettyPrint(inc) + } } diff --git a/server/handler/reportDownload.go b/server/handler/reportDownload.go deleted file mode 100644 index 38b6e31..0000000 --- a/server/handler/reportDownload.go +++ /dev/null @@ -1,61 +0,0 @@ -package handler - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "wnzl-snow/internal/report" -) - -func (h *Handler) InventoryReportDownload(w http.ResponseWriter, r *http.Request) { - - ctx := context.Background() - - // Generate the XLSX report - reportData, err := report.CreateInventoryReport(h.Logger, h.Database, ctx) - if err != nil { - h.Logger.Error("Failed to create report", "error", err) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusInternalServerError) - json.NewEncoder(w).Encode(map[string]string{ - "status": "ERROR", - "message": fmt.Sprintf("Unable to create xlsx report: '%s'", err), - }) - return - } - - // Set HTTP headers to indicate file download - w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") - w.Header().Set("Content-Disposition", `attachment; filename="inventory_report.xlsx"`) - w.Header().Set("File-Name", "inventory_report.xlsx") - - // Write the XLSX file to the HTTP response - w.Write(reportData) -} - -func (h *Handler) UpdateReportDownload(w http.ResponseWriter, r *http.Request) { - - ctx := context.Background() - - // Generate the XLSX report - reportData, err := report.CreateUpdatesReport(h.Logger, h.Database, ctx) - if err != nil { - h.Logger.Error("Failed to create report", "error", err) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusInternalServerError) - json.NewEncoder(w).Encode(map[string]string{ - "status": "ERROR", - "message": fmt.Sprintf("Unable to create xlsx report: '%s'", err), - }) - return - } - - // Set HTTP headers to indicate file download - w.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") - w.Header().Set("Content-Disposition", `attachment; filename="updates_report.xlsx"`) - w.Header().Set("File-Name", "updates_report.xlsx") - - // Write the XLSX file to the HTTP response - w.Write(reportData) -} diff --git a/server/handler/updateCleanup.go b/server/handler/updateCleanup.go deleted file mode 100644 index a122760..0000000 --- a/server/handler/updateCleanup.go +++ /dev/null @@ -1,42 +0,0 @@ -package handler - -import ( - "context" - "fmt" - "net/http" -) - -// VmUpdate receives the CloudEvent for a VM modification or move -func (h *Handler) UpdateCleanup(w http.ResponseWriter, r *http.Request) { - /* - // Get the current time - now := time.Now() - // Get the start of the current day (midnight today) - midnightToday := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location()) - // Convert to Unix time - unixTime := midnightToday.Unix() - - // create the database parameters - params := queries.CleanupUpdatesParams{ - UpdateType: "diskchange", - UpdateTime: sql.NullInt64{Int64: unixTime, Valid: unixTime > 0}, - } - - h.Logger.Debug("database params", "params", params) - err := h.Database.Queries().CleanupUpdates(context.Background(), params) - */ - - //err := h.Database.Queries().InventoryCleanupTemplates(context.Background()) - err := h.Database.Queries().CleanupUpdatesNullVm(context.Background()) - - if err != nil { - h.Logger.Error("Error received cleaning updates table", "error", err) - w.WriteHeader(http.StatusInternalServerError) - fmt.Fprintf(w, "Delete Request unsuccessful %s\n", err) - } else { - h.Logger.Debug("Processed update cleanup successfully") - w.WriteHeader(http.StatusOK) - // TODO - return some JSON - fmt.Fprintf(w, "Processed update cleanup successfully") - } -} diff --git a/server/middleware/cache.go b/server/middleware/cache.go index 355077d..aeb4b67 100644 --- a/server/middleware/cache.go +++ b/server/middleware/cache.go @@ -2,7 +2,7 @@ package middleware import ( "net/http" - "wnzl-snow/version" + "mocksnow/version" ) // CacheMiddleware sets the Cache-Control header based on the version. diff --git a/server/models/models.go b/server/models/models.go index 2841763..1fca7de 100644 --- a/server/models/models.go +++ b/server/models/models.go @@ -1,9 +1,5 @@ package models -import ( - "encoding/json" -) - type IncidentResponse struct { ImportSet string `json:"import_set"` StagingTable string `json:"staging_table"` @@ -37,256 +33,3 @@ type Incident struct { Category string `json:"category,omitempty"` SubCategory string `json:"subcategory,omitempty"` } - -type CloudEventReceived struct { - CloudEvent struct { - ID string `json:"id"` - Specversion string `json:"specversion"` - Source string `json:"source"` - Type string `json:"type"` - Time string `json:"time"` // Modified from time.Time - Data struct { - ChainID int `json:"ChainId"` - ChangeTag string `json:"ChangeTag"` - ComputeResource struct { - ComputeResource struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"ComputeResource"` - Name string `json:"Name"` - } `json:"ComputeResource"` - CreatedTime string `json:"CreatedTime"` // Modified from time.Time - Datacenter struct { - Datacenter struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"Datacenter"` - Name string `json:"Name"` - } `json:"Datacenter"` - Ds interface{} `json:"Ds"` - Dvs interface{} `json:"Dvs"` - FullFormattedMessage string `json:"FullFormattedMessage"` - Host struct { - Host struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"Host"` - Name string `json:"Name"` - } `json:"Host"` - Key int `json:"Key"` - Net interface{} `json:"Net"` - NewParent *CloudEventResourcePool `json:"NewParent"` - OldParent *CloudEventResourcePool `json:"OldParent"` - SrcTemplate *CloudEventVm `json:"SrcTemplate"` - Template bool `json:"Template"` - UserName string `json:"UserName"` - VM struct { - Name string `json:"Name"` - VM struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"Vm"` - } `json:"Vm"` - ConfigSpec *json.RawMessage `json:"configSpec"` - ConfigChanges *ConfigChangesReceived `json:"configChanges"` // Modified to separate struct - } `json:"data"` - } `json:"cloudEvent"` -} - -type CloudEventResourcePool struct { - Name string `json:"Name"` - ResourcePool struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"ResourcePool"` -} - -type CloudEventVm struct { - Name string `json:"Name"` - VM struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"Vm"` -} - -type ImportReceived struct { - Name string `json:"Name"` - Vcenter string `json:"Vcenter"` - VmId string `json:"VmId"` - InitialRam int `json:"InitialRam"` - PowerState int `json:"PowerState"` - CreationTime int `json:"CreationTime"` - InitialVcpus int `json:"InitialVcpus"` - ProvisionedDisk float64 `json:"ProvisionedDisk"` - Folder string `json:"Folder"` - ResourcePool string `json:"ResourcePool"` - Datacenter string `json:"Datacenter"` - Cluster string `json:"Cluster"` -} - -type ConfigChangesReceived struct { - Modified string `json:"modified"` -} - -// This probably needs more fields added so not in use yet -type ConfigSpec struct { - AlternateGuestName string `json:"AlternateGuestName"` - Annotation string `json:"Annotation"` - BootOptions any `json:"BootOptions"` - ChangeTrackingEnabled any `json:"ChangeTrackingEnabled"` - ChangeVersion string `json:"ChangeVersion"` - ConsolePreferences any `json:"ConsolePreferences"` - CPUAffinity any `json:"CpuAffinity"` - CPUAllocation any `json:"CpuAllocation"` - CPUFeatureMask any `json:"CpuFeatureMask"` - CPUHotAddEnabled any `json:"CpuHotAddEnabled"` - CPUHotRemoveEnabled any `json:"CpuHotRemoveEnabled"` - CreateDate string `json:"CreateDate"` // Modified from time.Time - Crypto any `json:"Crypto"` - DeviceChange []struct { - Backing any `json:"Backing"` - Device struct { - Backing *BackingSpec `json:"Backing,omitempty"` - CapacityInBytes int `json:"CapacityInBytes"` - CapacityInKB int `json:"CapacityInKB"` - Connectable struct { - AllowGuestControl bool `json:"AllowGuestControl"` - Connected bool `json:"Connected"` - MigrateConnect string `json:"MigrateConnect"` - StartConnected bool `json:"StartConnected"` - Status string `json:"Status"` - } `json:"Connectable"` - ControllerKey int `json:"ControllerKey"` - DeviceInfo struct { - Label string `json:"Label"` - Summary string `json:"Summary"` - } `json:"DeviceInfo"` - ExternalID string `json:"ExternalId"` - MacAddress string `json:"MacAddress"` - ResourceAllocation struct { - Limit int `json:"Limit"` - Reservation int `json:"Reservation"` - Share struct { - Level string `json:"Level"` - Shares int `json:"Shares"` - } `json:"Share"` - } `json:"ResourceAllocation"` - SlotInfo any `json:"SlotInfo"` - UnitNumber int `json:"UnitNumber"` - UptCompatibilityEnabled bool `json:"UptCompatibilityEnabled"` - WakeOnLanEnabled bool `json:"WakeOnLanEnabled"` - DiskObjectID string `json:"DiskObjectId"` - Iofilter any `json:"Iofilter"` - Key int `json:"Key"` - NativeUnmanagedLinkedClone any `json:"NativeUnmanagedLinkedClone"` - Shares any `json:"Shares"` - StorageIOAllocation struct { - Limit int `json:"Limit"` - Reservation any `json:"Reservation"` - Shares struct { - Level string `json:"Level"` - Shares int `json:"Shares"` - } `json:"Shares"` - } `json:"StorageIOAllocation"` - VDiskID any `json:"VDiskId"` - VFlashCacheConfigInfo any `json:"VFlashCacheConfigInfo"` - } `json:"Device,omitempty"` - FileOperation string `json:"FileOperation"` - Operation string `json:"Operation"` - Profile []struct { - ProfileData struct { - ExtensionKey string `json:"ExtensionKey"` - ObjectData string `json:"ObjectData"` // Modified from time.Time - } `json:"ProfileData"` - ProfileID string `json:"ProfileId"` - ProfileParams any `json:"ProfileParams"` - ReplicationSpec any `json:"ReplicationSpec"` - } `json:"Profile"` - } `json:"DeviceChange"` - ExtraConfig any `json:"ExtraConfig"` - Files struct { - FtMetadataDirectory string `json:"FtMetadataDirectory"` - LogDirectory string `json:"LogDirectory"` - SnapshotDirectory string `json:"SnapshotDirectory"` - SuspendDirectory string `json:"SuspendDirectory"` - VMPathName string `json:"VmPathName"` - } `json:"Files"` - Firmware string `json:"Firmware"` - Flags any `json:"Flags"` - FtInfo any `json:"FtInfo"` - GuestAutoLockEnabled any `json:"GuestAutoLockEnabled"` - GuestID string `json:"GuestId"` - GuestMonitoringModeInfo any `json:"GuestMonitoringModeInfo"` - InstanceUUID string `json:"InstanceUuid"` - LatencySensitivity any `json:"LatencySensitivity"` - LocationID string `json:"LocationId"` - ManagedBy any `json:"ManagedBy"` - MaxMksConnections int `json:"MaxMksConnections"` - MemoryAffinity any `json:"MemoryAffinity"` - MemoryAllocation any `json:"MemoryAllocation"` - MemoryHotAddEnabled any `json:"MemoryHotAddEnabled"` - MemoryMB int `json:"MemoryMB"` - MemoryReservationLockedToMax any `json:"MemoryReservationLockedToMax"` - MessageBusTunnelEnabled any `json:"MessageBusTunnelEnabled"` - MigrateEncryption string `json:"MigrateEncryption"` - Name string `json:"Name"` - NestedHVEnabled any `json:"NestedHVEnabled"` - NetworkShaper any `json:"NetworkShaper"` - NpivDesiredNodeWwns int `json:"NpivDesiredNodeWwns"` - NpivDesiredPortWwns int `json:"NpivDesiredPortWwns"` - NpivNodeWorldWideName any `json:"NpivNodeWorldWideName"` - NpivOnNonRdmDisks any `json:"NpivOnNonRdmDisks"` - NpivPortWorldWideName any `json:"NpivPortWorldWideName"` - NpivTemporaryDisabled any `json:"NpivTemporaryDisabled"` - NpivWorldWideNameOp string `json:"NpivWorldWideNameOp"` - NpivWorldWideNameType string `json:"NpivWorldWideNameType"` - NumCPUs int `json:"NumCPUs"` - NumCoresPerSocket int `json:"NumCoresPerSocket"` - PowerOpInfo any `json:"PowerOpInfo"` - RepConfig any `json:"RepConfig"` - ScheduledHardwareUpgradeInfo any `json:"ScheduledHardwareUpgradeInfo"` - SevEnabled any `json:"SevEnabled"` - SgxInfo any `json:"SgxInfo"` - SwapPlacement string `json:"SwapPlacement"` - Tools any `json:"Tools"` - UUID string `json:"Uuid"` - VAppConfig any `json:"VAppConfig"` - VAppConfigRemoved any `json:"VAppConfigRemoved"` - VAssertsEnabled any `json:"VAssertsEnabled"` - VPMCEnabled any `json:"VPMCEnabled"` - VcpuConfig any `json:"VcpuConfig"` - Version string `json:"Version"` - VirtualICH7MPresent any `json:"VirtualICH7MPresent"` - VirtualSMCPresent any `json:"VirtualSMCPresent"` - VMProfile any `json:"VmProfile"` -} - -type BackingSpec struct { - Port struct { - ConnectionCookie int `json:"ConnectionCookie"` - PortKey string `json:"PortKey"` - PortgroupKey string `json:"PortgroupKey"` - SwitchUUID string `json:"SwitchUuid"` - } `json:"Port"` - BackingObjectID string `json:"BackingObjectId"` - ChangeID string `json:"ChangeId"` - ContentID string `json:"ContentId"` - Datastore struct { - Type string `json:"Type"` - Value string `json:"Value"` - } `json:"Datastore"` - DeltaDiskFormat string `json:"DeltaDiskFormat"` - DeltaDiskFormatVariant string `json:"DeltaDiskFormatVariant"` - DeltaGrainSize int `json:"DeltaGrainSize"` - DigestEnabled any `json:"DigestEnabled"` - DiskMode string `json:"DiskMode"` - EagerlyScrub bool `json:"EagerlyScrub"` - FileName string `json:"FileName"` - KeyID any `json:"KeyId"` - Parent any `json:"Parent"` - Sharing string `json:"Sharing"` - Split any `json:"Split"` - ThinProvisioned bool `json:"ThinProvisioned"` - UUID string `json:"Uuid"` - WriteThrough any `json:"WriteThrough"` -} diff --git a/server/router/router.go b/server/router/router.go index 8d72246..2935692 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -4,11 +4,11 @@ import ( "log/slog" "net/http" "net/http/pprof" - "wnzl-snow/db" - "wnzl-snow/dist" - "wnzl-snow/internal/settings" - "wnzl-snow/server/handler" - "wnzl-snow/server/middleware" + "mocksnow/db" + "mocksnow/dist" + "mocksnow/internal/settings" + "mocksnow/server/handler" + "mocksnow/server/middleware" ) func New(logger *slog.Logger, database db.Database, buildTime string, sha1ver string, goVersion string, settings *settings.Settings) http.Handler { diff --git a/styles/.!31660!.DS_Store b/styles/.!31660!.DS_Store new file mode 100644 index 0000000..e69de29 diff --git a/update_module.sh b/update_module.sh index a753f8a..46a4175 100755 --- a/update_module.sh +++ b/update_module.sh @@ -7,4 +7,4 @@ fi new_module=$1 -find . -type d -name .git -prune -o -type f -exec sed -i '' -e "s/wnzl-snow/${new_module}/g" {} \; +find . -type d -name .git -prune -o -type f -exec sed -i '' -e "s/mocksnow/${new_module}/g" {} \;