package models import ( "strconv" "time" _ "github.com/go-sql-driver/mysql" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/dbs" ) type HTTPDNSRuntimeLogDAO dbs.DAO func NewHTTPDNSRuntimeLogDAO() *HTTPDNSRuntimeLogDAO { return dbs.NewDAO(&HTTPDNSRuntimeLogDAO{ DAOObject: dbs.DAOObject{ DB: Tea.Env, Table: "edgeHTTPDNSRuntimeLogs", Model: new(HTTPDNSRuntimeLog), PkName: "id", }, }).(*HTTPDNSRuntimeLogDAO) } var SharedHTTPDNSRuntimeLogDAO *HTTPDNSRuntimeLogDAO func init() { dbs.OnReady(func() { SharedHTTPDNSRuntimeLogDAO = NewHTTPDNSRuntimeLogDAO() }) } func (this *HTTPDNSRuntimeLogDAO) CreateLog(tx *dbs.Tx, log *HTTPDNSRuntimeLog) error { lastLog, err := this.Query(tx). Result("id", "clusterId", "nodeId", "level", "type", "module", "description", "createdAt"). DescPk(). Find() if err != nil { return err } if lastLog != nil { nodeLog := lastLog.(*HTTPDNSRuntimeLog) if nodeLog.ClusterId == log.ClusterId && nodeLog.NodeId == log.NodeId && nodeLog.Level == log.Level && nodeLog.Type == log.Type && nodeLog.Module == log.Module && nodeLog.Description == log.Description && time.Now().Unix()-int64(nodeLog.CreatedAt) < 1800 { count := log.Count if count <= 0 { count = 1 } return this.Query(tx). Pk(nodeLog.Id). Set("count", dbs.SQL("count+"+strconv.FormatInt(count, 10))). UpdateQuickly() } } var op = NewHTTPDNSRuntimeLogOperator() op.ClusterId = log.ClusterId op.NodeId = log.NodeId op.Level = log.Level op.Type = log.Type op.Module = log.Module op.Description = log.Description op.Count = log.Count op.RequestId = log.RequestId op.CreatedAt = log.CreatedAt op.Day = log.Day return this.Save(tx, op) } func (this *HTTPDNSRuntimeLogDAO) BuildListQuery(tx *dbs.Tx, day string, clusterId int64, nodeId int64, level string, keyword string) *dbs.Query { query := this.Query(tx).DescPk() if len(day) > 0 { query = query.Attr("day", day) } if clusterId > 0 { query = query.Attr("clusterId", clusterId) } if nodeId > 0 { query = query.Attr("nodeId", nodeId) } if len(level) > 0 { query = query.Attr("level", level) } if len(keyword) > 0 { query = query.Where("(type LIKE :kw OR module LIKE :kw OR description LIKE :kw OR requestId LIKE :kw)").Param("kw", "%"+keyword+"%") } return query } func (this *HTTPDNSRuntimeLogDAO) CountLogs(tx *dbs.Tx, day string, clusterId int64, nodeId int64, level string, keyword string) (int64, error) { return this.BuildListQuery(tx, day, clusterId, nodeId, level, keyword).Count() } func (this *HTTPDNSRuntimeLogDAO) ListLogs(tx *dbs.Tx, day string, clusterId int64, nodeId int64, level string, keyword string, offset int64, size int64) (result []*HTTPDNSRuntimeLog, err error) { _, err = this.BuildListQuery(tx, day, clusterId, nodeId, level, keyword). Offset(offset). Limit(size). Slice(&result). FindAll() return }