// Copyright 2022 E99p1ant. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package route import ( "github.com/sirupsen/logrus" "github.com/tamakyi/TamaBox/internal/context" "github.com/tamakyi/TamaBox/internal/i18n" "github.com/tamakyi/TamaBox/internal/stats" ) // Stats 全站公开数据页。 // // 数据每天只算一次(stats.OverviewData 按自然日缓存),页面是纯服务端渲染: // 折线用 SVG、柱状/环形/热力图用 CSS,不挂任何前端图表库,也不需要 JS。 // 这样即使访客禁用脚本、或外部 CDN 抽风,数字和图表都还在。 func Stats(ctx context.Context) { lang := ctx.Lang() ctx.SetTitle(i18n.T(lang, "stats.title")) ov, err := stats.OverviewData(ctx.Request().Context()) if err != nil { // 数据页不该因为一次聚合失败就 500:模板在 Overview 缺失时显示「数据暂不可用」, // 标题、说明、导航照常可用。 logrus.WithContext(ctx.Request().Context()).WithError(err).Warn("加载全站统计数据失败") ctx.Success("stats") return } ctx.Data["Overview"] = stats.NewPage(lang, ov) ctx.Success("stats") }