mirror of
https://github.com/go-gitea/gitea
synced 2025-07-22 18:28:37 +00:00
Use a separate admin page to show global stats, remove actions
stat (#25062)
Before, Gitea shows the database table stats on the `admin dashboard` page. It has some problems: * `count(*)` is quite heavy. If tables have many records, this blocks loading the admin page blocks for a long time * Some users had even reported issues that they can't visit their admin page because this page causes blocking or `50x error (reverse proxy timeout)` * The `actions` stat is not useful. The table is simply too large. Does it really matter if it contains 1,000,000 rows or 9,999,999 rows? * The translation `admin.dashboard.statistic_info` is difficult to maintain. So, this PR uses a separate page to show the stats and removes the `actions` stat.  ## ⚠️ BREAKING The `actions` Prometheus metrics collector has been removed for the reasons mentioned beforehand. Please do not rely on its output anymore.
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
||||
|
||||
"xorm.io/builder"
|
||||
"xorm.io/xorm"
|
||||
"xorm.io/xorm/schemas"
|
||||
)
|
||||
|
||||
// DefaultContext is the default context to run xorm queries in
|
||||
@@ -241,30 +240,6 @@ func TableName(bean interface{}) string {
|
||||
return x.TableName(bean)
|
||||
}
|
||||
|
||||
// EstimateCount returns an estimate of total number of rows in table
|
||||
func EstimateCount(ctx context.Context, bean interface{}) (int64, error) {
|
||||
e := GetEngine(ctx)
|
||||
e.Context(ctx)
|
||||
|
||||
var rows int64
|
||||
var err error
|
||||
tablename := TableName(bean)
|
||||
switch x.Dialect().URI().DBType {
|
||||
case schemas.MYSQL:
|
||||
_, err = e.Context(ctx).SQL("SELECT table_rows FROM information_schema.tables WHERE tables.table_name = ? AND tables.table_schema = ?;", tablename, x.Dialect().URI().DBName).Get(&rows)
|
||||
case schemas.POSTGRES:
|
||||
// the table can live in multiple schemas of a postgres database
|
||||
// See https://wiki.postgresql.org/wiki/Count_estimate
|
||||
tablename = x.TableName(bean, true)
|
||||
_, err = e.Context(ctx).SQL("SELECT reltuples::bigint AS estimate FROM pg_class WHERE oid = ?::regclass;", tablename).Get(&rows)
|
||||
case schemas.MSSQL:
|
||||
_, err = e.Context(ctx).SQL("sp_spaceused ?;", tablename).Get(&rows)
|
||||
default:
|
||||
return e.Context(ctx).Count(tablename)
|
||||
}
|
||||
return rows, err
|
||||
}
|
||||
|
||||
// InTransaction returns true if the engine is in a transaction otherwise return false
|
||||
func InTransaction(ctx context.Context) bool {
|
||||
_, ok := inTransaction(ctx)
|
||||
|
Reference in New Issue
Block a user