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
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

server.go 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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) error {
  13. log := zap.S().Named("stats")
  14. instance = &stats{
  15. URLs: conf.GetURLs(),
  16. Uptime: uptime(time.Now()),
  17. mutex: &sync.RWMutex{},
  18. }
  19. if conf.StatsD.Enabled {
  20. client, err := newStatsd(conf)
  21. if err != nil {
  22. return err
  23. }
  24. go client.run()
  25. }
  26. go crashManager()
  27. go connectionManager()
  28. go trafficManager()
  29. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  30. w.Header().Set("Content-Type", "application/json")
  31. instance.mutex.Lock()
  32. first, err := json.Marshal(instance)
  33. instance.mutex.Unlock()
  34. if err != nil {
  35. log.Errorw("Cannot encode json", "error", err)
  36. http.Error(w, "Internal server error", 500)
  37. return
  38. }
  39. interm := map[string]interface{}{}
  40. json.Unmarshal(first, &interm) // nolint: errcheck
  41. encoder := json.NewEncoder(w)
  42. encoder.SetEscapeHTML(false)
  43. encoder.SetIndent("", " ")
  44. if err = encoder.Encode(interm); err != nil {
  45. log.Errorw("Cannot encode json", "error", err)
  46. }
  47. })
  48. go func() {
  49. if err := http.ListenAndServe(conf.StatAddr(), nil); err != nil {
  50. log.Fatalw("Stats server has been stopped", "error", err)
  51. }
  52. }()
  53. return nil
  54. }