mirror of https://github.com/usememos/memos
parent
6201dcf1aa
commit
4335897367
@ -1,14 +0,0 @@
|
|||||||
package metric
|
|
||||||
|
|
||||||
// Metric is the API message for metric.
|
|
||||||
type Metric struct {
|
|
||||||
ID string
|
|
||||||
Name string
|
|
||||||
Labels map[string]string
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collector is the interface definition for metric collector.
|
|
||||||
type Collector interface {
|
|
||||||
Identify(id string) error
|
|
||||||
Collect(metric *Metric) error
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
package segment
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/segmentio/analytics-go"
|
|
||||||
metric "github.com/usememos/memos/plugin/metrics"
|
|
||||||
)
|
|
||||||
|
|
||||||
// collector is the metrics collector https://segment.com/.
|
|
||||||
type collector struct {
|
|
||||||
client analytics.Client
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewCollector creates a new instance of segment.
|
|
||||||
func NewCollector(key string) metric.Collector {
|
|
||||||
client := analytics.New(key)
|
|
||||||
|
|
||||||
return &collector{
|
|
||||||
client: client,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Identify will identify the server caller.
|
|
||||||
func (c *collector) Identify(id string) error {
|
|
||||||
return c.client.Enqueue(analytics.Identify{
|
|
||||||
UserId: id,
|
|
||||||
Timestamp: time.Now().UTC(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Collect will exec all the segment collector.
|
|
||||||
func (c *collector) Collect(metric *metric.Metric) error {
|
|
||||||
properties := analytics.NewProperties()
|
|
||||||
for key, value := range metric.Labels {
|
|
||||||
properties.Set(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return c.client.Enqueue(analytics.Track{
|
|
||||||
UserId: metric.ID,
|
|
||||||
Timestamp: time.Now().UTC(),
|
|
||||||
Event: metric.Name,
|
|
||||||
Properties: properties,
|
|
||||||
})
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
metric "github.com/usememos/memos/plugin/metrics"
|
|
||||||
"github.com/usememos/memos/plugin/metrics/segment"
|
|
||||||
"github.com/usememos/memos/server/profile"
|
|
||||||
"github.com/usememos/memos/server/version"
|
|
||||||
)
|
|
||||||
|
|
||||||
// MetricCollector is the metric collector.
|
|
||||||
type MetricCollector struct {
|
|
||||||
collector metric.Collector
|
|
||||||
ID string
|
|
||||||
Enabled bool
|
|
||||||
Profile *profile.Profile
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
segmentMetricWriteKey = "NbPruMMmfqfD2AMCw3pkxZTsszVS3hKq"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) registerMetricCollector() {
|
|
||||||
c := segment.NewCollector(segmentMetricWriteKey)
|
|
||||||
mc := &MetricCollector{
|
|
||||||
collector: c,
|
|
||||||
ID: s.ID,
|
|
||||||
Enabled: false,
|
|
||||||
Profile: s.Profile,
|
|
||||||
}
|
|
||||||
s.Collector = mc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MetricCollector) Identify(_ context.Context) {
|
|
||||||
if !mc.Enabled {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err := mc.collector.Identify(mc.ID)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("Failed to request segment, error: %+v\n", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mc *MetricCollector) Collect(_ context.Context, metric *metric.Metric) {
|
|
||||||
if !mc.Enabled {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if metric.Labels == nil {
|
|
||||||
metric.Labels = map[string]string{}
|
|
||||||
}
|
|
||||||
metric.Labels["mode"] = mc.Profile.Mode
|
|
||||||
metric.Labels["version"] = version.GetCurrentVersion(mc.Profile.Mode)
|
|
||||||
metric.ID = mc.ID
|
|
||||||
err := mc.collector.Collect(metric)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("Failed to request segment, error: %+v\n", err)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue