Skip to content

Commit

Permalink
Add SDK data classes for experimental profiling signal type.
Browse files Browse the repository at this point in the history
  • Loading branch information
jhalliday committed Apr 10, 2024
1 parent 66cf1b6 commit a7af9cb
Show file tree
Hide file tree
Showing 16 changed files with 687 additions and 0 deletions.
19 changes: 19 additions & 0 deletions sdk/profiles/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
plugins {
id("otel.java-conventions")
id("otel.publish-conventions")

id("otel.jmh-conventions")
id("otel.animalsniffer-conventions")
}

description = "OpenTelemetry Profiling SDK"
otelJava.moduleName.set("io.opentelemetry.sdk.profiles")

dependencies {
api(project(":api:all"))
api(project(":sdk:common"))

testImplementation("org.awaitility:awaitility")

annotationProcessor("com.google.auto.value:auto-value")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

/**
* Specifies the method of aggregating metric values.
* @see "profiles.proto::AggregationTemporality"
*/
public enum AggregationTemporality {

/**
* The default AggregationTemporality, it MUST not be used.
*/
UNSPECIFIED,

/**
* DELTA is an AggregationTemporality for a profiler which reports changes since last report time.
*/
DELTA,

/**
* CUMULATIVE is an AggregationTemporality for a profiler which reports changes since a fixed start time.
*/
CUMULATIVE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;

/**
* Represents a mapping between Attribute Keys and Units.
* @see "pprofextended.proto::AttributeUnit"
*/
@Immutable
public interface AttributeUnitData {

/**
* Index into string table.
*/
long getAttributeKey();

/**
* Index into string table.
*/
long getUnitIndex();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

/**
* Indicates the semantics of the build_id field.
* @see "pprofextended.proto::BuildIdKind"
*/
public enum BuildIdKind {

/**
* Linker-generated build ID, stored in the ELF binary notes.
*/
LINKER,

/**
* Build ID based on the content hash of the binary.
*/
BINARY_HASH;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;

/**
* Describes a function.
* @see "pprofextended.proto::Function"
*/
@Immutable
public interface FunctionData {

/**
* Unique nonzero id for the function.
* @deprecated retained only for pprof compatibility.
*/
@Deprecated
long getId();

/**
* Name of the function, in human-readable form if available.
* Index into string table.
*/
long getNameIndex();

/**
* Name of the function, as identified by the system.
* For instance, it can be a C++ mangled name.
* Index into string table.
*/
long getSystemNameIndex();

/**
* Source file containing the function.
* Index into string table.
*/
long getFilenameIndex();

/**
* Line number in source file.
*/
long getStartLine();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;

/**
* Provides additional context for a sample,
* such as thread ID or allocation size, with optional units.
* @see "pprofextended.proto::Label"
*/
@Immutable
public interface LabelData {

/**
* Index into string table
*/
long getKeyIndex();

/**
* String value of the label data, if applicable.
* Index into string table
*/
long getStrIndex();

/**
* Numeric value of the label data, if applicable.
*/
long getNum();

/**
* Specifies the units of num, applicable only if num is present.
* Use arbitrary string (for example, "requests") as a custom count unit.
*/
long getNumUnitIndex();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;

/**
* Details a specific line in a source code, linked to a function.
* @see "pprofextended.proto::Line"
*/
@Immutable
public interface LineData {

/**
* The index of the corresponding Function for this line.
* Index into function table.
*/
long getFunctionIndex();

/**
* Line number in source code.
*/
long getLine();

/**
* Column number in source code.
*/
long getColumn();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;

/**
* A connection from a profile Sample to a trace Span.
* @see "pprofextended.proto::Link"
*/
@Immutable
public interface LinkData {

/**
* A unique identifier of a trace that this linked span is part of.
* The ID is a 16-byte array.
*/
@SuppressWarnings("mutable")
byte[] getTraceId();

/**
* A unique identifier for the linked span.
* The ID is an 8-byte array.
*/
@SuppressWarnings("mutable")
byte[] getSpanId();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;
import java.util.List;

/**
* Describes a function.
* @see "pprofextended.proto::Location"
*/
@Immutable
public interface LocationData {

/**
* Unique nonzero id for the location.
* Could use instruction addresses or any integer sequence as ids.
* @deprecated retained only for pprof compatibility.
*/
@Deprecated
long getId();

/**
* The index of the corresponding profile.Mapping for this location.
* It can be unset if the mapping is unknown or not applicable for this profile type.
*/
long getMappingIndex();

/**
* The instruction address for this location, if available.
*/
long getAddress();

/**
* Multiple line indicates this location has inlined functions,
* where the last entry represents the caller into which the
* preceding entries were inlined.
*/
List<LineData> getLines();

/**
* Provides an indication that multiple symbols map to this location's
* address, for example due to identical code folding by the linker.
*/
boolean isFolded();

/**
* Type of frame (e.g. kernel, native, python, hotspot, php).
* Index into string table.
*/
int getTypeIndex();

/**
* References to attributes in Profile.attribute_table.
*/
List<Long> getAttributes();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.sdk.profiles.data;

import javax.annotation.concurrent.Immutable;
import java.util.List;

/**
* Describes the mapping of a binary in memory.
* @see "pprofextended.proto::Mapping"
*/
@Immutable
public interface MappingData {

/**
* Unique nonzero id for the mapping.
* @deprecated retained only for pprof compatibility.
*/
@Deprecated
long getId();

/**
* Address at which the binary (or DLL) is loaded into memory.
*/
long getMemoryStart();

/**
* The limit of the address range occupied by this mapping.
*/
long getMemoryLimit();

/**
* Offset in the binary that corresponds to the first mapped address.
*/
long getFileOffset();

/**
* The object this entry is loaded from.
* This can be a filename on disk for the main binary and shared libraries,
* or virtual abstraction like "[vdso]".
* Index into the string table.
*/
long getFilenameIndex();

/**
* Uniquely identifies a particular program version with high probability.
* e.g., for binaries generated by GNU tools, the contents of the .note.gnu.build-id field.
* Index into the string table.
*/
long getBuildIdIndex();

/**
* Specifies the kind of build id.
* See BuildIdKind enum for more details
*/
BuildIdKind getBuildIdKind();

/**
* References to attributes in Profile.attribute_table.
*/
List<Long> getAttributeIndices();

boolean hasFunctions();
boolean hasFilenames();
boolean hasLineNumbers();
boolean hasInlineFrames();
}
Loading

0 comments on commit a7af9cb

Please sign in to comment.