1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 05:47:07 +09:00
anytype-heart/metrics/events.go
2025-02-27 19:14:07 +01:00

158 lines
3.5 KiB
Go

package metrics
import (
"time"
"github.com/valyala/fastjson"
"github.com/anyproto/anytype-heart/metrics/anymetry"
)
const (
CtxKeyEntrypoint = "entrypoint"
CtxKeyRPC = "rpc"
)
type ReindexType int
const (
ReindexTypeThreads ReindexType = iota
ReindexTypeFiles
ReindexTypeBundledRelations
ReindexTypeBundledTypes
ReindexTypeBundledObjects
ReindexTypeBundledTemplates
ReindexTypeOutdatedHeads
ReindexTypeSystem
)
func (t ReindexType) String() string {
switch t {
case ReindexTypeThreads:
return "threads"
case ReindexTypeFiles:
return "files"
case ReindexTypeBundledRelations:
return "bundled_relations"
case ReindexTypeBundledTypes:
return "bundled_types"
case ReindexTypeBundledObjects:
return "bundled_objects"
case ReindexTypeBundledTemplates:
return "bundled_templates"
case ReindexTypeOutdatedHeads:
return "outdated_heads"
case ReindexTypeSystem:
return "system"
}
return "unknown"
}
func setupProperties(arena *fastjson.Arena, eventType string) (*fastjson.Value, *fastjson.Value) {
event := arena.NewObject()
properties := arena.NewObject()
event.Set("event_type", arena.NewString(eventType))
event.Set("event_properties", properties)
return event, properties
}
type ImportStartedEvent struct {
baseInfo
ID string
ImportType string
}
func (i *ImportStartedEvent) GetBackend() anymetry.MetricsBackend {
return inhouse
}
func (i *ImportStartedEvent) MarshalFastJson(arena *fastjson.Arena) anymetry.JsonEvent {
event, properties := setupProperties(arena, "import_started")
properties.Set("import_id", arena.NewString(i.ID))
properties.Set("import_type", arena.NewString(i.ImportType))
return event
}
type ImportFinishedEvent struct {
baseInfo
ID string
ImportType string
}
func (i *ImportFinishedEvent) GetBackend() anymetry.MetricsBackend {
return inhouse
}
func (i *ImportFinishedEvent) MarshalFastJson(arena *fastjson.Arena) anymetry.JsonEvent {
event, properties := setupProperties(arena, "import_finished")
properties.Set("import_id", arena.NewString(i.ID))
properties.Set("import_type", arena.NewString(i.ImportType))
return event
}
type baseInfo struct {
time int64
}
func (b *baseInfo) SetTimestamp() {
b.time = time.Now().UnixMilli()
}
func (b *baseInfo) GetTimestamp() int64 {
return b.time
}
type MethodEvent struct {
baseInfo
methodName string
middleTime int64
errorCode int64
description string
}
func (c *MethodEvent) GetBackend() anymetry.MetricsBackend {
return inhouse
}
func (c *MethodEvent) MarshalFastJson(arena *fastjson.Arena) anymetry.JsonEvent {
event, properties := setupProperties(arena, "MethodEvent")
properties.Set("methodName", arena.NewString(c.methodName))
properties.Set("middleTime", arena.NewNumberInt(int(c.middleTime)))
properties.Set("errorCode", arena.NewNumberInt(int(c.errorCode)))
properties.Set("description", arena.NewString(c.description))
return event
}
type ChangeEvent struct {
baseInfo
ChangeName string
SbType string
Count int
}
func (c *ChangeEvent) Key() string {
return c.ChangeName
}
func (c *ChangeEvent) Aggregate(other SamplableEvent) SamplableEvent {
o := other.(*ChangeEvent)
c.Count += o.Count
return c
}
func (c *ChangeEvent) GetBackend() anymetry.MetricsBackend {
return inhouse
}
func (c *ChangeEvent) MarshalFastJson(arena *fastjson.Arena) anymetry.JsonEvent {
event, properties := setupProperties(arena, "ChangeEvent")
properties.Set("changeName", arena.NewString(c.ChangeName))
properties.Set("sbType", arena.NewString(c.SbType))
properties.Set("count", arena.NewNumberInt(c.Count))
return event
}