util.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/coreos/etcd/web"
  6. "io"
  7. "io/ioutil"
  8. "log"
  9. "net/http"
  10. "os"
  11. )
  12. //--------------------------------------
  13. // Web Helper
  14. //--------------------------------------
  15. var storeMsg chan string
  16. // Help to send msg from stroe to webHub
  17. func webHelper() {
  18. storeMsg = make(chan string)
  19. for {
  20. // transfere the new msg to webHub
  21. web.Hub().Send(<-storeMsg)
  22. }
  23. }
  24. //--------------------------------------
  25. // HTTP Utilities
  26. //--------------------------------------
  27. func decodeJsonRequest(req *http.Request, data interface{}) error {
  28. decoder := json.NewDecoder(req.Body)
  29. if err := decoder.Decode(&data); err != nil && err != io.EOF {
  30. warn("Malformed json request: %v", err)
  31. return fmt.Errorf("Malformed json request: %v", err)
  32. }
  33. return nil
  34. }
  35. func encodeJsonResponse(w http.ResponseWriter, status int, data interface{}) {
  36. w.Header().Set("Content-Type", "application/json")
  37. w.WriteHeader(status)
  38. if data != nil {
  39. encoder := json.NewEncoder(w)
  40. encoder.Encode(data)
  41. }
  42. }
  43. func Post(t *transHandler, path string, body io.Reader) (*http.Response, error) {
  44. if t.client != nil {
  45. resp, err := t.client.Post("https://"+path, "application/json", body)
  46. return resp, err
  47. } else {
  48. resp, err := http.Post("http://"+path, "application/json", body)
  49. return resp, err
  50. }
  51. }
  52. func Get(t *transHandler, path string) (*http.Response, error) {
  53. if t.client != nil {
  54. resp, err := t.client.Get("https://" + path)
  55. return resp, err
  56. } else {
  57. resp, err := http.Get("http://" + path)
  58. return resp, err
  59. }
  60. }
  61. func leaderClient() string {
  62. resp, _ := Get(&serverTransHandler, server.Leader()+"/client")
  63. if resp != nil {
  64. body, _ := ioutil.ReadAll(resp.Body)
  65. resp.Body.Close()
  66. return string(body)
  67. }
  68. return ""
  69. }
  70. //--------------------------------------
  71. // Log
  72. //--------------------------------------
  73. var logger *log.Logger
  74. func init() {
  75. logger = log.New(os.Stdout, "[etcd] ", log.Lmicroseconds)
  76. }
  77. func debug(msg string, v ...interface{}) {
  78. if verbose {
  79. logger.Printf("DEBUG "+msg+"\n", v...)
  80. }
  81. }
  82. func info(msg string, v ...interface{}) {
  83. logger.Printf("INFO "+msg+"\n", v...)
  84. }
  85. func warn(msg string, v ...interface{}) {
  86. logger.Printf("WARN "+msg+"\n", v...)
  87. }
  88. func fatal(msg string, v ...interface{}) {
  89. logger.Printf("FATAL "+msg+"\n", v...)
  90. os.Exit(1)
  91. }