mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 13:29:41 +02:00
* feat(jobs): add job service interface * feat(jobs): create job execution api * style(jobs): remove comment * feat(jobs): add bindings * feat(jobs): validate payload different cases * refactor(jobs): rename endpointJob method * refactor(jobs): return original error * feat(jobs): pull image before creating container * feat(jobs): run jobs with sh * style(jobs): remove comment * refactor(jobs): change error names * feat(jobs): sync pull image * fix(jobs): close image reader after error check * style(jobs): remove comment and add docs * refactor(jobs): inline script command * fix(jobs): handle pul image error * refactor(jobs): handle image pull output * fix(docker): set http client timeout to 100s * feat(api): create schedule type * feat(agent): add basic schedule api * feat(schedules): add schedule service in bolt * feat(schedule): add schedule service to handler * feat(schedule): add and list schedules from db * feat(agent): get schedule from db * feat(schedule): update schedule in db * feat(agent): delete schedule * fix(bolt): remove sync method from scheduleService * feat(schedules): save/delete script in fs * feat(schedules): schedules cron service implementation * feat(schedule): integrate handler with cron * feat(schedules): schedules API overhaul * refactor(project): remove .idea folder * fix(schedules): fix script task execute call * refactor(schedules): refactor/fix golint issues * refactor(schedules): update SnapshotTask documentation * refactor(schedules): validate image name in ScheduleCreate operation
51 lines
1.7 KiB
Go
51 lines
1.7 KiB
Go
package schedules
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
httperror "github.com/portainer/libhttp/error"
|
|
"github.com/portainer/portainer"
|
|
"github.com/portainer/portainer/cron"
|
|
"github.com/portainer/portainer/http/security"
|
|
)
|
|
|
|
// Handler is the HTTP handler used to handle schedule operations.
|
|
type Handler struct {
|
|
*mux.Router
|
|
ScheduleService portainer.ScheduleService
|
|
EndpointService portainer.EndpointService
|
|
FileService portainer.FileService
|
|
JobService portainer.JobService
|
|
JobScheduler portainer.JobScheduler
|
|
}
|
|
|
|
// NewHandler creates a handler to manage schedule operations.
|
|
func NewHandler(bouncer *security.RequestBouncer) *Handler {
|
|
h := &Handler{
|
|
Router: mux.NewRouter(),
|
|
}
|
|
|
|
h.Handle("/schedules",
|
|
bouncer.AdministratorAccess(httperror.LoggerHandler(h.scheduleList))).Methods(http.MethodGet)
|
|
h.Handle("/schedules",
|
|
bouncer.AdministratorAccess(httperror.LoggerHandler(h.scheduleCreate))).Methods(http.MethodPost)
|
|
h.Handle("/schedules/{id}",
|
|
bouncer.AdministratorAccess(httperror.LoggerHandler(h.scheduleInspect))).Methods(http.MethodGet)
|
|
h.Handle("/schedules/{id}",
|
|
bouncer.AdministratorAccess(httperror.LoggerHandler(h.scheduleUpdate))).Methods(http.MethodPut)
|
|
h.Handle("/schedules/{id}",
|
|
bouncer.AdministratorAccess(httperror.LoggerHandler(h.scheduleDelete))).Methods(http.MethodDelete)
|
|
|
|
return h
|
|
}
|
|
|
|
func (handler *Handler) createTaskExecutionContext(scheduleID portainer.ScheduleID, endpoints []portainer.EndpointID) *cron.ScriptTaskContext {
|
|
return &cron.ScriptTaskContext{
|
|
JobService: handler.JobService,
|
|
EndpointService: handler.EndpointService,
|
|
FileService: handler.FileService,
|
|
ScheduleID: scheduleID,
|
|
TargetEndpoints: endpoints,
|
|
}
|
|
}
|