working commit
This commit is contained in:
+167
@@ -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{}
|
||||
}
|
||||
Reference in New Issue
Block a user