server.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package etcd
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "strings"
  7. )
  8. type Server struct {
  9. ID int64 `json:"id"`
  10. Type string `json:"type"`
  11. Hostname string `json:"hostname"`
  12. Metadata map[string]string `json:"metadata"`
  13. // Frontend bool `json:"frontend"`
  14. }
  15. type ServerManager interface {
  16. AddServer(*Server)
  17. DeleteServer(id string)
  18. GetServer() *Server
  19. }
  20. func (s *Server) getKey() string {
  21. return fmt.Sprintf("servers/%s/%d", s.Type, s.ID)
  22. }
  23. func (s *Server) AsJSONString() string {
  24. str, err := json.Marshal(s)
  25. if err != nil {
  26. //logger.Log.Errorf("error getting server as json: %s", err.Error())
  27. return ""
  28. }
  29. return string(str)
  30. }
  31. func ParseEtcdKey(key []byte) (string, string, error) {
  32. splittedServer := bytes.Split(key, []byte("/"))
  33. if len(splittedServer) != 3 {
  34. return "", "", fmt.Errorf("split etcd key error. %v", key)
  35. }
  36. svType := splittedServer[1]
  37. svID := splittedServer[2]
  38. return string(svType), string(svID), nil
  39. }
  40. func ParseEtcdServer(value []byte) (*Server, error) {
  41. var sv *Server
  42. err := json.Unmarshal(value, &sv)
  43. if err != nil {
  44. return nil, err
  45. }
  46. return sv, nil
  47. }
  48. func ParseEtcdParams(key []byte, value []byte) (map[string]string, error) {
  49. ik := string(key)
  50. v := string(value)
  51. nik := strings.TrimRight(ik, "/")
  52. n := strings.LastIndexByte(nik, '/')
  53. var nk string
  54. if n >= 0 {
  55. nk = nik[n+1:]
  56. } else {
  57. nk = nik
  58. }
  59. maps := make(map[string]string)
  60. maps[nk] = v
  61. return maps, nil
  62. // var ms map[string]string
  63. // err := json.Unmarshal(value, &ms)
  64. // if err != nil {
  65. // return nil, err
  66. // }
  67. // return ms, nil
  68. }