models

package
v1.23.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 8, 2023 License: Apache-2.0 Imports: 41 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SyncStatusRunning = "running"
	SyncStatusError   = "error"
	SyncStatusSuccess = "success"
)
View Source
const (
	EnvironmentRoleReader   = "reader"
	EnvironmentRoleOperator = "operator"

	ResEnvironment = "environment"
)
View Source
const (
	ProjectRoleAdmin = "admin"
	ProjectRoleDev   = "dev"
	ProjectRoleTest  = "test"
	ProjectRoleOps   = "ops"

	ResProject = "project"
)
View Source
const (
	SystemRoleAdmin    = "sysadmin"
	SystemRoleOrdinary = "ordinary"

	ResSystemRole = "systemrole"
)
View Source
const (
	TenantRoleAdmin    = "admin"
	TenantRoleOrdinary = "ordinary"
	ResTenant          = "tenant"
)
View Source
const (
	QuotaStatusApproved = "approved"
	QuotaStatusRejected = "rejected"
	QuotaStatusPending  = "pending"
)
View Source
const (
	ResVirtualSpace        = "virtualSpace"
	VirtualSpaceRoleAdmin  = "admin"
	VirtualSpaceRoleNormal = "normal"
)
View Source
const (
	StatusVeryHigh = "very_high" // 非常高,要扩容
	StatusHigh     = "high"      // 高,要扩容
	StatusLow      = "low"       // 低,要缩容

	ColorYellow = "yellow"
	ColorRed    = "red"

	Ki = 1 << 10 // 1024
	Mi = 1 << 20
	Gi = 1 << 30
)
View Source
const (
	ResUser = "user"
)
View Source
const (
	ResVirtualDomain = "virtualDomain"
)
View Source
const WaitPerid = 5 * time.Second

Variables

View Source
var (
	DefaultChannel = &AlertChannel{
		ID:   1,
		Name: defaultChannelName,
		ChannelConfig: channels.ChannelConfig{
			ChannelIf: &channels.Webhook{
				BaseChannel: channels.BaseChannel{
					ChannelType:  channels.TypeWebhook,
					SendResolved: true,
				},
				URL:                channels.KubegemsWebhookURL,
				InsecureSkipVerify: true,
			},
		},
	}
	DefaultReceiver = DefaultChannel.ChannelConfig.ChannelIf.ToReceiver(DefaultChannel.ReceiverName())
)
View Source
var ResChartRepo = "chartrepo"

Functions

func AlertRuleKey added in v1.23.0

func AlertRuleKey(cluster, namespace, name string) string

func ChannelIDNameByReceiverName added in v1.22.0

func ChannelIDNameByReceiverName(recName string) (string, uint)

func CheckGraphs added in v1.22.0

func CheckGraphs(graphs []prometheus.MetricGraph, namespace string, tplGetter templates.TplGetter) error

func FillDefaultLimigrange

func FillDefaultLimigrange(env *Environment) []byte

func GetErrMessage

func GetErrMessage(err error) string

func InitBaseData added in v1.23.0

func InitBaseData(db *gorm.DB) error

初始化系统角色和系统管理员

func IsNotFound

func IsNotFound(err error) bool

func IsValidAlertRuleName added in v1.23.1

func IsValidAlertRuleName(name string) error

[metadata.name: Invalid value: "艹": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'), metadata.labels: Invalid value: "艹": a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue', or 'my_value', or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')]

func MigrateDatabaseAndInitData

func MigrateDatabaseAndInitData(ctx context.Context, opts *database.Options, migrate, initData bool) error

func MigrateModels added in v1.23.0

func MigrateModels(db *gorm.DB) error

func NewChannnelMappler added in v1.22.0

func NewChannnelMappler(db *gorm.DB) *channels.ChannelMapper

func NewPromqlTplMapperFromFile added in v1.22.0

func NewPromqlTplMapperFromFile() *templates.PromqlTplMapper

func WaitDatabaseServer added in v1.22.0

func WaitDatabaseServer(ctx context.Context, opts *database.Options) error

func WaitRedis added in v1.22.0

func WaitRedis(ctx context.Context, redisopts redis.Options) error

Types

type AlertChannel added in v1.22.0

type AlertChannel struct {
	ID            uint                   `gorm:"primarykey" json:"id"`
	Name          string                 `gorm:"type:varchar(50)" binding:"min=1,max=50" json:"name"`
	ChannelConfig channels.ChannelConfig `json:"channelConfig"`

	TenantID *uint   `json:"tenantID"` // 若为null,则表示系统预置
	Tenant   *Tenant `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;" json:"tenant,omitempty"`

	CreatedAt *time.Time `json:"-"`
	UpdatedAt *time.Time `json:"-"`
}

AlertChannel

func (*AlertChannel) ReceiverName added in v1.22.0

func (c *AlertChannel) ReceiverName() string

func (*AlertChannel) ToAlertmanagerReceiver added in v1.23.0

func (c *AlertChannel) ToAlertmanagerReceiver() v1alpha1.Receiver

type AlertInfo

type AlertInfo struct {
	Fingerprint     string `gorm:"type:varchar(50);primaryKey"` // 指纹作为主键
	Name            string `gorm:"type:varchar(50);"`
	Namespace       string `gorm:"type:varchar(50);"`
	ClusterName     string `gorm:"type:varchar(50);"`
	TenantName      string `gorm:"type:varchar(50);index"`
	ProjectName     string `gorm:"type:varchar(50);index"`
	EnvironmentName string `gorm:"type:varchar(50);index"`
	Labels          datatypes.JSON
	LabelMap        map[string]string `gorm:"-" json:"-"`

	SilenceStartsAt  *time.Time
	SilenceUpdatedAt *time.Time
	SilenceEndsAt    *time.Time
	SilenceCreator   string `gorm:"type:varchar(50);"`
	Summary          string `gorm:"-"` // 黑名单概要
}

type AlertLevel added in v1.23.0

type AlertLevel struct {
	CompareOp    string `json:"compareOp"`
	CompareValue string `json:"compareValue"` // 支持表达式, eg. 24 * 60
	Severity     string `json:"severity"`     // error, critical
}

type AlertLevels added in v1.23.0

type AlertLevels []AlertLevel

func (AlertLevels) GormDataType added in v1.23.0

func (m AlertLevels) GormDataType() string

func (*AlertLevels) Scan added in v1.23.0

func (m *AlertLevels) Scan(val interface{}) error

func (AlertLevels) Value added in v1.23.0

func (m AlertLevels) Value() (driver.Value, error)

type AlertMessage

type AlertMessage struct {
	ID uint

	// 级联删除
	Fingerprint string     `gorm:"type:varchar(50);"`
	AlertInfo   *AlertInfo `gorm:"foreignKey:Fingerprint;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`

	Value     string
	Message   string
	StartsAt  *time.Time `gorm:"index"` // 告警开始时间
	EndsAt    *time.Time // 告警结束时间
	CreatedAt *time.Time `gorm:"index"` // 本次告警产生时间
	Status    string     // firing or resolved
}

func (*AlertMessage) ColumnSlice

func (a *AlertMessage) ColumnSlice() []string

func (*AlertMessage) ToNormalMessage

func (a *AlertMessage) ToNormalMessage() Message

func (*AlertMessage) ValueSlice

func (a *AlertMessage) ValueSlice() []string

type AlertReceiver added in v1.23.0

type AlertReceiver struct {
	ID uint `gorm:"primarykey" json:"id"`

	AlertRuleID uint       `json:"alertRuleID"`
	AlertRule   *AlertRule `json:"-"` // 不展示给前端

	AlertChannelID uint          `json:"alertChannelID"`
	AlertChannel   *AlertChannel `gorm:"constraint:OnUpdate:CASCADE,OnDelete:RESTRICT" json:"alertChannel"` // 删除channel时RESTRICT拒绝

	Interval string `json:"interval"`
}

type AlertRule added in v1.23.0

type AlertRule struct {
	ID        uint   `gorm:"primarykey" json:"id"`
	Cluster   string `gorm:"type:varchar(50)" json:"cluster"`
	Namespace string `gorm:"type:varchar(50)" json:"namespace"`
	Name      string `gorm:"type:varchar(50)" binding:"min=1,max=50" json:"name"`
	AlertType string `gorm:"type:varchar(50);default:monitor" json:"alertType"` // logging or monitor

	Expr    string `json:"expr"`                                           // promql/logql表达式,不能包含比较运算符(<, <=, >, >=, ==)
	For     string `gorm:"type:varchar(50)" binding:"required" json:"for"` // 持续时间, eg. 10s, 1m, 1h
	Message string `json:"message"`                                        // 告警消息

	InhibitLabels gormdatatypes.JSONSlice `json:"inhibitLabels"`                                                 // 如果有多个告警级别,需要配置告警抑制的labels
	AlertLevels   AlertLevels             `json:"alertLevels"`                                                   // 告警级别
	Receivers     []*AlertReceiver        `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"receivers"` // 接收器, 删除alertrule时级联删除

	PromqlGenerator *PromqlGenerator `json:"promqlGenerator"`
	LogqlGenerator  *LogqlGenerator  `json:"logqlGenerator"`

	IsOpen         bool            `gorm:"default:true" json:"isOpen"` // 是否启用
	State          string          `json:"state"`                      // 状态
	RealTimeAlerts []*promv1.Alert `gorm:"-" json:"realTimeAlerts"`    // 实时告警

	// eg: status: ok/error
	// reason: alertmanagerconfig lost/receiver not matched/...
	K8sResourceStatus gormdatatypes.JSONMap `gorm:"type:varchar(50)" json:"k8sResourceStatus"` // 对应的k8s资源状态

	CreatedAt *time.Time `json:"createdAt"`
	UpdatedAt *time.Time `json:"updatedAt"`
}

AlertRule

func (*AlertRule) FullName added in v1.23.0

func (r *AlertRule) FullName() string

type Announcement added in v1.22.0

type Announcement struct {
	ID      uint       `gorm:"primarykey" json:"id"`
	Type    string     `gorm:"type:varchar(50);" json:"type"`
	Message string     `json:"message"`
	StartAt *time.Time `json:"startAt"` // 开始时间,默认现在
	EndAt   *time.Time `json:"endAt"`   // 结束时间,默认一天后

	CreatedAt *time.Time `json:"createdAt"`
	UpdatedAt *time.Time `json:"updatedAt"`
}

type Application

type Application struct {
	ID              uint           `gorm:"primarykey"`
	ApplicationName string         `gorm:"type:varchar(50);uniqueIndex:uniq_idx_project_applicationname;<-:create"` // 应用名字
	Environment     *Environment   `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`                           // 关联的环境
	EnvironmentID   *uint          `gorm:"uniqueIndex:uniq_idx_project_applicationname;"`                           // 关联的环境
	Project         *Project       `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`                           // 所属项
	ProjectID       uint           `gorm:"uniqueIndex:uniq_idx_project_applicationname"`                            // 所属项目ID
	Remark          string         // 备注
	Kind            string         // 类型
	Images          datatypes.JSON // 镜像,逗号分割
	Labels          datatypes.JSON // Label
	Creator         string         // 创建人
	CreatedAt       time.Time      `sql:"DEFAULT:'current_timestamp'"` // 创建时间
}

Application 应用表

type AuditLog

type AuditLog struct {
	ID        uint      `gorm:"primarykey"`
	CreatedAt time.Time `gorm:"index"`
	UpdatedAt time.Time
	DeletedAt gorm.DeletedAt `gorm:"index"`
	// 操作用户
	Username string `gorm:"type:varchar(50)"`
	// 所属租户
	Tenant string `gorm:"type:varchar(50)"`
	// 操作模块 (资源类型,租户,项目,环境,报警规则等等)
	Module string `gorm:"type:varchar(512)"`
	// 模块名字
	Name string `gorm:"type:varchar(512)"`
	// 动作名字 (启用,禁用,开启,关闭,添加,删除,修改等)
	Action string `gorm:"type:varchar(255)"`
	// 是否成功 请求是否成功
	Success bool
	// 客户端ip 发起请求的客户端IP
	ClientIP string `gorm:"type:varchar(255)"`
	// 标签 记录一些额外的环境租户等数据信息
	Labels datatypes.JSON
	// 原始数据 记录的是request和response以及http_code
	RawData datatypes.JSON
}

审计日志的描述格式为:

{用户名} {时间} {操作}

操作:

{动作,增删查改} {资源类型} {资源名字}

AuditLog 审计日志表

type AuthSource

type AuthSource struct {
	ID        uint             `json:"id"`
	Name      string           `gorm:"unique" json:"name"`
	Kind      string           `json:"kind" binding:"oneof=LDAP OAUTH"`
	Vendor    string           `gorm:"type:varchar(30)" json:"vendor" binding:"omitempty,oneof=github gitlab oauth ldap"`
	Config    AuthSourceConfig `json:"config" binding:"required,json"`
	TokenType string           `json:"tokenType" binding:"required,oneof=Bearer"`
	Enabled   bool             `json:"enabled"`
	CreatedAt *time.Time       `json:"createdAt"`
	UpdatedAt *time.Time       `json:"updatedAt"`
}

type AuthSourceConfig

type AuthSourceConfig struct {
	AuthURL     string   `json:"authURL,omitempty" binding:"omitempty,url,required_with=TokenURL UserInfoURL RedirectURL AppID AppSecret"`
	TokenURL    string   `json:"tokenURL,omitempty" binding:"omitempty,url,required_with=AuthURL UserInfoURL RedirectURL AppID AppSecret"`
	UserInfoURL string   `json:"userInfoURL,omitempty" binding:"omitempty,url,required_with=AuthURL TokenURL RedirectURL AppID AppSecret"`
	RedirectURL string   `json:"redirectURL,omitempty" binding:"omitempty,url,required_with=AuthURL TokenURL UserInfoURL AppID AppSecret"`
	AppID       string   `json:"appID,omitempty" binding:"required_with=AuthURL TokenURL UserInfoURL RedirectURL AppSecret"`
	AppSecret   string   `json:"appSecret,omitempty" binding:"required_with=AuthURL TokenURL UserInfoURL RedirectURL AppID"`
	Scopes      []string `json:"scopes,omitempty"`

	// ldap
	Name         string `json:"name,omitempty"`
	LdapAddr     string `json:"ldapaddr,omitempty" binding:"omitempty,hostname_port,required_with=BaseDN BindUsername BindPassword"`
	BaseDN       string `json:"basedn,omitempty" binding:"required_with=LdapAddr BindUsername BindPassword"`
	EnableTLS    bool   `json:"enableTLS,omitempty"`
	Filter       string `json:"filter,omitempty"`
	BindUsername string `json:"binduser,omitempty" binding:"required_with=LdapAddr BaseDN BindPassword"`
	BindPassword string `json:"password,omitempty" binding:"required_with=LdapAddr BaseDN BindUsername"`
}

func (*AuthSourceConfig) Scan

func (cfg *AuthSourceConfig) Scan(value interface{}) error

func (AuthSourceConfig) Value

func (cfg AuthSourceConfig) Value() (driver.Value, error)

type AuthSourceSimple

type AuthSourceSimple struct {
	ID      uint   `json:"id"`
	Name    string `gorm:"unique" json:"name"`
	Kind    string `json:"kind"`
	Enabled bool   `json:"enabled"`
	Vendor  string `json:"vendor"`
}

func (AuthSourceSimple) TableName

func (AuthSourceSimple) TableName() string

type CPUMemoryStatus

type CPUMemoryStatus struct {
	CurrentRate  float64
	CurrentLimit string // 带单位

	Status string // 扩容或缩容

	SuggestLimit    string // 带单位
	SuggestMinLimit string // 带单位
	SuggestMaxLimit string // 带单位
}

func (*CPUMemoryStatus) AddSuggest

func (status *CPUMemoryStatus) AddSuggest(SuggestType string, currentUsage float64) *CPUMemoryStatus

type ChartRepo

type ChartRepo struct {
	ID            uint   `gorm:"primarykey"`
	ChartRepoName string `gorm:"type:varchar(50);uniqueIndex" binding:"required"`
	URL           string `gorm:"type:varchar(255)"`
	LastSync      *time.Time
	SyncStatus    string
	SyncMessage   string
}

type Cluster

type Cluster struct {
	ID          uint           `gorm:"primarykey"`
	ClusterName string         `gorm:"type:varchar(50);uniqueIndex" binding:"required,fqdn_item"`
	APIServer   string         `gorm:"type:varchar(250);uniqueIndex"` // APIServer地址 根据kubeconfig添加后,自动填充
	KubeConfig  datatypes.JSON `binding:"required"`
	// Vendor 集群提供商(gke tke ack selfhosted)
	Vendor string `gorm:"type:varchar(50);default:selfhosted" binding:"required,oneof=selfhosted gke ack tke"`
	// ImageRepo 安装kubegems核心组件时使用的镜像仓库
	ImageRepo string `gorm:"type:varchar(255);default:docker.io/kubegems" binding:"required"`
	// DefaultStorageClass 默认storageclass, 默认local-path
	DefaultStorageClass  string         `gorm:"type:varchar(255);default:local-path" binding:"required"`
	InstallNamespace     string         // agent service namespace
	Version              string         // apiserver version
	AgentAddr            string         // if empty, using apiserver proxy
	AgentCA              string         `json:"-"`
	AgentCert            string         `json:"-"`
	AgentKey             string         `json:"-"`
	Runtime              string         // docker or containerd
	Primary              bool           // 是否主集群
	OversoldConfig       datatypes.JSON // 集群资源超卖设置
	Environments         []*Environment
	TenantResourceQuotas []*TenantResourceQuota
	ClusterResourceQuota datatypes.JSON
	DeletedAt            gorm.DeletedAt // soft delete
	ClientCertExpireAt   *time.Time     // 证书过期时间
}

Cluster 集群表

type CommonUserIface

type CommonUserIface interface {
	GetID() uint
	GetSystemRoleID() uint
	GetUsername() string
	GetUserKind() string
	GetEmail() string
	GetSource() string
	SetLastLogin(*time.Time)
	UnmarshalBinary(data []byte) error
	MarshalBinary() (data []byte, err error)
}

type Condition

type Condition struct {
	Pods         []string
	CPUStatus    *CPUMemoryStatus `json:"CPUStatus"`
	MemoryStatus *CPUMemoryStatus `json:"MemoryStatus"`

	MaxCPUContainer    *Container `json:"-"`
	MaxMemoryContainer *Container `json:"-"`
	CPULimitCore       float64    `json:"-"`
	MemoryLimitBytes   int64      `json:"-"`
}

type Container

type Container struct {
	ID uint `gorm:"primarykey"`

	Name    string
	PodName string

	CPULimitCore     float64
	MemoryLimitBytes int64 // 限制

	CPUUsageCore float64
	CPUPercent   float64 // 使用率

	MemoryUsageBytes float64
	MemoryPercent    float64 // 使用率

	WorkloadID uint
	Workload   *Workload `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

Container 不注册为gorm model

type Environment

type Environment struct {
	ID uint `gorm:"primarykey"`
	// 环境名字
	EnvironmentName string `gorm:"type:varchar(50);uniqueIndex:uniq_idx_project_env;index:environment_uniq,unique"`
	// 环境关联的namespace
	Namespace string `gorm:"type:varchar(50)"`
	// 备注
	Remark string
	// 元类型(开发(dev),测试(test),生产(prod))等选项之一
	MetaType string
	// 删除策略(delNamespace删除namespace,delLabels仅删除关联LABEL)
	DeletePolicy string `sql:"DEFAULT:'delNamespace'"`

	// 创建者
	Creator *User `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:SET NULL;"`
	// 关联的集群
	Cluster *Cluster `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 所属项目
	Project *Project `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 环境资源限制(这个会和namespace下的ResourceQuota对等)
	ResourceQuota datatypes.JSON
	// 环境下的limitrage
	LimitRange datatypes.JSON
	// 所属项目ID
	ProjectID uint `gorm:"uniqueIndex:uniq_idx_project_env"`
	// 所属集群ID
	ClusterID uint
	// 创建人ID
	CreatorID uint `gorm:"default:NULL"`
	// 关联的应用
	Applications []*Application `gorm:"many2many:application_environment_rels;"`
	// 关联的用户
	Users []*User `gorm:"many2many:environment_user_rels;"`
	// 允许边缘集群注册
	AllowEdgeRegistration bool
	// 虚拟空间
	VirtualSpaceID *uint
	VirtualSpace   *VirtualSpace `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:SET NULL;"`

	NSLabels map[string]string `gorm:"-"`
}

Environment 环境表 环境属于项目,项目id-环境名字 唯一索引

type EnvironmentResource

type EnvironmentResource struct {
	ID        uint      `gorm:"primarykey"`
	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`

	ClusterName     string
	TenantName      string
	ProjectName     string
	EnvironmentName string

	MaxCPUUsageCore    float64
	MaxMemoryUsageByte float64
	MinCPUUsageCore    float64
	MinMemoryUsageByte float64
	AvgCPUUsageCore    float64
	AvgMemoryUsageByte float64
	NetworkReceiveByte float64
	NetworkSendByte    float64

	MaxPVCUsageByte float64
	MinPVCUsageByte float64
	AvgPVCUsageByte float64
}

EnvironmentResource Project资源使用清单

type EnvironmentUserRels

type EnvironmentUserRels struct {
	ID          uint         `gorm:"primarykey"`
	User        *User        `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	Environment *Environment `json:"omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 用户ID
	UserID uint `gorm:"uniqueIndex:uniq_idx_env_user_rel" binding:"required"`
	// EnvironmentID
	EnvironmentID uint `gorm:"uniqueIndex:uniq_idx_env_user_rel" binding:"required"`

	// 环境级角色("reader", "operator")
	Role string `binding:"required,eq=reader|eq=operator"`
}

EnvironmentUserRels

type LogQueryHistory

type LogQueryHistory struct {
	ID uint `gorm:"primarykey"`
	// 关联的集群
	Cluster *Cluster `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 所属集群ID
	ClusterID uint
	// 标签
	LabelJSON string `gorm:"type:varchar(1024)"`
	// 正则标签
	FilterJSON string `gorm:"type:varchar(1024)"`
	// logql
	LogQL string `gorm:"type:varchar(1024)"`
	// 时间区间
	TimeRange string `gorm:"type:varchar(256);default:''"`
	// 创建时间
	CreateAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	// 创建者
	Creator   *User `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	CreatorID uint
}

LogQueryHistory 日志查询历史

type LogQueryHistoryWithCount

type LogQueryHistoryWithCount struct {
	ID         uint
	Ids        string
	TimeRanges string
	Cluster    *Cluster
	ClusterID  uint
	LabelJSON  string
	FilterJSON string
	LogQL      string
	CreateAt   time.Time
	Creator    *User
	CreatorID  uint
	Total      string
}

type LogQuerySnapshot

type LogQuerySnapshot struct {
	ID uint `gorm:"primarykey"`
	// 关联的集群
	Cluster *Cluster `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 所属集群ID
	ClusterID uint
	// 名称
	SnapshotName string `gorm:"type:varchar(128)"`
	SourceFile   string `gorm:"type:varchar(128)"`
	// 行数
	SnapshotCount int
	// 下载地址
	DownloadURL string `gorm:"type:varchar(512)"`
	StartTime   time.Time
	EndTime     time.Time
	// 创建时间
	CreateAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	// 创建者
	Creator   *User `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	CreatorID uint
}

LogQuerySnapshot 日志查询快照

func (*LogQuerySnapshot) BeforeCreate

func (snapshot *LogQuerySnapshot) BeforeCreate(tx *gorm.DB) error

func (*LogQuerySnapshot) BeforeDelete

func (snapshot *LogQuerySnapshot) BeforeDelete(tx *gorm.DB) error

type LogqlGenerator added in v1.23.0

type LogqlGenerator struct {
	Duration      string                `json:"duration"`      // 时间范围
	Match         string                `json:"match"`         // 正则匹配的字符串
	LabelMatchers []promql.LabelMatcher `json:"labelMatchers"` // 标签筛选器
}

func (LogqlGenerator) GormDataType added in v1.23.0

func (m LogqlGenerator) GormDataType() string

func (*LogqlGenerator) Scan added in v1.23.0

func (m *LogqlGenerator) Scan(val interface{}) error

func (LogqlGenerator) Value added in v1.23.0

func (m LogqlGenerator) Value() (driver.Value, error)

type Message

type Message struct {
	ID          uint   `gorm:"primarykey"`
	MessageType string `gorm:"type:varchar(50);"`
	Title       string `gorm:"type:varchar(255);"`
	Content     datatypes.JSON
	CreatedAt   time.Time `gorm:"index" sql:"DEFAULT:'current_timestamp'"`

	ToUsers map[uint]struct{} `gorm:"-" json:"-"`
	IsRead  bool              `gorm:"-"` // 给前端用,不入库
}

func (*Message) ColumnSlice

func (msg *Message) ColumnSlice() []string

func (*Message) ValueSlice

func (msg *Message) ValueSlice() []string

type MonitorDashboard

type MonitorDashboard struct {
	ID uint `gorm:"primarykey" json:"id"`
	// 面板名
	Name      string                   `gorm:"type:varchar(50)" binding:"required" json:"name"`
	Step      string                   `gorm:"type:varchar(50)" json:"step"`    // 样本间隔,单位秒
	Refresh   string                   `gorm:"type:varchar(50)" json:"refresh"` // 刷新间隔,eg. 30s, 1m
	Start     string                   `gorm:"type:varchar(50)" json:"start"`   // 开始时间,eg. 2022-04-24 06:00:45.241, now, now-30m
	End       string                   `gorm:"type:varchar(50)" json:"end"`     // 结束时间
	CreatedAt *time.Time               `json:"createdAt"`
	Creator   string                   `gorm:"type:varchar(50)" json:"creator"` // 创建者
	Graphs    prometheus.MonitorGraphs `json:"graphs"`                          // 图表
	Variables gormdatatypes.JSONMap    `json:"variables"`                       // 变量

	Template string `gorm:"type:varchar(50)" json:"template"` // 模板名

	EnvironmentID *uint        `json:"environmentID"`
	Environment   *Environment `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;" json:"environment"`
}

MonitorDashboard 监控面板

type MonitorDashboardTpl added in v1.22.0

type MonitorDashboardTpl struct {
	Name        string                   `gorm:"type:varchar(50);primaryKey" json:"name"`
	Description string                   `json:"description"`
	Step        string                   `gorm:"type:varchar(50)" json:"step"`    // 样本间隔,单位秒
	Refresh     string                   `gorm:"type:varchar(50)" json:"refresh"` // 刷新间隔,eg. 30s, 1m
	Start       string                   `gorm:"type:varchar(50)" json:"start"`   // 开始时间,eg. 2022-04-24 06:00:45.241, now, now-30m
	End         string                   `gorm:"type:varchar(50)" json:"end"`     // 结束时间
	Graphs      prometheus.MonitorGraphs `json:"graphs"`                          // 图表
	Variables   gormdatatypes.JSONMap    `json:"variables"`                       // 变量

	CreatedAt *time.Time `json:"-"`
	UpdatedAt *time.Time `json:"-"`
}

type Notice

type Notice struct {
	Color      string               // eg, yellow
	Conditions map[string]Condition // 按容器名分组
}

type Project

type Project struct {
	ID uint `gorm:"primarykey"`
	// 创建时间
	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	// 项目名字
	ProjectName string `gorm:"type:varchar(50);uniqueIndex:uniq_idx_tenant_project_name"`
	// 项目别名
	ProjectAlias string `gorm:"type:varchar(50)"`
	// 项目备注
	Remark string
	// 项目资源限制
	ResourceQuota datatypes.JSON

	Applications []*Application
	Environments []*Environment
	Registries   []*Registry
	Users        []*User `gorm:"many2many:project_user_rels;"`
	Tenant       *Tenant `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 所属的租户ID
	TenantID uint `gorm:"uniqueIndex:uniq_idx_tenant_project_name"`
}

Project 项目表

type ProjectUserRels

type ProjectUserRels struct {
	ID      uint     `gorm:"primarykey"`
	User    *User    `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	Project *Project `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 用户ID
	UserID uint `gorm:"uniqueIndex:uniq_idx_project_user_rel" binding:"required"`
	// ProjectID
	ProjectID uint `gorm:"uniqueIndex:uniq_idx_project_user_rel" binding:"required"`

	// 项目级角色(管理员admin, 开发dev, 测试test, 运维ops)
	Role string `gorm:"type:varchar(30)" binding:"required,eq=admin|eq=test|eq=dev|eq=ops"`
}

ProjectUserRels

type PromqlGenerator added in v1.23.0

type PromqlGenerator struct {
	Scope         string                `json:"scope"`         // scope
	Resource      string                `json:"resource"`      // 告警资源, eg. node、pod
	Rule          string                `json:"rule"`          // 告警规则名, eg. cpuUsage、memoryUsagePercent
	Unit          string                `json:"unit"`          // 单位
	LabelMatchers []promql.LabelMatcher `json:"labelMatchers"` // 标签筛选器

	Tpl *templates.PromqlTpl `json:"-"`
}

func (PromqlGenerator) GormDataType added in v1.23.0

func (m PromqlGenerator) GormDataType() string

func (*PromqlGenerator) Scan added in v1.23.0

func (m *PromqlGenerator) Scan(val interface{}) error

func (PromqlGenerator) Value added in v1.23.0

func (m PromqlGenerator) Value() (driver.Value, error)

type PromqlTplResource added in v1.22.0

type PromqlTplResource struct {
	ID       uint   `gorm:"primarykey" json:"id"`
	Name     string `gorm:"type:varchar(50);uniqueIndex" binding:"required" json:"name"`
	ShowName string `gorm:"type:varchar(50)" json:"showName"`

	ScopeID *uint           `json:"scopeID"`
	Scope   *PromqlTplScope `gorm:"foreignKey:ScopeID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"scope,omitempty"`

	Rules []*PromqlTplRule `json:"rules" gorm:"foreignKey:ResourceID"`

	CreatedAt *time.Time `json:"-"`
	UpdatedAt *time.Time `json:"-"`
}

PromqlTplScope

type PromqlTplRule added in v1.22.0

type PromqlTplRule struct {
	ID          uint                    `gorm:"primarykey" json:"id"`
	Name        string                  `gorm:"type:varchar(50)" binding:"required" json:"name"`
	ShowName    string                  `gorm:"type:varchar(50)" json:"showName"`
	Description string                  `json:"description"`
	Expr        string                  `json:"expr"` // promql expr
	Unit        string                  `gorm:"type:varchar(50)" json:"unit"`
	Labels      gormdatatypes.JSONSlice `json:"labels"`

	ResourceID *uint              `json:"resourceID"`
	Resource   *PromqlTplResource `gorm:"foreignKey:ResourceID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"resource,omitempty"`

	TenantID *uint   `json:"tenantID"` // 若为null,则表示系统预置
	Tenant   *Tenant `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;" json:"tenant,omitempty"`

	CreatedAt *time.Time `json:"-"`
	UpdatedAt *time.Time `json:"-"`
}

PromqlTplScope

type PromqlTplScope added in v1.22.0

type PromqlTplScope struct {
	ID         uint   `gorm:"primarykey" json:"id"`
	Name       string `gorm:"type:varchar(50);uniqueIndex" binding:"required" json:"name"`
	ShowName   string `gorm:"type:varchar(50)" json:"showName"`
	Namespaced bool   `json:"namespaced"`

	Resources []*PromqlTplResource `json:"resources" gorm:"foreignKey:ScopeID"`

	CreatedAt *time.Time `json:"-"`
	UpdatedAt *time.Time `json:"-"`
}

PromqlTplScope

type Registry

type Registry struct {
	ID uint `gorm:"primarykey"`
	// 仓库名称
	RegistryName string `gorm:"type:varchar(50);uniqueIndex:uniq_idx_project_registry;"`
	// 仓库地址
	RegistryAddress string `gorm:"type:varchar(512)"`
	// 用户名
	Username string `gorm:"type:varchar(50)"`
	// 密码
	Password string `gorm:"type:varchar(512)"`
	// 创建者
	Creator *User `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:SET NULL;"`
	// 更新时间
	UpdateTime time.Time
	CreatorID  uint     `gorm:"default:null"`
	Project    *Project `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 项目ID
	ProjectID     uint `grom:"uniqueIndex:uniq_idx_project_registry;"`
	IsDefault     bool
	EnableExtends bool // 是否启用扩展功能,支持harbor等高级仓库
}

Registry 镜像仓库表

type SystemRole

type SystemRole struct {
	ID uint `gorm:"primarykey"`
	// 角色名字
	RoleName string
	// 系统级角色Code(管理员admin, 普通用户ordinary)
	RoleCode string `gorm:"type:varchar(30)" binding:"required,eq=sysadmin|eq=normal"`
	Users    []*User
}

SystemRole 系统角色

type Tenant

type Tenant struct {
	ID uint `gorm:"primarykey"`
	// 租户名字
	TenantName string `gorm:"type:varchar(50);uniqueIndex"`
	// 备注
	Remark string
	// 是否激活
	IsActive  bool
	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	UpdatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`

	ResourceQuotas []*TenantResourceQuota
	Users          []*User `gorm:"many2many:tenant_user_rels;"`
	Projects       []*Project

	AllocatedResourcequota v1.ResourceList `gorm:"-"`
}

Tenant 租户表

type TenantResourceQuota

type TenantResourceQuota struct {
	ID      uint
	Content datatypes.JSON

	TenantID                   uint                      `gorm:"uniqueIndex:uniq_tenant_cluster" binding:"required"`
	ClusterID                  uint                      `gorm:"uniqueIndex:uniq_tenant_cluster" binding:"required"`
	Tenant                     *Tenant                   `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	Cluster                    *Cluster                  `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	TenantResourceQuotaApply   *TenantResourceQuotaApply `gorm:"constraint:OnUpdate:RESTRICT,OnDelete:SET NULL;"`
	TenantResourceQuotaApplyID *uint
}

type TenantResourceQuotaApply

type TenantResourceQuotaApply struct {
	ID        uint
	Content   datatypes.JSON
	Status    string    `gorm:"type:varchar(30);"`
	Username  string    `gorm:"type:varchar(255);"`
	UpdatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`
}

TenantResourceQuotaApply 集群资源申请

type TenantUserRels

type TenantUserRels struct {
	ID     uint    `gorm:"primarykey"`
	Tenant *Tenant `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 租户ID
	TenantID uint  `gorm:"uniqueIndex:uniq_idx_tenant_user_rel"`
	User     *User `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	// 用户ID
	UserID uint `gorm:"uniqueIndex:uniq_idx_tenant_user_rel"`

	// 租户级角色(管理员admin, 普通用户ordinary)
	Role string `gorm:"type:varchar(30)" binding:"required"`
}

TenantUserRels 租户-用户-关系表 租户id-用户id-类型 唯一索引

type User

type User struct {
	ID uint `gorm:"primarykey"`
	// 用户名
	Username string `gorm:"type:varchar(50);uniqueIndex" binding:"required"`
	// 邮箱
	Email string `gorm:"type:varchar(50)" binding:"required"`
	// 电话
	Phone    string `gorm:"type:varchar(255)"`
	Password string `gorm:"type:varchar(255)" json:"-"`
	// 是否激活
	IsActive *bool `sql:"DEFAULT:true"`
	// 加入时间
	CreatedAt *time.Time `sql:"DEFAULT:'current_timestamp'"`
	// 最后登录时间
	LastLoginAt *time.Time `sql:"DEFAULT:'current_timestamp'"`

	Source       string    `gorm:"type:varchar(50)"`
	SourceVendor string    `gorm:"type:varchar(50)"`
	Tenants      []*Tenant `gorm:"many2many:tenant_user_rels;"`
	SystemRole   *SystemRole
	SystemRoleID uint

	// 角色,不同关联对象下表示的角色不同, 用来做join查询的时候处理角色字段的(请勿删除)
	Role string `sql:"-" json:",omitempty"`
}

User 用户表

func (*User) GetEmail

func (u *User) GetEmail() string

func (*User) GetID

func (u *User) GetID() uint

func (*User) GetMail

func (u *User) GetMail() string

func (*User) GetSource

func (u *User) GetSource() string

func (*User) GetSystemRoleID

func (u *User) GetSystemRoleID() uint

func (*User) GetUserKind

func (u *User) GetUserKind() string

func (*User) GetUsername

func (u *User) GetUsername() string

func (User) MarshalBinary

func (u User) MarshalBinary() ([]byte, error)

implement redis

func (*User) SetLastLogin

func (u *User) SetLastLogin(t *time.Time)

func (*User) UnmarshalBinary

func (u *User) UnmarshalBinary(data []byte) error

type UserCreate

type UserCreate struct {
	ID       uint   `json:"id"`
	Username string `json:"username" binding:"required"`
	Email    string `json:"email" binding:"required,email"`
	Password string `json:"password" binding:"min=8"`
}

type UserMessageStatus

type UserMessageStatus struct {
	ID        uint
	UserID    uint
	User      *User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
	MessageID *uint
	Message   *Message `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
	IsRead    bool

	AlertMessageID *uint
	AlertMessage   *AlertMessage `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}

func (*UserMessageStatus) ColumnSlice

func (status *UserMessageStatus) ColumnSlice() []string

func (*UserMessageStatus) ValueSlice

func (status *UserMessageStatus) ValueSlice() []string

type UserSel

type UserSel struct {
	ID       uint
	Username string
	Email    string
}

type UserToken added in v1.22.0

type UserToken struct {
	ID        uint       `gorm:"primarykey" json:"id"`
	Token     string     `json:"token"`
	GrantType string     `gorm:"type:varchar(50)" json:"grantType"`
	Scope     string     `gorm:"type:varchar(50)" json:"scope"`
	ExpireAt  *time.Time `json:"expireAt"`

	UserID    *uint      `json:"userID"`
	User      *User      `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"user,omitempty"`
	CreatedAt *time.Time `json:"createdAt"`

	Expired bool `gorm:"-" json:"expired"`
}

type VirtualDomain

type VirtualDomain struct {
	ID                uint   `gorm:"primarykey"`
	VirtualDomainName string `gorm:"type:varchar(50);uniqueIndex"`

	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	UpdatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`

	IsActive  bool // 是否激活
	CreatedBy string
}

type VirtualSpace

type VirtualSpace struct {
	ID               uint   `gorm:"primarykey"`
	VirtualSpaceName string `gorm:"type:varchar(50);uniqueIndex"`

	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`
	UpdatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`

	IsActive  bool
	CreatedBy string

	Users        []*User `gorm:"many2many:virtual_space_user_rels;"`
	Environments []*Environment
}

type VirtualSpaceUserRels

type VirtualSpaceUserRels struct {
	ID uint `gorm:"primarykey"`

	VirtualSpaceID uint          `gorm:"uniqueIndex:uniq_idx_virtual_space_user_rel"`
	VirtualSpace   *VirtualSpace `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`

	UserID uint  `gorm:"uniqueIndex:uniq_idx_virtual_space_user_rel;constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`
	User   *User `json:",omitempty" gorm:"constraint:OnUpdate:RESTRICT,OnDelete:CASCADE;"`

	// 虚拟空间角色(管理员admin, 普通用户normal)
	Role string `gorm:"type:varchar(30)" binding:"required,eq=admin|eq=normal"`
}

type Workload

type Workload struct {
	ID        uint      `gorm:"primarykey"`
	CreatedAt time.Time `sql:"DEFAULT:'current_timestamp'"`

	ClusterName       string
	Namespace         string
	Type              string
	Name              string
	CPULimitStdvar    float64
	MemoryLimitStdvar float64

	Containers []*Container `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;" json:"-"`

	*Notice `gorm:"-"`
}

Workload workload资源使用清单

func (*Workload) AddNotice

func (w *Workload) AddNotice()

func (*Workload) UniqueKey

func (w *Workload) UniqueKey() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL