working commit

This commit is contained in:
2026-03-13 19:02:42 +02:00
parent bebbf79c7a
commit 5c1da77f4c
1329 changed files with 314708 additions and 39 deletions
+167
View File
@@ -0,0 +1,167 @@
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{}
}