diff --git a/database/task.go b/database/task.go index 4be1ed4..3793b08 100644 --- a/database/task.go +++ b/database/task.go @@ -86,6 +86,7 @@ func ListNonTerminalTasks() ([]*types.EremeticTask, error) { var task types.EremeticTask json.Unmarshal(v, &task) if !task.IsTerminated() { + applyMask(&task) tasks = append(tasks, &task) } return nil @@ -95,3 +96,9 @@ func ListNonTerminalTasks() ([]*types.EremeticTask, error) { return tasks, err } + +func applyMask(task *types.EremeticTask) { + for k := range task.MaskedEnvironment { + task.MaskedEnvironment[k] = "*******" + } +} diff --git a/handler/handler.go b/handler/handler.go index 0c90eec..ba21eb8 100644 --- a/handler/handler.go +++ b/handler/handler.go @@ -96,6 +96,18 @@ func GetTaskInfo(scheduler types.Scheduler) http.HandlerFunc { } } +// ListRunningTasks returns information about running tasks in the database. +func ListRunningTasks(scheduler types.Scheduler) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + logrus.Debug("Fetching all tasks") + tasks, err := database.ListNonTerminalTasks() + if err != nil { + handleError(err, w, "Unable to fetch running tasks from the database") + } + writeJSON(200, tasks, w) + } +} + func handleError(err error, w http.ResponseWriter, message string) { if err == nil { return diff --git a/misc/swagger.yaml b/misc/swagger.yaml index e371c13..9ebd804 100644 --- a/misc/swagger.yaml +++ b/misc/swagger.yaml @@ -10,6 +10,19 @@ produces: - application/json paths: /task: + get: + summary: List running tasks + description: | + List all running tasks, masking values in MaskedEnvironment. + responses: + 200: + description: Task details + schema: + $ref: '#/definitions/Task' + 404: + description: No tasks found + default: + description: Unexpected error post: summary: Launch a task consumes: @@ -60,6 +73,10 @@ definitions: host_path: type: string description: Path on host to mount + Tasks: + type: array + items: + $ref: '#/definitions/Task' Task: type: object required: diff --git a/routes/routes.go b/routes/routes.go index f684caf..caf1da1 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -30,6 +30,12 @@ func Create(scheduler types.Scheduler) *mux.Router { Pattern: "/task/{taskId}", Handler: handler.GetTaskInfo(scheduler), }, + types.Route{ + Name: "ListRunningTasks", + Method: "GET", + Pattern: "/task", + Handler: handler.ListRunningTasks(scheduler), + }, } router := mux.NewRouter().StrictSlash(true)