in go/grpshuffle_client/lib/http.go [52:162]
func shuffleHandler(writer http.ResponseWriter, request *http.Request) {
conn, err := Connect(Host, Port, NoTLS)
if err != nil {
newErrorResponse(writer, 500, "Internal Server Error")
return
}
defer CloseConnect(conn)
format := ResponseFormat(request.FormValue("fmt"))
if format != "" {
err = format.checkType()
if err != nil {
newErrorResponse(writer, 400, err.Error())
return
}
}
rawDivide := request.FormValue("divide")
if rawDivide == "" {
newErrorResponse(writer, 400, "divide parameter is required")
return
}
divide, err := strconv.Atoi(rawDivide)
if err != nil {
newErrorResponse(writer, 400, "divide parameter allows numbers")
return
}
groupName := request.FormValue("groupName")
if groupName == "" {
groupName = "Group"
}
rawTargets := request.FormValue("targets")
if rawTargets == "" {
newErrorResponse(writer, 400, "targets parameter is required")
return
}
targets := strings.Split(rawTargets, ",")
cc := grpshuffle.NewComputeClient(conn)
result, err := Shuffle(&cc, uint64(divide), targets)
if err != nil {
newErrorResponse(writer, 504, "Gateway Timeout")
log.Print(err)
return
}
var res []byte
switch format {
case FormatJson:
{
res, err = json.Marshal(HttpResponse{
Status: 200,
Msg: "Ok",
Result: result,
})
if err != nil {
log.Print(err)
return
}
}
case FormatJsonPretty:
{
res, err = json.MarshalIndent(HttpResponse{
Status: 200,
Msg: "Ok",
Result: result,
}, "", " ")
if err != nil {
log.Print(err)
return
}
}
case FormatReadable:
{
var prettyResponse string
for i, combination := range result {
var targetsString string
for _, target := range combination.Targets {
if targetsString == "" {
targetsString = target
} else {
targetsString = fmt.Sprintf("%v, %v", targetsString, target)
}
}
groupNumber := i + 1 // It is for humans, so start at 1.
prettyResponse = fmt.Sprintf("%v%v %v: %v\n", prettyResponse, groupName, groupNumber, targetsString)
}
res = []byte(prettyResponse)
}
default:
{
res, err = json.Marshal(HttpResponse{
Status: 200,
Msg: "Ok",
Result: result,
})
if err != nil {
log.Print(err)
return
}
}
}
_, err = writer.Write(res)
if err != nil {
log.Print(err)
return
}
}