mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00: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