mirror of https://github.com/aptly-dev/aptly
204 lines
5.0 KiB
Go
204 lines
5.0 KiB
Go
package api
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/aptly-dev/aptly/task"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// @Summary List Tasks
|
|
// @Description **Get list of available tasks. Each task is returned as in “show” API**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Success 200 {array} task.Task
|
|
// @Router /api/tasks [get]
|
|
func apiTasksList(c *gin.Context) {
|
|
list := context.TaskList()
|
|
c.JSON(200, list.GetTasks())
|
|
}
|
|
|
|
// @Summary Clear Tasks
|
|
// @Description **Removes finished and failed tasks from internal task list**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Success 200 ""
|
|
// @Router /api/tasks-clear [post]
|
|
func apiTasksClear(c *gin.Context) {
|
|
list := context.TaskList()
|
|
list.Clear()
|
|
c.JSON(200, gin.H{})
|
|
}
|
|
|
|
// @Summary Wait for all Tasks
|
|
// @Description **Waits for and returns when all running tasks are complete**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Success 200 ""
|
|
// @Router /api/tasks-wait [get]
|
|
func apiTasksWait(c *gin.Context) {
|
|
list := context.TaskList()
|
|
list.Wait()
|
|
c.JSON(200, gin.H{})
|
|
}
|
|
|
|
// @Summary Wait for Task
|
|
// @Description **Waits for and returns when given Task ID is complete**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} task.Task
|
|
// @Failure 500 {object} Error "invalid syntax, bad id?"
|
|
// @Failure 400 {object} Error "Task Not Found"
|
|
// @Router /api/tasks/{id}/wait [get]
|
|
func apiTasksWaitForTaskByID(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
task, err := list.WaitForTaskByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 400, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, task)
|
|
}
|
|
|
|
// @Summary Get Task Info
|
|
// @Description **Return task information for a given ID**
|
|
// @Tags Tasks
|
|
// @Produce plain
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} task.Task
|
|
// @Failure 500 {object} Error "invalid syntax, bad id?"
|
|
// @Failure 404 {object} Error "Task Not Found"
|
|
// @Router /api/tasks/{id} [get]
|
|
func apiTasksShow(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
var task task.Task
|
|
task, err = list.GetTaskByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 404, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, task)
|
|
}
|
|
|
|
// @Summary Get Task Output
|
|
// @Description **Return task output for a given ID**
|
|
// @Tags Tasks
|
|
// @Produce plain
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} string "Task output"
|
|
// @Failure 500 {object} Error "invalid syntax, bad ID?"
|
|
// @Failure 404 {object} Error "Task Not Found"
|
|
// @Router /api/tasks/{id}/output [get]
|
|
func apiTasksOutputShow(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
var output string
|
|
output, err = list.GetTaskOutputByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 404, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, output)
|
|
}
|
|
|
|
// @Summary Get Task Details
|
|
// @Description **Return task detail for a given ID**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} string "Task detail"
|
|
// @Failure 500 {object} Error "invalid syntax, bad ID?"
|
|
// @Failure 404 {object} Error "Task Not Found"
|
|
// @Router /api/tasks/{id}/detail [get]
|
|
func apiTasksDetailShow(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
var detail interface{}
|
|
detail, err = list.GetTaskDetailByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 404, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, detail)
|
|
}
|
|
|
|
// @Summary Get Task Return Value
|
|
// @Description **Return task return value (status code) by given ID**
|
|
// @Tags Tasks
|
|
// @Produce plain
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} string "msg"
|
|
// @Failure 500 {object} Error "invalid syntax, bad ID?"
|
|
// @Failure 404 {object} Error "Not Found"
|
|
// @Router /api/tasks/{id}/return_value [get]
|
|
func apiTasksReturnValueShow(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
output, err := list.GetTaskReturnValueByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 404, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, output)
|
|
}
|
|
|
|
// @Summary Delete Task
|
|
// @Description **Delete completed task by given ID. Does not stop task execution**
|
|
// @Tags Tasks
|
|
// @Produce json
|
|
// @Param id path int true "Task ID"
|
|
// @Success 200 {object} task.Task
|
|
// @Failure 500 {object} Error "invalid syntax, bad ID?"
|
|
// @Failure 400 {object} Error "Task in progress or not found"
|
|
// @Router /api/tasks/{id} [delete]
|
|
func apiTasksDelete(c *gin.Context) {
|
|
list := context.TaskList()
|
|
id, err := strconv.ParseInt(c.Params.ByName("id"), 10, 0)
|
|
if err != nil {
|
|
AbortWithJSONError(c, 500, err)
|
|
return
|
|
}
|
|
|
|
var delTask task.Task
|
|
delTask, err = list.DeleteTaskByID(int(id))
|
|
if err != nil {
|
|
AbortWithJSONError(c, 400, err)
|
|
return
|
|
}
|
|
|
|
c.JSON(200, delTask)
|
|
}
|