PandaWiki/backend/domain/stat.go

108 lines
3.3 KiB
Go

package domain
import (
"time"
)
type StatPageScene int
const (
StatPageSceneWelcome StatPageScene = iota + 1
StatPageSceneNodeDetail
StatPageSceneChat
StatPageSceneLogin
)
var (
StatPageSceneNames = []string{"欢迎页", "问答页", "登录页"}
)
type StatPage struct {
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"`
KBID string `json:"kb_id"`
NodeID string `json:"node_id"`
UserID uint `json:"user_id"`
SessionID string `json:"session_id"`
Scene StatPageScene `json:"scene"` // 1: welcome, 2: detail, 3: chat, 4: login
IP string `json:"ip"`
UA string `json:"ua"`
BrowserName string `json:"browser_name"`
BrowserOS string `json:"browser_os"`
Referer string `json:"referer"`
RefererHost string `json:"referer_host"`
CreatedAt time.Time `json:"created_at"`
}
type StatPageReq struct {
Scene StatPageScene `json:"scene" validate:"required,oneof=1 2 3 4"`
NodeID string `json:"node_id"`
}
type HotPage struct {
Scene StatPageScene `json:"scene"`
NodeID string `json:"node_id"`
NodeName string `json:"node_name" gorm:"-"`
Count int64 `json:"count"`
}
type HotRefererHost struct {
RefererHost string `json:"referer_host"`
Count int64 `json:"count"`
}
type HotBrowser struct {
OS []BrowserCount `json:"os"`
Browser []BrowserCount `json:"browser"`
}
type BrowserCount struct {
Name string `json:"name"`
Count int64 `json:"count"`
}
type InstantCountResp struct {
Time string `json:"time"`
Count int64 `json:"count"`
}
type InstantPageResp struct {
Scene StatPageScene `json:"scene"`
NodeID string `json:"node_id"`
NodeName string `json:"node_name" gorm:"-"`
IP string `json:"ip"`
IPAddress IPAddress `json:"ip_address" gorm:"-"`
CreatedAt time.Time `json:"created_at"`
UserID uint `json:"user_id"`
Info *AuthUserInfo `json:"info"`
}
type ConversationDistribution struct {
AppType AppType `json:"app_type"`
AppID string `json:"app_id"`
Count int64 `json:"count"`
}
// StatPageHour 按小时聚合的统计数据
type StatPageHour struct {
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"`
KbID string `json:"kb_id" gorm:"index"`
Hour time.Time `json:"hour" gorm:"index"` // 按小时截断的时间
IPCount int64 `json:"ip_count"`
SessionCount int64 `json:"session_count"`
PageVisitCount int64 `json:"page_visit_count"`
ConversationCount int64 `json:"conversation_count"`
GeoCount MapStrInt64 `json:"geo_count" gorm:"type:jsonb"`
ConversationDistribution MapStrInt64 `json:"conversation_distribution" gorm:"type:jsonb"`
HotRefererHost MapStrInt64 `json:"hot_referer_host" gorm:"type:jsonb"`
HotPage MapStrInt64 `json:"hot_page" gorm:"type:jsonb"`
HotBrowser MapStrInt64 `json:"hot_browser" gorm:"type:jsonb"`
HotOS MapStrInt64 `json:"hot_os" gorm:"type:jsonb"`
CreatedAt time.Time `json:"created_at"`
}
func (StatPageHour) TableName() string {
return "stat_page_hours"
}