main.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. recvMessageCount := &server.Metric{
  42. ID: "device_message_total",
  43. Name: "device_message_total",
  44. Description: "device report message total count",
  45. Type: "counter_vec",
  46. Args: []string{"device_code"},
  47. }
  48. server.RegisterMetric(deviceOnlineMetric, recvMessageCount)
  49. deviceOnlineCount = deviceOnlineMetric.MetricCollector.(prometheus.Gauge)
  50. deviceMessageCount = recvMessageCount.MetricCollector.(*prometheus.CounterVec)
  51. go func() {
  52. pprofPort := "6060"
  53. server.Log.Infof("pprof server started at :%s/debug/pprof", pprofPort)
  54. if err := http.ListenAndServe(":"+pprofPort, nil); err != nil {
  55. server.Log.Errorf("pprof server failed: %v", err)
  56. }
  57. }()
  58. // start to run
  59. err = server.Run()
  60. if err != nil {
  61. server.Log.Fatal(err)
  62. }
  63. }