Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.3 KiB
88 lines
2.3 KiB
// 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 ( |
|
"time" |
|
|
|
user_model "code.gitea.io/gitea/models/user" |
|
|
|
"github.com/unknwon/i18n" |
|
) |
|
|
|
// Config represents a basic configuration interface that cron task |
|
type Config interface { |
|
IsEnabled() bool |
|
DoRunAtStart() bool |
|
GetSchedule() string |
|
FormatMessage(name, status string, doer *user_model.User, args ...interface{}) string |
|
DoNoticeOnSuccess() bool |
|
} |
|
|
|
// BaseConfig represents the basic config for a Cron task |
|
type BaseConfig struct { |
|
Enabled bool |
|
RunAtStart bool |
|
Schedule string |
|
NoSuccessNotice bool |
|
} |
|
|
|
// 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 |
|
} |
|
|
|
// CleanupHookTaskConfig represents a cron task with settings to cleanup hook_task |
|
type CleanupHookTaskConfig struct { |
|
BaseConfig |
|
CleanupType string |
|
OlderThan time.Duration |
|
NumberToKeep int |
|
} |
|
|
|
// 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 |
|
} |
|
|
|
// DoNoticeOnSuccess returns whether a success notice should be posted |
|
func (b *BaseConfig) DoNoticeOnSuccess() bool { |
|
return !b.NoSuccessNotice |
|
} |
|
|
|
// FormatMessage returns a message for the task |
|
func (b *BaseConfig) FormatMessage(name, status string, doer *user_model.User, args ...interface{}) string { |
|
realArgs := make([]interface{}, 0, len(args)+2) |
|
realArgs = append(realArgs, i18n.Tr("en-US", "admin.dashboard."+name)) |
|
if doer == nil { |
|
realArgs = append(realArgs, "(Cron)") |
|
} else { |
|
realArgs = append(realArgs, doer.Name) |
|
} |
|
if len(args) > 0 { |
|
realArgs = append(realArgs, args...) |
|
} |
|
if doer == nil || (doer.ID == -1 && doer.Name == "(Cron)") { |
|
return i18n.Tr("en-US", "admin.dashboard.cron."+status, realArgs...) |
|
} |
|
return i18n.Tr("en-US", "admin.dashboard.task."+status, realArgs...) |
|
}
|
|
|