func handleClusterListCmd()

in server/cluster_handler.go [71:114]


func handleClusterListCmd(w http.ResponseWriter, t *clusterInfoReq) error {
	var err error
	var cond string
	var args = make([]interface{}, 0)

	cond, args = state.AddSQLCond(cond, args, "AND", "name", "=", t.Name)
	cond, args = state.AddSQLCond(cond, args, "AND", "host", "=", t.Host)
	cond, args = state.AddSQLCond(cond, args, "AND", "user", "=", t.User)
	if t.Port != 0 {
		cond, args = state.AddSQLCond(cond, args, "AND", "port", "=", fmt.Sprintf("%+v", t.Port))
	}

	cond, args = addFilter(cond, args, []string{"name", "host", "user"}, t.Filter)

	if cond != "" {
		cond = " WHERE " + cond
	}

	if t.Offset != 0 || t.Limit != 0 {
		if t.Limit == 0 && t.Offset != 0 {
			t.Limit = int64((^uint64(0)) >> 1) //MaxInt
		}
		cond += fmt.Sprintf(" LIMIT %v,%v", t.Offset, t.Limit)
	}

	var rows []db.Addr
	if rows, err = state.GetClusterInfo(cond, args...); err == nil {
		var resp []byte
		for _, v := range rows {
			var b []byte
			if b, err = json.Marshal(&db.Addr{Name: v.Name, Host: v.Host, Port: v.Port, User: v.User}); err != nil {
				break
			}
			resp = append(resp, b...)
			resp = append(resp, '\n')
		}

		if err == nil {
			_, err = w.Write(resp)
		}
	}

	return err
}