2020-05-16 17:31:38 -06:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 11:20:29 -07:00
// SPDX-License-Identifier: MIT
2020-05-16 17:31:38 -06:00
package cron
import (
"time"
2022-06-26 08:19:22 -06:00
"code.gitea.io/gitea/modules/translation"
2020-05-16 17:31:38 -06:00
)
// Config represents a basic configuration interface that cron task
type Config interface {
IsEnabled ( ) bool
DoRunAtStart ( ) bool
GetSchedule ( ) string
2022-06-26 08:19:22 -06:00
FormatMessage ( locale translation . Locale , name , status , doer string , args ... interface { } ) string
2020-08-05 14:40:36 -06:00
DoNoticeOnSuccess ( ) bool
2020-05-16 17:31:38 -06:00
}
// BaseConfig represents the basic config for a Cron task
type BaseConfig struct {
2020-08-05 14:40:36 -06:00
Enabled bool
RunAtStart bool
Schedule string
2022-03-26 15:13:04 -06:00
NoticeOnSuccess bool
2020-05-16 17:31:38 -06:00
}
// OlderThanConfig represents a cron task with OlderThan setting
type OlderThanConfig struct {
BaseConfig
OlderThan time . Duration
}
// UpdateExistingConfig represents a cron task with UpdateExisting setting
type UpdateExistingConfig struct {
BaseConfig
UpdateExisting bool
}
2021-01-26 14:02:42 -07:00
// CleanupHookTaskConfig represents a cron task with settings to cleanup hook_task
type CleanupHookTaskConfig struct {
BaseConfig
CleanupType string
OlderThan time . Duration
NumberToKeep int
}
2020-05-16 17:31:38 -06:00
// GetSchedule returns the schedule for the base config
func ( b * BaseConfig ) GetSchedule ( ) string {
return b . Schedule
}
// IsEnabled returns the enabled status for the config
func ( b * BaseConfig ) IsEnabled ( ) bool {
return b . Enabled
}
// DoRunAtStart returns whether the task should be run at the start
func ( b * BaseConfig ) DoRunAtStart ( ) bool {
return b . RunAtStart
}
2020-08-05 14:40:36 -06:00
// DoNoticeOnSuccess returns whether a success notice should be posted
func ( b * BaseConfig ) DoNoticeOnSuccess ( ) bool {
2022-03-26 15:13:04 -06:00
return b . NoticeOnSuccess
2020-08-05 14:40:36 -06:00
}
2020-05-16 17:31:38 -06:00
// FormatMessage returns a message for the task
2022-03-28 19:31:07 -06:00
// Please note the `status` string will be concatenated with `admin.dashboard.cron.` and `admin.dashboard.task.` to provide locale messages. Similarly `name` will be composed with `admin.dashboard.` to provide the locale name for the task.
2022-06-26 08:19:22 -06:00
func ( b * BaseConfig ) FormatMessage ( locale translation . Locale , name , status , doer string , args ... interface { } ) string {
2020-05-16 17:31:38 -06:00
realArgs := make ( [ ] interface { } , 0 , len ( args ) + 2 )
2022-06-26 08:19:22 -06:00
realArgs = append ( realArgs , locale . Tr ( "admin.dashboard." + name ) )
2022-03-28 19:31:07 -06:00
if doer == "" {
2020-05-16 17:31:38 -06:00
realArgs = append ( realArgs , "(Cron)" )
} else {
2022-03-28 19:31:07 -06:00
realArgs = append ( realArgs , doer )
2020-05-16 17:31:38 -06:00
}
if len ( args ) > 0 {
realArgs = append ( realArgs , args ... )
}
2022-03-28 19:31:07 -06:00
if doer == "" {
2022-06-26 08:19:22 -06:00
return locale . Tr ( "admin.dashboard.cron." + status , realArgs ... )
2020-05-16 17:31:38 -06:00
}
2022-06-26 08:19:22 -06:00
return locale . Tr ( "admin.dashboard.task." + status , realArgs ... )
2020-05-16 17:31:38 -06:00
}