aboutsummaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEarl Warren <109468362+earl-warren@users.noreply.github.com>2023-10-11 09:28:16 +0200
committerGitHub <noreply@github.com>2023-10-11 07:28:16 +0000
commit1050d7a78fa905a7b518bb0ff968cb771392ee1e (patch)
tree95813d9ce6eeca43b97462e4618799041101b3d6 /services
parentdc7cf7a984f9490fb65a137a73bfbda4b58979bb (diff)
downloadgitea-1050d7a78fa905a7b518bb0ff968cb771392ee1e.tar.gz
gitea-1050d7a78fa905a7b518bb0ff968cb771392ee1e.zip
show manual cron run's last time (#27544)
- Currently in the cron tasks, the 'Previous Time' only displays the previous time of when the cron library executes the function, but not any of the manual executions of the task. - Store the last run's time in memory in the Task struct and use that, when that time is later than time that the cron library has executed this task. - This ensures that if an instance admin manually starts a task, there's feedback that this task is/has been run, because the task might be run that quick, that the status icon already has been changed to an checkmark, - Tasks that are executed at startup now reflect this as well, as the time of the execution of that task on startup is now being shown as 'Previous Time'. - Added integration tests for the API part, which is easier to test because querying the HTML table of cron tasks is non-trivial. - Resolves https://codeberg.org/forgejo/forgejo/issues/949 (cherry picked from commit fd34fdac1408ece6b7d9fe6a76501ed9a45d06fa) --------- Co-authored-by: Gusted <postmaster@gusted.xyz> Co-authored-by: KN4CK3R <admin@oldschoolhack.me> Co-authored-by: silverwind <me@silverwind.io>
Diffstat (limited to 'services')
-rw-r--r--services/cron/cron.go6
-rw-r--r--services/cron/tasks.go9
2 files changed, 15 insertions, 0 deletions
diff --git a/services/cron/cron.go b/services/cron/cron.go
index e3f31d08f0..63db75ab3b 100644
--- a/services/cron/cron.go
+++ b/services/cron/cron.go
@@ -106,6 +106,12 @@ func ListTasks() TaskTable {
next = e.NextRun()
prev = e.PreviousRun()
}
+
+ // If the manual run is after the cron run, use that instead.
+ if prev.Before(task.LastRun) {
+ prev = task.LastRun
+ }
+
task.lock.Lock()
tTable = append(tTable, &TaskTableRow{
Name: task.Name,
diff --git a/services/cron/tasks.go b/services/cron/tasks.go
index ea1925c26c..d2c3d1d812 100644
--- a/services/cron/tasks.go
+++ b/services/cron/tasks.go
@@ -9,6 +9,7 @@ import (
"reflect"
"strings"
"sync"
+ "time"
"code.gitea.io/gitea/models/db"
system_model "code.gitea.io/gitea/models/system"
@@ -37,6 +38,8 @@ type Task struct {
LastMessage string
LastDoer string
ExecTimes int64
+ // This stores the time of the last manual run of this task.
+ LastRun time.Time
}
// DoRunAtStart returns if this task should run at the start
@@ -88,6 +91,12 @@ func (t *Task) RunWithUser(doer *user_model.User, config Config) {
}
}()
graceful.GetManager().RunWithShutdownContext(func(baseCtx context.Context) {
+ // Store the time of this run, before the function is executed, so it
+ // matches the behavior of what the cron library does.
+ t.lock.Lock()
+ t.LastRun = time.Now()
+ t.lock.Unlock()
+
pm := process.GetManager()
doerName := ""
if doer != nil && doer.ID != -1 {