github.com/ghodss/etcd@v0.3.1-0.20140417172404-cc329bfa55cb/mod/lock/v2/get_index_handler.go (about)

     1  package v2
     2  
     3  import (
     4  	"net/http"
     5  	"path"
     6  
     7  	etcdErr "github.com/coreos/etcd/error"
     8  	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
     9  )
    10  
    11  // getIndexHandler retrieves the current lock index.
    12  // The "field" parameter specifies to read either the lock "index" or lock "value".
    13  func (h *handler) getIndexHandler(w http.ResponseWriter, req *http.Request) error {
    14  	h.client.SyncCluster()
    15  
    16  	vars := mux.Vars(req)
    17  	keypath := path.Join(prefix, vars["key"])
    18  	field := req.FormValue("field")
    19  	if len(field) == 0 {
    20  		field = "value"
    21  	}
    22  
    23  	// Read all indices.
    24  	resp, err := h.client.Get(keypath, true, true)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	nodes := lockNodes{resp.Node.Nodes}
    29  
    30  	// Write out the requested field.
    31  	if node := nodes.First(); node != nil {
    32  		switch field {
    33  		case "index":
    34  			w.Write([]byte(path.Base(node.Key)))
    35  
    36  		case "value":
    37  			w.Write([]byte(node.Value))
    38  
    39  		default:
    40  			return etcdErr.NewError(etcdErr.EcodeInvalidField, "Get", 0)
    41  		}
    42  	}
    43  
    44  	return nil
    45  }