mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-21 23:33:34 +00:00
refactor: replace gorm with sqlx
This commit is contained in:
parent
6c960ba40a
commit
6a677d96cd
33 changed files with 697 additions and 2386 deletions
33
database/database.go
Normal file
33
database/database.go
Normal file
|
@ -0,0 +1,33 @@
|
|||
package database
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"log/slog"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
migrate "github.com/rubenv/sql-migrate"
|
||||
)
|
||||
|
||||
//go:embed sqlite/migrations/*
|
||||
var sqliteMigrations embed.FS
|
||||
|
||||
func ConnectToDatabase(logger *slog.Logger, path string) (*sqlx.DB, error) {
|
||||
db, err := sqlx.Connect("sqlite3", path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger.Info("Connected to database")
|
||||
|
||||
migrations := migrate.EmbedFileSystemMigrationSource{
|
||||
FileSystem: sqliteMigrations,
|
||||
Root: "sqlite/migrations",
|
||||
}
|
||||
n, err := migrate.Exec(db.DB, "sqlite3", migrations, migrate.Up)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger.Info("Applied migrations", "number", n)
|
||||
|
||||
return db, nil
|
||||
}
|
60
database/models/models.go
Normal file
60
database/models/models.go
Normal file
|
@ -0,0 +1,60 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type OAuth2State struct {
|
||||
State string `db:"state"`
|
||||
ExpiresAt time.Time `db:"expires_at"`
|
||||
}
|
||||
|
||||
const (
|
||||
MonitorSuccess string = "SUCCESS"
|
||||
MonitorFailure string = "FAILURE"
|
||||
MonitorError string = "ERROR"
|
||||
MonitorUnknown string = "UNKNOWN"
|
||||
)
|
||||
|
||||
type Monitor struct {
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
UpdatedAt time.Time `db:"updated_at"`
|
||||
DeletedAt *time.Time `db:"deleted_at"`
|
||||
|
||||
Slug string `db:"slug"`
|
||||
Name string `db:"name"`
|
||||
|
||||
Schedule string `db:"schedule"`
|
||||
Script string `db:"script"`
|
||||
}
|
||||
|
||||
type MonitorWithWorkerGroups struct {
|
||||
Monitor
|
||||
|
||||
// List of worker group names
|
||||
WorkerGroups []string
|
||||
}
|
||||
|
||||
type MonitorHistory struct {
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
|
||||
MonitorSlug string `db:"monitor_slug"`
|
||||
Status string `db:"status"`
|
||||
Note string `db:"note"`
|
||||
}
|
||||
|
||||
type WorkerGroup struct {
|
||||
CreatedAt time.Time `db:"created_at"`
|
||||
UpdatedAt time.Time `db:"updated_at"`
|
||||
DeletedAt *time.Time `db:"deleted_at"`
|
||||
|
||||
Slug string `db:"slug"`
|
||||
Name string `db:"name"`
|
||||
}
|
||||
|
||||
type WorkerGroupWithMonitors struct {
|
||||
WorkerGroup
|
||||
|
||||
// List of worker group names
|
||||
Monitors []string
|
||||
}
|
58
database/sqlite/migrations/2024-02-27-initial.sql
Normal file
58
database/sqlite/migrations/2024-02-27-initial.sql
Normal file
|
@ -0,0 +1,58 @@
|
|||
-- +migrate Up
|
||||
CREATE TABLE o_auth2_states (
|
||||
state TEXT,
|
||||
expiry DATETIME,
|
||||
PRIMARY KEY (state)
|
||||
);
|
||||
|
||||
CREATE TABLE monitors (
|
||||
slug TEXT,
|
||||
name TEXT,
|
||||
schedule TEXT,
|
||||
script TEXT,
|
||||
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at DATETIME,
|
||||
|
||||
PRIMARY KEY (slug),
|
||||
CONSTRAINT unique_monitors_name UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE worker_groups (
|
||||
slug TEXT,
|
||||
name TEXT,
|
||||
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
deleted_at DATETIME,
|
||||
|
||||
PRIMARY KEY (slug),
|
||||
CONSTRAINT unique_worker_groups_name UNIQUE (name)
|
||||
);
|
||||
|
||||
CREATE TABLE monitor_worker_groups (
|
||||
worker_group_slug TEXT,
|
||||
monitor_slug TEXT,
|
||||
PRIMARY KEY (worker_group_slug,monitor_slug),
|
||||
CONSTRAINT fk_monitor_worker_groups_worker_group FOREIGN KEY (worker_group_slug) REFERENCES worker_groups(slug),
|
||||
CONSTRAINT fk_monitor_worker_groups_monitor FOREIGN KEY (monitor_slug) REFERENCES monitors(slug)
|
||||
);
|
||||
|
||||
CREATE TABLE "monitor_histories" (
|
||||
monitor_slug TEXT,
|
||||
status TEXT,
|
||||
note TEXT,
|
||||
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
PRIMARY KEY (monitor_slug, created_at),
|
||||
CONSTRAINT fk_monitors_history FOREIGN KEY (monitor_slug) REFERENCES monitors(slug)
|
||||
);
|
||||
|
||||
-- +migrate Down
|
||||
DROP TABLE o_auth2_states;
|
||||
DROP TABLE monitor_worker_groups;
|
||||
DROP TABLE worker_groups;
|
||||
DROP TABLE monitor_histories;
|
||||
DROP TABLE monitors;
|
|
@ -17,8 +17,8 @@ primary_region = 'waw'
|
|||
ROOT_URL = 'https://zdravko.mnts.dev'
|
||||
TEMPORAL_SERVER_HOST = 'server.process.zdravko.internal:7233'
|
||||
|
||||
TEMPORAL_DATABASE_PATH = '/data/temporal-2.db'
|
||||
DATABASE_PATH = '/data/zdravko-2.db'
|
||||
TEMPORAL_DATABASE_PATH = '/data/temporal-4.db'
|
||||
DATABASE_PATH = '/data/zdravko-4.db'
|
||||
|
||||
[processes]
|
||||
server = '--temporal --server'
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
"tailwindcss@latest",
|
||||
"flyctl@latest",
|
||||
"just@latest",
|
||||
"nodePackages.npm@latest"
|
||||
"nodePackages.npm@latest",
|
||||
"sqlite@latest",
|
||||
"sqlite-web@latest"
|
||||
]
|
||||
}
|
||||
|
|
40
devbox.lock
40
devbox.lock
|
@ -75,6 +75,46 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"sqlite-web@latest": {
|
||||
"last_modified": "2024-02-10T18:15:24Z",
|
||||
"resolved": "github:NixOS/nixpkgs/10b813040df67c4039086db0f6eaf65c536886c6#sqlite-web",
|
||||
"source": "devbox-search",
|
||||
"version": "0.6.2",
|
||||
"systems": {
|
||||
"aarch64-darwin": {
|
||||
"store_path": "/nix/store/klkx4fv3al5dgg59w3xv0brnn28gmpkh-sqlite-web-0.6.2"
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"store_path": "/nix/store/liqjqlnwc111g2j1mxak0z6b0cbvn46i-sqlite-web-0.6.2"
|
||||
},
|
||||
"x86_64-darwin": {
|
||||
"store_path": "/nix/store/ip9c99c0r4avyxl68x1cxpn6649pff4j-sqlite-web-0.6.2"
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"store_path": "/nix/store/lfwrqdx8jjpqhzxhcfjnm82ll4a2jzhv-sqlite-web-0.6.2"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sqlite@latest": {
|
||||
"last_modified": "2024-02-20T22:56:03Z",
|
||||
"resolved": "github:NixOS/nixpkgs/5eeded8e3518579daa13887297efa79f5be74b41#sqlite",
|
||||
"source": "devbox-search",
|
||||
"version": "3.45.1",
|
||||
"systems": {
|
||||
"aarch64-darwin": {
|
||||
"store_path": "/nix/store/ay9wvqp3p548p08symcy3q7avm86ck00-sqlite-3.45.1-bin"
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"store_path": "/nix/store/1j3xiiq0i2q69nmwi9ja99grnwlpqzgy-sqlite-3.45.1-bin"
|
||||
},
|
||||
"x86_64-darwin": {
|
||||
"store_path": "/nix/store/c9wndvymfnm4dcmi0bgy1lmljzx8dv4n-sqlite-3.45.1-bin"
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"store_path": "/nix/store/b3pbwqqpfllg2lxwhhv4iyw3m9xxbgld-sqlite-3.45.1-bin"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tailwindcss@latest": {
|
||||
"last_modified": "2024-01-27T14:55:31Z",
|
||||
"resolved": "github:NixOS/nixpkgs/160b762eda6d139ac10ae081f8f78d640dd523eb#tailwindcss",
|
||||
|
|
19
go.mod
19
go.mod
|
@ -7,20 +7,19 @@ require (
|
|||
github.com/golang-jwt/jwt/v5 v5.2.0
|
||||
github.com/gorilla/sessions v1.2.2
|
||||
github.com/gosimple/slug v1.13.1
|
||||
github.com/jmoiron/sqlx v1.3.5
|
||||
github.com/labstack/echo/v4 v4.11.4
|
||||
github.com/lib/pq v1.10.9
|
||||
github.com/mattn/go-sqlite3 v1.14.19
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/rubenv/sql-migrate v1.6.1
|
||||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/spf13/viper v1.18.2
|
||||
github.com/temporalio/ui-server/v2 v2.23.0
|
||||
go.k6.io/k6 v0.49.0
|
||||
go.temporal.io/sdk v1.26.0-rc.2
|
||||
go.temporal.io/server v1.22.4
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e
|
||||
golang.org/x/oauth2 v0.17.0
|
||||
gorm.io/driver/sqlite v1.5.0
|
||||
gorm.io/gen v0.3.25
|
||||
gorm.io/gorm v1.25.7
|
||||
gorm.io/plugin/dbresolver v1.5.0
|
||||
)
|
||||
|
||||
replace go.temporal.io/server => github.com/temporalio/temporal v1.23.0-rc2.0.20240207154935-68882596be5d
|
||||
|
@ -61,6 +60,7 @@ require (
|
|||
github.com/felixge/httpsnoop v1.0.4 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
|
||||
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
|
||||
github.com/go-logr/logr v1.3.0 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-playground/locales v0.14.1 // indirect
|
||||
|
@ -97,20 +97,17 @@ require (
|
|||
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
|
||||
github.com/jackc/pgx/v5 v5.4.3 // indirect
|
||||
github.com/jhump/protoreflect v1.15.4 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/jmoiron/sqlx v1.3.4 // indirect
|
||||
github.com/josharian/intern v1.0.0 // indirect
|
||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||
github.com/klauspost/compress v1.17.4 // indirect
|
||||
github.com/labstack/gommon v0.4.2 // indirect
|
||||
github.com/leodido/go-urn v1.4.0 // indirect
|
||||
github.com/lib/pq v1.10.9 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mailru/easyjson v0.7.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mattn/go-sqlite3 v1.14.16 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
|
@ -176,7 +173,6 @@ require (
|
|||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.uber.org/zap v1.26.0 // indirect
|
||||
golang.org/x/crypto v0.19.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
|
||||
golang.org/x/mod v0.15.0 // indirect
|
||||
golang.org/x/net v0.21.0 // indirect
|
||||
golang.org/x/sync v0.6.0 // indirect
|
||||
|
@ -198,9 +194,6 @@ require (
|
|||
gopkg.in/square/go-jose.v2 v2.6.0 // indirect
|
||||
gopkg.in/validator.v2 v2.0.1 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
gorm.io/datatypes v1.2.0 // indirect
|
||||
gorm.io/driver/mysql v1.5.4 // indirect
|
||||
gorm.io/hints v1.1.2 // indirect
|
||||
lukechampine.com/uint128 v1.3.0 // indirect
|
||||
modernc.org/cc/v3 v3.41.0 // indirect
|
||||
modernc.org/ccgo/v3 v3.16.15 // indirect
|
||||
|
|
52
go.sum
52
go.sum
|
@ -131,6 +131,8 @@ github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcP
|
|||
github.com/go-faker/faker/v4 v4.2.0 h1:dGebOupKwssrODV51E0zbMrv5e2gO9VWSLNC1WDCpWg=
|
||||
github.com/go-faker/faker/v4 v4.2.0/go.mod h1:F/bBy8GH9NxOxMInug5Gx4WYeG6fHJZ8Ol/dhcpRub4=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
|
||||
github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||
|
@ -153,9 +155,7 @@ github.com/go-playground/validator/v10 v10.18.0/go.mod h1:dbuPbCMFw/DrkbEynArYaC
|
|||
github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
|
||||
github.com/go-sourcemap/sourcemap v2.1.4-0.20211119122758-180fcef48034+incompatible h1:bopx7t9jyUNX1ebhr0G4gtQWmUOgwQRI0QsYhdYLgkU=
|
||||
github.com/go-sourcemap/sourcemap v2.1.4-0.20211119122758-180fcef48034+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
|
@ -170,10 +170,6 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW
|
|||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
|
||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
|
||||
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
|
@ -272,17 +268,12 @@ github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJS
|
|||
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||
github.com/jhump/protoreflect v1.15.4 h1:mrwJhfQGGljwvR/jPEocli8KA6G9afbQpH8NY2wORcI=
|
||||
github.com/jhump/protoreflect v1.15.4/go.mod h1:2B+zwrnMY3TTIqEK01OG/d3pyUycQBfDf+bx8fE2DNg=
|
||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/jmoiron/sqlx v1.3.4 h1:wv+0IJZfL5z0uZoUjlpKgHkgaFSYD+r9CfrXjEXsO7w=
|
||||
github.com/jmoiron/sqlx v1.3.4/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ=
|
||||
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
|
||||
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
|
@ -330,16 +321,13 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
|
|||
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.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
|
||||
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/mattn/go-sqlite3 v1.14.19 h1:fhGleo2h1p8tVChob4I9HpmVFIAkKGpiukdrgQbWfGI=
|
||||
github.com/mattn/go-sqlite3 v1.14.19/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa h1:lx8ZnNPwjkXSzOROz0cg69RlErRXs+L3eDkggASWKLo=
|
||||
github.com/mccutchen/go-httpbin v1.1.2-0.20190116014521-c5cb2f4802fa/go.mod h1:fhpOYavp5g2K74XDl/ao2y4KvhqVtKlkg1e+0UaQv7I=
|
||||
github.com/microsoft/go-mssqldb v0.17.0 h1:Fto83dMZPnYv1Zwx5vHHxpNraeEaUlQ/hhHLgZiaenE=
|
||||
github.com/microsoft/go-mssqldb v0.17.0/go.mod h1:OkoNGhGEs8EZqchVTtochlXruEhEOaO4S0d2sB5aeGQ=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
|
@ -381,6 +369,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
|||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY=
|
||||
github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg=
|
||||
github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a h1:AA9vgIBDjMHPC2McaGPojgV2dcI78ZC0TLNhYCXEKH8=
|
||||
github.com/prashantv/protectmem v0.0.0-20171002184600-e20412882b3a/go.mod h1:lzZQ3Noex5pfAy7mkAeCjcBDteYU85uWWnJ/y6gKU8k=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
|
@ -421,6 +411,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
|
|||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
||||
github.com/rubenv/sql-migrate v1.6.1 h1:bo6/sjsan9HaXAsNxYP/jCEDUGibHp8JmOBw7NTGRos=
|
||||
github.com/rubenv/sql-migrate v1.6.1/go.mod h1:tPzespupJS0jacLfhbwto/UjSX+8h2FdWB7ar+QlHa0=
|
||||
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
|
||||
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||
|
@ -786,30 +778,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
|||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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=
|
||||
gorm.io/datatypes v1.2.0 h1:5YT+eokWdIxhJgWHdrb2zYUimyk0+TaFth+7a0ybzco=
|
||||
gorm.io/datatypes v1.2.0/go.mod h1:o1dh0ZvjIjhH/bngTpypG6lVRJ5chTBxE09FH/71k04=
|
||||
gorm.io/driver/mysql v1.4.3/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c=
|
||||
gorm.io/driver/mysql v1.5.4 h1:igQmHfKcbaTVyAIHNhhB888vvxh8EdQ2uSUT0LPcBso=
|
||||
gorm.io/driver/mysql v1.5.4/go.mod h1:9rYxJph/u9SWkWc9yY4XJ1F/+xO0S/ChOmbk3+Z5Tvs=
|
||||
gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
|
||||
gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
|
||||
gorm.io/driver/sqlite v1.5.0 h1:zKYbzRCpBrT1bNijRnxLDJWPjVfImGEn0lSnUY5gZ+c=
|
||||
gorm.io/driver/sqlite v1.5.0/go.mod h1:kDMDfntV9u/vuMmz8APHtHF0b4nyBB7sfCieC6G8k8I=
|
||||
gorm.io/driver/sqlserver v1.4.1 h1:t4r4r6Jam5E6ejqP7N82qAJIJAht27EGT41HyPfXRw0=
|
||||
gorm.io/driver/sqlserver v1.4.1/go.mod h1:DJ4P+MeZbc5rvY58PnmN1Lnyvb5gw5NPzGshHDnJLig=
|
||||
gorm.io/gen v0.3.25 h1:uT/1YfvcnYUdike4XPYyi89FEnVHZF115GUXQm2Sfug=
|
||||
gorm.io/gen v0.3.25/go.mod h1:p+t0iCKjaPz+pKRxcx63nXdRgnrah/QD2l92747ihyA=
|
||||
gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
|
||||
gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
|
||||
gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
|
||||
gorm.io/gorm v1.25.2/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
|
||||
gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||
gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
|
||||
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||
gorm.io/hints v1.1.2 h1:b5j0kwk5p4+3BtDtYqqfY+ATSxjj+6ptPgVveuynn9o=
|
||||
gorm.io/hints v1.1.2/go.mod h1:/ARdpUHAtyEMCh5NNi3tI7FsGh+Cj/MIUlvNxCNCFWg=
|
||||
gorm.io/plugin/dbresolver v1.5.0 h1:XVHLxh775eP0CqVh3vcfJtYqja3uFl5Wr3cKlY8jgDY=
|
||||
gorm.io/plugin/dbresolver v1.5.0/go.mod h1:l4Cn87EHLEYuqUncpEeTC2tTJQkjngPSD+lo8hIvcT0=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
package internal
|
||||
|
||||
import (
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models/query"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
//go:generate just _generate-gorm
|
||||
func ConnectToDatabase(path string) (*gorm.DB, *query.Query, error) {
|
||||
db, err := gorm.Open(sqlite.Open(path), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logger.Info),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
err = db.AutoMigrate(
|
||||
models.Monitor{},
|
||||
models.WorkerGroup{},
|
||||
models.MonitorHistory{},
|
||||
models.OAuth2State{},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
q := query.Use(db)
|
||||
|
||||
return db, q, nil
|
||||
}
|
|
@ -2,14 +2,14 @@ package handlers
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/services"
|
||||
"code.tjo.space/mentos1386/zdravko/pkg/api"
|
||||
"github.com/labstack/echo/v4"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type ApiV1WorkersConnectGETResponse struct {
|
||||
|
@ -21,9 +21,9 @@ func (h *BaseHandler) ApiV1WorkersConnectGET(c echo.Context) error {
|
|||
ctx := context.Background()
|
||||
cc := c.(AuthenticatedContext)
|
||||
|
||||
workerGroup, err := services.GetWorkerGroup(ctx, h.query, cc.Principal.Worker.Group)
|
||||
workerGroup, err := services.GetWorkerGroup(ctx, h.db, cc.Principal.Worker.Group)
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return echo.NewHTTPError(http.StatusUnauthorized, "Token invalid")
|
||||
}
|
||||
return err
|
||||
|
@ -51,16 +51,19 @@ func (h *BaseHandler) ApiV1MonitorsHistoryPOST(c echo.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
monitor, err := services.GetMonitor(ctx, h.query, slug)
|
||||
_, err = services.GetMonitor(ctx, h.db, slug)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return echo.NewHTTPError(http.StatusNotFound, "Monitor not found")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
err = h.query.Monitor.History.Model(monitor).Append(
|
||||
&models.MonitorHistory{
|
||||
Status: body.Status,
|
||||
Note: body.Note,
|
||||
})
|
||||
err = services.AddHistoryForMonitor(ctx, h.db, &models.MonitorHistory{
|
||||
MonitorSlug: slug,
|
||||
Status: body.Status,
|
||||
Note: body.Note,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package handlers
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/config"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models/query"
|
||||
"code.tjo.space/mentos1386/zdravko/web/templates/components"
|
||||
"github.com/gorilla/sessions"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"go.temporal.io/sdk/client"
|
||||
)
|
||||
|
||||
|
@ -24,16 +26,23 @@ func GetPageByTitle(pages []*components.Page, title string) *components.Page {
|
|||
}
|
||||
|
||||
type BaseHandler struct {
|
||||
query *query.Query
|
||||
db *sqlx.DB
|
||||
config *config.ServerConfig
|
||||
logger *slog.Logger
|
||||
|
||||
temporal client.Client
|
||||
|
||||
store *sessions.CookieStore
|
||||
}
|
||||
|
||||
func NewBaseHandler(q *query.Query, temporal client.Client, config *config.ServerConfig) *BaseHandler {
|
||||
func NewBaseHandler(db *sqlx.DB, temporal client.Client, config *config.ServerConfig, logger *slog.Logger) *BaseHandler {
|
||||
store := sessions.NewCookieStore([]byte(config.SessionSecret))
|
||||
|
||||
return &BaseHandler{q, config, temporal, store}
|
||||
return &BaseHandler{
|
||||
db: db,
|
||||
config: config,
|
||||
logger: logger,
|
||||
temporal: temporal,
|
||||
store: store,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"net/http"
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/services"
|
||||
"code.tjo.space/mentos1386/zdravko/web/templates/components"
|
||||
"github.com/labstack/echo/v4"
|
||||
|
@ -13,10 +13,10 @@ import (
|
|||
|
||||
type IndexData struct {
|
||||
*components.Base
|
||||
HealthChecks []*HealthCheck
|
||||
HealthChecks []*HealthCheck
|
||||
MonitorsLength int
|
||||
TimeRange string
|
||||
Status string
|
||||
TimeRange string
|
||||
Status string
|
||||
}
|
||||
|
||||
type HealthCheck struct {
|
||||
|
@ -39,7 +39,7 @@ func getHour(date time.Time) string {
|
|||
return date.Format("2006-01-02T15:04")
|
||||
}
|
||||
|
||||
func getDailyHistory(history []models.MonitorHistory) *History {
|
||||
func getDailyHistory(history []*models.MonitorHistory) *History {
|
||||
numDays := 90
|
||||
historyDailyMap := map[string]string{}
|
||||
numOfSuccess := 0
|
||||
|
@ -88,7 +88,7 @@ func getDailyHistory(history []models.MonitorHistory) *History {
|
|||
}
|
||||
}
|
||||
|
||||
func getHourlyHistory(history []models.MonitorHistory) *History {
|
||||
func getHourlyHistory(history []*models.MonitorHistory) *History {
|
||||
numHours := 48
|
||||
historyHourlyMap := map[string]string{}
|
||||
numOfSuccess := 0
|
||||
|
@ -139,7 +139,7 @@ func getHourlyHistory(history []models.MonitorHistory) *History {
|
|||
|
||||
func (h *BaseHandler) Index(c echo.Context) error {
|
||||
ctx := context.Background()
|
||||
monitors, err := services.GetMonitors(ctx, h.query)
|
||||
monitors, err := services.GetMonitors(ctx, h.db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -153,8 +153,13 @@ func (h *BaseHandler) Index(c echo.Context) error {
|
|||
|
||||
monitorsWithHistory := make([]*HealthCheck, len(monitors))
|
||||
for i, monitor := range monitors {
|
||||
historyDaily := getDailyHistory(monitor.History)
|
||||
historyHourly := getHourlyHistory(monitor.History)
|
||||
history, err := services.GetMonitorHistoryForMonitor(ctx, h.db, monitor.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
historyDaily := getDailyHistory(history)
|
||||
historyHourly := getHourlyHistory(history)
|
||||
|
||||
status := historyDaily.History[89]
|
||||
if status != models.MonitorSuccess {
|
||||
|
@ -174,9 +179,9 @@ func (h *BaseHandler) Index(c echo.Context) error {
|
|||
NavbarActive: GetPageByTitle(Pages, "Status"),
|
||||
Navbar: Pages,
|
||||
},
|
||||
HealthChecks: monitorsWithHistory,
|
||||
HealthChecks: monitorsWithHistory,
|
||||
MonitorsLength: len(monitors),
|
||||
TimeRange: timeRange,
|
||||
Status: overallStatus,
|
||||
TimeRange: timeRange,
|
||||
Status: overallStatus,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -12,8 +12,9 @@ import (
|
|||
"strconv"
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/config"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/services"
|
||||
"github.com/labstack/echo/v4"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
@ -86,7 +87,7 @@ func (h *BaseHandler) OAuth2LoginGET(c echo.Context) error {
|
|||
conf := newOAuth2(h.config)
|
||||
|
||||
state := newRandomState()
|
||||
err := h.query.OAuth2State.WithContext(ctx).Create(&models.OAuth2State{State: state, Expiry: time.Now().Add(5 * time.Minute)})
|
||||
err := services.CreateOAuth2State(ctx, h.db, &models.OAuth2State{State: state, ExpiresAt: time.Now().Add(5 * time.Minute)})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -103,14 +104,11 @@ func (h *BaseHandler) OAuth2CallbackGET(c echo.Context) error {
|
|||
state := c.QueryParam("state")
|
||||
code := c.QueryParam("code")
|
||||
|
||||
result, err := h.query.OAuth2State.WithContext(ctx).Where(
|
||||
h.query.OAuth2State.State.Eq(state),
|
||||
h.query.OAuth2State.Expiry.Gt(time.Now()),
|
||||
).Delete()
|
||||
deleted, err := services.DeleteOAuth2State(ctx, h.db, state)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if result.RowsAffected != 1 {
|
||||
if deleted == false {
|
||||
return errors.New("invalid state")
|
||||
}
|
||||
|
||||
|
|
|
@ -2,11 +2,12 @@ package handlers
|
|||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/services"
|
||||
"code.tjo.space/mentos1386/zdravko/web/templates/components"
|
||||
"github.com/go-playground/validator/v10"
|
||||
|
@ -29,19 +30,20 @@ type UpdateMonitor struct {
|
|||
|
||||
type SettingsMonitors struct {
|
||||
*Settings
|
||||
Monitors []*models.Monitor
|
||||
Monitors []*models.MonitorWithWorkerGroups
|
||||
MonitorsLength int
|
||||
}
|
||||
|
||||
type SettingsMonitor struct {
|
||||
*Settings
|
||||
Monitor *models.Monitor
|
||||
Monitor *models.MonitorWithWorkerGroups
|
||||
History []*models.MonitorHistory
|
||||
}
|
||||
|
||||
func (h *BaseHandler) SettingsMonitorsGET(c echo.Context) error {
|
||||
cc := c.(AuthenticatedContext)
|
||||
|
||||
monitors, err := services.GetMonitors(context.Background(), h.query)
|
||||
monitors, err := services.GetMonitorsWithWorkerGroups(context.Background(), h.db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -62,11 +64,21 @@ func (h *BaseHandler) SettingsMonitorsDescribeGET(c echo.Context) error {
|
|||
|
||||
slug := c.Param("slug")
|
||||
|
||||
monitor, err := services.GetMonitor(context.Background(), h.query, slug)
|
||||
monitor, err := services.GetMonitorWithWorkerGroups(context.Background(), h.db, slug)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
history, err := services.GetMonitorHistoryForMonitor(context.Background(), h.db, slug)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
maxElements := 10
|
||||
if len(history) < maxElements {
|
||||
maxElements = len(history)
|
||||
}
|
||||
|
||||
return c.Render(http.StatusOK, "settings_monitors_describe.tmpl", &SettingsMonitor{
|
||||
Settings: NewSettings(
|
||||
cc.Principal.User,
|
||||
|
@ -80,6 +92,7 @@ func (h *BaseHandler) SettingsMonitorsDescribeGET(c echo.Context) error {
|
|||
},
|
||||
}),
|
||||
Monitor: monitor,
|
||||
History: history[:maxElements],
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -97,7 +110,7 @@ func (h *BaseHandler) SettingsMonitorsDescribePOST(c echo.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
monitor, err := services.GetMonitor(ctx, h.query, monitorSlug)
|
||||
monitor, err := services.GetMonitor(ctx, h.db, monitorSlug)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -106,7 +119,7 @@ func (h *BaseHandler) SettingsMonitorsDescribePOST(c echo.Context) error {
|
|||
|
||||
err = services.UpdateMonitor(
|
||||
ctx,
|
||||
h.query,
|
||||
h.db,
|
||||
monitor,
|
||||
)
|
||||
if err != nil {
|
||||
|
@ -118,18 +131,27 @@ func (h *BaseHandler) SettingsMonitorsDescribePOST(c echo.Context) error {
|
|||
if group == "" {
|
||||
continue
|
||||
}
|
||||
workerGroup, err := services.GetOrCreateWorkerGroup(ctx, h.query, models.WorkerGroup{Name: group, Slug: slug.Make(group)})
|
||||
workerGroup, err := services.GetWorkerGroup(ctx, h.db, slug.Make(group))
|
||||
if err != nil {
|
||||
return err
|
||||
if err == sql.ErrNoRows {
|
||||
workerGroup = &models.WorkerGroup{Name: group, Slug: slug.Make(group)}
|
||||
err = services.CreateWorkerGroup(ctx, h.db, workerGroup)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
workerGroups = append(workerGroups, workerGroup)
|
||||
}
|
||||
err = services.UpdateMonitorWorkerGroups(ctx, h.query, monitor, workerGroups)
|
||||
|
||||
err = services.UpdateMonitorWorkerGroups(ctx, h.db, monitor, workerGroups)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = services.CreateOrUpdateMonitorSchedule(ctx, h.temporal, monitor)
|
||||
err = services.CreateOrUpdateMonitorSchedule(ctx, h.temporal, monitor, workerGroups)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -165,32 +187,51 @@ func (h *BaseHandler) SettingsMonitorsCreatePOST(c echo.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
workerGroups := []models.WorkerGroup{}
|
||||
workerGroups := []*models.WorkerGroup{}
|
||||
for _, group := range strings.Split(create.WorkerGroups, " ") {
|
||||
workerGroups = append(workerGroups, models.WorkerGroup{Name: group, Slug: slug.Make(group)})
|
||||
if group == "" {
|
||||
continue
|
||||
}
|
||||
workerGroup, err := services.GetWorkerGroup(ctx, h.db, slug.Make(group))
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
workerGroup = &models.WorkerGroup{Name: group, Slug: slug.Make(group)}
|
||||
err = services.CreateWorkerGroup(ctx, h.db, workerGroup)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
}
|
||||
workerGroups = append(workerGroups, workerGroup)
|
||||
}
|
||||
|
||||
monitor := &models.Monitor{
|
||||
Name: create.Name,
|
||||
Slug: monitorSlug,
|
||||
Schedule: create.Schedule,
|
||||
Script: create.Script,
|
||||
WorkerGroups: workerGroups,
|
||||
Name: create.Name,
|
||||
Slug: monitorSlug,
|
||||
Schedule: create.Schedule,
|
||||
Script: create.Script,
|
||||
}
|
||||
|
||||
err = services.CreateMonitor(
|
||||
ctx,
|
||||
h.query,
|
||||
h.db,
|
||||
monitor,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = services.CreateOrUpdateMonitorSchedule(ctx, h.temporal, monitor)
|
||||
err = services.UpdateMonitorWorkerGroups(ctx, h.db, monitor, workerGroups)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect(http.StatusSeeOther, fmt.Sprintf("/settings/monitors/%s", monitorSlug))
|
||||
err = services.CreateOrUpdateMonitorSchedule(ctx, h.temporal, monitor, workerGroups)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect(http.StatusSeeOther, "/settings/monitors")
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/jwt"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/services"
|
||||
"code.tjo.space/mentos1386/zdravko/web/templates/components"
|
||||
"github.com/go-playground/validator/v10"
|
||||
|
@ -21,7 +21,7 @@ type WorkerWithToken struct {
|
|||
|
||||
type SettingsWorkerGroups struct {
|
||||
*Settings
|
||||
WorkerGroups []*models.WorkerGroup
|
||||
WorkerGroups []*models.WorkerGroupWithMonitors
|
||||
WorkerGroupsLength int
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ type SettingsWorker struct {
|
|||
func (h *BaseHandler) SettingsWorkerGroupsGET(c echo.Context) error {
|
||||
cc := c.(AuthenticatedContext)
|
||||
|
||||
workerGroups, err := services.GetWorkerGroups(context.Background(), h.query)
|
||||
workerGroups, err := services.GetWorkerGroupsWithMonitors(context.Background(), h.db)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ func (h *BaseHandler) SettingsWorkerGroupsDescribeGET(c echo.Context) error {
|
|||
|
||||
slug := c.Param("slug")
|
||||
|
||||
worker, err := services.GetWorkerGroup(context.Background(), h.query, slug)
|
||||
worker, err := services.GetWorkerGroup(context.Background(), h.db, slug)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -101,20 +101,20 @@ func (h *BaseHandler) SettingsWorkerGroupsCreatePOST(c echo.Context) error {
|
|||
ctx := context.Background()
|
||||
slug := slug.Make(c.FormValue("name"))
|
||||
|
||||
worker := models.WorkerGroup{
|
||||
workerGroup := &models.WorkerGroup{
|
||||
Name: c.FormValue("name"),
|
||||
Slug: slug,
|
||||
}
|
||||
|
||||
err := validator.New(validator.WithRequiredStructEnabled()).Struct(worker)
|
||||
err := validator.New(validator.WithRequiredStructEnabled()).Struct(workerGroup)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = services.GetOrCreateWorkerGroup(
|
||||
err = services.CreateWorkerGroup(
|
||||
ctx,
|
||||
h.query,
|
||||
worker,
|
||||
h.db,
|
||||
workerGroup,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
"encoding/hex"
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"github.com/golang-jwt/jwt/v5"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type OAuth2State struct {
|
||||
State string `gorm:"primary_key"`
|
||||
Expiry time.Time
|
||||
}
|
||||
|
||||
const (
|
||||
MonitorSuccess string = "SUCCESS"
|
||||
MonitorFailure string = "FAILURE"
|
||||
MonitorError string = "ERROR"
|
||||
MonitorUnknown string = "UNKNOWN"
|
||||
)
|
||||
|
||||
type Monitor struct {
|
||||
gorm.Model
|
||||
Slug string `gorm:"unique"`
|
||||
Name string `gorm:"unique"`
|
||||
|
||||
Schedule string
|
||||
WorkerGroups []WorkerGroup `gorm:"many2many:monitor_worker_groups;"`
|
||||
|
||||
Script string `validate:"required"`
|
||||
|
||||
History []MonitorHistory `gorm:"foreignKey:Monitor"`
|
||||
}
|
||||
|
||||
type MonitorHistory struct {
|
||||
gorm.Model
|
||||
Monitor uint
|
||||
Status string
|
||||
Note string
|
||||
}
|
||||
|
||||
type WorkerGroup struct {
|
||||
gorm.Model
|
||||
Name string `gorm:"unique"`
|
||||
Slug string `gorm:"unique"`
|
||||
|
||||
Monitors []Monitor `gorm:"many2many:monitor_worker_groups;"`
|
||||
}
|
|
@ -1,127 +0,0 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"gorm.io/gen"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
)
|
||||
|
||||
var (
|
||||
Q = new(Query)
|
||||
Monitor *monitor
|
||||
MonitorHistory *monitorHistory
|
||||
OAuth2State *oAuth2State
|
||||
WorkerGroup *workerGroup
|
||||
)
|
||||
|
||||
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
*Q = *Use(db, opts...)
|
||||
Monitor = &Q.Monitor
|
||||
MonitorHistory = &Q.MonitorHistory
|
||||
OAuth2State = &Q.OAuth2State
|
||||
WorkerGroup = &Q.WorkerGroup
|
||||
}
|
||||
|
||||
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
Monitor: newMonitor(db, opts...),
|
||||
MonitorHistory: newMonitorHistory(db, opts...),
|
||||
OAuth2State: newOAuth2State(db, opts...),
|
||||
WorkerGroup: newWorkerGroup(db, opts...),
|
||||
}
|
||||
}
|
||||
|
||||
type Query struct {
|
||||
db *gorm.DB
|
||||
|
||||
Monitor monitor
|
||||
MonitorHistory monitorHistory
|
||||
OAuth2State oAuth2State
|
||||
WorkerGroup workerGroup
|
||||
}
|
||||
|
||||
func (q *Query) Available() bool { return q.db != nil }
|
||||
|
||||
func (q *Query) clone(db *gorm.DB) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
Monitor: q.Monitor.clone(db),
|
||||
MonitorHistory: q.MonitorHistory.clone(db),
|
||||
OAuth2State: q.OAuth2State.clone(db),
|
||||
WorkerGroup: q.WorkerGroup.clone(db),
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Query) ReadDB() *Query {
|
||||
return q.ReplaceDB(q.db.Clauses(dbresolver.Read))
|
||||
}
|
||||
|
||||
func (q *Query) WriteDB() *Query {
|
||||
return q.ReplaceDB(q.db.Clauses(dbresolver.Write))
|
||||
}
|
||||
|
||||
func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
return &Query{
|
||||
db: db,
|
||||
Monitor: q.Monitor.replaceDB(db),
|
||||
MonitorHistory: q.MonitorHistory.replaceDB(db),
|
||||
OAuth2State: q.OAuth2State.replaceDB(db),
|
||||
WorkerGroup: q.WorkerGroup.replaceDB(db),
|
||||
}
|
||||
}
|
||||
|
||||
type queryCtx struct {
|
||||
Monitor IMonitorDo
|
||||
MonitorHistory IMonitorHistoryDo
|
||||
OAuth2State IOAuth2StateDo
|
||||
WorkerGroup IWorkerGroupDo
|
||||
}
|
||||
|
||||
func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
return &queryCtx{
|
||||
Monitor: q.Monitor.WithContext(ctx),
|
||||
MonitorHistory: q.MonitorHistory.WithContext(ctx),
|
||||
OAuth2State: q.OAuth2State.WithContext(ctx),
|
||||
WorkerGroup: q.WorkerGroup.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Query) Transaction(fc func(tx *Query) error, opts ...*sql.TxOptions) error {
|
||||
return q.db.Transaction(func(tx *gorm.DB) error { return fc(q.clone(tx)) }, opts...)
|
||||
}
|
||||
|
||||
func (q *Query) Begin(opts ...*sql.TxOptions) *QueryTx {
|
||||
tx := q.db.Begin(opts...)
|
||||
return &QueryTx{Query: q.clone(tx), Error: tx.Error}
|
||||
}
|
||||
|
||||
type QueryTx struct {
|
||||
*Query
|
||||
Error error
|
||||
}
|
||||
|
||||
func (q *QueryTx) Commit() error {
|
||||
return q.db.Commit().Error
|
||||
}
|
||||
|
||||
func (q *QueryTx) Rollback() error {
|
||||
return q.db.Rollback().Error
|
||||
}
|
||||
|
||||
func (q *QueryTx) SavePoint(name string) error {
|
||||
return q.db.SavePoint(name).Error
|
||||
}
|
||||
|
||||
func (q *QueryTx) RollbackTo(name string) error {
|
||||
return q.db.RollbackTo(name).Error
|
||||
}
|
|
@ -1,416 +0,0 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
)
|
||||
|
||||
func newMonitorHistory(db *gorm.DB, opts ...gen.DOOption) monitorHistory {
|
||||
_monitorHistory := monitorHistory{}
|
||||
|
||||
_monitorHistory.monitorHistoryDo.UseDB(db, opts...)
|
||||
_monitorHistory.monitorHistoryDo.UseModel(&models.MonitorHistory{})
|
||||
|
||||
tableName := _monitorHistory.monitorHistoryDo.TableName()
|
||||
_monitorHistory.ALL = field.NewAsterisk(tableName)
|
||||
_monitorHistory.ID = field.NewUint(tableName, "id")
|
||||
_monitorHistory.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_monitorHistory.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_monitorHistory.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
_monitorHistory.Monitor = field.NewUint(tableName, "monitor")
|
||||
_monitorHistory.Status = field.NewString(tableName, "status")
|
||||
_monitorHistory.Note = field.NewString(tableName, "note")
|
||||
|
||||
_monitorHistory.fillFieldMap()
|
||||
|
||||
return _monitorHistory
|
||||
}
|
||||
|
||||
type monitorHistory struct {
|
||||
monitorHistoryDo monitorHistoryDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Uint
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
DeletedAt field.Field
|
||||
Monitor field.Uint
|
||||
Status field.String
|
||||
Note field.String
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (m monitorHistory) Table(newTableName string) *monitorHistory {
|
||||
m.monitorHistoryDo.UseTable(newTableName)
|
||||
return m.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (m monitorHistory) As(alias string) *monitorHistory {
|
||||
m.monitorHistoryDo.DO = *(m.monitorHistoryDo.As(alias).(*gen.DO))
|
||||
return m.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (m *monitorHistory) updateTableName(table string) *monitorHistory {
|
||||
m.ALL = field.NewAsterisk(table)
|
||||
m.ID = field.NewUint(table, "id")
|
||||
m.CreatedAt = field.NewTime(table, "created_at")
|
||||
m.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
m.DeletedAt = field.NewField(table, "deleted_at")
|
||||
m.Monitor = field.NewUint(table, "monitor")
|
||||
m.Status = field.NewString(table, "status")
|
||||
m.Note = field.NewString(table, "note")
|
||||
|
||||
m.fillFieldMap()
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
func (m *monitorHistory) WithContext(ctx context.Context) IMonitorHistoryDo {
|
||||
return m.monitorHistoryDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (m monitorHistory) TableName() string { return m.monitorHistoryDo.TableName() }
|
||||
|
||||
func (m monitorHistory) Alias() string { return m.monitorHistoryDo.Alias() }
|
||||
|
||||
func (m monitorHistory) Columns(cols ...field.Expr) gen.Columns {
|
||||
return m.monitorHistoryDo.Columns(cols...)
|
||||
}
|
||||
|
||||
func (m *monitorHistory) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := m.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (m *monitorHistory) fillFieldMap() {
|
||||
m.fieldMap = make(map[string]field.Expr, 7)
|
||||
m.fieldMap["id"] = m.ID
|
||||
m.fieldMap["created_at"] = m.CreatedAt
|
||||
m.fieldMap["updated_at"] = m.UpdatedAt
|
||||
m.fieldMap["deleted_at"] = m.DeletedAt
|
||||
m.fieldMap["monitor"] = m.Monitor
|
||||
m.fieldMap["status"] = m.Status
|
||||
m.fieldMap["note"] = m.Note
|
||||
}
|
||||
|
||||
func (m monitorHistory) clone(db *gorm.DB) monitorHistory {
|
||||
m.monitorHistoryDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return m
|
||||
}
|
||||
|
||||
func (m monitorHistory) replaceDB(db *gorm.DB) monitorHistory {
|
||||
m.monitorHistoryDo.ReplaceDB(db)
|
||||
return m
|
||||
}
|
||||
|
||||
type monitorHistoryDo struct{ gen.DO }
|
||||
|
||||
type IMonitorHistoryDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IMonitorHistoryDo
|
||||
WithContext(ctx context.Context) IMonitorHistoryDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IMonitorHistoryDo
|
||||
WriteDB() IMonitorHistoryDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IMonitorHistoryDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IMonitorHistoryDo
|
||||
Not(conds ...gen.Condition) IMonitorHistoryDo
|
||||
Or(conds ...gen.Condition) IMonitorHistoryDo
|
||||
Select(conds ...field.Expr) IMonitorHistoryDo
|
||||
Where(conds ...gen.Condition) IMonitorHistoryDo
|
||||
Order(conds ...field.Expr) IMonitorHistoryDo
|
||||
Distinct(cols ...field.Expr) IMonitorHistoryDo
|
||||
Omit(cols ...field.Expr) IMonitorHistoryDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo
|
||||
Group(cols ...field.Expr) IMonitorHistoryDo
|
||||
Having(conds ...gen.Condition) IMonitorHistoryDo
|
||||
Limit(limit int) IMonitorHistoryDo
|
||||
Offset(offset int) IMonitorHistoryDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IMonitorHistoryDo
|
||||
Unscoped() IMonitorHistoryDo
|
||||
Create(values ...*models.MonitorHistory) error
|
||||
CreateInBatches(values []*models.MonitorHistory, batchSize int) error
|
||||
Save(values ...*models.MonitorHistory) error
|
||||
First() (*models.MonitorHistory, error)
|
||||
Take() (*models.MonitorHistory, error)
|
||||
Last() (*models.MonitorHistory, error)
|
||||
Find() ([]*models.MonitorHistory, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.MonitorHistory, err error)
|
||||
FindInBatches(result *[]*models.MonitorHistory, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*models.MonitorHistory) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IMonitorHistoryDo
|
||||
Assign(attrs ...field.AssignExpr) IMonitorHistoryDo
|
||||
Joins(fields ...field.RelationField) IMonitorHistoryDo
|
||||
Preload(fields ...field.RelationField) IMonitorHistoryDo
|
||||
FirstOrInit() (*models.MonitorHistory, error)
|
||||
FirstOrCreate() (*models.MonitorHistory, error)
|
||||
FindByPage(offset int, limit int) (result []*models.MonitorHistory, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IMonitorHistoryDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Debug() IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Debug())
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) WithContext(ctx context.Context) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) ReadDB() IMonitorHistoryDo {
|
||||
return m.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) WriteDB() IMonitorHistoryDo {
|
||||
return m.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Session(config *gorm.Session) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Session(config))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Clauses(conds ...clause.Expression) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Returning(value interface{}, columns ...string) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Not(conds ...gen.Condition) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Or(conds ...gen.Condition) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Select(conds ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Where(conds ...gen.Condition) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Order(conds ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Distinct(cols ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Omit(cols ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Join(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) LeftJoin(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) RightJoin(table schema.Tabler, on ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Group(cols ...field.Expr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Having(conds ...gen.Condition) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Limit(limit int) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Offset(offset int) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Unscoped() IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Create(values ...*models.MonitorHistory) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return m.DO.Create(values)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) CreateInBatches(values []*models.MonitorHistory, batchSize int) error {
|
||||
return m.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (m monitorHistoryDo) Save(values ...*models.MonitorHistory) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return m.DO.Save(values)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) First() (*models.MonitorHistory, error) {
|
||||
if result, err := m.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.MonitorHistory), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Take() (*models.MonitorHistory, error) {
|
||||
if result, err := m.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.MonitorHistory), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Last() (*models.MonitorHistory, error) {
|
||||
if result, err := m.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.MonitorHistory), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Find() ([]*models.MonitorHistory, error) {
|
||||
result, err := m.DO.Find()
|
||||
return result.([]*models.MonitorHistory), err
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.MonitorHistory, err error) {
|
||||
buf := make([]*models.MonitorHistory, 0, batchSize)
|
||||
err = m.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) FindInBatches(result *[]*models.MonitorHistory, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return m.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Attrs(attrs ...field.AssignExpr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Assign(attrs ...field.AssignExpr) IMonitorHistoryDo {
|
||||
return m.withDO(m.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Joins(fields ...field.RelationField) IMonitorHistoryDo {
|
||||
for _, _f := range fields {
|
||||
m = *m.withDO(m.DO.Joins(_f))
|
||||
}
|
||||
return &m
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Preload(fields ...field.RelationField) IMonitorHistoryDo {
|
||||
for _, _f := range fields {
|
||||
m = *m.withDO(m.DO.Preload(_f))
|
||||
}
|
||||
return &m
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) FirstOrInit() (*models.MonitorHistory, error) {
|
||||
if result, err := m.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.MonitorHistory), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) FirstOrCreate() (*models.MonitorHistory, error) {
|
||||
if result, err := m.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.MonitorHistory), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) FindByPage(offset int, limit int) (result []*models.MonitorHistory, count int64, err error) {
|
||||
result, err = m.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = m.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = m.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = m.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Scan(result interface{}) (err error) {
|
||||
return m.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (m monitorHistoryDo) Delete(models ...*models.MonitorHistory) (result gen.ResultInfo, err error) {
|
||||
return m.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (m *monitorHistoryDo) withDO(do gen.Dao) *monitorHistoryDo {
|
||||
m.DO = *do.(*gen.DO)
|
||||
return m
|
||||
}
|
|
@ -1,604 +0,0 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
)
|
||||
|
||||
func newMonitor(db *gorm.DB, opts ...gen.DOOption) monitor {
|
||||
_monitor := monitor{}
|
||||
|
||||
_monitor.monitorDo.UseDB(db, opts...)
|
||||
_monitor.monitorDo.UseModel(&models.Monitor{})
|
||||
|
||||
tableName := _monitor.monitorDo.TableName()
|
||||
_monitor.ALL = field.NewAsterisk(tableName)
|
||||
_monitor.ID = field.NewUint(tableName, "id")
|
||||
_monitor.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_monitor.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_monitor.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
_monitor.Slug = field.NewString(tableName, "slug")
|
||||
_monitor.Name = field.NewString(tableName, "name")
|
||||
_monitor.Schedule = field.NewString(tableName, "schedule")
|
||||
_monitor.Script = field.NewString(tableName, "script")
|
||||
_monitor.History = monitorHasManyHistory{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("History", "models.MonitorHistory"),
|
||||
}
|
||||
|
||||
_monitor.WorkerGroups = monitorManyToManyWorkerGroups{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("WorkerGroups", "models.WorkerGroup"),
|
||||
Monitors: struct {
|
||||
field.RelationField
|
||||
History struct {
|
||||
field.RelationField
|
||||
}
|
||||
WorkerGroups struct {
|
||||
field.RelationField
|
||||
}
|
||||
}{
|
||||
RelationField: field.NewRelation("WorkerGroups.Monitors", "models.Monitor"),
|
||||
History: struct {
|
||||
field.RelationField
|
||||
}{
|
||||
RelationField: field.NewRelation("WorkerGroups.Monitors.History", "models.MonitorHistory"),
|
||||
},
|
||||
WorkerGroups: struct {
|
||||
field.RelationField
|
||||
}{
|
||||
RelationField: field.NewRelation("WorkerGroups.Monitors.WorkerGroups", "models.WorkerGroup"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
_monitor.fillFieldMap()
|
||||
|
||||
return _monitor
|
||||
}
|
||||
|
||||
type monitor struct {
|
||||
monitorDo monitorDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Uint
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
DeletedAt field.Field
|
||||
Slug field.String
|
||||
Name field.String
|
||||
Schedule field.String
|
||||
Script field.String
|
||||
History monitorHasManyHistory
|
||||
|
||||
WorkerGroups monitorManyToManyWorkerGroups
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (m monitor) Table(newTableName string) *monitor {
|
||||
m.monitorDo.UseTable(newTableName)
|
||||
return m.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (m monitor) As(alias string) *monitor {
|
||||
m.monitorDo.DO = *(m.monitorDo.As(alias).(*gen.DO))
|
||||
return m.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (m *monitor) updateTableName(table string) *monitor {
|
||||
m.ALL = field.NewAsterisk(table)
|
||||
m.ID = field.NewUint(table, "id")
|
||||
m.CreatedAt = field.NewTime(table, "created_at")
|
||||
m.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
m.DeletedAt = field.NewField(table, "deleted_at")
|
||||
m.Slug = field.NewString(table, "slug")
|
||||
m.Name = field.NewString(table, "name")
|
||||
m.Schedule = field.NewString(table, "schedule")
|
||||
m.Script = field.NewString(table, "script")
|
||||
|
||||
m.fillFieldMap()
|
||||
|
||||
return m
|
||||
}
|
||||
|
||||
func (m *monitor) WithContext(ctx context.Context) IMonitorDo { return m.monitorDo.WithContext(ctx) }
|
||||
|
||||
func (m monitor) TableName() string { return m.monitorDo.TableName() }
|
||||
|
||||
func (m monitor) Alias() string { return m.monitorDo.Alias() }
|
||||
|
||||
func (m monitor) Columns(cols ...field.Expr) gen.Columns { return m.monitorDo.Columns(cols...) }
|
||||
|
||||
func (m *monitor) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := m.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (m *monitor) fillFieldMap() {
|
||||
m.fieldMap = make(map[string]field.Expr, 10)
|
||||
m.fieldMap["id"] = m.ID
|
||||
m.fieldMap["created_at"] = m.CreatedAt
|
||||
m.fieldMap["updated_at"] = m.UpdatedAt
|
||||
m.fieldMap["deleted_at"] = m.DeletedAt
|
||||
m.fieldMap["slug"] = m.Slug
|
||||
m.fieldMap["name"] = m.Name
|
||||
m.fieldMap["schedule"] = m.Schedule
|
||||
m.fieldMap["script"] = m.Script
|
||||
|
||||
}
|
||||
|
||||
func (m monitor) clone(db *gorm.DB) monitor {
|
||||
m.monitorDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return m
|
||||
}
|
||||
|
||||
func (m monitor) replaceDB(db *gorm.DB) monitor {
|
||||
m.monitorDo.ReplaceDB(db)
|
||||
return m
|
||||
}
|
||||
|
||||
type monitorHasManyHistory struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistory) Where(conds ...field.Expr) *monitorHasManyHistory {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistory) WithContext(ctx context.Context) *monitorHasManyHistory {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistory) Session(session *gorm.Session) *monitorHasManyHistory {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistory) Model(m *models.Monitor) *monitorHasManyHistoryTx {
|
||||
return &monitorHasManyHistoryTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type monitorHasManyHistoryTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a monitorHasManyHistoryTx) Find() (result []*models.MonitorHistory, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistoryTx) Append(values ...*models.MonitorHistory) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistoryTx) Replace(values ...*models.MonitorHistory) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistoryTx) Delete(values ...*models.MonitorHistory) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistoryTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a monitorHasManyHistoryTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type monitorManyToManyWorkerGroups struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
|
||||
Monitors struct {
|
||||
field.RelationField
|
||||
History struct {
|
||||
field.RelationField
|
||||
}
|
||||
WorkerGroups struct {
|
||||
field.RelationField
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroups) Where(conds ...field.Expr) *monitorManyToManyWorkerGroups {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroups) WithContext(ctx context.Context) *monitorManyToManyWorkerGroups {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroups) Session(session *gorm.Session) *monitorManyToManyWorkerGroups {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroups) Model(m *models.Monitor) *monitorManyToManyWorkerGroupsTx {
|
||||
return &monitorManyToManyWorkerGroupsTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type monitorManyToManyWorkerGroupsTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Find() (result []*models.WorkerGroup, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Append(values ...*models.WorkerGroup) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Replace(values ...*models.WorkerGroup) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Delete(values ...*models.WorkerGroup) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a monitorManyToManyWorkerGroupsTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type monitorDo struct{ gen.DO }
|
||||
|
||||
type IMonitorDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IMonitorDo
|
||||
WithContext(ctx context.Context) IMonitorDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IMonitorDo
|
||||
WriteDB() IMonitorDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IMonitorDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IMonitorDo
|
||||
Not(conds ...gen.Condition) IMonitorDo
|
||||
Or(conds ...gen.Condition) IMonitorDo
|
||||
Select(conds ...field.Expr) IMonitorDo
|
||||
Where(conds ...gen.Condition) IMonitorDo
|
||||
Order(conds ...field.Expr) IMonitorDo
|
||||
Distinct(cols ...field.Expr) IMonitorDo
|
||||
Omit(cols ...field.Expr) IMonitorDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IMonitorDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IMonitorDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IMonitorDo
|
||||
Group(cols ...field.Expr) IMonitorDo
|
||||
Having(conds ...gen.Condition) IMonitorDo
|
||||
Limit(limit int) IMonitorDo
|
||||
Offset(offset int) IMonitorDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IMonitorDo
|
||||
Unscoped() IMonitorDo
|
||||
Create(values ...*models.Monitor) error
|
||||
CreateInBatches(values []*models.Monitor, batchSize int) error
|
||||
Save(values ...*models.Monitor) error
|
||||
First() (*models.Monitor, error)
|
||||
Take() (*models.Monitor, error)
|
||||
Last() (*models.Monitor, error)
|
||||
Find() ([]*models.Monitor, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.Monitor, err error)
|
||||
FindInBatches(result *[]*models.Monitor, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*models.Monitor) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IMonitorDo
|
||||
Assign(attrs ...field.AssignExpr) IMonitorDo
|
||||
Joins(fields ...field.RelationField) IMonitorDo
|
||||
Preload(fields ...field.RelationField) IMonitorDo
|
||||
FirstOrInit() (*models.Monitor, error)
|
||||
FirstOrCreate() (*models.Monitor, error)
|
||||
FindByPage(offset int, limit int) (result []*models.Monitor, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IMonitorDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (m monitorDo) Debug() IMonitorDo {
|
||||
return m.withDO(m.DO.Debug())
|
||||
}
|
||||
|
||||
func (m monitorDo) WithContext(ctx context.Context) IMonitorDo {
|
||||
return m.withDO(m.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (m monitorDo) ReadDB() IMonitorDo {
|
||||
return m.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (m monitorDo) WriteDB() IMonitorDo {
|
||||
return m.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (m monitorDo) Session(config *gorm.Session) IMonitorDo {
|
||||
return m.withDO(m.DO.Session(config))
|
||||
}
|
||||
|
||||
func (m monitorDo) Clauses(conds ...clause.Expression) IMonitorDo {
|
||||
return m.withDO(m.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Returning(value interface{}, columns ...string) IMonitorDo {
|
||||
return m.withDO(m.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Not(conds ...gen.Condition) IMonitorDo {
|
||||
return m.withDO(m.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Or(conds ...gen.Condition) IMonitorDo {
|
||||
return m.withDO(m.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Select(conds ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Where(conds ...gen.Condition) IMonitorDo {
|
||||
return m.withDO(m.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Order(conds ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Distinct(cols ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Omit(cols ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Join(table schema.Tabler, on ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorDo) LeftJoin(table schema.Tabler, on ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorDo) RightJoin(table schema.Tabler, on ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Group(cols ...field.Expr) IMonitorDo {
|
||||
return m.withDO(m.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Having(conds ...gen.Condition) IMonitorDo {
|
||||
return m.withDO(m.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Limit(limit int) IMonitorDo {
|
||||
return m.withDO(m.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (m monitorDo) Offset(offset int) IMonitorDo {
|
||||
return m.withDO(m.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (m monitorDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IMonitorDo {
|
||||
return m.withDO(m.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Unscoped() IMonitorDo {
|
||||
return m.withDO(m.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (m monitorDo) Create(values ...*models.Monitor) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return m.DO.Create(values)
|
||||
}
|
||||
|
||||
func (m monitorDo) CreateInBatches(values []*models.Monitor, batchSize int) error {
|
||||
return m.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (m monitorDo) Save(values ...*models.Monitor) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return m.DO.Save(values)
|
||||
}
|
||||
|
||||
func (m monitorDo) First() (*models.Monitor, error) {
|
||||
if result, err := m.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.Monitor), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorDo) Take() (*models.Monitor, error) {
|
||||
if result, err := m.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.Monitor), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorDo) Last() (*models.Monitor, error) {
|
||||
if result, err := m.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.Monitor), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorDo) Find() ([]*models.Monitor, error) {
|
||||
result, err := m.DO.Find()
|
||||
return result.([]*models.Monitor), err
|
||||
}
|
||||
|
||||
func (m monitorDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.Monitor, err error) {
|
||||
buf := make([]*models.Monitor, 0, batchSize)
|
||||
err = m.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (m monitorDo) FindInBatches(result *[]*models.Monitor, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return m.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (m monitorDo) Attrs(attrs ...field.AssignExpr) IMonitorDo {
|
||||
return m.withDO(m.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Assign(attrs ...field.AssignExpr) IMonitorDo {
|
||||
return m.withDO(m.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (m monitorDo) Joins(fields ...field.RelationField) IMonitorDo {
|
||||
for _, _f := range fields {
|
||||
m = *m.withDO(m.DO.Joins(_f))
|
||||
}
|
||||
return &m
|
||||
}
|
||||
|
||||
func (m monitorDo) Preload(fields ...field.RelationField) IMonitorDo {
|
||||
for _, _f := range fields {
|
||||
m = *m.withDO(m.DO.Preload(_f))
|
||||
}
|
||||
return &m
|
||||
}
|
||||
|
||||
func (m monitorDo) FirstOrInit() (*models.Monitor, error) {
|
||||
if result, err := m.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.Monitor), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorDo) FirstOrCreate() (*models.Monitor, error) {
|
||||
if result, err := m.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.Monitor), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (m monitorDo) FindByPage(offset int, limit int) (result []*models.Monitor, count int64, err error) {
|
||||
result, err = m.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = m.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (m monitorDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = m.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = m.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (m monitorDo) Scan(result interface{}) (err error) {
|
||||
return m.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (m monitorDo) Delete(models ...*models.Monitor) (result gen.ResultInfo, err error) {
|
||||
return m.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (m *monitorDo) withDO(do gen.Dao) *monitorDo {
|
||||
m.DO = *do.(*gen.DO)
|
||||
return m
|
||||
}
|
|
@ -1,394 +0,0 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
)
|
||||
|
||||
func newOAuth2State(db *gorm.DB, opts ...gen.DOOption) oAuth2State {
|
||||
_oAuth2State := oAuth2State{}
|
||||
|
||||
_oAuth2State.oAuth2StateDo.UseDB(db, opts...)
|
||||
_oAuth2State.oAuth2StateDo.UseModel(&models.OAuth2State{})
|
||||
|
||||
tableName := _oAuth2State.oAuth2StateDo.TableName()
|
||||
_oAuth2State.ALL = field.NewAsterisk(tableName)
|
||||
_oAuth2State.State = field.NewString(tableName, "state")
|
||||
_oAuth2State.Expiry = field.NewTime(tableName, "expiry")
|
||||
|
||||
_oAuth2State.fillFieldMap()
|
||||
|
||||
return _oAuth2State
|
||||
}
|
||||
|
||||
type oAuth2State struct {
|
||||
oAuth2StateDo oAuth2StateDo
|
||||
|
||||
ALL field.Asterisk
|
||||
State field.String
|
||||
Expiry field.Time
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (o oAuth2State) Table(newTableName string) *oAuth2State {
|
||||
o.oAuth2StateDo.UseTable(newTableName)
|
||||
return o.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (o oAuth2State) As(alias string) *oAuth2State {
|
||||
o.oAuth2StateDo.DO = *(o.oAuth2StateDo.As(alias).(*gen.DO))
|
||||
return o.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (o *oAuth2State) updateTableName(table string) *oAuth2State {
|
||||
o.ALL = field.NewAsterisk(table)
|
||||
o.State = field.NewString(table, "state")
|
||||
o.Expiry = field.NewTime(table, "expiry")
|
||||
|
||||
o.fillFieldMap()
|
||||
|
||||
return o
|
||||
}
|
||||
|
||||
func (o *oAuth2State) WithContext(ctx context.Context) IOAuth2StateDo {
|
||||
return o.oAuth2StateDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (o oAuth2State) TableName() string { return o.oAuth2StateDo.TableName() }
|
||||
|
||||
func (o oAuth2State) Alias() string { return o.oAuth2StateDo.Alias() }
|
||||
|
||||
func (o oAuth2State) Columns(cols ...field.Expr) gen.Columns { return o.oAuth2StateDo.Columns(cols...) }
|
||||
|
||||
func (o *oAuth2State) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := o.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (o *oAuth2State) fillFieldMap() {
|
||||
o.fieldMap = make(map[string]field.Expr, 2)
|
||||
o.fieldMap["state"] = o.State
|
||||
o.fieldMap["expiry"] = o.Expiry
|
||||
}
|
||||
|
||||
func (o oAuth2State) clone(db *gorm.DB) oAuth2State {
|
||||
o.oAuth2StateDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return o
|
||||
}
|
||||
|
||||
func (o oAuth2State) replaceDB(db *gorm.DB) oAuth2State {
|
||||
o.oAuth2StateDo.ReplaceDB(db)
|
||||
return o
|
||||
}
|
||||
|
||||
type oAuth2StateDo struct{ gen.DO }
|
||||
|
||||
type IOAuth2StateDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IOAuth2StateDo
|
||||
WithContext(ctx context.Context) IOAuth2StateDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IOAuth2StateDo
|
||||
WriteDB() IOAuth2StateDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IOAuth2StateDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IOAuth2StateDo
|
||||
Not(conds ...gen.Condition) IOAuth2StateDo
|
||||
Or(conds ...gen.Condition) IOAuth2StateDo
|
||||
Select(conds ...field.Expr) IOAuth2StateDo
|
||||
Where(conds ...gen.Condition) IOAuth2StateDo
|
||||
Order(conds ...field.Expr) IOAuth2StateDo
|
||||
Distinct(cols ...field.Expr) IOAuth2StateDo
|
||||
Omit(cols ...field.Expr) IOAuth2StateDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IOAuth2StateDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IOAuth2StateDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IOAuth2StateDo
|
||||
Group(cols ...field.Expr) IOAuth2StateDo
|
||||
Having(conds ...gen.Condition) IOAuth2StateDo
|
||||
Limit(limit int) IOAuth2StateDo
|
||||
Offset(offset int) IOAuth2StateDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IOAuth2StateDo
|
||||
Unscoped() IOAuth2StateDo
|
||||
Create(values ...*models.OAuth2State) error
|
||||
CreateInBatches(values []*models.OAuth2State, batchSize int) error
|
||||
Save(values ...*models.OAuth2State) error
|
||||
First() (*models.OAuth2State, error)
|
||||
Take() (*models.OAuth2State, error)
|
||||
Last() (*models.OAuth2State, error)
|
||||
Find() ([]*models.OAuth2State, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.OAuth2State, err error)
|
||||
FindInBatches(result *[]*models.OAuth2State, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*models.OAuth2State) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IOAuth2StateDo
|
||||
Assign(attrs ...field.AssignExpr) IOAuth2StateDo
|
||||
Joins(fields ...field.RelationField) IOAuth2StateDo
|
||||
Preload(fields ...field.RelationField) IOAuth2StateDo
|
||||
FirstOrInit() (*models.OAuth2State, error)
|
||||
FirstOrCreate() (*models.OAuth2State, error)
|
||||
FindByPage(offset int, limit int) (result []*models.OAuth2State, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IOAuth2StateDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Debug() IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Debug())
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) WithContext(ctx context.Context) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) ReadDB() IOAuth2StateDo {
|
||||
return o.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) WriteDB() IOAuth2StateDo {
|
||||
return o.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Session(config *gorm.Session) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Session(config))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Clauses(conds ...clause.Expression) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Returning(value interface{}, columns ...string) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Not(conds ...gen.Condition) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Or(conds ...gen.Condition) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Select(conds ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Where(conds ...gen.Condition) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Order(conds ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Distinct(cols ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Omit(cols ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Join(table schema.Tabler, on ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) LeftJoin(table schema.Tabler, on ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) RightJoin(table schema.Tabler, on ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Group(cols ...field.Expr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Having(conds ...gen.Condition) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Limit(limit int) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Offset(offset int) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Unscoped() IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Create(values ...*models.OAuth2State) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return o.DO.Create(values)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) CreateInBatches(values []*models.OAuth2State, batchSize int) error {
|
||||
return o.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (o oAuth2StateDo) Save(values ...*models.OAuth2State) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return o.DO.Save(values)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) First() (*models.OAuth2State, error) {
|
||||
if result, err := o.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.OAuth2State), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Take() (*models.OAuth2State, error) {
|
||||
if result, err := o.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.OAuth2State), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Last() (*models.OAuth2State, error) {
|
||||
if result, err := o.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.OAuth2State), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Find() ([]*models.OAuth2State, error) {
|
||||
result, err := o.DO.Find()
|
||||
return result.([]*models.OAuth2State), err
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.OAuth2State, err error) {
|
||||
buf := make([]*models.OAuth2State, 0, batchSize)
|
||||
err = o.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) FindInBatches(result *[]*models.OAuth2State, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return o.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Attrs(attrs ...field.AssignExpr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Assign(attrs ...field.AssignExpr) IOAuth2StateDo {
|
||||
return o.withDO(o.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Joins(fields ...field.RelationField) IOAuth2StateDo {
|
||||
for _, _f := range fields {
|
||||
o = *o.withDO(o.DO.Joins(_f))
|
||||
}
|
||||
return &o
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Preload(fields ...field.RelationField) IOAuth2StateDo {
|
||||
for _, _f := range fields {
|
||||
o = *o.withDO(o.DO.Preload(_f))
|
||||
}
|
||||
return &o
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) FirstOrInit() (*models.OAuth2State, error) {
|
||||
if result, err := o.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.OAuth2State), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) FirstOrCreate() (*models.OAuth2State, error) {
|
||||
if result, err := o.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.OAuth2State), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) FindByPage(offset int, limit int) (result []*models.OAuth2State, count int64, err error) {
|
||||
result, err = o.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = o.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = o.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = o.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Scan(result interface{}) (err error) {
|
||||
return o.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (o oAuth2StateDo) Delete(models ...*models.OAuth2State) (result gen.ResultInfo, err error) {
|
||||
return o.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (o *oAuth2StateDo) withDO(do gen.Dao) *oAuth2StateDo {
|
||||
o.DO = *do.(*gen.DO)
|
||||
return o
|
||||
}
|
|
@ -1,516 +0,0 @@
|
|||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
// Code generated by gorm.io/gen. DO NOT EDIT.
|
||||
|
||||
package query
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
)
|
||||
|
||||
func newWorkerGroup(db *gorm.DB, opts ...gen.DOOption) workerGroup {
|
||||
_workerGroup := workerGroup{}
|
||||
|
||||
_workerGroup.workerGroupDo.UseDB(db, opts...)
|
||||
_workerGroup.workerGroupDo.UseModel(&models.WorkerGroup{})
|
||||
|
||||
tableName := _workerGroup.workerGroupDo.TableName()
|
||||
_workerGroup.ALL = field.NewAsterisk(tableName)
|
||||
_workerGroup.ID = field.NewUint(tableName, "id")
|
||||
_workerGroup.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_workerGroup.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_workerGroup.DeletedAt = field.NewField(tableName, "deleted_at")
|
||||
_workerGroup.Name = field.NewString(tableName, "name")
|
||||
_workerGroup.Slug = field.NewString(tableName, "slug")
|
||||
_workerGroup.Monitors = workerGroupManyToManyMonitors{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("Monitors", "models.Monitor"),
|
||||
History: struct {
|
||||
field.RelationField
|
||||
}{
|
||||
RelationField: field.NewRelation("Monitors.History", "models.MonitorHistory"),
|
||||
},
|
||||
WorkerGroups: struct {
|
||||
field.RelationField
|
||||
Monitors struct {
|
||||
field.RelationField
|
||||
}
|
||||
}{
|
||||
RelationField: field.NewRelation("Monitors.WorkerGroups", "models.WorkerGroup"),
|
||||
Monitors: struct {
|
||||
field.RelationField
|
||||
}{
|
||||
RelationField: field.NewRelation("Monitors.WorkerGroups.Monitors", "models.Monitor"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
_workerGroup.fillFieldMap()
|
||||
|
||||
return _workerGroup
|
||||
}
|
||||
|
||||
type workerGroup struct {
|
||||
workerGroupDo workerGroupDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Uint
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
DeletedAt field.Field
|
||||
Name field.String
|
||||
Slug field.String
|
||||
Monitors workerGroupManyToManyMonitors
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (w workerGroup) Table(newTableName string) *workerGroup {
|
||||
w.workerGroupDo.UseTable(newTableName)
|
||||
return w.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (w workerGroup) As(alias string) *workerGroup {
|
||||
w.workerGroupDo.DO = *(w.workerGroupDo.As(alias).(*gen.DO))
|
||||
return w.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (w *workerGroup) updateTableName(table string) *workerGroup {
|
||||
w.ALL = field.NewAsterisk(table)
|
||||
w.ID = field.NewUint(table, "id")
|
||||
w.CreatedAt = field.NewTime(table, "created_at")
|
||||
w.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
w.DeletedAt = field.NewField(table, "deleted_at")
|
||||
w.Name = field.NewString(table, "name")
|
||||
w.Slug = field.NewString(table, "slug")
|
||||
|
||||
w.fillFieldMap()
|
||||
|
||||
return w
|
||||
}
|
||||
|
||||
func (w *workerGroup) WithContext(ctx context.Context) IWorkerGroupDo {
|
||||
return w.workerGroupDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (w workerGroup) TableName() string { return w.workerGroupDo.TableName() }
|
||||
|
||||
func (w workerGroup) Alias() string { return w.workerGroupDo.Alias() }
|
||||
|
||||
func (w workerGroup) Columns(cols ...field.Expr) gen.Columns { return w.workerGroupDo.Columns(cols...) }
|
||||
|
||||
func (w *workerGroup) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := w.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (w *workerGroup) fillFieldMap() {
|
||||
w.fieldMap = make(map[string]field.Expr, 7)
|
||||
w.fieldMap["id"] = w.ID
|
||||
w.fieldMap["created_at"] = w.CreatedAt
|
||||
w.fieldMap["updated_at"] = w.UpdatedAt
|
||||
w.fieldMap["deleted_at"] = w.DeletedAt
|
||||
w.fieldMap["name"] = w.Name
|
||||
w.fieldMap["slug"] = w.Slug
|
||||
|
||||
}
|
||||
|
||||
func (w workerGroup) clone(db *gorm.DB) workerGroup {
|
||||
w.workerGroupDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return w
|
||||
}
|
||||
|
||||
func (w workerGroup) replaceDB(db *gorm.DB) workerGroup {
|
||||
w.workerGroupDo.ReplaceDB(db)
|
||||
return w
|
||||
}
|
||||
|
||||
type workerGroupManyToManyMonitors struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
|
||||
History struct {
|
||||
field.RelationField
|
||||
}
|
||||
WorkerGroups struct {
|
||||
field.RelationField
|
||||
Monitors struct {
|
||||
field.RelationField
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitors) Where(conds ...field.Expr) *workerGroupManyToManyMonitors {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitors) WithContext(ctx context.Context) *workerGroupManyToManyMonitors {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitors) Session(session *gorm.Session) *workerGroupManyToManyMonitors {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitors) Model(m *models.WorkerGroup) *workerGroupManyToManyMonitorsTx {
|
||||
return &workerGroupManyToManyMonitorsTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
type workerGroupManyToManyMonitorsTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Find() (result []*models.Monitor, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Append(values ...*models.Monitor) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Replace(values ...*models.Monitor) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Delete(values ...*models.Monitor) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a workerGroupManyToManyMonitorsTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
type workerGroupDo struct{ gen.DO }
|
||||
|
||||
type IWorkerGroupDo interface {
|
||||
gen.SubQuery
|
||||
Debug() IWorkerGroupDo
|
||||
WithContext(ctx context.Context) IWorkerGroupDo
|
||||
WithResult(fc func(tx gen.Dao)) gen.ResultInfo
|
||||
ReplaceDB(db *gorm.DB)
|
||||
ReadDB() IWorkerGroupDo
|
||||
WriteDB() IWorkerGroupDo
|
||||
As(alias string) gen.Dao
|
||||
Session(config *gorm.Session) IWorkerGroupDo
|
||||
Columns(cols ...field.Expr) gen.Columns
|
||||
Clauses(conds ...clause.Expression) IWorkerGroupDo
|
||||
Not(conds ...gen.Condition) IWorkerGroupDo
|
||||
Or(conds ...gen.Condition) IWorkerGroupDo
|
||||
Select(conds ...field.Expr) IWorkerGroupDo
|
||||
Where(conds ...gen.Condition) IWorkerGroupDo
|
||||
Order(conds ...field.Expr) IWorkerGroupDo
|
||||
Distinct(cols ...field.Expr) IWorkerGroupDo
|
||||
Omit(cols ...field.Expr) IWorkerGroupDo
|
||||
Join(table schema.Tabler, on ...field.Expr) IWorkerGroupDo
|
||||
LeftJoin(table schema.Tabler, on ...field.Expr) IWorkerGroupDo
|
||||
RightJoin(table schema.Tabler, on ...field.Expr) IWorkerGroupDo
|
||||
Group(cols ...field.Expr) IWorkerGroupDo
|
||||
Having(conds ...gen.Condition) IWorkerGroupDo
|
||||
Limit(limit int) IWorkerGroupDo
|
||||
Offset(offset int) IWorkerGroupDo
|
||||
Count() (count int64, err error)
|
||||
Scopes(funcs ...func(gen.Dao) gen.Dao) IWorkerGroupDo
|
||||
Unscoped() IWorkerGroupDo
|
||||
Create(values ...*models.WorkerGroup) error
|
||||
CreateInBatches(values []*models.WorkerGroup, batchSize int) error
|
||||
Save(values ...*models.WorkerGroup) error
|
||||
First() (*models.WorkerGroup, error)
|
||||
Take() (*models.WorkerGroup, error)
|
||||
Last() (*models.WorkerGroup, error)
|
||||
Find() ([]*models.WorkerGroup, error)
|
||||
FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.WorkerGroup, err error)
|
||||
FindInBatches(result *[]*models.WorkerGroup, batchSize int, fc func(tx gen.Dao, batch int) error) error
|
||||
Pluck(column field.Expr, dest interface{}) error
|
||||
Delete(...*models.WorkerGroup) (info gen.ResultInfo, err error)
|
||||
Update(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
Updates(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumn(column field.Expr, value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateColumnSimple(columns ...field.AssignExpr) (info gen.ResultInfo, err error)
|
||||
UpdateColumns(value interface{}) (info gen.ResultInfo, err error)
|
||||
UpdateFrom(q gen.SubQuery) gen.Dao
|
||||
Attrs(attrs ...field.AssignExpr) IWorkerGroupDo
|
||||
Assign(attrs ...field.AssignExpr) IWorkerGroupDo
|
||||
Joins(fields ...field.RelationField) IWorkerGroupDo
|
||||
Preload(fields ...field.RelationField) IWorkerGroupDo
|
||||
FirstOrInit() (*models.WorkerGroup, error)
|
||||
FirstOrCreate() (*models.WorkerGroup, error)
|
||||
FindByPage(offset int, limit int) (result []*models.WorkerGroup, count int64, err error)
|
||||
ScanByPage(result interface{}, offset int, limit int) (count int64, err error)
|
||||
Scan(result interface{}) (err error)
|
||||
Returning(value interface{}, columns ...string) IWorkerGroupDo
|
||||
UnderlyingDB() *gorm.DB
|
||||
schema.Tabler
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Debug() IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Debug())
|
||||
}
|
||||
|
||||
func (w workerGroupDo) WithContext(ctx context.Context) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) ReadDB() IWorkerGroupDo {
|
||||
return w.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) WriteDB() IWorkerGroupDo {
|
||||
return w.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Session(config *gorm.Session) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Session(config))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Clauses(conds ...clause.Expression) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Returning(value interface{}, columns ...string) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Not(conds ...gen.Condition) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Or(conds ...gen.Condition) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Select(conds ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Where(conds ...gen.Condition) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Order(conds ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Distinct(cols ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Omit(cols ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Join(table schema.Tabler, on ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) LeftJoin(table schema.Tabler, on ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) RightJoin(table schema.Tabler, on ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Group(cols ...field.Expr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Having(conds ...gen.Condition) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Limit(limit int) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Offset(offset int) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Scopes(funcs ...func(gen.Dao) gen.Dao) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Unscoped() IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Create(values ...*models.WorkerGroup) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return w.DO.Create(values)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) CreateInBatches(values []*models.WorkerGroup, batchSize int) error {
|
||||
return w.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (w workerGroupDo) Save(values ...*models.WorkerGroup) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return w.DO.Save(values)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) First() (*models.WorkerGroup, error) {
|
||||
if result, err := w.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.WorkerGroup), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Take() (*models.WorkerGroup, error) {
|
||||
if result, err := w.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.WorkerGroup), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Last() (*models.WorkerGroup, error) {
|
||||
if result, err := w.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.WorkerGroup), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Find() ([]*models.WorkerGroup, error) {
|
||||
result, err := w.DO.Find()
|
||||
return result.([]*models.WorkerGroup), err
|
||||
}
|
||||
|
||||
func (w workerGroupDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*models.WorkerGroup, err error) {
|
||||
buf := make([]*models.WorkerGroup, 0, batchSize)
|
||||
err = w.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (w workerGroupDo) FindInBatches(result *[]*models.WorkerGroup, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return w.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Attrs(attrs ...field.AssignExpr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Assign(attrs ...field.AssignExpr) IWorkerGroupDo {
|
||||
return w.withDO(w.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Joins(fields ...field.RelationField) IWorkerGroupDo {
|
||||
for _, _f := range fields {
|
||||
w = *w.withDO(w.DO.Joins(_f))
|
||||
}
|
||||
return &w
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Preload(fields ...field.RelationField) IWorkerGroupDo {
|
||||
for _, _f := range fields {
|
||||
w = *w.withDO(w.DO.Preload(_f))
|
||||
}
|
||||
return &w
|
||||
}
|
||||
|
||||
func (w workerGroupDo) FirstOrInit() (*models.WorkerGroup, error) {
|
||||
if result, err := w.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.WorkerGroup), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (w workerGroupDo) FirstOrCreate() (*models.WorkerGroup, error) {
|
||||
if result, err := w.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*models.WorkerGroup), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (w workerGroupDo) FindByPage(offset int, limit int) (result []*models.WorkerGroup, count int64, err error) {
|
||||
result, err = w.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = w.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (w workerGroupDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = w.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = w.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Scan(result interface{}) (err error) {
|
||||
return w.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (w workerGroupDo) Delete(models ...*models.WorkerGroup) (result gen.ResultInfo, err error) {
|
||||
return w.DO.Delete(models)
|
||||
}
|
||||
|
||||
func (w *workerGroupDo) withDO(do gen.Dao) *workerGroupDo {
|
||||
w.DO = *do.(*gen.DO)
|
||||
return w
|
||||
}
|
|
@ -5,62 +5,193 @@ import (
|
|||
"log"
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models/query"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/workflows"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"go.temporal.io/sdk/client"
|
||||
"go.temporal.io/sdk/temporal"
|
||||
"gorm.io/gorm"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
func getScheduleId(monitor *models.Monitor, group string) string {
|
||||
return "monitor-" + monitor.Slug + "-" + group
|
||||
}
|
||||
|
||||
func CreateMonitor(ctx context.Context, query *query.Query, monitor *models.Monitor) error {
|
||||
return query.Monitor.WithContext(ctx).Create(monitor)
|
||||
}
|
||||
|
||||
func UpdateMonitor(ctx context.Context, q *query.Query, monitor *models.Monitor) error {
|
||||
_, err := q.Monitor.WithContext(ctx).Where(
|
||||
q.Monitor.Slug.Eq(monitor.Slug),
|
||||
).Updates(monitor)
|
||||
|
||||
func CreateMonitor(ctx context.Context, db *sqlx.DB, monitor *models.Monitor) error {
|
||||
_, err := db.NamedExecContext(ctx,
|
||||
"INSERT INTO monitors (slug, name, script, schedule) VALUES (:slug, :name, :script, :schedule)",
|
||||
monitor,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func UpdateMonitorWorkerGroups(ctx context.Context, q *query.Query, monitor *models.Monitor, workerGroups []*models.WorkerGroup) error {
|
||||
return q.Monitor.WorkerGroups.Model(monitor).Replace(workerGroups...)
|
||||
func UpdateMonitor(ctx context.Context, db *sqlx.DB, monitor *models.Monitor) error {
|
||||
_, err := db.NamedExecContext(ctx,
|
||||
"UPDATE monitors SET name=:name, script=:script, schedule=:schedule WHERE slug=:slug",
|
||||
monitor,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetMonitor(ctx context.Context, q *query.Query, slug string) (*models.Monitor, error) {
|
||||
return q.Monitor.WithContext(ctx).Where(
|
||||
q.Monitor.Slug.Eq(slug),
|
||||
).Preload(
|
||||
q.Monitor.WorkerGroups,
|
||||
q.Monitor.History,
|
||||
).First()
|
||||
func UpdateMonitorWorkerGroups(ctx context.Context, db *sqlx.DB, monitor *models.Monitor, workerGroups []*models.WorkerGroup) error {
|
||||
tx, err := db.BeginTxx(ctx, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.ExecContext(ctx,
|
||||
"DELETE FROM monitor_worker_groups WHERE monitor_slug=$1",
|
||||
monitor.Slug,
|
||||
)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
for _, group := range workerGroups {
|
||||
_, err = tx.ExecContext(ctx,
|
||||
"INSERT INTO monitor_worker_groups (monitor_slug, worker_group_slug) VALUES ($1, $2)",
|
||||
monitor.Slug,
|
||||
group.Slug,
|
||||
)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
return err
|
||||
}
|
||||
}
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func GetMonitors(ctx context.Context, q *query.Query) ([]*models.Monitor, error) {
|
||||
return q.Monitor.WithContext(ctx).Preload(
|
||||
q.Monitor.History,
|
||||
).Preload(
|
||||
q.Monitor.WorkerGroups,
|
||||
).Find()
|
||||
func GetMonitor(ctx context.Context, db *sqlx.DB, slug string) (*models.Monitor, error) {
|
||||
monitor := &models.Monitor{}
|
||||
err := db.GetContext(ctx, monitor,
|
||||
"SELECT * FROM monitors WHERE slug=$1 AND deleted_at IS NULL",
|
||||
slug,
|
||||
)
|
||||
return monitor, err
|
||||
}
|
||||
|
||||
func GetMonitorWithWorkerGroups(ctx context.Context, db *sqlx.DB, slug string) (*models.MonitorWithWorkerGroups, error) {
|
||||
rows, err := db.QueryContext(ctx,
|
||||
`
|
||||
SELECT
|
||||
monitors.slug,
|
||||
monitors.name,
|
||||
monitors.script,
|
||||
monitors.schedule,
|
||||
monitors.created_at,
|
||||
monitors.updated_at,
|
||||
monitors.deleted_at,
|
||||
worker_groups.name as worker_group_name
|
||||
FROM monitors
|
||||
LEFT OUTER JOIN monitor_worker_groups ON monitors.slug = monitor_worker_groups.monitor_slug
|
||||
LEFT OUTER JOIN worker_groups ON monitor_worker_groups.worker_group_slug = worker_groups.slug
|
||||
WHERE monitors.slug=$1 AND monitors.deleted_at IS NULL
|
||||
`,
|
||||
slug,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
monitor := &models.MonitorWithWorkerGroups{}
|
||||
|
||||
for rows.Next() {
|
||||
var workerGroupName *string
|
||||
err = rows.Scan(
|
||||
&monitor.Slug,
|
||||
&monitor.Name,
|
||||
&monitor.Script,
|
||||
&monitor.Schedule,
|
||||
&monitor.CreatedAt,
|
||||
&monitor.UpdatedAt,
|
||||
&monitor.DeletedAt,
|
||||
&workerGroupName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if workerGroupName != nil {
|
||||
monitor.WorkerGroups = append(monitor.WorkerGroups, *workerGroupName)
|
||||
}
|
||||
}
|
||||
|
||||
return monitor, err
|
||||
}
|
||||
|
||||
func GetMonitors(ctx context.Context, db *sqlx.DB) ([]*models.Monitor, error) {
|
||||
monitors := []*models.Monitor{}
|
||||
err := db.SelectContext(ctx, &monitors,
|
||||
"SELECT * FROM monitors WHERE deleted_at IS NULL",
|
||||
)
|
||||
return monitors, err
|
||||
}
|
||||
|
||||
func GetMonitorsWithWorkerGroups(ctx context.Context, db *sqlx.DB) ([]*models.MonitorWithWorkerGroups, error) {
|
||||
rows, err := db.QueryContext(ctx,
|
||||
`
|
||||
SELECT
|
||||
monitors.slug,
|
||||
monitors.name,
|
||||
monitors.script,
|
||||
monitors.schedule,
|
||||
monitors.created_at,
|
||||
monitors.updated_at,
|
||||
monitors.deleted_at,
|
||||
worker_groups.name as worker_group_name
|
||||
FROM monitors
|
||||
LEFT OUTER JOIN monitor_worker_groups ON monitors.slug = monitor_worker_groups.monitor_slug
|
||||
LEFT OUTER JOIN worker_groups ON monitor_worker_groups.worker_group_slug = worker_groups.slug
|
||||
WHERE monitors.deleted_at IS NULL
|
||||
`)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
monitors := map[string]*models.MonitorWithWorkerGroups{}
|
||||
|
||||
for rows.Next() {
|
||||
monitor := &models.MonitorWithWorkerGroups{}
|
||||
|
||||
var workerGroupName *string
|
||||
err = rows.Scan(
|
||||
&monitor.Slug,
|
||||
&monitor.Name,
|
||||
&monitor.Script,
|
||||
&monitor.Schedule,
|
||||
&monitor.CreatedAt,
|
||||
&monitor.UpdatedAt,
|
||||
&monitor.DeletedAt,
|
||||
&workerGroupName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if workerGroupName != nil {
|
||||
workerGroups := []string{}
|
||||
if monitors[monitor.Slug] != nil {
|
||||
workerGroups = monitors[monitor.Slug].WorkerGroups
|
||||
}
|
||||
monitor.WorkerGroups = append(workerGroups, *workerGroupName)
|
||||
}
|
||||
monitors[monitor.Slug] = monitor
|
||||
}
|
||||
|
||||
return maps.Values(monitors), err
|
||||
}
|
||||
|
||||
func CreateOrUpdateMonitorSchedule(
|
||||
ctx context.Context,
|
||||
t client.Client,
|
||||
monitor *models.Monitor,
|
||||
workerGroups []*models.WorkerGroup,
|
||||
) error {
|
||||
log.Println("Creating or Updating Monitor Schedule")
|
||||
|
||||
args := make([]interface{}, 0)
|
||||
args = append(args, workflows.MonitorWorkflowParam{Script: monitor.Script, Slug: monitor.Slug})
|
||||
|
||||
for _, group := range monitor.WorkerGroups {
|
||||
for _, group := range workerGroups {
|
||||
options := client.ScheduleOptions{
|
||||
ID: getScheduleId(monitor, group.Slug),
|
||||
Spec: client.ScheduleSpec{
|
||||
|
@ -113,7 +244,3 @@ func CreateOrUpdateMonitorSchedule(
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateMonitorHistory(ctx context.Context, db *gorm.DB, monitorHistory *models.MonitorHistory) error {
|
||||
return db.WithContext(ctx).Create(monitorHistory).Error
|
||||
}
|
||||
|
|
25
internal/services/monitor_history.go
Normal file
25
internal/services/monitor_history.go
Normal file
|
@ -0,0 +1,25 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
func GetMonitorHistoryForMonitor(ctx context.Context, db *sqlx.DB, monitorSlug string) ([]*models.MonitorHistory, error) {
|
||||
var monitorHistory []*models.MonitorHistory
|
||||
err := db.SelectContext(ctx, &monitorHistory,
|
||||
"SELECT * FROM monitor_histories WHERE monitor_slug = $1 ORDER BY created_at DESC",
|
||||
monitorSlug,
|
||||
)
|
||||
return monitorHistory, err
|
||||
}
|
||||
|
||||
func AddHistoryForMonitor(ctx context.Context, db *sqlx.DB, history *models.MonitorHistory) error {
|
||||
_, err := db.NamedExecContext(ctx,
|
||||
"INSERT INTO monitor_histories (monitor_slug, status, note) VALUES (:monitor_slug, :status, :note)",
|
||||
history,
|
||||
)
|
||||
return err
|
||||
}
|
30
internal/services/oauth2_state.go
Normal file
30
internal/services/oauth2_state.go
Normal file
|
@ -0,0 +1,30 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
func CreateOAuth2State(ctx context.Context, db *sqlx.DB, oauth2State *models.OAuth2State) error {
|
||||
_, err := db.NamedExecContext(ctx,
|
||||
"INSERT INTO oauth2_states (state, expires_at) VALUES (:state, :expires_at)",
|
||||
oauth2State,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
func DeleteOAuth2State(ctx context.Context, db *sqlx.DB, state string) (deleted bool, err error) {
|
||||
res, err := db.ExecContext(ctx, "DELETE FROM oauth2_states WHERE state = $1 AND expires_at > NOW()", state)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
affected, err := res.RowsAffected()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return affected > 0, err
|
||||
}
|
|
@ -3,42 +3,138 @@ package services
|
|||
import (
|
||||
"context"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models/query"
|
||||
"gorm.io/gorm/clause"
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"golang.org/x/exp/maps"
|
||||
)
|
||||
|
||||
func GetOrCreateWorkerGroup(ctx context.Context, q *query.Query, workerGroup models.WorkerGroup) (*models.WorkerGroup, error) {
|
||||
tx := q.Begin()
|
||||
func CreateWorkerGroup(ctx context.Context, db *sqlx.DB, workerGroup *models.WorkerGroup) error {
|
||||
_, err := db.NamedExecContext(ctx,
|
||||
"INSERT INTO worker_groups (slug, name) VALUES (:slug, :name)",
|
||||
workerGroup,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.WorkerGroup.WithContext(ctx).Clauses(clause.OnConflict{DoNothing: true}).Create(&workerGroup); err != nil {
|
||||
_ = tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
func GetWorkerGroups(ctx context.Context, db *sqlx.DB) ([]*models.WorkerGroup, error) {
|
||||
var workerGroups []*models.WorkerGroup
|
||||
err := db.SelectContext(ctx, &workerGroups,
|
||||
"SELECT * FROM worker_groups WHERE deleted_at IS NULL",
|
||||
)
|
||||
return workerGroups, err
|
||||
}
|
||||
|
||||
wg, err := tx.WorkerGroup.WithContext(ctx).Where(
|
||||
q.WorkerGroup.Slug.Eq(workerGroup.Slug),
|
||||
).First()
|
||||
func GetWorkerGroupsWithMonitors(ctx context.Context, db *sqlx.DB) ([]*models.WorkerGroupWithMonitors, error) {
|
||||
rows, err := db.QueryContext(ctx,
|
||||
`
|
||||
SELECT
|
||||
worker_groups.slug,
|
||||
worker_groups.name,
|
||||
worker_groups.created_at,
|
||||
worker_groups.updated_at,
|
||||
worker_groups.deleted_at,
|
||||
monitors.name as monitor_name
|
||||
FROM worker_groups
|
||||
LEFT OUTER JOIN monitor_worker_groups ON worker_groups.slug = monitor_worker_groups.worker_group_slug
|
||||
LEFT OUTER JOIN monitors ON monitor_worker_groups.monitor_slug = monitors.slug
|
||||
WHERE worker_groups.deleted_at IS NULL AND monitors.deleted_at IS NULL
|
||||
`)
|
||||
if err != nil {
|
||||
_ = tx.Rollback()
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
return wg, tx.Commit()
|
||||
workerGroups := map[string]*models.WorkerGroupWithMonitors{}
|
||||
|
||||
for rows.Next() {
|
||||
workerGroup := &models.WorkerGroupWithMonitors{}
|
||||
|
||||
var monitorName *string
|
||||
err = rows.Scan(
|
||||
&workerGroup.Slug,
|
||||
&workerGroup.Name,
|
||||
&workerGroup.CreatedAt,
|
||||
&workerGroup.UpdatedAt,
|
||||
&workerGroup.DeletedAt,
|
||||
&monitorName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if monitorName != nil {
|
||||
monitors := []string{}
|
||||
if workerGroups[workerGroup.Slug] != nil {
|
||||
monitors = workerGroups[workerGroup.Slug].Monitors
|
||||
}
|
||||
workerGroup.Monitors = append(monitors, *monitorName)
|
||||
}
|
||||
|
||||
workerGroups[workerGroup.Slug] = workerGroup
|
||||
}
|
||||
|
||||
return maps.Values(workerGroups), err
|
||||
}
|
||||
|
||||
func GetWorkerGroups(ctx context.Context, q *query.Query) ([]*models.WorkerGroup, error) {
|
||||
return q.WorkerGroup.WithContext(ctx).Preload(q.WorkerGroup.Monitors).Find()
|
||||
func GetWorkerGroupsBySlug(ctx context.Context, db *sqlx.DB, slugs []string) ([]*models.WorkerGroup, error) {
|
||||
var workerGroups []*models.WorkerGroup
|
||||
err := db.SelectContext(ctx, &workerGroups,
|
||||
"SELECT * FROM worker_groups WHERE slug = ANY($1) AND deleted_at IS NULL",
|
||||
slugs,
|
||||
)
|
||||
return workerGroups, err
|
||||
}
|
||||
|
||||
func GetWorkerGroupsBySlug(ctx context.Context, q *query.Query, slugs []string) ([]*models.WorkerGroup, error) {
|
||||
return q.WorkerGroup.WithContext(ctx).Where(
|
||||
q.WorkerGroup.Slug.In(slugs...),
|
||||
).Find()
|
||||
func GetWorkerGroup(ctx context.Context, db *sqlx.DB, slug string) (*models.WorkerGroup, error) {
|
||||
var workerGroup models.WorkerGroup
|
||||
err := db.GetContext(ctx, &workerGroup,
|
||||
"SELECT * FROM worker_groups WHERE slug = $1 AND deleted_at IS NULL",
|
||||
slug,
|
||||
)
|
||||
return &workerGroup, err
|
||||
}
|
||||
|
||||
func GetWorkerGroup(ctx context.Context, q *query.Query, slug string) (*models.WorkerGroup, error) {
|
||||
return q.WorkerGroup.WithContext(ctx).Where(
|
||||
q.WorkerGroup.Slug.Eq(slug),
|
||||
).First()
|
||||
func GetWorkerGroupWithMonitors(ctx context.Context, db *sqlx.DB, slug string) (*models.WorkerGroupWithMonitors, error) {
|
||||
rows, err := db.QueryContext(ctx,
|
||||
`
|
||||
SELECT
|
||||
worker_groups.slug,
|
||||
worker_groups.name,
|
||||
worker_groups.created_at,
|
||||
worker_groups.updated_at,
|
||||
worker_groups.deleted_at,
|
||||
monitors.name as monitor_name
|
||||
FROM worker_groups
|
||||
LEFT OUTER JOIN monitor_worker_groups ON worker_groups.slug = monitor_worker_groups.worker_group_slug
|
||||
LEFT OUTER JOIN monitors ON monitor_worker_groups.monitor_slug = monitors.slug
|
||||
WHERE worker_groups.slug=$1 AND worker_groups.deleted_at IS NULL AND monitors.deleted_at IS NULL
|
||||
`,
|
||||
slug,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
workerGroup := &models.WorkerGroupWithMonitors{}
|
||||
|
||||
for rows.Next() {
|
||||
var monitorName *string
|
||||
err = rows.Scan(
|
||||
&workerGroup.Slug,
|
||||
&workerGroup.Name,
|
||||
&workerGroup.CreatedAt,
|
||||
&workerGroup.UpdatedAt,
|
||||
&workerGroup.DeletedAt,
|
||||
&monitorName,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if monitorName != nil {
|
||||
workerGroup.Monitors = append(workerGroup.Monitors, *monitorName)
|
||||
}
|
||||
}
|
||||
|
||||
return workerGroup, err
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package temporal
|
|||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal/config"
|
||||
|
@ -21,7 +22,7 @@ func (p *AuthHeadersProvider) GetHeaders(ctx context.Context) (map[string]string
|
|||
}, nil
|
||||
}
|
||||
|
||||
func ConnectServerToTemporal(cfg *config.ServerConfig) (client.Client, error) {
|
||||
func ConnectServerToTemporal(logger *slog.Logger, cfg *config.ServerConfig) (client.Client, error) {
|
||||
// For server we generate new token with admin permissions
|
||||
token, err := jwt.NewTokenForServer(cfg.Jwt.PrivateKey, cfg.Jwt.PublicKey)
|
||||
if err != nil {
|
||||
|
@ -31,12 +32,18 @@ func ConnectServerToTemporal(cfg *config.ServerConfig) (client.Client, error) {
|
|||
provider := &AuthHeadersProvider{token}
|
||||
|
||||
// Try to connect to the Temporal Server
|
||||
return retry.Retry(10, 2*time.Second, func() (client.Client, error) {
|
||||
c, err := retry.Retry(10, 2*time.Second, func() (client.Client, error) {
|
||||
return client.Dial(client.Options{
|
||||
HostPort: cfg.Temporal.ServerHost,
|
||||
HeadersProvider: provider,
|
||||
})
|
||||
})
|
||||
if err != nil {
|
||||
logger.Error("Failed to connect to Temporal Server after retries")
|
||||
return nil, errors.Wrap(err, "failed to connect to Temporal Server after retries")
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func ConnectWorkerToTemporal(token string, temporalHost string) (client.Client, error) {
|
||||
|
|
|
@ -3,8 +3,8 @@ package workflows
|
|||
import (
|
||||
"time"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/database/models"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/activities"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"go.temporal.io/sdk/workflow"
|
||||
)
|
||||
|
||||
|
|
12
justfile
12
justfile
|
@ -17,7 +17,9 @@ _default:
|
|||
# Run full development environment
|
||||
run:
|
||||
watchexec -r -e tmpl,css just _tailwindcss-build | sed -e 's/^/tailwind: /;' &
|
||||
sleep 1
|
||||
just run-temporal | sed -e 's/^/temporal: /;' &
|
||||
sleep 1
|
||||
watchexec -r -e go,tmpl,css just run-server
|
||||
|
||||
# Start worker
|
||||
|
@ -81,13 +83,12 @@ run-docker:
|
|||
-e WORKER_TOKEN \
|
||||
{{DOCKER_IMAGE}} --server --temporal --worker
|
||||
|
||||
# Start devbox shell
|
||||
shell:
|
||||
devbox shell
|
||||
# Start Sqlite web client
|
||||
sqlite-web:
|
||||
sqlite_web zdravko.db
|
||||
|
||||
# Generate and download all external dependencies.
|
||||
generate:
|
||||
rm -rf internal/models/query/*
|
||||
go generate ./...
|
||||
|
||||
_tailwindcss-build:
|
||||
|
@ -114,6 +115,3 @@ _monaco-download:
|
|||
_feather-icons-download:
|
||||
mkdir -p {{STATIC_DIR}}/icons
|
||||
curl -sLo {{STATIC_DIR}}/icons/feather-sprite.svg https://unpkg.com/feather-icons/dist/feather-sprite.svg
|
||||
|
||||
_generate-gorm:
|
||||
go run tools/generate/main.go
|
||||
|
|
|
@ -2,10 +2,10 @@ package server
|
|||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
||||
"code.tjo.space/mentos1386/zdravko/internal"
|
||||
"code.tjo.space/mentos1386/zdravko/database"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/config"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/handlers"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/temporal"
|
||||
|
@ -16,14 +16,16 @@ import (
|
|||
)
|
||||
|
||||
type Server struct {
|
||||
echo *echo.Echo
|
||||
cfg *config.ServerConfig
|
||||
echo *echo.Echo
|
||||
cfg *config.ServerConfig
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func NewServer(cfg *config.ServerConfig) (*Server, error) {
|
||||
return &Server{
|
||||
cfg: cfg,
|
||||
echo: echo.New(),
|
||||
cfg: cfg,
|
||||
echo: echo.New(),
|
||||
logger: slog.Default().WithGroup("server"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -36,31 +38,24 @@ func (s *Server) Start() error {
|
|||
//s.echo.Use(middleware.Logger())
|
||||
s.echo.Use(middleware.Recover())
|
||||
|
||||
db, query, err := internal.ConnectToDatabase(s.cfg.DatabasePath)
|
||||
db, err := database.ConnectToDatabase(s.logger, s.cfg.DatabasePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Println("Connected to database")
|
||||
|
||||
temporalClient, err := temporal.ConnectServerToTemporal(s.cfg)
|
||||
temporalClient, err := temporal.ConnectServerToTemporal(s.logger, s.cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Println("Connected to Temporal")
|
||||
|
||||
h := handlers.NewBaseHandler(query, temporalClient, s.cfg)
|
||||
h := handlers.NewBaseHandler(db, temporalClient, s.cfg, s.logger)
|
||||
|
||||
// Health
|
||||
s.echo.GET("/health", func(c echo.Context) error {
|
||||
d, err := db.DB()
|
||||
err = db.Ping()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = d.Ping()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, map[string]string{"status": "ok"})
|
||||
})
|
||||
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"code.tjo.space/mentos1386/zdravko/internal/config"
|
||||
"code.tjo.space/mentos1386/zdravko/internal/models"
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func main() {
|
||||
config := config.NewServerConfig()
|
||||
|
||||
// Initialize the generator with configuration
|
||||
g := gen.NewGenerator(gen.Config{
|
||||
OutPath: "internal/models/query",
|
||||
Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
|
||||
FieldNullable: true,
|
||||
})
|
||||
|
||||
db, err := gorm.Open(sqlite.Open(config.DatabasePath), &gorm.Config{})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Use the above `*gorm.DB` instance to initialize the generator,
|
||||
// which is required to generate structs from db when using `GenerateModel/GenerateModelAs`
|
||||
g.UseDB(db)
|
||||
|
||||
// Generate default DAO interface for those specified structs
|
||||
g.ApplyBasic(
|
||||
models.Monitor{},
|
||||
models.WorkerGroup{},
|
||||
models.MonitorHistory{},
|
||||
models.OAuth2State{},
|
||||
)
|
||||
|
||||
// Execute the generator
|
||||
g.Execute()
|
||||
}
|
|
@ -60,7 +60,7 @@
|
|||
<td>
|
||||
{{range .WorkerGroups}}
|
||||
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">
|
||||
{{ .Name }}
|
||||
{{ . }}
|
||||
</span>
|
||||
{{end}}
|
||||
</td>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
Configuration
|
||||
</h2>
|
||||
<label for="workergroups">Worker Groups</label>
|
||||
<input type="text" name="workergroups" id="workergroups" value="{{ range .Monitor.WorkerGroups }}{{.Name}} {{end}}"/>
|
||||
<input type="text" name="workergroups" id="workergroups" value="{{ range .Monitor.WorkerGroups }}{{.}} {{end}}"/>
|
||||
<p>Worker groups are used to distribute the monitor to specific workers.</p>
|
||||
<label for="schedule">Schedule</label>
|
||||
<input type="text" name="schedule" id="schedule" value="{{ .Monitor.Schedule }}"/>
|
||||
|
@ -31,7 +31,7 @@
|
|||
<caption class="p-5 text-lg font-semibold text-left rtl:text-right text-gray-900 bg-white">
|
||||
History
|
||||
<p class="mt-1 text-sm font-normal text-gray-500">
|
||||
Last executions of monitor script.
|
||||
Last 10 executions of monitor script.
|
||||
</p>
|
||||
</caption>
|
||||
<thead>
|
||||
|
@ -43,7 +43,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .Monitor.History}}
|
||||
{{range .History}}
|
||||
<tr>
|
||||
<td class="px-6 py-4 whitespace-nowrap">
|
||||
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full {{if eq .Status "SUCCESS"}}bg-green-100 text-green-800{{else}}bg-red-100 text-red-800{{end}}">
|
||||
|
|
Loading…
Reference in a new issue