main.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "github.com/prometheus/client_golang/prometheus"
  4. "net/http"
  5. _ "net/http/pprof"
  6. "sparrow/pkg/rpcs"
  7. "sparrow/pkg/server"
  8. )
  9. var deviceOnlineCount prometheus.Gauge
  10. var deviceMessageCount *prometheus.CounterVec
  11. func main() {
  12. // init server
  13. err := server.Init(rpcs.MQTTAccessName)
  14. if err != nil {
  15. server.Log.Fatal(err)
  16. return
  17. }
  18. a, err := NewAccess()
  19. if err != nil {
  20. server.Log.Fatal(err)
  21. return
  22. }
  23. // register a rpc service
  24. err = server.RegisterRPCHandler(a)
  25. if err != nil {
  26. server.Log.Errorf("Register RPC service Error: %s", err)
  27. return
  28. }
  29. // register a tcp service for mqtt
  30. err = server.RegisterTCPHandler(a.MqttBroker)
  31. if err != nil {
  32. server.Log.Errorf("Register TCP service Error: %s", err)
  33. return
  34. }
  35. deviceOnlineMetric := &server.Metric{
  36. ID: "device_online_count",
  37. Name: "device_online_count",
  38. Description: "MQTT Device Online Count",
  39. Type: "gauge",
  40. }
  41. server.RegisterMetric(deviceOnlineMetric)
  42. deviceOnlineCount = deviceOnlineMetric.MetricCollector.(prometheus.Gauge)
  43. go func() {
  44. pprofPort := "6060"
  45. server.Log.Infof("pprof server started at :%s/debug/pprof", pprofPort)
  46. if err := http.ListenAndServe(":"+pprofPort, nil); err != nil {
  47. server.Log.Errorf("pprof server failed: %v", err)
  48. }
  49. }()
  50. // start to run
  51. err = server.Run()
  52. if err != nil {
  53. server.Log.Fatal(err)
  54. }
  55. }