func shuffleHandler()

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
	}
}