package console import ( "time" "yunyan/pb" "github.com/gin-gonic/gin" ) // 「统计日志」面板查询接口:读 console 从 NATS 收到的埋点接收流水(statlog:recv:)。 // 数据在 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, // 被清条数 }) }