util.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/coreos/etcd/web"
  6. "io"
  7. "log"
  8. "net/http"
  9. "os"
  10. )
  11. //--------------------------------------
  12. // Web Helper
  13. //--------------------------------------
  14. var storeMsg chan string
  15. // Help to send msg from store to webHub
  16. func webHelper() {
  17. storeMsg = make(chan string)
  18. for {
  19. // transfer the new msg to webHub
  20. web.Hub().Send(<-storeMsg)
  21. }
  22. }
  23. //--------------------------------------
  24. // HTTP Utilities
  25. //--------------------------------------
  26. func decodeJsonRequest(req *http.Request, data interface{}) error {
  27. decoder := json.NewDecoder(req.Body)
  28. if err := decoder.Decode(&data); err != nil && err != io.EOF {
  29. warn("Malformed json request: %v", err)
  30. return fmt.Errorf("Malformed json request: %v", err)
  31. }
  32. return nil
  33. }
  34. func encodeJsonResponse(w http.ResponseWriter, status int, data interface{}) {
  35. w.Header().Set("Content-Type", "application/json")
  36. w.WriteHeader(status)
  37. if data != nil {
  38. encoder := json.NewEncoder(w)
  39. encoder.Encode(data)
  40. }
  41. }
  42. //--------------------------------------
  43. // Log
  44. //--------------------------------------
  45. var logger *log.Logger
  46. func init() {
  47. logger = log.New(os.Stdout, "[etcd] ", log.Lmicroseconds)
  48. }
  49. func debug(msg string, v ...interface{}) {
  50. if verbose {
  51. logger.Printf("DEBUG "+msg+"\n", v...)
  52. }
  53. }
  54. func warn(msg string, v ...interface{}) {
  55. logger.Printf("WARN "+msg+"\n", v...)
  56. }
  57. func fatal(msg string, v ...interface{}) {
  58. logger.Printf("FATAL "+msg+"\n", v...)
  59. os.Exit(1)
  60. }