model

package
v2.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 20, 2026 License: AGPL-3.0 Imports: 36 Imported by: 0

Documentation

Index

Constants

View Source
const (
	LabelNameProfileType        = "__profile_type__"
	LabelNameServiceNamePrivate = "__service_name__"
	LabelNameDelta              = "__delta__"
	LabelNameOTEL               = "__otel__"
	LabelNameProfileName        = pmodel.MetricNameLabel
	LabelNamePeriodType         = "__period_type__"
	LabelNamePeriodUnit         = "__period_unit__"
	LabelNameSessionID          = "__session_id__"
	LabelNameType               = "__type__"
	LabelNameUnit               = "__unit__"

	LabelNameServiceGitRef     = "service_git_ref"
	LabelNameServiceName       = "service_name"
	LabelNameServiceRepository = "service_repository"
	LabelNameServiceRootPath   = "service_root_path"

	LabelNameOrder     = "__order__"
	LabelOrderEnforced = "enforced"

	LabelNamePyroscopeSpy = "pyroscope_spy"

	AttrProcessExecutableName = semconv.ProcessExecutableNameKey

	AttrServiceName         = semconv.ServiceNameKey
	AttrServiceNameFallback = "unknown_service"

	ProfileNameOffCpu = "off_cpu" // todo better name?
)
View Source
const OtherFunctionName = FunctionName(truncatedNodeName)
View Source
const OtherLocationRef = LocationRefName(-1)
View Source
const (
	RuleIDLabel = "profiles_rule_id"
)

Variables

This section is empty.

Functions

func CompareLabelPairs

func CompareLabelPairs(a, b []*typesv1.LabelPair) int

CompareLabelPairs compares the two label sets. The result will be 0 if a==b, <0 if a < b, and >0 if a > b.

func CompareLabelPairs2

func CompareLabelPairs2(a, b *typesv1.LabelPair) int

func CompareLabels

func CompareLabels(a, b *typesv1.Labels) int

func CompareProfile

func CompareProfile(a, b *ingestv1.Profile) int64

CompareProfile compares the two profiles.

func ExportToFlamebearer

func ExportToFlamebearer(fg *querierv1.FlameGraph, profileType *typesv1.ProfileType) *flamebearer.FlamebearerProfile

ExportToFlamebearer exports the flamegraph to a Flamebearer struct.

func GetSafeTimeRange

func GetSafeTimeRange(now time.Time, req any) model.Interval

func GetTimeRange

func GetTimeRange(req TimeRangeRequest) (model.Interval, bool)

GetTimeRange returns the time interval and true if the request has an interval, otherwise ok is false.

func IsLabelAllowedForIngestion

func IsLabelAllowedForIngestion(name string) bool

func LabelPairsString

func LabelPairsString(lbs []*typesv1.LabelPair) string

LabelPairsString returns a string representation of the label pairs.

func NewFlameGraph

func NewFlameGraph(t *FunctionNameTree, maxNodes int64) *querierv1.FlameGraph

func NewFlamegraphDiff

func NewFlamegraphDiff(left, right *FunctionNameTree, maxNodes int64) (*querierv1.FlameGraphDiff, error)

NewFlamegraphDiff generates a FlameGraphDiff from 2 trees. It also prunes the final tree based on the maxNodes parameter Notice that the resulting FlameGraph can't be used interchangeably with a 'single' Flamegraph Due to many differences: * Nodes * It's structure is different

i+0 = x offset, left  tree
i+1 = total   , left  tree
i+2 = self    , left  tree
i+3 = x offset, right tree
i+4 = total   , right tree
i+5 = self    , right tree
i+6 = index in the names array

func NewFlamegraphDiffFromBytes

func NewFlamegraphDiffFromBytes(left, right []byte, maxNodes int64) (*querierv1.FlameGraphDiff, error)

func NewMergeIterator

func NewMergeIterator[P Profile](max P, deduplicate bool, iters ...iter.Iterator[P]) iter.Iterator[P]

NewMergeIterator returns an iterator that k-way merges the given iterators. The given iterators must be sorted by timestamp and labels themselves. Optionally, the iterator can deduplicate profiles with the same timestamp and labels.

func NewTimeRangedIterator

func NewTimeRangedIterator[T Timestamp](it iter.Iterator[T], min, max model.Time) iter.Iterator[T]

func ParseMetricSelector

func ParseMetricSelector(input string) ([]*labels.Matcher, error)

ParseMetricSelector parses the provided textual metric selector into a list of label matchers.

func ParseProfileTypeSelector

func ParseProfileTypeSelector(id string) (*typesv1.ProfileType, error)

ParseProfileTypeSelector parses the profile selector string.

func SelectorFromProfileType

func SelectorFromProfileType(profileType *typesv1.ProfileType) *labels.Matcher

SelectorFromProfileType builds a *label.Matcher from an profile type struct

func SetTimeRange

func SetTimeRange(r interface{}, startTime, endTime model.Time) bool

func SymbolsPartitionForProfile

func SymbolsPartitionForProfile(ls Labels, partitionLabel string, p *profilev1.Profile) uint64

func TreeFromBackendProfile

func TreeFromBackendProfile(profile *profilev1.Profile, maxNodes int64) ([]byte, error)

TreeFromBackendProfile is a wrapper...

func TreeFromBackendProfileSampleType

func TreeFromBackendProfileSampleType(profile *profilev1.Profile, maxNodes int64, sampleType int) ([]byte, error)

TreeFromBackendProfileSampleType converts a pprof profile to a tree format with maxNodes limit

func ValidateMetricName

func ValidateMetricName(name string) error

Types

type FlameGraphMerger

type FlameGraphMerger struct {
	// contains filtered or unexported fields
}

func NewFlameGraphMerger

func NewFlameGraphMerger() *FlameGraphMerger

func (*FlameGraphMerger) FlameGraph

func (m *FlameGraphMerger) FlameGraph(maxNodes int64) *querierv1.FlameGraph

func (*FlameGraphMerger) MergeFlameGraph

func (m *FlameGraphMerger) MergeFlameGraph(src *querierv1.FlameGraph)

MergeFlameGraph adds the flame graph stack traces to the resulting flame graph. The call is thread-safe, but the resulting flame graph or tree should be only accessed after all the samples are merged.

func (*FlameGraphMerger) MergeTreeBytes

func (m *FlameGraphMerger) MergeTreeBytes(src []byte) error

func (*FlameGraphMerger) Tree

type FunctionName

type FunctionName string

type FunctionNameI

type FunctionNameI struct {
}

func (FunctionNameI) IsLocationTree

func (FunctionNameI) IsLocationTree() bool

type FunctionNameTree

type FunctionNameTree = Tree[FunctionName, FunctionNameI]

type LabelMerger

type LabelMerger struct {
	// contains filtered or unexported fields
}

func NewLabelMerger

func NewLabelMerger() *LabelMerger

func (*LabelMerger) HasNames

func (m *LabelMerger) HasNames() bool

func (*LabelMerger) HasSeries

func (m *LabelMerger) HasSeries() bool

func (*LabelMerger) HasValues

func (m *LabelMerger) HasValues() bool

func (*LabelMerger) LabelNames

func (m *LabelMerger) LabelNames() []string

func (*LabelMerger) LabelValues

func (m *LabelMerger) LabelValues() []string

func (*LabelMerger) Labels

func (m *LabelMerger) Labels() []*typesv1.Labels

func (*LabelMerger) MergeLabelNames

func (m *LabelMerger) MergeLabelNames(names []string)

func (*LabelMerger) MergeLabelValues

func (m *LabelMerger) MergeLabelValues(values []string)

func (*LabelMerger) MergeLabels

func (m *LabelMerger) MergeLabels(ls []Labels)

func (*LabelMerger) MergeSeries

func (m *LabelMerger) MergeSeries(series []*typesv1.Labels)

type Labels

type Labels []*typesv1.LabelPair

Labels is a sorted set of labels. Order has to be guaranteed upon instantiation.

func EmptyLabels

func EmptyLabels() Labels

EmptyLabels returns n empty Labels value, for convenience.

func IntersectAll

func IntersectAll(labelSets []Labels) Labels

IntersectAll returns only the labels that are present in all label sets with the same value. Used for merging exemplars with dynamic labels. Reuses the existing Intersect method by iteratively intersecting all label sets.

func LabelsFromMap

func LabelsFromMap(m map[string]string) Labels

LabelsFromMap returns new sorted Labels from the given map.

func LabelsFromStrings

func LabelsFromStrings(ss ...string) Labels

LabelsFromStrings creates new labels from pairs of strings.

func (Labels) BytesWithLabels

func (ls Labels) BytesWithLabels(buf []byte, names ...string) []byte

BytesWithLabels is just as Bytes(), but only for labels matching names. It uses an byte invalid character as a separator and so should not be used for printing.

func (Labels) Clone

func (ls Labels) Clone() Labels

func (Labels) Delete

func (ls Labels) Delete(name string) Labels

Delete removes the first label encountered with the name given in place.

func (Labels) Get

func (ls Labels) Get(name string) string

Get returns the value for the label with the given name. Returns an empty string if the label doesn't exist.

func (Labels) GetLabel

func (ls Labels) GetLabel(name string) (*typesv1.LabelPair, bool)

GetLabel returns the label with the given name.

func (Labels) Hash

func (ls Labels) Hash() uint64

Hash returns a hash value for the label set.

func (Labels) InsertSorted

func (ls Labels) InsertSorted(name, value string) Labels

InsertSorted adds the given label to the set of labels. It assumes the labels are sorted lexicographically.

func (Labels) Intersect

func (ls Labels) Intersect(labels Labels) Labels

func (Labels) Len

func (ls Labels) Len() int

func (Labels) Less

func (ls Labels) Less(i, j int) bool

func (Labels) Range

func (ls Labels) Range(f func(l *typesv1.LabelPair))

Range calls f on each label.

func (Labels) Subtract

func (ls Labels) Subtract(labels Labels) Labels

func (Labels) Swap

func (ls Labels) Swap(i, j int)

func (Labels) ToPrometheusLabels

func (ls Labels) ToPrometheusLabels() labels.Labels

func (Labels) Unique

func (ls Labels) Unique() Labels

Unique returns a set labels with unique keys. Labels expected to be sorted: underlying capacity is reused and the original order is preserved: the first key takes precedence over duplicates. Method receiver should not be used after the call.

func (Labels) WithLabels

func (ls Labels) WithLabels(names ...string) Labels

WithLabels returns a subset of Labels that match with the provided label names.

func (Labels) WithoutLabels

func (ls Labels) WithoutLabels(names ...string) Labels

WithoutLabels returns a new Labels with the specified label names removed.

func (Labels) WithoutPrivateLabels

func (ls Labels) WithoutPrivateLabels() Labels

type LabelsBuilder

type LabelsBuilder struct {
	// contains filtered or unexported fields
}

LabelsBuilder allows modifying Labels.

func NewLabelsBuilder

func NewLabelsBuilder(base Labels) *LabelsBuilder

NewLabelsBuilder returns a new LabelsBuilder.

func (*LabelsBuilder) Del

func (b *LabelsBuilder) Del(ns ...string) *LabelsBuilder

Del deletes the label of the given name.

func (*LabelsBuilder) Get

func (b *LabelsBuilder) Get(n string) string

func (*LabelsBuilder) Labels

func (b *LabelsBuilder) Labels() Labels

Labels returns the labels from the builder. If no modifications were made, the original labels are returned.

func (*LabelsBuilder) LabelsUnsorted

func (b *LabelsBuilder) LabelsUnsorted() Labels

LabelsUnsorted returns the labels from the builder. If no modifications were made, the original labels are returned.

The order is not deterministic.

func (*LabelsBuilder) Range

func (b *LabelsBuilder) Range(f func(l *typesv1.LabelPair))

Range calls f on each label in the Builder.

func (*LabelsBuilder) Reset

func (b *LabelsBuilder) Reset(base Labels)

Reset clears all current state for the builder.

func (*LabelsBuilder) Set

func (b *LabelsBuilder) Set(n, v string) *LabelsBuilder

Set the name/value pair as a label.

type LabelsEnforcedOrder

type LabelsEnforcedOrder []*typesv1.LabelPair

LabelsEnforcedOrder is a sort order of labels, where profile type and service name labels always go first. This is crucial for query performance as labels determine the physical order of the profiling data.

func (LabelsEnforcedOrder) Len

func (ls LabelsEnforcedOrder) Len() int

func (LabelsEnforcedOrder) Less

func (ls LabelsEnforcedOrder) Less(i, j int) bool

func (LabelsEnforcedOrder) Swap

func (ls LabelsEnforcedOrder) Swap(i, j int)

type LocationRefName

type LocationRefName int

type LocationRefNameI

type LocationRefNameI struct {
}

func (LocationRefNameI) IsLocationTree

func (LocationRefNameI) IsLocationTree() bool

type LocationRefNameTree

type LocationRefNameTree = Tree[LocationRefName, LocationRefNameI]

type MergeIterator

type MergeIterator[P Profile] struct {
	// contains filtered or unexported fields
}

func (*MergeIterator[P]) At

func (i *MergeIterator[P]) At() P

func (*MergeIterator[P]) Close

func (i *MergeIterator[P]) Close() error

func (*MergeIterator[P]) Err

func (i *MergeIterator[P]) Err() error

func (*MergeIterator[P]) Next

func (i *MergeIterator[P]) Next() bool

type NodeName

type NodeName interface {
	~string | ~int
}

type NodeNameI

type NodeNameI[N ~string | ~int] interface {
	IsLocationTree() bool
	// contains filtered or unexported methods
}

type Profile

type Profile interface {
	Labels() Labels
	Timestamp
}

type RecordingRule

type RecordingRule struct {
	Matchers       []*labels.Matcher
	GroupBy        []string
	ExternalLabels labels.Labels
	FunctionName   string
}

func NewRecordingRule

func NewRecordingRule(rule *settingsv1.RecordingRule) (*RecordingRule, error)

type ServiceVersion

type ServiceVersion struct {
	Repository string `json:"repository,omitempty"`
	GitRef     string `json:"git_ref,omitempty"`
	BuildID    string `json:"build_id,omitempty"`
	RootPath   string `json:"root_path,omitempty"`
}

func ServiceVersionFromLabels

func ServiceVersionFromLabels(lbls Labels) (ServiceVersion, bool)

ServiceVersionFromLabels Attempts to extract a service version from the given labels. Returns false if no service version was found.

type SessionID

type SessionID uint64

func ParseSessionID

func ParseSessionID(s string) (SessionID, error)

func (SessionID) String

func (s SessionID) String() string

type SpanSelector

type SpanSelector map[uint64]struct{}

func NewSpanSelector

func NewSpanSelector(spans []string) (SpanSelector, error)

type Stack

type Stack[T any] struct {
	// contains filtered or unexported fields
}

Stack is a stack of values. Pushing and popping values is O(1).

func NewStack

func NewStack[T any]() *Stack[T]

func (*Stack[T]) Pop

func (s *Stack[T]) Pop() (result T, ok bool)

Pop removes and returns the top value from the stack.

func (*Stack[T]) Push

func (s *Stack[T]) Push(v T)

Push adds a value to the top of the stack.

func (*Stack[T]) Reset

func (s *Stack[T]) Reset()

Reset releases the stack's resources.

func (*Stack[T]) Slice

func (s *Stack[T]) Slice() []T

Slice returns a slice of the values in the stack. The top value of the stack is at the beginning of the slice.

type StacktraceMerger

type StacktraceMerger struct {
	// contains filtered or unexported fields
}

func NewStackTraceMerger

func NewStackTraceMerger() *StacktraceMerger

NewStackTraceMerger merges collections of StacktraceSamples. The result is a byte tree representation of the merged samples.

func (*StacktraceMerger) MergeStackTraces

func (m *StacktraceMerger) MergeStackTraces(stacks []*ingestv1.StacktraceSample, names []string)

MergeStackTraces adds the stack traces to the resulting tree. The call is thread-safe, but the resulting tree bytes should be only build after all the samples are merged. Note that the function may reuse the capacity of the names slice.

func (*StacktraceMerger) Size

func (m *StacktraceMerger) Size() int

func (*StacktraceMerger) TreeBytes

func (m *StacktraceMerger) TreeBytes(maxNodes int64) []byte

type StacktraceNode

type StacktraceNode struct {
	FirstChild  int32
	NextSibling int32
	Parent      int32
	Location    int32
	Value       int64
	Total       int64
}

type StacktraceTree

type StacktraceTree struct{ Nodes []StacktraceNode }

func NewStacktraceTree

func NewStacktraceTree(size int) *StacktraceTree

func (*StacktraceTree) Bytes

func (t *StacktraceTree) Bytes(dst io.Writer, maxNodes int64, funcs []string)

func (*StacktraceTree) Insert

func (t *StacktraceTree) Insert(locations []int32, value int64) int32

func (*StacktraceTree) LookupLocations

func (t *StacktraceTree) LookupLocations(dst []uint64, idx int32) []uint64

func (*StacktraceTree) MinValue

func (t *StacktraceTree) MinValue(maxNodes int64) int64

MinValue returns the minimum "total" value a node in a tree has to have.

func (*StacktraceTree) Reset

func (t *StacktraceTree) Reset()

func (*StacktraceTree) Traverse

func (t *StacktraceTree) Traverse(maxNodes int64, fn StacktraceTreeTraverseFn) error

func (*StacktraceTree) Tree

func (t *StacktraceTree) Tree(maxNodes int64, names []FunctionName) *FunctionNameTree

type StacktraceTreeTraverseFn

type StacktraceTreeTraverseFn = func(index int32, children []int32) error

type TimeRangeRequest

type TimeRangeRequest interface {
	GetStart() int64
	GetEnd() int64
}

TimeRangeRequest is a request that has a time interval.

type TimeRangedIterator

type TimeRangedIterator[T Timestamp] struct {
	iter.Iterator[T]
	// contains filtered or unexported fields
}

func (*TimeRangedIterator[T]) Next

func (it *TimeRangedIterator[T]) Next() bool

type Timestamp

type Timestamp interface {
	Timestamp() model.Time
}

type TraceID

type TraceID [16]byte

func DecodeTraceID

func DecodeTraceID(s string) (TraceID, error)

func (TraceID) String

func (t TraceID) String() string

type Tree

type Tree[N NodeName, I NodeNameI[N]] struct {
	// contains filtered or unexported fields
}

func MustUnmarshalTree

func MustUnmarshalTree[N NodeName, I NodeNameI[N]](b []byte) *Tree[N, I]

func TreeFromStacktraceTree

func TreeFromStacktraceTree[N NodeName, I NodeNameI[N]](t *StacktraceTree, maxNodes int64, lookup func(int32) N) *Tree[N, I]

func UnmarshalTree

func UnmarshalTree[N NodeName, I NodeNameI[N]](b []byte) (*Tree[N, I], error)

func (*Tree[N, I]) Bytes

func (t *Tree[N, I]) Bytes(maxNodes int64, keepName func(N) N) []byte

Bytes returns marshaled tree byte representation; the number of nodes is limited to maxNodes. The function modifies the tree: truncated nodes are removed from the tree in place.

func (*Tree[N, I]) Fix

func (t *Tree[N, I]) Fix()

Fix re-establishes order of nodes and merges duplicates.

func (*Tree[N, I]) FormatNodeNames

func (t *Tree[N, I]) FormatNodeNames(fn func(N) N)

func (*Tree[N, I]) InsertStack

func (t *Tree[N, I]) InsertStack(v int64, stack ...N)

func (*Tree[N, I]) IterateStacks

func (t *Tree[N, I]) IterateStacks(cb func(name N, self int64, stack []N))

func (*Tree[N, I]) MarshalTruncate

func (t *Tree[N, I]) MarshalTruncate(w io.Writer, maxNodes int64, keepName func(N) N) (err error)

MarshalTruncate writes tree byte representation to the writer provider, the number of nodes is limited to maxNodes. The function modifies the tree: truncated nodes are removed from the tree.

func (*Tree[N, I]) Merge

func (t *Tree[N, I]) Merge(src *Tree[N, I])

func (*Tree[N, I]) String

func (t *Tree[N, I]) String() string

func (*Tree[N, I]) Total

func (t *Tree[N, I]) Total() (v int64)

func (*Tree[N, I]) WriteCollapsed

func (t *Tree[N, I]) WriteCollapsed(dst io.Writer)

type TreeMergeOption

type TreeMergeOption[N any] func(o *treeMergeOption[N])

func WithTreeMergeFormatNodeNames

func WithTreeMergeFormatNodeNames[N any](f func(N) N) TreeMergeOption[N]

type TreeMerger

type TreeMerger[N NodeName, I NodeNameI[N]] struct {
	// contains filtered or unexported fields
}

func NewTreeMerger

func NewTreeMerger[N NodeName, I NodeNameI[N]]() *TreeMerger[N, I]

func (*TreeMerger[N, I]) IsEmpty

func (m *TreeMerger[N, I]) IsEmpty() bool

func (*TreeMerger[N, I]) MergeTree

func (m *TreeMerger[N, I]) MergeTree(t *Tree[N, I])

func (*TreeMerger[N, I]) MergeTreeBytes

func (m *TreeMerger[N, I]) MergeTreeBytes(b []byte, opts ...TreeMergeOption[N]) error

func (*TreeMerger[N, I]) Tree

func (m *TreeMerger[N, I]) Tree() *Tree[N, I]

Directories

Path Synopsis
Package timeseries provides types for building and aggregating time series data.
Package timeseries provides types for building and aggregating time series data.
Package timeseriescompact provides types and utilities for working with compact time series data using attribute table references instead of string labels.
Package timeseriescompact provides types and utilities for working with compact time series data using attribute table references instead of string labels.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL