Documentation
¶
Index ¶
- Constants
- func CompareLabelPairs(a, b []*typesv1.LabelPair) int
- func CompareLabelPairs2(a, b *typesv1.LabelPair) int
- func CompareLabels(a, b *typesv1.Labels) int
- func CompareProfile(a, b *ingestv1.Profile) int64
- func ExportDiffToFlamebearer(fg *querierv1.FlameGraphDiff, profileType *typesv1.ProfileType) *flamebearer.FlamebearerProfile
- func ExportToFlamebearer(fg *querierv1.FlameGraph, profileType *typesv1.ProfileType) *flamebearer.FlamebearerProfile
- func GetSafeTimeRange(now time.Time, req any) model.Interval
- func GetTimeRange(req TimeRangeRequest) (model.Interval, bool)
- func IsLabelAllowedForIngestion(name string) bool
- func LabelPairsString(lbs []*typesv1.LabelPair) string
- func NewFlameGraph(t *FunctionNameTree, maxNodes int64) *querierv1.FlameGraph
- func NewFlamegraphDiff(left, right *FunctionNameTree, maxNodes int64) (*querierv1.FlameGraphDiff, error)
- func NewFlamegraphDiffFromBytes(left, right []byte, maxNodes int64) (*querierv1.FlameGraphDiff, error)
- func NewMergeIterator[P Profile](max P, deduplicate bool, iters ...iter.Iterator[P]) iter.Iterator[P]
- func NewTimeRangedIterator[T Timestamp](it iter.Iterator[T], min, max model.Time) iter.Iterator[T]
- func ParseMetricSelector(input string) ([]*labels.Matcher, error)
- func ParseProfileTypeSelector(id string) (*typesv1.ProfileType, error)
- func SelectorFromProfileType(profileType *typesv1.ProfileType) *labels.Matcher
- func SetTimeRange(r interface{}, startTime, endTime model.Time) bool
- func SymbolsPartitionForProfile(ls Labels, partitionLabel string, p *profilev1.Profile) uint64
- func TreeFromBackendProfile(profile *profilev1.Profile, maxNodes int64) ([]byte, error)
- func TreeFromBackendProfileSampleType(profile *profilev1.Profile, maxNodes int64, sampleType int) ([]byte, error)
- func ValidateMetricName(name string) error
- type FlameGraphMerger
- type FunctionName
- type FunctionNameI
- type FunctionNameTree
- type LabelMerger
- func (m *LabelMerger) HasNames() bool
- func (m *LabelMerger) HasSeries() bool
- func (m *LabelMerger) HasValues() bool
- func (m *LabelMerger) LabelNames() []string
- func (m *LabelMerger) LabelValues() []string
- func (m *LabelMerger) Labels() []*typesv1.Labels
- func (m *LabelMerger) MergeLabelNames(names []string)
- func (m *LabelMerger) MergeLabelValues(values []string)
- func (m *LabelMerger) MergeLabels(ls []Labels)
- func (m *LabelMerger) MergeSeries(series []*typesv1.Labels)
- type Labels
- func (ls Labels) BytesWithLabels(buf []byte, names ...string) []byte
- func (ls Labels) Clone() Labels
- func (ls Labels) Delete(name string) Labels
- func (ls Labels) Get(name string) string
- func (ls Labels) GetLabel(name string) (*typesv1.LabelPair, bool)
- func (ls Labels) Hash() uint64
- func (ls Labels) InsertSorted(name, value string) Labels
- func (ls Labels) Intersect(labels Labels) Labels
- func (ls Labels) Len() int
- func (ls Labels) Less(i, j int) bool
- func (ls Labels) Range(f func(l *typesv1.LabelPair))
- func (ls Labels) Subtract(labels Labels) Labels
- func (ls Labels) Swap(i, j int)
- func (ls Labels) ToPrometheusLabels() labels.Labels
- func (ls Labels) Unique() Labels
- func (ls Labels) WithLabels(names ...string) Labels
- func (ls Labels) WithoutLabels(names ...string) Labels
- func (ls Labels) WithoutPrivateLabels() Labels
- type LabelsBuilder
- func (b *LabelsBuilder) Del(ns ...string) *LabelsBuilder
- func (b *LabelsBuilder) Get(n string) string
- func (b *LabelsBuilder) Labels() Labels
- func (b *LabelsBuilder) LabelsUnsorted() Labels
- func (b *LabelsBuilder) Range(f func(l *typesv1.LabelPair))
- func (b *LabelsBuilder) Reset(base Labels)
- func (b *LabelsBuilder) Set(n, v string) *LabelsBuilder
- type LabelsEnforcedOrder
- type LocationRefName
- type LocationRefNameI
- type LocationRefNameTree
- type MergeIterator
- type NodeName
- type NodeNameI
- type Profile
- type RecordingRule
- type ServiceVersion
- type SessionID
- type SpanSelector
- type Stack
- type StacktraceMerger
- type StacktraceNode
- type StacktraceTree
- func (t *StacktraceTree) Bytes(dst io.Writer, maxNodes int64, funcs []string)
- func (t *StacktraceTree) Insert(locations []int32, value int64) int32
- func (t *StacktraceTree) LookupLocations(dst []uint64, idx int32) []uint64
- func (t *StacktraceTree) MinValue(maxNodes int64) int64
- func (t *StacktraceTree) Reset()
- func (t *StacktraceTree) Traverse(maxNodes int64, fn StacktraceTreeTraverseFn) error
- func (t *StacktraceTree) Tree(maxNodes int64, names []FunctionName) *FunctionNameTree
- type StacktraceTreeTraverseFn
- type TimeRangeRequest
- type TimeRangedIterator
- type Timestamp
- type TraceID
- type Tree
- func (t *Tree[N, I]) Bytes(maxNodes int64, keepName func(N) N) []byte
- func (t *Tree[N, I]) Fix()
- func (t *Tree[N, I]) FormatNodeNames(fn func(N) N)
- func (t *Tree[N, I]) InsertStack(v int64, stack ...N)
- func (t *Tree[N, I]) IterateStacks(cb func(name N, self int64, stack []N))
- func (t *Tree[N, I]) MarshalTruncate(w io.Writer, maxNodes int64, keepName func(N) N) (err error)
- func (t *Tree[N, I]) Merge(src *Tree[N, I])
- func (t *Tree[N, I]) String() string
- func (t *Tree[N, I]) Total() (v int64)
- func (t *Tree[N, I]) WriteCollapsed(dst io.Writer)
- type TreeMergeOption
- type TreeMerger
Constants ¶
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? )
const OtherFunctionName = FunctionName(truncatedNodeName)
const OtherLocationRef = LocationRefName(-1)
const (
RuleIDLabel = "profiles_rule_id"
)
Variables ¶
This section is empty.
Functions ¶
func CompareLabelPairs ¶
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 CompareLabels ¶
func CompareProfile ¶
CompareProfile compares the two profiles.
func ExportDiffToFlamebearer ¶
func ExportDiffToFlamebearer(fg *querierv1.FlameGraphDiff, profileType *typesv1.ProfileType) *flamebearer.FlamebearerProfile
func ExportToFlamebearer ¶
func ExportToFlamebearer(fg *querierv1.FlameGraph, profileType *typesv1.ProfileType) *flamebearer.FlamebearerProfile
ExportToFlamebearer exports the flamegraph to a Flamebearer struct.
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 LabelPairsString ¶
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 ParseMetricSelector ¶
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 TreeFromBackendProfile ¶
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 ¶
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 ¶
func (m *FlameGraphMerger) Tree() *FunctionNameTree
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 ¶
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 ¶
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 ¶
LabelsFromMap returns new sorted Labels from the given map.
func LabelsFromStrings ¶
LabelsFromStrings creates new labels from pairs of strings.
func (Labels) BytesWithLabels ¶
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) Get ¶
Get returns the value for the label with the given name. Returns an empty string if the label doesn't exist.
func (Labels) InsertSorted ¶
InsertSorted adds the given label to the set of labels. It assumes the labels are sorted lexicographically.
func (Labels) ToPrometheusLabels ¶
func (Labels) Unique ¶
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 ¶
WithLabels returns a subset of Labels that match with the provided label names.
func (Labels) WithoutLabels ¶
WithoutLabels returns a new Labels with the specified label names removed.
func (Labels) WithoutPrivateLabels ¶
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 ¶
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 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 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).
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 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 TimeRangeRequest ¶
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 Tree ¶
func TreeFromStacktraceTree ¶
func (*Tree[N, I]) Bytes ¶
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 (*Tree[N, I]) IterateStacks ¶
func (*Tree[N, I]) MarshalTruncate ¶
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]) WriteCollapsed ¶
type TreeMergeOption ¶
type TreeMergeOption[N any] func(o *treeMergeOption[N])
func WithTreeMergeFormatNodeNames ¶
func WithTreeMergeFormatNodeNames[N any](f func(N) N) TreeMergeOption[N]
type TreeMerger ¶
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]
Source Files
¶
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. |