feat: 管理端网站监控,浏览量写入独立 monitor.db

请求日志按日 JSONL;page_views 不进主库,避免统计数据撑大 jiang13.db。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-31 07:55:45 +08:00
parent 16b6a18096
commit 429956c594
54 changed files with 5504 additions and 146 deletions

View File

@@ -13,25 +13,36 @@ import (
var DB *gorm.DB
// InitDB 初始化 SQLite 并自动迁移
func InitDB(dbPath string) error {
// MonitorDB 网站监控独立库page_views与主库 jiang13.db 分离以免撑大备份
var MonitorDB *gorm.DB
func openSQLite(dbPath string) (*gorm.DB, error) {
dir := filepath.Dir(dbPath)
if err := os.MkdirAll(dir, 0755); err != nil {
return fmt.Errorf("创建数据库目录失败: %w", err)
return nil, fmt.Errorf("创建数据库目录失败: %w", err)
}
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{
Logger: logger.Default.LogMode(logger.Warn),
})
if err != nil {
return fmt.Errorf("连接 SQLite 失败: %w", err)
return nil, fmt.Errorf("连接 SQLite 失败: %w", err)
}
sqlDB, err := db.DB()
if err != nil {
return err
return nil, err
}
sqlDB.SetMaxOpenConns(1)
return db, nil
}
// InitDB 初始化主库 SQLite 并自动迁移(不含 page_views
func InitDB(dbPath string) error {
db, err := openSQLite(dbPath)
if err != nil {
return err
}
if err := db.AutoMigrate(
&User{}, &Board{}, &Post{}, &Comment{},
@@ -60,6 +71,20 @@ func InitDB(dbPath string) error {
return nil
}
// InitMonitorDB 打开独立监控库page_views 只写此处)
func InitMonitorDB(monitorDBPath string) error {
db, err := openSQLite(monitorDBPath)
if err != nil {
return fmt.Errorf("监控库初始化失败: %w", err)
}
if err := db.AutoMigrate(&PageView{}); err != nil {
return fmt.Errorf("监控库迁移失败: %w", err)
}
MonitorDB = db
log.Println("[model] 监控库初始化完成:", monitorDBPath)
return nil
}
// PingDB 检测数据库连接是否可用(供健康检查使用)
func PingDB() error {
if DB == nil {