1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-24 07:49:41 +02:00

feat(api): revamp scheduling to introduce system schedules (#2433)

* feat(api): revamp scheduling to introduce system schedules

* fix(api): fix linting issues

* fix(api): fix lint issues

* refactor(api): fix lint issues
This commit is contained in:
Anthony Lapenna 2018-11-06 22:49:48 +13:00 committed by GitHub
parent dbbea0a20f
commit 110fcc46a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 475 additions and 297 deletions

View file

@ -223,13 +223,38 @@ type (
// ScheduleID represents a schedule identifier.
ScheduleID int
// Schedule represents a task that is scheduled on one or multiple endpoints.
// JobType represents a job type
JobType int
// ScriptExecutionJob represents a scheduled job that can execute a script via a privileged container
ScriptExecutionJob struct {
ScheduleID ScheduleID `json:"ScheduleId"`
Endpoints []EndpointID
Image string
ScriptPath string
}
// SnapshotJob represents a scheduled job that can create endpoint snapshots
SnapshotJob struct {
ScheduleID ScheduleID `json:"ScheduleId"`
}
// EndpointSyncJob represents a scheduled job that synchronize endpoints based on an external file
EndpointSyncJob struct {
ScheduleID ScheduleID `json:"ScheduleId"`
}
// Schedule represents a scheduled job.
// It only contains a pointer to one of the JobRunner implementations
// based on the JobType
Schedule struct {
ID ScheduleID `json:"Id"`
Name string `json:"Name"`
Endpoints []EndpointID `json:"Endpoints"`
CronExpression string `json:"Schedule"`
Task Task `json:"Task"`
ID ScheduleID `json:"Id"`
Name string
CronExpression string
JobType JobType
ScriptExecutionJob *ScriptExecutionJob
SnapshotJob *SnapshotJob
EndpointSyncJob *EndpointSyncJob
}
// WebhookID represents a webhook identifier.
@ -568,6 +593,7 @@ type (
ScheduleService interface {
Schedule(ID ScheduleID) (*Schedule, error)
Schedules() ([]Schedule, error)
SchedulesByJobType(jobType JobType) ([]Schedule, error)
CreateSchedule(schedule *Schedule) error
UpdateSchedule(ID ScheduleID, schedule *Schedule) error
DeleteSchedule(ID ScheduleID) error
@ -639,15 +665,18 @@ type (
// JobScheduler represents a service to run jobs on a periodic basis
JobScheduler interface {
ScheduleTask(cronExpression string, task Task) error
UpdateScheduledTask(ID ScheduleID, cronExpression string, updatedTask Task) error
UnscheduleTask(ID ScheduleID)
CreateSchedule(schedule *Schedule, runner JobRunner) error
UpdateSchedule(schedule *Schedule, runner JobRunner) error
RemoveSchedule(ID ScheduleID)
Start()
}
// Task represents a process that can be scheduled
Task interface {
// JobRunner represents a service that can be used to run a job
JobRunner interface {
Run()
GetScheduleID() ScheduleID
SetScheduleID(ID ScheduleID)
GetJobType() JobType
}
// Snapshotter represents a service used to create endpoint snapshots
@ -808,3 +837,15 @@ const (
// ServiceWebhook is a webhook for restarting a docker service
ServiceWebhook
)
const (
_ JobType = iota
// ScriptExecutionJobType is a non-system job used to execute a script against a list of
// endpoints via privileged containers
ScriptExecutionJobType
// SnapshotJobType is a system job used to create endpoint snapshots
SnapshotJobType
// EndpointSyncJobType is a system job used to synchronize endpoints from
// an external definition store
EndpointSyncJobType
)