Documentation
¶
Index ¶
- Constants
- Variables
- func NewMergeProfilesRowReader(rowGroups []parquet.RowReader) parquet.RowReader
- func ResolveColumnByPath(schema *parquet.Schema, path []string) (parquet.LeafColumn, error)
- type DownsampledProfileRow
- type FunctionPersister
- func (*FunctionPersister) Deconstruct(row parquet.Row, _ uint64, fn *InMemoryFunction) parquet.Row
- func (*FunctionPersister) Name() string
- func (*FunctionPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryFunction, error)
- func (*FunctionPersister) Schema() *parquet.Schema
- func (*FunctionPersister) SortingColumns() parquet.SortingOption
- type InMemoryFunction
- type InMemoryLine
- type InMemoryLocation
- type InMemoryMapping
- type InMemoryProfile
- type LocationPersister
- func (*LocationPersister) Deconstruct(row parquet.Row, _ uint64, loc *InMemoryLocation) parquet.Row
- func (*LocationPersister) Name() string
- func (*LocationPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryLocation, error)
- func (*LocationPersister) Schema() *parquet.Schema
- func (*LocationPersister) SortingColumns() parquet.SortingOption
- type MappingPersister
- func (*MappingPersister) Deconstruct(row parquet.Row, _ uint64, m *InMemoryMapping) parquet.Row
- func (*MappingPersister) Name() string
- func (*MappingPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryMapping, error)
- func (*MappingPersister) Schema() *parquet.Schema
- func (*MappingPersister) SortingColumns() parquet.SortingOption
- type Models
- type Persister
- type PersisterName
- type Profile
- type ProfilePersister
- func (*ProfilePersister) Deconstruct(row parquet.Row, id uint64, s *Profile) parquet.Row
- func (*ProfilePersister) Name() string
- func (*ProfilePersister) Reconstruct(row parquet.Row) (id uint64, s *Profile, err error)
- func (*ProfilePersister) Schema() *parquet.Schema
- func (*ProfilePersister) SortingColumns() parquet.SortingOption
- type ProfileRow
- func (p ProfileRow) ForStacktraceIDsValues(fn func([]parquet.Value))
- func (p ProfileRow) ForStacktraceIdsAndValues(fn func([]parquet.Value, []parquet.Value))
- func (p ProfileRow) SeriesIndex() uint32
- func (p ProfileRow) SetSeriesIndex(v uint32)
- func (p ProfileRow) StacktracePartitionID() uint64
- func (p ProfileRow) TimeNanos() int64
- type ReadWriter
- type Sample
- type SampleColumns
- type SampleMap
- type Samples
- type SamplesBySpanID
- type SliceRowReader
- type Stacktrace
- type StacktracePersister
- func (*StacktracePersister) Deconstruct(row parquet.Row, id uint64, s *Stacktrace) parquet.Row
- func (*StacktracePersister) Name() string
- func (*StacktracePersister) Reconstruct(row parquet.Row) (id uint64, s *Stacktrace, err error)
- func (*StacktracePersister) Schema() *parquet.Schema
- func (*StacktracePersister) SortingColumns() parquet.SortingOption
- type StringPersister
- func (*StringPersister) Deconstruct(row parquet.Row, id uint64, s string) parquet.Row
- func (*StringPersister) Name() string
- func (*StringPersister) Reconstruct(row parquet.Row) (id uint64, s string, err error)
- func (*StringPersister) Schema() *parquet.Schema
- func (*StringPersister) SortingColumns() parquet.SortingOption
Constants ¶
View Source
const ( SeriesIndexColumnName = "SeriesIndex" TimeNanosColumnName = "TimeNanos" StacktracePartitionColumnName = "StacktracePartition" TotalValueColumnName = "TotalValue" SamplesColumnName = "Samples" )
Variables ¶
View Source
var ( ProfilesSchema = parquet.NewSchema("Profile", phlareparquet.Group{ phlareparquet.NewGroupField("ID", parquet.UUID()), phlareparquet.NewGroupField(SeriesIndexColumnName, parquet.Encoded(parquet.Uint(32), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(StacktracePartitionColumnName, parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(TotalValueColumnName, parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(SamplesColumnName, parquet.List(sampleField)), phlareparquet.NewGroupField("DropFrames", parquet.Optional(stringRef)), phlareparquet.NewGroupField("KeepFrames", parquet.Optional(stringRef)), phlareparquet.NewGroupField(TimeNanosColumnName, parquet.Timestamp(parquet.Nanosecond)), phlareparquet.NewGroupField("DurationNanos", parquet.Optional(parquet.Int(64))), phlareparquet.NewGroupField("Period", parquet.Optional(parquet.Int(64))), phlareparquet.NewGroupField("Comments", parquet.List(stringRef)), phlareparquet.NewGroupField("DefaultSampleType", parquet.Optional(parquet.Int(64))), }) DownsampledProfilesSchema = parquet.NewSchema("DownsampledProfile", phlareparquet.Group{ phlareparquet.NewGroupField(SeriesIndexColumnName, parquet.Encoded(parquet.Uint(32), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(StacktracePartitionColumnName, parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(TotalValueColumnName, parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField(SamplesColumnName, parquet.List( phlareparquet.Group{ phlareparquet.NewGroupField("StacktraceID", parquet.Encoded(parquet.Uint(64), &parquet.DeltaBinaryPacked)), phlareparquet.NewGroupField("Value", parquet.Encoded(parquet.Int(64), &parquet.DeltaBinaryPacked)), })), phlareparquet.NewGroupField(TimeNanosColumnName, parquet.Timestamp(parquet.Nanosecond)), }) SampleValueColumnPath = strings.Split("Samples.list.element.Value", ".") ErrColumnNotFound = fmt.Errorf("column path not found") )
Functions ¶
func NewMergeProfilesRowReader ¶
func NewMergeProfilesRowReader(rowGroups []parquet.RowReader) parquet.RowReader
func ResolveColumnByPath ¶ added in v1.2.0
Types ¶
type DownsampledProfileRow ¶ added in v1.3.0
type DownsampledProfileRow parquet.Row
func (DownsampledProfileRow) ForValues ¶ added in v1.3.0
func (p DownsampledProfileRow) ForValues(fn func([]parquet.Value))
type FunctionPersister ¶
type FunctionPersister struct{}
func (*FunctionPersister) Deconstruct ¶
func (*FunctionPersister) Deconstruct(row parquet.Row, _ uint64, fn *InMemoryFunction) parquet.Row
func (*FunctionPersister) Name ¶
func (*FunctionPersister) Name() string
func (*FunctionPersister) Reconstruct ¶
func (*FunctionPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryFunction, error)
func (*FunctionPersister) Schema ¶
func (*FunctionPersister) Schema() *parquet.Schema
func (*FunctionPersister) SortingColumns ¶
func (*FunctionPersister) SortingColumns() parquet.SortingOption
type InMemoryFunction ¶
type InMemoryFunction struct {
// Unique nonzero id for the function.
Id uint64
// Name of the function, in human-readable form if available.
Name uint32
// Name of the function, as identified by the system.
// For instance, it can be a C++ mangled name.
SystemName uint32
// Source file containing the function.
Filename uint32
// Line number in source file.
StartLine uint32
}
func (*InMemoryFunction) Clone ¶ added in v1.1.0
func (f *InMemoryFunction) Clone() *InMemoryFunction
type InMemoryLine ¶
type InMemoryLocation ¶
type InMemoryLocation struct {
// Unique nonzero id for the location. A profile could use
// instruction addresses or any integer sequence as ids.
Id uint64
// The instruction address for this location, if available. It
// should be within [Mapping.memory_start...Mapping.memory_limit]
// for the corresponding mapping. A non-leaf address may be in the
// middle of a call instruction. It is up to display tools to find
// the beginning of the instruction if necessary.
Address uint64
// The id of the corresponding profile.Mapping for this location.
// It can be unset if the mapping is unknown or not applicable for
// this profile type.
MappingId uint32
// Provides an indication that multiple symbols map to this location's
// address, for example due to identical code folding by the linker. In that
// case the line information above represents one of the multiple
// symbols. This field must be recomputed when the symbolization state of the
// profile changes.
IsFolded bool
// Multiple line indicates this location has inlined functions,
// where the last entry represents the caller into which the
// preceding entries were inlined.
//
// E.g., if memcpy() is inlined into printf:
//
// line[0].function_name == "memcpy"
// line[1].function_name == "printf"
Line []InMemoryLine
}
func (*InMemoryLocation) Clone ¶ added in v1.1.0
func (l *InMemoryLocation) Clone() *InMemoryLocation
type InMemoryMapping ¶
type InMemoryMapping struct {
// Unique nonzero id for the mapping.
Id uint64
// Address at which the binary (or DLL) is loaded into memory.
MemoryStart uint64
// The limit of the address range occupied by this mapping.
MemoryLimit uint64
// Offset in the binary that corresponds to the first mapped address.
FileOffset uint64
// The object this entry is loaded from. This can be a filename on
// disk for the main binary and shared libraries, or virtual
// abstractions like "[vdso]".
Filename uint32
// A string that uniquely identifies a particular program version
// with high probability. E.g., for binaries generated by GNU tools,
// it could be the contents of the .note.gnu.build-id field.
BuildId uint32
// The following fields indicate the resolution of symbolic info.
HasFunctions bool
HasFilenames bool
HasLineNumbers bool
HasInlineFrames bool
}
func (*InMemoryMapping) Clone ¶ added in v1.1.0
func (m *InMemoryMapping) Clone() *InMemoryMapping
type InMemoryProfile ¶
type InMemoryProfile struct {
// A unique UUID per ingested profile
ID uuid.UUID
// SeriesIndex references the underlying series and is generated when
// writing the TSDB index. The SeriesIndex is different from block to
// block.
SeriesIndex uint32
// StacktracePartition is the partition ID of the stacktrace table that this profile belongs to.
StacktracePartition uint64
// TotalValue is the sum of all values in the profile.
TotalValue uint64
// SeriesFingerprint references the underlying series and is purely based
// on the label values. The value is consistent for the same label set (so
// also between different blocks).
SeriesFingerprint model.Fingerprint
// frames with Function.function_name fully matching the following
// regexp will be dropped from the samples, along with their successors.
DropFrames int64
// frames with Function.function_name fully matching the following
// regexp will be kept, even if it matches drop_frames.
KeepFrames int64
// Time of collection (UTC) represented as nanoseconds past the epoch.
TimeNanos int64
// Duration of the profile, if a duration makes sense.
DurationNanos int64
// The number of events between sampled occurrences.
Period int64
// Freeform text associated to the profile.
Comments []int64
// Index into the string table of the type of the preferred sample
// value. If unset, clients should default to the last sample value.
DefaultSampleType int64
Samples Samples
}
func (InMemoryProfile) Size ¶
func (p InMemoryProfile) Size() uint64
func (InMemoryProfile) Timestamp ¶
func (p InMemoryProfile) Timestamp() model.Time
func (InMemoryProfile) Total ¶
func (p InMemoryProfile) Total() int64
type LocationPersister ¶
type LocationPersister struct{}
func (*LocationPersister) Deconstruct ¶
func (*LocationPersister) Deconstruct(row parquet.Row, _ uint64, loc *InMemoryLocation) parquet.Row
func (*LocationPersister) Name ¶
func (*LocationPersister) Name() string
func (*LocationPersister) Reconstruct ¶
func (*LocationPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryLocation, error)
func (*LocationPersister) Schema ¶
func (*LocationPersister) Schema() *parquet.Schema
func (*LocationPersister) SortingColumns ¶
func (*LocationPersister) SortingColumns() parquet.SortingOption
type MappingPersister ¶
type MappingPersister struct{}
func (*MappingPersister) Deconstruct ¶
func (*MappingPersister) Deconstruct(row parquet.Row, _ uint64, m *InMemoryMapping) parquet.Row
func (*MappingPersister) Name ¶
func (*MappingPersister) Name() string
func (*MappingPersister) Reconstruct ¶
func (*MappingPersister) Reconstruct(row parquet.Row) (uint64, *InMemoryMapping, error)
func (*MappingPersister) Schema ¶
func (*MappingPersister) Schema() *parquet.Schema
func (*MappingPersister) SortingColumns ¶
func (*MappingPersister) SortingColumns() parquet.SortingOption
type Models ¶
type Models interface {
*Profile | *InMemoryProfile |
*googlev1.Location | *InMemoryLocation |
*googlev1.Function | *InMemoryFunction |
*googlev1.Mapping | *InMemoryMapping |
*Stacktrace |
string
}
type Persister ¶
type Persister[T any] interface { PersisterName Schema() *parquet.Schema Deconstruct(parquet.Row, uint64, T) parquet.Row Reconstruct(parquet.Row) (uint64, T, error) SortingColumns() parquet.SortingOption }
type PersisterName ¶
type PersisterName interface {
Name() string
}
type Profile ¶
type Profile struct {
// A unique UUID per ingested profile
ID uuid.UUID `parquet:",uuid"`
// SeriesIndex references the underlying series and is generated when
// writing the TSDB index. The SeriesIndex is different from block to
// block.
SeriesIndex uint32 `parquet:",delta"`
// StacktracePartition is the partition ID of the stacktrace table that this profile belongs to.
StacktracePartition uint64 `parquet:",delta"`
// TotalValue is the sum of all values in the profile.
TotalValue uint64 `parquet:",delta"`
// SeriesFingerprint references the underlying series and is purely based
// on the label values. The value is consistent for the same label set (so
// also between different blocks).
SeriesFingerprint model.Fingerprint `parquet:"-"`
// The set of samples recorded in this profile.
Samples []*Sample `parquet:",list"`
// frames with Function.function_name fully matching the following
// regexp will be dropped from the samples, along with their successors.
DropFrames int64 `parquet:",optional"` // Index into string table.
// frames with Function.function_name fully matching the following
// regexp will be kept, even if it matches drop_frames.
KeepFrames int64 `parquet:",optional"` // Index into string table.
// Time of collection (UTC) represented as nanoseconds past the epoch.
TimeNanos int64 `parquet:",delta,timestamp(nanosecond)"`
// Duration of the profile, if a duration makes sense.
DurationNanos int64 `parquet:",delta,optional"`
// The number of events between sampled occurrences.
Period int64 `parquet:",optional"`
// Freeform text associated to the profile.
Comments []int64 `parquet:",list"` // Indices into string table.
// Index into the string table of the type of the preferred sample
// value. If unset, clients should default to the last sample value.
DefaultSampleType int64 `parquet:",optional"`
}
type ProfilePersister ¶
type ProfilePersister struct{}
func (*ProfilePersister) Deconstruct ¶
func (*ProfilePersister) Deconstruct(row parquet.Row, id uint64, s *Profile) parquet.Row
func (*ProfilePersister) Name ¶
func (*ProfilePersister) Name() string
func (*ProfilePersister) Reconstruct ¶
func (*ProfilePersister) Reconstruct(row parquet.Row) (id uint64, s *Profile, err error)
func (*ProfilePersister) Schema ¶
func (*ProfilePersister) Schema() *parquet.Schema
func (*ProfilePersister) SortingColumns ¶
func (*ProfilePersister) SortingColumns() parquet.SortingOption
type ProfileRow ¶
type ProfileRow parquet.Row
func (ProfileRow) ForStacktraceIDsValues ¶
func (p ProfileRow) ForStacktraceIDsValues(fn func([]parquet.Value))
func (ProfileRow) ForStacktraceIdsAndValues ¶ added in v1.3.0
func (p ProfileRow) ForStacktraceIdsAndValues(fn func([]parquet.Value, []parquet.Value))
func (ProfileRow) SeriesIndex ¶
func (p ProfileRow) SeriesIndex() uint32
func (ProfileRow) SetSeriesIndex ¶
func (p ProfileRow) SetSeriesIndex(v uint32)
func (ProfileRow) StacktracePartitionID ¶
func (p ProfileRow) StacktracePartitionID() uint64
func (ProfileRow) TimeNanos ¶
func (p ProfileRow) TimeNanos() int64
type ReadWriter ¶
func (*ReadWriter[T, P]) ReadParquetFile ¶
func (*ReadWriter[T, P]) ReadParquetFile(file io.ReaderAt) ([]T, error)
func (*ReadWriter[T, P]) WriteParquetFile ¶
func (*ReadWriter[T, P]) WriteParquetFile(file io.Writer, elements []T) error
type SampleColumns ¶ added in v1.2.0
type SampleColumns struct {
StacktraceID parquet.LeafColumn
Value parquet.LeafColumn
SpanID parquet.LeafColumn
}
func (*SampleColumns) HasSpanID ¶ added in v1.2.0
func (c *SampleColumns) HasSpanID() bool
func (*SampleColumns) Resolve ¶ added in v1.2.0
func (c *SampleColumns) Resolve(schema *parquet.Schema) error
type SampleMap ¶
SampleMap is a map of partitioned samples structured as follows: partition => stacktrace_id => value
func (SampleMap) AddSamples ¶
func (SampleMap) WriteSamples ¶
type Samples ¶
type Samples struct {
StacktraceIDs []uint32
Values []uint64
// Span associated with samples.
// Optional: Spans == nil, if not present.
Spans []uint64
}
func NewSamples ¶
func NewSamplesFromMap ¶
type SamplesBySpanID ¶ added in v1.2.0
type SamplesBySpanID Samples
func (SamplesBySpanID) Len ¶ added in v1.2.0
func (s SamplesBySpanID) Len() int
func (SamplesBySpanID) Less ¶ added in v1.2.0
func (s SamplesBySpanID) Less(i, j int) bool
func (SamplesBySpanID) Swap ¶ added in v1.2.0
func (s SamplesBySpanID) Swap(i, j int)
type SliceRowReader ¶
type SliceRowReader[T any] struct { // contains filtered or unexported fields }
func NewInMemoryProfilesRowReader ¶
func NewInMemoryProfilesRowReader(slice []InMemoryProfile) *SliceRowReader[InMemoryProfile]
func NewProfilesRowReader ¶
func NewProfilesRowReader(slice []*Profile) *SliceRowReader[*Profile]
func (*SliceRowReader[T]) ReadRows ¶
func (r *SliceRowReader[T]) ReadRows(rows []parquet.Row) (n int, err error)
type Stacktrace ¶
type Stacktrace struct {
LocationIDs []uint64 `parquet:",list"`
}
type StacktracePersister ¶
type StacktracePersister struct{}
func (*StacktracePersister) Deconstruct ¶
func (*StacktracePersister) Deconstruct(row parquet.Row, id uint64, s *Stacktrace) parquet.Row
func (*StacktracePersister) Name ¶
func (*StacktracePersister) Name() string
func (*StacktracePersister) Reconstruct ¶
func (*StacktracePersister) Reconstruct(row parquet.Row) (id uint64, s *Stacktrace, err error)
func (*StacktracePersister) Schema ¶
func (*StacktracePersister) Schema() *parquet.Schema
func (*StacktracePersister) SortingColumns ¶
func (*StacktracePersister) SortingColumns() parquet.SortingOption
type StringPersister ¶
type StringPersister struct{}
func (*StringPersister) Deconstruct ¶
func (*StringPersister) Deconstruct(row parquet.Row, id uint64, s string) parquet.Row
func (*StringPersister) Name ¶
func (*StringPersister) Name() string
func (*StringPersister) Reconstruct ¶
func (*StringPersister) Reconstruct(row parquet.Row) (id uint64, s string, err error)
func (*StringPersister) Schema ¶
func (*StringPersister) Schema() *parquet.Schema
func (*StringPersister) SortingColumns ¶
func (*StringPersister) SortingColumns() parquet.SortingOption
Source Files
¶
Click to show internal directories.
Click to hide internal directories.