mirror of
https://github.com/nclabteam/THPA.git
synced 2025-03-09 15:39:59 +00:00
- Initializing THPA repo
This commit is contained in:
commit
b8bdef8213
26 changed files with 2570 additions and 0 deletions
190
scheduler-extender/k8s-scheduler-extender/routes.go
Normal file
190
scheduler-extender/k8s-scheduler-extender/routes.go
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
|
||||
"github.com/julienschmidt/httprouter"
|
||||
|
||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
||||
)
|
||||
|
||||
func checkBody(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Body == nil {
|
||||
http.Error(w, "Please send a request body", 400)
|
||||
log.Print("info", "Error here")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func PredicateRoute(predicate Predicate) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
||||
checkBody(w, r)
|
||||
|
||||
var buf bytes.Buffer
|
||||
body := io.TeeReader(r.Body, &buf)
|
||||
log.Print("info: ", predicate.Name, " ExtenderArgs = ", buf.String())
|
||||
|
||||
var extenderArgs schedulerapi.ExtenderArgs
|
||||
var extenderFilterResult *schedulerapi.ExtenderFilterResult
|
||||
|
||||
if err := json.NewDecoder(body).Decode(&extenderArgs); err != nil {
|
||||
extenderFilterResult = &schedulerapi.ExtenderFilterResult{
|
||||
Nodes: nil,
|
||||
FailedNodes: nil,
|
||||
Error: err.Error(),
|
||||
}
|
||||
} else {
|
||||
extenderFilterResult = predicate.Handler(extenderArgs)
|
||||
}
|
||||
|
||||
if resultBody, err := json.Marshal(extenderFilterResult); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
//Phuc comment out to simple the log
|
||||
//log.Print("info: ", predicate.Name, " extenderFilterResult = ", string(resultBody))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(resultBody)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func PrioritizeRoute(prioritize Prioritize) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
||||
checkBody(w, r)
|
||||
|
||||
var buf bytes.Buffer
|
||||
body := io.TeeReader(r.Body, &buf)
|
||||
log.Print("info: ", prioritize.Name, " ExtenderArgs = ", buf.String())
|
||||
|
||||
var extenderArgs schedulerapi.ExtenderArgs
|
||||
var hostPriorityList *schedulerapi.HostPriorityList
|
||||
|
||||
if err := json.NewDecoder(body).Decode(&extenderArgs); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if list, err := prioritize.Handler(extenderArgs); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
hostPriorityList = list
|
||||
}
|
||||
|
||||
if resultBody, err := json.Marshal(hostPriorityList); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
log.Print("info: ", prioritize.Name, " hostPriorityList = ", string(resultBody))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(resultBody)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func BindRoute(bind Bind) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
||||
checkBody(w, r)
|
||||
|
||||
var buf bytes.Buffer
|
||||
body := io.TeeReader(r.Body, &buf)
|
||||
log.Print("info: extenderBindingArgs = ", buf.String())
|
||||
|
||||
var extenderBindingArgs schedulerapi.ExtenderBindingArgs
|
||||
var extenderBindingResult *schedulerapi.ExtenderBindingResult
|
||||
|
||||
if err := json.NewDecoder(body).Decode(&extenderBindingArgs); err != nil {
|
||||
extenderBindingResult = &schedulerapi.ExtenderBindingResult{
|
||||
Error: err.Error(),
|
||||
}
|
||||
} else {
|
||||
extenderBindingResult = bind.Handler(extenderBindingArgs)
|
||||
}
|
||||
|
||||
if resultBody, err := json.Marshal(extenderBindingResult); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
log.Print("info: extenderBindingResult = ", string(resultBody))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(resultBody)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func PreemptionRoute(preemption Preemption) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
||||
checkBody(w, r)
|
||||
|
||||
var buf bytes.Buffer
|
||||
body := io.TeeReader(r.Body, &buf)
|
||||
log.Print("info: extenderPreemptionArgs = ", buf.String())
|
||||
|
||||
var extenderPreemptionArgs schedulerapi.ExtenderPreemptionArgs
|
||||
var extenderPreemptionResult *schedulerapi.ExtenderPreemptionResult
|
||||
|
||||
if err := json.NewDecoder(body).Decode(&extenderPreemptionArgs); err != nil {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
} else {
|
||||
extenderPreemptionResult = preemption.Handler(extenderPreemptionArgs)
|
||||
}
|
||||
|
||||
if resultBody, err := json.Marshal(extenderPreemptionResult); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
log.Print("info: extenderPreemptionResult = ", string(resultBody))
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(resultBody)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func VersionRoute(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
|
||||
fmt.Fprint(w, fmt.Sprint(version))
|
||||
}
|
||||
|
||||
func AddVersion(router *httprouter.Router) {
|
||||
router.GET(versionPath, DebugLogging(VersionRoute, versionPath))
|
||||
}
|
||||
|
||||
func DebugLogging(h httprouter.Handle, path string) httprouter.Handle {
|
||||
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||
log.Print("debug: ", path, " request body = ", r.Body)
|
||||
h(w, r, p)
|
||||
log.Print("debug: ", path, " response=", w)
|
||||
}
|
||||
}
|
||||
|
||||
func AddPredicate(router *httprouter.Router, predicate Predicate) {
|
||||
log.Print("info: Phuc AddingPredicate")
|
||||
path := predicatesPrefix + "/" + predicate.Name
|
||||
router.POST(path, DebugLogging(PredicateRoute(predicate), path))
|
||||
}
|
||||
|
||||
func AddPrioritize(router *httprouter.Router, prioritize Prioritize) {
|
||||
log.Print("info: Phuc AddingPrioritize")
|
||||
path := prioritiesPrefix + "/" + prioritize.Name
|
||||
router.POST(path, DebugLogging(PrioritizeRoute(prioritize), path))
|
||||
}
|
||||
|
||||
func AddBind(router *httprouter.Router, bind Bind) {
|
||||
if handle, _, _ := router.Lookup("POST", bindPath); handle != nil {
|
||||
log.Print("warning: AddBind was called more then once!")
|
||||
} else {
|
||||
router.POST(bindPath, DebugLogging(BindRoute(bind), bindPath))
|
||||
}
|
||||
}
|
||||
|
||||
func AddPreemption(router *httprouter.Router, preemption Preemption) {
|
||||
if handle, _, _ := router.Lookup("POST", preemptionPath); handle != nil {
|
||||
log.Print("warning: AddPreemption was called more then once!")
|
||||
} else {
|
||||
router.POST(preemptionPath, DebugLogging(PreemptionRoute(preemption), preemptionPath))
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue