You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

64 lines
2.1 KiB

package console
import (
"time"
"yunyan/pb"
"github.com/gin-gonic/gin"
)
// 「统计日志」面板查询接口:读 console 从 NATS 收到的埋点接收流水(statlog:recv:<day>)。
// 数据在 console 自己的 Redis,与选中应用无关,故走全局、不读 X-App-Id(在 handleWeb 中先于设备域分派)。
// getStatLogs 返回某接收日的接收流水(最新在前),可按 level 过滤。day 缺省取当天。
func (this *serverComp) getStatLogs(c *gin.Context) {
var req struct {
Day uint32 `json:"day"` // 接收日 YYYYMMDD,缺省=当天
Level string `json:"level"` // info/warn/error,空=不过滤
Limit int `json:"limit"` // 返回上限,缺省取配置 RecvLogCap
}
_ = c.ShouldBindJSON(&req)
day := req.Day
if day == 0 {
day = statDayNumber(time.Now())
}
limit := req.Limit
if limit <= 0 {
limit = this.options.Stat.RecvLogCap
}
entries, total, err := readRecvLogs(day, req.Level, limit)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
// 记录里已带应用名(App)、是否已注册(Registered)与是否落库(Level),均在接收时按当时注册表标注,无需读时再查库。
writeOK(c, gin.H{
"day": day, // 实际查询的接收日
"total": total, // 该日 Redis 中保留的总条数(未过滤)
"count": len(entries), // 本次返回条数(过滤后)
"entries": entries, // 最新在前
})
}
// clearStatLogs 清空某接收日的「统计日志」接收流水(仅清 console 自己 Redis 里的核对流水,
// 不动统计累加分区 / stats_global_day)。用于现场核对:清掉旧记录后重新观察埋点是否正常进来。
func (this *serverComp) clearStatLogs(c *gin.Context) {
var req struct {
Day uint32 `json:"day"` // 接收日 YYYYMMDD,缺省=当天
}
_ = c.ShouldBindJSON(&req)
day := req.Day
if day == 0 {
day = statDayNumber(time.Now())
}
n, err := delRecvLogs(day)
if err != nil {
writeErr(c, pb.ErrorCode_DBError, err.Error())
return
}
writeOK(c, gin.H{
"day": day, // 实际清理的接收日
"cleared": n, // 被清条数
})
}