metric_collector.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package server
  2. import (
  3. "context"
  4. "fmt"
  5. metric "github.com/usememos/memos/plugin/metrics"
  6. "github.com/usememos/memos/plugin/metrics/segment"
  7. "github.com/usememos/memos/server/profile"
  8. "github.com/usememos/memos/server/version"
  9. )
  10. // MetricCollector is the metric collector.
  11. type MetricCollector struct {
  12. collector metric.Collector
  13. ID string
  14. Enabled bool
  15. Profile *profile.Profile
  16. }
  17. const (
  18. segmentMetricWriteKey = "NbPruMMmfqfD2AMCw3pkxZTsszVS3hKq"
  19. )
  20. func (s *Server) registerMetricCollector() {
  21. c := segment.NewCollector(segmentMetricWriteKey)
  22. mc := &MetricCollector{
  23. collector: c,
  24. ID: s.ID,
  25. Enabled: false,
  26. Profile: s.Profile,
  27. }
  28. s.Collector = mc
  29. }
  30. func (mc *MetricCollector) Identify(_ context.Context) {
  31. if !mc.Enabled {
  32. return
  33. }
  34. err := mc.collector.Identify(mc.ID)
  35. if err != nil {
  36. fmt.Printf("Failed to request segment, error: %+v\n", err)
  37. }
  38. }
  39. func (mc *MetricCollector) Collect(_ context.Context, metric *metric.Metric) {
  40. if !mc.Enabled {
  41. return
  42. }
  43. if metric.Labels == nil {
  44. metric.Labels = map[string]string{}
  45. }
  46. metric.Labels["mode"] = mc.Profile.Mode
  47. metric.Labels["version"] = version.GetCurrentVersion(mc.Profile.Mode)
  48. metric.ID = mc.ID
  49. err := mc.collector.Collect(metric)
  50. if err != nil {
  51. fmt.Printf("Failed to request segment, error: %+v\n", err)
  52. }
  53. }