From 0d2f983eb37824fb1c89bd76c6027fbfd649d0d1 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Thu, 12 Sep 2024 12:47:10 +1000 Subject: [PATCH] update --- .drone.sh | 2 +- .drone.yml | 4 +- .gitignore | 4 +- 20240912012703_init.sql | 9 --- Makefile | 3 + db/db.go | 6 +- db/local.go | 58 +++++++++++++-- db/queries/db.go | 31 ++++++++ db/queries/models.go | 39 ++++++++++ db/queries/query.sql | 14 +++- db/queries/query.sql.go | 155 ++++++++++++++++++++++++++++++++++++++++ go.mod | 2 +- go.sum | 42 ++++------- main.go | 2 + 14 files changed, 319 insertions(+), 52 deletions(-) delete mode 100644 20240912012703_init.sql create mode 100644 db/queries/db.go create mode 100644 db/queries/models.go create mode 100644 db/queries/query.sql.go diff --git a/.drone.sh b/.drone.sh index 867ca55..b295929 100644 --- a/.drone.sh +++ b/.drone.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # disable CGO for cross-compiling export CGO_ENABLED=0 diff --git a/.drone.yml b/.drone.yml index 0f0c54f..0b6b8bb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -14,7 +14,9 @@ steps: path: /shared commands: #- cp /shared/index.html ./www/ - - sh ./.drone.sh + - go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest + - sqlc generate + - ./.drone.sh - name: dell-sftp-deploy image: hypervtechnics/drone-sftp diff --git a/.gitignore b/.gitignore index fff0d9e..bbdc572 100644 --- a/.gitignore +++ b/.gitignore @@ -38,7 +38,7 @@ appengine-generated/ .idea *.iml dist/assets/css/ -*.sqlite3 +*.sqlite3* tmp/ pb_data/ @@ -68,4 +68,4 @@ Icon Network Trash Folder Temporary Items .apdisk -/db/queries/*.go +#/db/queries/*.go diff --git a/20240912012703_init.sql b/20240912012703_init.sql deleted file mode 100644 index b9c449e..0000000 --- a/20240912012703_init.sql +++ /dev/null @@ -1,9 +0,0 @@ --- +goose Up --- +goose StatementBegin -SELECT 'up SQL query'; --- +goose StatementEnd - --- +goose Down --- +goose StatementBegin -SELECT 'down SQL query'; --- +goose StatementEnd diff --git a/Makefile b/Makefile index 72d8dbc..f6dafd9 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,9 @@ generate-tailwind: generate-tailwind-watch: @echo "Generating tailwind files..." @tailwindcss -i ./styles/input.css -o ./dist/assets/css/output@dev.css --watch +generate-sql: + @echo "Generating sqlc ..." + @sqlc generate run: @echo "Running..." @go run main.go diff --git a/db/db.go b/db/db.go index aa6bdc9..7fa9c05 100644 --- a/db/db.go +++ b/db/db.go @@ -1,11 +1,11 @@ package db import ( - "database/sql" "embed" "log/slog" "vctp/db/queries" + "github.com/jmoiron/sqlx" "github.com/pressly/goose/v3" ) @@ -13,7 +13,7 @@ import ( var migrations embed.FS type Database interface { - DB() *sql.DB + DB() *sqlx.DB Queries() *queries.Queries Logger() *slog.Logger Close() error @@ -39,7 +39,7 @@ func Migrate(db Database) error { panic(err) } - if err := goose.Up(db.DB(), "migrations"); err != nil { + if err := goose.Up(db.DB().DB, "migrations"); err != nil { panic(err) } diff --git a/db/local.go b/db/local.go index ca64839..5bfdeab 100644 --- a/db/local.go +++ b/db/local.go @@ -2,22 +2,28 @@ package db import ( "database/sql" - "vctp/db/queries" "log/slog" + "vctp/db/queries" - _ "github.com/tursodatabase/libsql-client-go/libsql" + //_ "github.com/tursodatabase/libsql-client-go/libsql" + "github.com/jmoiron/sqlx" _ "modernc.org/sqlite" ) type LocalDB struct { logger *slog.Logger - db *sql.DB + db *sqlx.DB queries *queries.Queries } +type DB struct { + writeDB *sql.DB + readDB *sql.DB +} + var _ Database = (*LocalDB)(nil) -func (d *LocalDB) DB() *sql.DB { +func (d *LocalDB) DB() *sqlx.DB { return d.db } @@ -34,9 +40,51 @@ func (d *LocalDB) Close() error { } func newLocalDB(logger *slog.Logger, path string) (*LocalDB, error) { - db, err := sql.Open("libsql", "file:"+path) + + // TODO - work out if https://kerkour.com/sqlite-for-servers is possible without using sqlx + /* + writeDB, err := sql.Open("sqlite3", "file:"+path) + if err != nil { + logger.Error("can't create writedb connection", "error", err) + return nil, err + } + + writeDB.SetMaxOpenConns(1) + + readDB, err := sql.Open("sqlite3", "file:"+path) + if err != nil { + logger.Error("can't create readdb connection", "error", err) + return nil, err + } + readDB.SetMaxOpenConns(max(4, runtime.NumCPU())) + */ + + //db, err := sql.Open("libsql", "file:"+path) + db, err := sqlx.Open("sqlite", "file:"+path) if err != nil { + logger.Error("can't open database connection", "error", err) return nil, err } + + db.SetMaxOpenConns(1) + + // Execute PRAGMA commands + pragmas := []string{ + "PRAGMA journal_mode = WAL;", + "PRAGMA busy_timeout = 5000;", + "PRAGMA synchronous = NORMAL;", + "PRAGMA cache_size = 1000000000;", + "PRAGMA foreign_keys = true;", + "PRAGMA temp_store = MEMORY;", + } + + for _, pragma := range pragmas { + _, err := db.Exec(pragma) + if err != nil { + logger.Error("failed to execute pragma statement", "stmt", pragma, "error", err) + return nil, err + } + } + return &LocalDB{logger: logger, db: db, queries: queries.New(db)}, nil } diff --git a/db/queries/db.go b/db/queries/db.go new file mode 100644 index 0000000..1cbab90 --- /dev/null +++ b/db/queries/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package queries + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/db/queries/models.go b/db/queries/models.go new file mode 100644 index 0000000..45c7552 --- /dev/null +++ b/db/queries/models.go @@ -0,0 +1,39 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package queries + +import ( + "database/sql" +) + +type Inventory struct { + Iid sql.NullInt64 + Name sql.NullString + Vcenter sql.NullString + VmId sql.NullString + EventKey sql.NullString + EventId sql.NullString + CreationTime sql.NullString + DeletionTime sql.NullString + ResourcePool sql.NullString + VmType sql.NullString + Datacenter sql.NullString + Cluster sql.NullString + Folder sql.NullString + ProvisionedDisk sql.NullFloat64 + InitialVcpus sql.NullInt64 + InitialRam sql.NullInt64 + SrmPlaceholder sql.NullInt64 +} + +type Updates struct { + Uid sql.NullInt64 + InventoryId sql.NullInt64 + UpdateTime sql.NullString + UpdateType sql.NullString + NewVcpus sql.NullInt64 + NewRam sql.NullInt64 + NewResourcePool sql.NullString +} diff --git a/db/queries/query.sql b/db/queries/query.sql index 249f358..f71a2f0 100644 --- a/db/queries/query.sql +++ b/db/queries/query.sql @@ -1,3 +1,15 @@ -- name: ListInventory :many SELECT * FROM "Inventory" -ORDER BY "Name"; \ No newline at end of file +ORDER BY "Name"; + +-- name: GetInventoryByName :one +SELECT * FROM "Inventory" +WHERE "Name" = ? LIMIT 1; + +-- name: CreateInventory :one +INSERT INTO "Inventory" ( + "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder" +) VALUES( + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? +) +RETURNING *; \ No newline at end of file diff --git a/db/queries/query.sql.go b/db/queries/query.sql.go new file mode 100644 index 0000000..a60f0d9 --- /dev/null +++ b/db/queries/query.sql.go @@ -0,0 +1,155 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: query.sql + +package queries + +import ( + "context" + "database/sql" +) + +const createInventory = `-- name: CreateInventory :one +INSERT INTO "Inventory" ( + "Name", "Vcenter", "VmId", "EventKey", "EventId", "CreationTime", "ResourcePool", "VmType", "Datacenter", "Cluster", "Folder", "ProvisionedDisk", "InitialVcpus", "InitialRam", "SrmPlaceholder" +) VALUES( + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? +) +RETURNING Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder +` + +type CreateInventoryParams struct { + Name sql.NullString + Vcenter sql.NullString + VmId sql.NullString + EventKey sql.NullString + EventId sql.NullString + CreationTime sql.NullString + ResourcePool sql.NullString + VmType sql.NullString + Datacenter sql.NullString + Cluster sql.NullString + Folder sql.NullString + ProvisionedDisk sql.NullFloat64 + InitialVcpus sql.NullInt64 + InitialRam sql.NullInt64 + SrmPlaceholder sql.NullInt64 +} + +func (q *Queries) CreateInventory(ctx context.Context, arg CreateInventoryParams) (Inventory, error) { + row := q.db.QueryRowContext(ctx, createInventory, + arg.Name, + arg.Vcenter, + arg.VmId, + arg.EventKey, + arg.EventId, + arg.CreationTime, + arg.ResourcePool, + arg.VmType, + arg.Datacenter, + arg.Cluster, + arg.Folder, + arg.ProvisionedDisk, + arg.InitialVcpus, + arg.InitialRam, + arg.SrmPlaceholder, + ) + var i Inventory + err := row.Scan( + &i.Iid, + &i.Name, + &i.Vcenter, + &i.VmId, + &i.EventKey, + &i.EventId, + &i.CreationTime, + &i.DeletionTime, + &i.ResourcePool, + &i.VmType, + &i.Datacenter, + &i.Cluster, + &i.Folder, + &i.ProvisionedDisk, + &i.InitialVcpus, + &i.InitialRam, + &i.SrmPlaceholder, + ) + return i, err +} + +const getInventoryByName = `-- name: GetInventoryByName :one +SELECT Iid, Name, Vcenter, VmId, EventKey, EventId, CreationTime, DeletionTime, ResourcePool, VmType, Datacenter, Cluster, Folder, ProvisionedDisk, InitialVcpus, InitialRam, SrmPlaceholder FROM "Inventory" +WHERE "Name" = ? LIMIT 1 +` + +func (q *Queries) GetInventoryByName(ctx context.Context, name sql.NullString) (Inventory, error) { + row := q.db.QueryRowContext(ctx, getInventoryByName, name) + var i Inventory + err := row.Scan( + &i.Iid, + &i.Name, + &i.Vcenter, + &i.VmId, + &i.EventKey, + &i.EventId, + &i.CreationTime, + &i.DeletionTime, + &i.ResourcePool, + &i.VmType, + &i.Datacenter, + &i.Cluster, + &i.Folder, + &i.ProvisionedDisk, + &i.InitialVcpus, + &i.InitialRam, + &i.SrmPlaceholder, + ) + return i, err +} + +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" +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.EventId, + &i.CreationTime, + &i.DeletionTime, + &i.ResourcePool, + &i.VmType, + &i.Datacenter, + &i.Cluster, + &i.Folder, + &i.ProvisionedDisk, + &i.InitialVcpus, + &i.InitialRam, + &i.SrmPlaceholder, + ); 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 +} diff --git a/go.mod b/go.mod index 3de7ef0..5d5675d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.23.1 require ( github.com/a-h/templ v0.2.778 + github.com/jmoiron/sqlx v1.4.0 github.com/joho/godotenv v1.5.1 github.com/playwright-community/playwright-go v0.4201.1 github.com/pressly/goose/v3 v3.22.0 @@ -35,7 +36,6 @@ require ( golang.org/x/sys v0.25.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect - modernc.org/libc v1.60.1 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect diff --git a/go.sum b/go.sum index 8956d50..7b3a974 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/a-h/templ v0.2.771 h1:4KH5ykNigYGGpCe0fRJ7/hzwz72k3qFqIiiLLJskbSo= -github.com/a-h/templ v0.2.771/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/a-h/templ v0.2.778 h1:VzhOuvWECrwOec4790lcLlZpP4Iptt5Q4K9aFxQmtaM= github.com/a-h/templ v0.2.778/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= @@ -16,6 +16,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -27,14 +29,20 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= +github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= @@ -57,34 +65,27 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tursodatabase/libsql-client-go v0.0.0-20240812094001-348a4e45b535 h1:iLjJLq2A5J6L9zrhyNn+fpmxFvtEpYB4XLMr0rX3epI= -github.com/tursodatabase/libsql-client-go v0.0.0-20240812094001-348a4e45b535/go.mod h1:l8xTsYB90uaVdMHXMCxKKLSgw5wLYBwBKKefNIUnm9s= github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d h1:dOMI4+zEbDI37KGb0TI44GUAwxHF9cMsIoDTJ7UmgfU= github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d/go.mod h1:l8xTsYB90uaVdMHXMCxKKLSgw5wLYBwBKKefNIUnm9s= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= -golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= +golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -92,31 +93,14 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= -modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.20.7 h1:skrinQsjxWfvj6nbC3ztZPJy+NuwmB3hV9zX/pthNYQ= -modernc.org/ccgo/v4 v4.20.7/go.mod h1:UOkI3JSG2zT4E2ioHlncSOZsXbuDCZLvPi3uMlZT5GY= -modernc.org/ccgo/v4 v4.21.0 h1:kKPI3dF7RIag8YcToh5ZwDcVMIv6VGa0ED5cvh0LMW4= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= -modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M= modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= -modernc.org/libc v1.59.9 h1:k+nNDDakwipimgmJ1D9H466LhFeSkaPPycAs1OZiDmY= -modernc.org/libc v1.59.9/go.mod h1:EY/egGEU7Ju66eU6SBqCNYaFUDuc4npICkMWnU5EE3A= -modernc.org/libc v1.60.1 h1:at373l8IFRTkJIkAU85BIuUoBM4T1b51ds0E1ovPG2s= -modernc.org/libc v1.60.1/go.mod h1:xJuobKuNxKH3RUatS7GjR+suWj+5c2K7bi4m/S5arOY= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= -modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= -modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s= -modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= modernc.org/sqlite v1.33.0 h1:WWkA/T2G17okiLGgKAj4/RMIvgyMT19yQ038160IeYk= modernc.org/sqlite v1.33.0/go.mod h1:9uQ9hF/pCZoYZK73D/ud5Z7cIRIILSZI8NdIemVMTX8= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= diff --git a/main.go b/main.go index 9c498a6..a6600b5 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,8 @@ import ( var ( bindDisableTls bool + sha1ver string // sha1 revision used to build the program + buildTime string // when the executable was built ) func main() {