package etcd import ( "bytes" "encoding/json" "fmt" "strings" ) type Server struct { ID int64 `json:"id"` Type string `json:"type"` Hostname string `json:"hostname"` Metadata map[string]string `json:"metadata"` // Frontend bool `json:"frontend"` } type ServerManager interface { AddServer(*Server) DeleteServer(id string) GetServer() *Server } func (s *Server) getKey() string { return fmt.Sprintf("servers/%s/%d", s.Type, s.ID) } func (s *Server) AsJSONString() string { str, err := json.Marshal(s) if err != nil { //logger.Log.Errorf("error getting server as json: %s", err.Error()) return "" } return string(str) } func ParseEtcdKey(key []byte) (string, string, error) { splittedServer := bytes.Split(key, []byte("/")) if len(splittedServer) != 3 { return "", "", fmt.Errorf("split etcd key error. %v", key) } svType := splittedServer[1] svID := splittedServer[2] return string(svType), string(svID), nil } func ParseEtcdServer(value []byte) (*Server, error) { var sv *Server err := json.Unmarshal(value, &sv) if err != nil { return nil, err } return sv, nil } func ParseEtcdParams(key []byte, value []byte) (map[string]string, error) { ik := string(key) v := string(value) nik := strings.TrimRight(ik, "/") n := strings.LastIndexByte(nik, '/') var nk string if n >= 0 { nk = nik[n+1:] } else { nk = nik } maps := make(map[string]string) maps[nk] = v return maps, nil // var ms map[string]string // err := json.Unmarshal(value, &ms) // if err != nil { // return nil, err // } // return ms, nil }