mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Estimate Action Count in Statistics (#19775)
This commit is contained in:
		@@ -11,6 +11,7 @@ import (
 | 
				
			|||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"code.gitea.io/gitea/modules/setting"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"xorm.io/builder"
 | 
						"xorm.io/builder"
 | 
				
			||||||
 | 
						"xorm.io/xorm/schemas"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DefaultContext is the default context to run xorm queries in
 | 
					// DefaultContext is the default context to run xorm queries in
 | 
				
			||||||
@@ -175,3 +176,24 @@ func CountByBean(ctx context.Context, bean interface{}) (int64, error) {
 | 
				
			|||||||
func TableName(bean interface{}) string {
 | 
					func TableName(bean interface{}) string {
 | 
				
			||||||
	return x.TableName(bean)
 | 
						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:
 | 
				
			||||||
 | 
							_, err = e.Context(ctx).SQL("SELECT reltuples AS estimate FROM pg_class WHERE relname = ?;", 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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ func GetStatistic() (stats Statistic) {
 | 
				
			|||||||
	stats.Counter.Repo, _ = repo_model.CountRepositories(db.DefaultContext, repo_model.CountRepositoryOptions{})
 | 
						stats.Counter.Repo, _ = repo_model.CountRepositories(db.DefaultContext, repo_model.CountRepositoryOptions{})
 | 
				
			||||||
	stats.Counter.Watch, _ = e.Count(new(repo_model.Watch))
 | 
						stats.Counter.Watch, _ = e.Count(new(repo_model.Watch))
 | 
				
			||||||
	stats.Counter.Star, _ = e.Count(new(repo_model.Star))
 | 
						stats.Counter.Star, _ = e.Count(new(repo_model.Star))
 | 
				
			||||||
	stats.Counter.Action, _ = e.Count(new(Action))
 | 
						stats.Counter.Action, _ = db.EstimateCount(db.DefaultContext, new(Action))
 | 
				
			||||||
	stats.Counter.Access, _ = e.Count(new(access_model.Access))
 | 
						stats.Counter.Access, _ = e.Count(new(access_model.Access))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	type IssueCount struct {
 | 
						type IssueCount struct {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2423,7 +2423,7 @@ dashboard.new_version_hint = Gitea %s is now available, you are running %s. Chec
 | 
				
			|||||||
dashboard.statistic = Summary
 | 
					dashboard.statistic = Summary
 | 
				
			||||||
dashboard.operations = Maintenance Operations
 | 
					dashboard.operations = Maintenance Operations
 | 
				
			||||||
dashboard.system_status = System Status
 | 
					dashboard.system_status = System Status
 | 
				
			||||||
dashboard.statistic_info = The Gitea database holds <b>%d</b> users, <b>%d</b> organizations, <b>%d</b> public keys, <b>%d</b> repositories, <b>%d</b> watches, <b>%d</b> stars, <b>%d</b> actions, <b>%d</b> accesses, <b>%d</b> issues, <b>%d</b> comments, <b>%d</b> social accounts, <b>%d</b> follows, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> authentication sources, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> hook tasks, <b>%d</b> teams, <b>%d</b> update tasks, <b>%d</b> attachments.
 | 
					dashboard.statistic_info = The Gitea database holds <b>%d</b> users, <b>%d</b> organizations, <b>%d</b> public keys, <b>%d</b> repositories, <b>%d</b> watches, <b>%d</b> stars, ~<b>%d</b> actions, <b>%d</b> accesses, <b>%d</b> issues, <b>%d</b> comments, <b>%d</b> social accounts, <b>%d</b> follows, <b>%d</b> mirrors, <b>%d</b> releases, <b>%d</b> authentication sources, <b>%d</b> webhooks, <b>%d</b> milestones, <b>%d</b> labels, <b>%d</b> hook tasks, <b>%d</b> teams, <b>%d</b> update tasks, <b>%d</b> attachments.
 | 
				
			||||||
dashboard.operation_name = Operation Name
 | 
					dashboard.operation_name = Operation Name
 | 
				
			||||||
dashboard.operation_switch = Switch
 | 
					dashboard.operation_switch = Switch
 | 
				
			||||||
dashboard.operation_run = Run
 | 
					dashboard.operation_run = Run
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user