metric_collector.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. "github.com/usememos/memos/store"
  10. )
  11. // MetricCollector is the metric collector.
  12. type MetricCollector struct {
  13. Collector metric.Collector
  14. Enabled bool
  15. Profile *profile.Profile
  16. Store *store.Store
  17. }
  18. const (
  19. segmentMetricWriteKey = "fTn5BumOkj352n3TGw9tu0ARH2dOkcoQ"
  20. )
  21. func NewMetricCollector(profile *profile.Profile, store *store.Store) MetricCollector {
  22. c := segment.NewCollector(segmentMetricWriteKey)
  23. return MetricCollector{
  24. Collector: c,
  25. Enabled: true,
  26. Profile: profile,
  27. Store: store,
  28. }
  29. }
  30. func (mc *MetricCollector) Collect(_ context.Context, metric *metric.Metric) {
  31. if !mc.Enabled {
  32. return
  33. }
  34. if mc.Profile.Mode == "dev" {
  35. return
  36. }
  37. if metric.Labels == nil {
  38. metric.Labels = map[string]string{}
  39. }
  40. metric.Labels["version"] = version.GetCurrentVersion(mc.Profile.Mode)
  41. err := mc.Collector.Collect(metric)
  42. if err != nil {
  43. fmt.Printf("Failed to request segment, error: %+v\n", err)
  44. }
  45. }