func clusterInfoCmd()

in server/cluster_handler.go [132:195]


func clusterInfoCmd(w http.ResponseWriter, r *http.Request) {
	var err error
	s := clusterInfoReq{}
	ct, _, _ := mime.ParseMediaType(r.Header.Get("Content-Type"))
	switch {
	case ct == "application/x-www-form-urlencoded", ct == "multipart/form-data", ct == "":
		s.Cmd = r.FormValue("cmd")
		s.Name = r.FormValue("name")
		s.Host = r.FormValue("host")
		s.User = r.FormValue("user")
		s.Filter = r.FormValue("filter")
		s.Pw = r.FormValue("pw")
		if r.FormValue("port") != "" {
			i, err := strconv.ParseInt(r.FormValue("port"), 10, 16)
			if log.E(err) {
				http.Error(w, err.Error(), http.StatusInternalServerError)
				return
			}
			s.Port = uint16(i)
		}
		if s.Offset, s.Limit, err = parsePagination(r); log.E(err) {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}
	case ct == "application/json":
		if err := json.NewDecoder(r.Body).Decode(&s); log.E(err) {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}
	default:
		code := http.StatusUnsupportedMediaType
		http.Error(w, http.StatusText(code), code)
		return
	}

	if s.Cmd == "list" {
		err = handleClusterListCmd(w, &s)
	} else if len(s.Name) == 0 {
		err = errors.New("invalid command. Name cannot be empty")
	} else if s.Cmd == "add" {
		if len(s.Host) == 0 || len(s.User) == 0 {
			err = errors.New("invalid 'add' command. Host and User cannot be empty")
		} else {
			err = state.InsertClusterInfo(&db.Addr{Name: s.Name, Host: s.Host, Port: s.Port, User: s.User, Pwd: s.Pw})
		}
	} else if s.Cmd == "del" {
		err = state.DeleteClusterInfo(s.Name)
	} else if s.Cmd == "pos" {
		err = handleClusterPosition(w, s.Name)
	} else {
		err = errors.New("unknown command (possible commands: add/del)")
	}
	if err != nil {
		if err == sql.ErrNoRows {
			http.Error(w, err.Error(), http.StatusNotFound)
		} else {
			log.Errorf("Cluster http: cmd=%v, name=%v, error=%v", s.Cmd, s.Name, err)
			http.Error(w, err.Error(), http.StatusInternalServerError)
		}
		return
	}
	w.Header().Set("Content-Type", "application/json")
	w.WriteHeader(http.StatusOK)
}