mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 23:20:26 +08:00
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
package models
|
|
|
|
import (
|
|
teaconst "github.com/TeaOSLab/EdgeAPI/internal/const"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"github.com/iwind/TeaGo/Tea"
|
|
"github.com/iwind/TeaGo/dbs"
|
|
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
)
|
|
|
|
type APIMethodStatDAO dbs.DAO
|
|
|
|
func NewAPIMethodStatDAO() *APIMethodStatDAO {
|
|
return dbs.NewDAO(&APIMethodStatDAO{
|
|
DAOObject: dbs.DAOObject{
|
|
DB: Tea.Env,
|
|
Table: "edgeAPIMethodStats",
|
|
Model: new(APIMethodStat),
|
|
PkName: "id",
|
|
},
|
|
}).(*APIMethodStatDAO)
|
|
}
|
|
|
|
var SharedAPIMethodStatDAO *APIMethodStatDAO
|
|
|
|
func init() {
|
|
dbs.OnReady(func() {
|
|
SharedAPIMethodStatDAO = NewAPIMethodStatDAO()
|
|
})
|
|
}
|
|
|
|
// CreateStat 记录统计数据
|
|
func (this *APIMethodStatDAO) CreateStat(tx *dbs.Tx, method string, tag string, costMs float64) error {
|
|
var day = timeutil.Format("Ymd")
|
|
return this.Query(tx).
|
|
Param("costMs", costMs).
|
|
InsertOrUpdateQuickly(map[string]interface{}{
|
|
"apiNodeId": teaconst.NodeId,
|
|
"method": method,
|
|
"tag": tag,
|
|
"costMs": costMs,
|
|
"peekMs": costMs,
|
|
"countCalls": 1,
|
|
"day": day,
|
|
}, map[string]interface{}{
|
|
"costMs": dbs.SQL("(costMs*countCalls+:costMs)/(countCalls+1)"),
|
|
"peekMs": dbs.SQL("IF(peekMs>:costMs, peekMs, :costMs)"),
|
|
"countCalls": dbs.SQL("countCalls+1"),
|
|
})
|
|
}
|
|
|
|
// FindAllStatsWithDay 查询当前统计
|
|
func (this *APIMethodStatDAO) FindAllStatsWithDay(tx *dbs.Tx, day string) (result []*APIMethodStat, err error) {
|
|
_, err = this.Query(tx).
|
|
Attr("day", day).
|
|
Slice(&result).
|
|
FindAll()
|
|
return
|
|
}
|
|
|
|
// CountAllStatsWithDay 统计当天数量
|
|
func (this *APIMethodStatDAO) CountAllStatsWithDay(tx *dbs.Tx, day string) (int64, error) {
|
|
return this.Query(tx).
|
|
Attr("day", day).
|
|
Count()
|
|
}
|
|
|
|
// Clean 清理数据
|
|
func (this *APIMethodStatDAO) Clean(tx *dbs.Tx) error {
|
|
var day = timeutil.Format("Ymd")
|
|
_, err := this.Query(tx).
|
|
Param("day", day).
|
|
Where("day<:day").
|
|
Delete()
|
|
return err
|
|
}
|