168 lines
2.7 KiB
Go
168 lines
2.7 KiB
Go
package observe
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/ianlancetaylor/demangle"
|
|
"github.com/tetratelabs/wazero/experimental"
|
|
)
|
|
|
|
type RawEventKind int
|
|
|
|
const (
|
|
RawEnter RawEventKind = iota
|
|
RawExit
|
|
RawMemoryGrow
|
|
RawMetric
|
|
RawSpanTags
|
|
RawLog
|
|
RawUnknownEvent
|
|
)
|
|
|
|
type EventKind int
|
|
|
|
const (
|
|
Call EventKind = iota
|
|
MemoryGrow
|
|
Custom
|
|
Metric
|
|
SpanTags
|
|
Log
|
|
)
|
|
|
|
type MetricFormat uint
|
|
|
|
const (
|
|
StatsdFormat MetricFormat = 1
|
|
)
|
|
|
|
// Represents the raw event in our Observe form.
|
|
// Events are transformed into vendor specific formats
|
|
// in the Adapters.
|
|
type RawEvent struct {
|
|
Kind RawEventKind
|
|
Stack []experimental.InternalFunction
|
|
FunctionIndex uint32
|
|
FunctionName string
|
|
MemoryGrowAmount uint32
|
|
Time time.Time
|
|
Duration time.Duration
|
|
}
|
|
|
|
type Event interface {
|
|
RawEvents() []RawEvent
|
|
}
|
|
|
|
type CallEvent struct {
|
|
Raw []RawEvent
|
|
Time time.Time
|
|
Duration time.Duration
|
|
within []Event
|
|
}
|
|
|
|
func (e *CallEvent) Stop(at time.Time) {
|
|
e.Duration = at.Sub(e.Time)
|
|
}
|
|
|
|
func (e CallEvent) RawEvents() []RawEvent {
|
|
return e.Raw
|
|
}
|
|
|
|
func (e CallEvent) Within() []Event {
|
|
return e.within
|
|
}
|
|
|
|
type CustomEvent struct {
|
|
Time time.Time
|
|
Name string
|
|
Metadata map[string]interface{}
|
|
}
|
|
|
|
func NewCustomEvent(name string) CustomEvent {
|
|
return CustomEvent{
|
|
Time: time.Now(),
|
|
Name: name,
|
|
Metadata: map[string]interface{}{},
|
|
}
|
|
}
|
|
|
|
func (e CustomEvent) RawEvents() []RawEvent {
|
|
return []RawEvent{}
|
|
}
|
|
|
|
type MetricEvent struct {
|
|
Time time.Time
|
|
Format MetricFormat
|
|
Message string
|
|
}
|
|
|
|
type SpanTagsEvent struct {
|
|
Raw RawEvent
|
|
Time time.Time
|
|
Tags []string
|
|
}
|
|
|
|
type MemoryGrowEvent struct {
|
|
Raw RawEvent
|
|
Time time.Time
|
|
}
|
|
|
|
type LogLevel uint
|
|
|
|
const (
|
|
Error LogLevel = 1
|
|
Warn = 2
|
|
Info = 3
|
|
Debug = 4
|
|
)
|
|
|
|
type LogEvent struct {
|
|
Time time.Time
|
|
Message string
|
|
Level LogLevel
|
|
}
|
|
|
|
func (e MemoryGrowEvent) RawEvents() []RawEvent {
|
|
return []RawEvent{e.Raw}
|
|
}
|
|
|
|
func (e MemoryGrowEvent) FunctionName() string {
|
|
s, err := demangle.ToString(e.Raw.FunctionName)
|
|
if err != nil {
|
|
return e.Raw.FunctionName
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (e MemoryGrowEvent) FunctionIndex() uint32 {
|
|
return e.Raw.FunctionIndex
|
|
}
|
|
|
|
func (e CallEvent) FunctionName() string {
|
|
s, err := demangle.ToString(e.Raw[0].FunctionName)
|
|
if err != nil {
|
|
return e.Raw[0].FunctionName
|
|
}
|
|
return s
|
|
}
|
|
|
|
func (e CallEvent) FunctionIndex() uint32 {
|
|
return e.Raw[0].FunctionIndex
|
|
}
|
|
|
|
func (e MemoryGrowEvent) MemoryGrowAmount() uint32 {
|
|
return e.Raw.MemoryGrowAmount
|
|
}
|
|
|
|
func (e MetricEvent) RawEvents() []RawEvent {
|
|
return []RawEvent{}
|
|
}
|
|
|
|
func (e SpanTagsEvent) RawEvents() []RawEvent {
|
|
return []RawEvent{e.Raw}
|
|
}
|
|
|
|
func (e LogEvent) RawEvents() []RawEvent {
|
|
return []RawEvent{}
|
|
}
|