Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package stats
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "sync"
  6. "time"
  7. "go.uber.org/zap"
  8. "github.com/9seconds/mtg/config"
  9. )
  10. var instance *stats
  11. // Start starts new statisitcs server.
  12. func Start(conf *config.Config) {
  13. log := zap.S().Named("stats")
  14. instance = &stats{
  15. URLs: conf.GetURLs(),
  16. Uptime: uptime(time.Now()),
  17. mutex: &sync.RWMutex{},
  18. }
  19. go crashManager()
  20. go connectionManager()
  21. go trafficManager()
  22. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  23. w.Header().Set("Content-Type", "application/json")
  24. instance.mutex.Lock()
  25. first, err := json.Marshal(instance)
  26. instance.mutex.Unlock()
  27. if err != nil {
  28. log.Errorw("Cannot encode json", "error", err)
  29. http.Error(w, "Internal server error", 500)
  30. return
  31. }
  32. interm := map[string]interface{}{}
  33. json.Unmarshal(first, &interm) // nolint: errcheck
  34. encoder := json.NewEncoder(w)
  35. encoder.SetEscapeHTML(false)
  36. encoder.SetIndent("", " ")
  37. if err = encoder.Encode(interm); err != nil {
  38. log.Errorw("Cannot encode json", "error", err)
  39. }
  40. })
  41. if err := http.ListenAndServe(conf.StatAddr(), nil); err != nil {
  42. log.Fatalw("Stats server has been stopped", "error", err)
  43. }
  44. }