2014-09-30 04:34:30 +00:00
|
|
|
package handler
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"net/http"
|
|
|
|
|
2014-09-30 07:43:50 +00:00
|
|
|
"github.com/drone/drone/server/worker"
|
|
|
|
"github.com/drone/drone/server/worker/director"
|
2014-10-09 04:44:43 +00:00
|
|
|
"github.com/drone/drone/server/worker/docker"
|
2014-09-30 07:43:50 +00:00
|
|
|
"github.com/drone/drone/server/worker/pool"
|
2014-09-30 04:34:30 +00:00
|
|
|
"github.com/goji/context"
|
|
|
|
"github.com/zenazn/goji/web"
|
|
|
|
)
|
|
|
|
|
|
|
|
// GetWorkers accepts a request to retrieve the list
|
|
|
|
// of registered workers and return the results
|
|
|
|
// in JSON format.
|
|
|
|
//
|
|
|
|
// GET /api/workers
|
|
|
|
//
|
|
|
|
func GetWorkers(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
|
|
|
workers := pool.FromContext(ctx).List()
|
|
|
|
json.NewEncoder(w).Encode(workers)
|
|
|
|
}
|
|
|
|
|
2014-10-09 04:44:43 +00:00
|
|
|
// PostWorker accepts a request to allocate a new
|
|
|
|
// worker to the pool.
|
|
|
|
//
|
|
|
|
// POST /api/workers
|
|
|
|
//
|
|
|
|
func PostWorker(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
2014-10-09 04:55:53 +00:00
|
|
|
pool := pool.FromContext(ctx)
|
|
|
|
node := r.FormValue("address")
|
|
|
|
pool.Allocate(docker.NewHost(node))
|
2014-10-09 04:44:43 +00:00
|
|
|
w.WriteHeader(http.StatusOK)
|
|
|
|
}
|
|
|
|
|
2014-10-09 04:55:53 +00:00
|
|
|
// Delete accepts a request to delete a worker
|
|
|
|
// from the pool.
|
|
|
|
//
|
|
|
|
// DELETE /api/workers
|
|
|
|
//
|
|
|
|
func DelWorker(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
|
|
|
pool := pool.FromContext(ctx)
|
|
|
|
uuid := r.FormValue("id")
|
|
|
|
|
|
|
|
for _, worker := range pool.List() {
|
|
|
|
if worker.(*docker.Docker).UUID != uuid {
|
|
|
|
pool.Deallocate(worker)
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
w.WriteHeader(http.StatusNotFound)
|
|
|
|
}
|
|
|
|
|
2014-09-30 04:34:30 +00:00
|
|
|
// GetWorkPending accepts a request to retrieve the list
|
|
|
|
// of pending work and returns in JSON format.
|
|
|
|
//
|
|
|
|
// GET /api/work/pending
|
|
|
|
//
|
|
|
|
func GetWorkPending(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
|
|
|
d := worker.FromContext(ctx).(*director.Director)
|
|
|
|
json.NewEncoder(w).Encode(d.GetPending())
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetWorkStarted accepts a request to retrieve the list
|
|
|
|
// of started work and returns in JSON format.
|
|
|
|
//
|
|
|
|
// GET /api/work/started
|
|
|
|
//
|
|
|
|
func GetWorkStarted(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
|
|
|
d := worker.FromContext(ctx).(*director.Director)
|
|
|
|
json.NewEncoder(w).Encode(d.GetStarted())
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetWorkAssigned accepts a request to retrieve the list
|
|
|
|
// of started work and returns in JSON format.
|
|
|
|
//
|
|
|
|
// GET /api/work/assignments
|
|
|
|
//
|
|
|
|
func GetWorkAssigned(c web.C, w http.ResponseWriter, r *http.Request) {
|
|
|
|
ctx := context.FromC(c)
|
|
|
|
d := worker.FromContext(ctx).(*director.Director)
|
|
|
|
json.NewEncoder(w).Encode(d.GetAssignemnts())
|
|
|
|
}
|