feat: add tables for PGCoordinator v2 (#10442)

Adds tables for a simplified PG Coordinator that only considers Peers and Tunnels, rather than agent/client distinctions we have today.
This commit is contained in:
Spike Curtis
2023-11-01 16:30:09 +04:00
committed by GitHub
parent 95ce697e3a
commit cac29e0b4d
7 changed files with 248 additions and 0 deletions
+73
View File
@@ -1289,6 +1289,64 @@ func AllStartupScriptBehaviorValues() []StartupScriptBehavior {
}
}
type TailnetStatus string
const (
TailnetStatusOk TailnetStatus = "ok"
TailnetStatusLost TailnetStatus = "lost"
)
func (e *TailnetStatus) Scan(src interface{}) error {
switch s := src.(type) {
case []byte:
*e = TailnetStatus(s)
case string:
*e = TailnetStatus(s)
default:
return fmt.Errorf("unsupported scan type for TailnetStatus: %T", src)
}
return nil
}
type NullTailnetStatus struct {
TailnetStatus TailnetStatus `json:"tailnet_status"`
Valid bool `json:"valid"` // Valid is true if TailnetStatus is not NULL
}
// Scan implements the Scanner interface.
func (ns *NullTailnetStatus) Scan(value interface{}) error {
if value == nil {
ns.TailnetStatus, ns.Valid = "", false
return nil
}
ns.Valid = true
return ns.TailnetStatus.Scan(value)
}
// Value implements the driver Valuer interface.
func (ns NullTailnetStatus) Value() (driver.Value, error) {
if !ns.Valid {
return nil, nil
}
return string(ns.TailnetStatus), nil
}
func (e TailnetStatus) Valid() bool {
switch e {
case TailnetStatusOk,
TailnetStatusLost:
return true
}
return false
}
func AllTailnetStatusValues() []TailnetStatus {
return []TailnetStatus{
TailnetStatusOk,
TailnetStatusLost,
}
}
// Defines the user status: active, dormant, or suspended.
type UserStatus string
@@ -1865,6 +1923,21 @@ type TailnetCoordinator struct {
HeartbeatAt time.Time `db:"heartbeat_at" json:"heartbeat_at"`
}
type TailnetPeer struct {
ID uuid.UUID `db:"id" json:"id"`
CoordinatorID uuid.UUID `db:"coordinator_id" json:"coordinator_id"`
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
Node []byte `db:"node" json:"node"`
Status TailnetStatus `db:"status" json:"status"`
}
type TailnetTunnel struct {
CoordinatorID uuid.UUID `db:"coordinator_id" json:"coordinator_id"`
SrcID uuid.UUID `db:"src_id" json:"src_id"`
DstID uuid.UUID `db:"dst_id" json:"dst_id"`
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
}
// Joins in the username + avatar url of the created by user.
type Template struct {
ID uuid.UUID `db:"id" json:"id"`