package model

import "time"

type ClusterData struct {
	Id        int64  `gorm:"primaryKey;autoIncrement"`
	Day       string `gorm:"type:date;not null;index:idx_cid_day"`
	OrgId     string `gorm:"type:varchar(255);not null"`
	ClusterId string `gorm:"type:varchar(255);not null;index:idx_cid_day"`
	// （h）
	Cpu float64
	// （mil）
	Count     float64
	Ru        float64
	Latency   float64
	CreatedAt time.Time `gorm:"<-:create"`
}

func (ClusterData) TableName() string {
	return "cluster_datas"
}

type Digest struct {
	Id        int64  `gorm:"primaryKey;autoIncrement"`
	Day       string `gorm:"type:date;not null;index:idx_cid_day"`
	OrgId     string `gorm:"type:varchar(255);not null"`
	ClusterId string `gorm:"type:varchar(255);not null;index:idx_cid_day"`
	Source    string
	Digest    string `gorm:"type:varchar(255);not null;index:idx_dig"`
	Sql       string `gorm:"column:sql_text;type:text"`
	Top       int
	// （mil）
	Count  float64
	CntPer float64
	// hour
	Cpu    float64
	CpuPer float64
	// IsNew     bool
	CreatedAt time.Time `gorm:"<-:create"`
}

func (Digest) TableName() string {
	return "digests"
}

type TopDigest struct {
	Id        int64  `gorm:"primaryKey;autoIncrement"`
	Day       string `gorm:"type:date;not null;index:idx_cid_day"`
	OrgId     string `gorm:"type:varchar(255);not null;index:idx_orgid_day"`
	Digest    string `gorm:"type:varchar(255);not null;index:idx_dig"`
	ClusterId string `gorm:"type:varchar(255);not null;index:idx_cid_day"`
	Sql       string `gorm:"column:sql_text;type:text"`
	// （mil）
	Count   float64 `gorm:"not null"`
	CntDiff *float64
	Cpu     float64
	CpuDiff *float64
	CpuPer  float64
	IsNew   bool
	// hour
	CreatedAt time.Time `gorm:"<-:create"`
}

func (TopDigest) TableName() string {
	return "top_digests"
}

type CntDigest struct {
	Id        int64  `gorm:"primaryKey;autoIncrement"`
	ClusterId string `gorm:"type:varchar(255);not null;index:idx_cid_day"`
	Day       string `gorm:"type:date;not null;index:idx_cid_day"`
	Digest    string `gorm:"type:varchar(255);not null;index:idx_dig"`
	Top       int    `gorm:"not null"`
	Sql       string `gorm:"column:sql_text;type:text"`
	// （mil）
	Count      float64 `gorm:"not null"`
	TotalCpu   float64
	CntDiff    *float64
	CpuDiff    *float64
	IsNew      bool
	AvgLatency float64
	AvgCpu     float64
	MaxCpu     float64
	// hour
	CreatedAt time.Time `gorm:"<-:create"`
}

func (CntDigest) TableName() string {
	return "cnt_digests"
}

type CpuDigest struct {
	Id        int64  `gorm:"primaryKey;autoIncrement"`
	ClusterId string `gorm:"type:varchar(255);not null;index:idx_cid_day"`
	Day       string `gorm:"type:date;not null;index:idx_cid_day"`
	Digest    string `gorm:"type:varchar(255);not null;index:idx_dig"`
	Top       int    `gorm:"not null"`
	Sql       string `gorm:"column:sql_text;type:text"`
	// （mil）
	Count float64 `gorm:"not null"`
	// hour
	TotalCpu      float64
	CpuDiff       *float64
	CntDiff       *float64
	IsNew         bool
	CpuDayPercent float64
	// s
	AvgCpu float64
	// s
	MaxCpu     float64
	AvgLatency float64
	CreatedAt  time.Time `gorm:"<-:create"`
}

func (CpuDigest) TableName() string {
	return "cpu_digests"
}
