mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Refactor Cron and merge dashboard tasks (#10745)
* Refactor Cron and merge dashboard tasks * Merge Cron and Dashboard tasks * Make every cron task report a system notice on completion * Refactor the creation of these tasks * Ensure that execution counts of tasks is correct * Allow cron tasks to be started from the cron page * golangci-lint fixes * Enforce that only one task with the same name can be registered Signed-off-by: Andrew Thornton <art27@cantab.net> * fix name check Signed-off-by: Andrew Thornton <art27@cantab.net> * as per @guillep2k * as per @lafriks Signed-off-by: Andrew Thornton <art27@cantab.net> * Add git.CommandContext variants Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							
								
								
									
										118
									
								
								modules/cron/tasks_basic.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								modules/cron/tasks_basic.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| // Copyright 2020 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package cron | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"time" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/modules/migrations" | ||||
| 	repository_service "code.gitea.io/gitea/modules/repository" | ||||
| 	mirror_service "code.gitea.io/gitea/services/mirror" | ||||
| ) | ||||
|  | ||||
| func registerUpdateMirrorTask() { | ||||
| 	RegisterTaskFatal("update_mirrors", &BaseConfig{ | ||||
| 		Enabled:    true, | ||||
| 		RunAtStart: false, | ||||
| 		Schedule:   "@every 10m", | ||||
| 	}, func(ctx context.Context, _ *models.User, _ Config) error { | ||||
| 		return mirror_service.Update(ctx) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerRepoHealthCheck() { | ||||
| 	type RepoHealthCheckConfig struct { | ||||
| 		BaseConfig | ||||
| 		Timeout time.Duration | ||||
| 		Args    []string `delim:" "` | ||||
| 	} | ||||
| 	RegisterTaskFatal("repo_health_check", &RepoHealthCheckConfig{ | ||||
| 		BaseConfig: BaseConfig{ | ||||
| 			Enabled:    true, | ||||
| 			RunAtStart: false, | ||||
| 			Schedule:   "@every 24h", | ||||
| 		}, | ||||
| 		Timeout: 60 * time.Second, | ||||
| 		Args:    []string{}, | ||||
| 	}, func(ctx context.Context, _ *models.User, config Config) error { | ||||
| 		rhcConfig := config.(*RepoHealthCheckConfig) | ||||
| 		return repository_service.GitFsck(ctx, rhcConfig.Timeout, rhcConfig.Args) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerCheckRepoStats() { | ||||
| 	RegisterTaskFatal("check_repo_stats", &BaseConfig{ | ||||
| 		Enabled:    true, | ||||
| 		RunAtStart: true, | ||||
| 		Schedule:   "@every 24h", | ||||
| 	}, func(ctx context.Context, _ *models.User, _ Config) error { | ||||
| 		return models.CheckRepoStats(ctx) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerArchiveCleanup() { | ||||
| 	RegisterTaskFatal("archive_cleanup", &OlderThanConfig{ | ||||
| 		BaseConfig: BaseConfig{ | ||||
| 			Enabled:    true, | ||||
| 			RunAtStart: true, | ||||
| 			Schedule:   "@every 24h", | ||||
| 		}, | ||||
| 		OlderThan: 24 * time.Hour, | ||||
| 	}, func(ctx context.Context, _ *models.User, config Config) error { | ||||
| 		acConfig := config.(*OlderThanConfig) | ||||
| 		return models.DeleteOldRepositoryArchives(ctx, acConfig.OlderThan) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerSyncExternalUsers() { | ||||
| 	RegisterTaskFatal("sync_external_users", &UpdateExistingConfig{ | ||||
| 		BaseConfig: BaseConfig{ | ||||
| 			Enabled:    true, | ||||
| 			RunAtStart: false, | ||||
| 			Schedule:   "@every 24h", | ||||
| 		}, | ||||
| 		UpdateExisting: true, | ||||
| 	}, func(ctx context.Context, _ *models.User, config Config) error { | ||||
| 		realConfig := config.(*UpdateExistingConfig) | ||||
| 		return models.SyncExternalUsers(ctx, realConfig.UpdateExisting) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerDeletedBranchesCleanup() { | ||||
| 	RegisterTaskFatal("deleted_branches_cleanup", &OlderThanConfig{ | ||||
| 		BaseConfig: BaseConfig{ | ||||
| 			Enabled:    true, | ||||
| 			RunAtStart: true, | ||||
| 			Schedule:   "@every 24h", | ||||
| 		}, | ||||
| 		OlderThan: 24 * time.Hour, | ||||
| 	}, func(ctx context.Context, _ *models.User, config Config) error { | ||||
| 		realConfig := config.(*OlderThanConfig) | ||||
| 		models.RemoveOldDeletedBranches(ctx, realConfig.OlderThan) | ||||
| 		return nil | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func registerUpdateMigrationPosterID() { | ||||
| 	RegisterTaskFatal("update_migration_poster_id", &BaseConfig{ | ||||
| 		Enabled:    true, | ||||
| 		RunAtStart: true, | ||||
| 		Schedule:   "@every 24h", | ||||
| 	}, func(ctx context.Context, _ *models.User, _ Config) error { | ||||
| 		return migrations.UpdateMigrationPosterID(ctx) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func initBasicTasks() { | ||||
| 	registerUpdateMirrorTask() | ||||
| 	registerRepoHealthCheck() | ||||
| 	registerCheckRepoStats() | ||||
| 	registerArchiveCleanup() | ||||
| 	registerSyncExternalUsers() | ||||
| 	registerDeletedBranchesCleanup() | ||||
| 	registerUpdateMigrationPosterID() | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 zeripath
					zeripath