profile
viewpoint

Oberon00/luabind 40

Luabind is a library that helps you create bindings between C++ and Lua.

Oberon00/apollo 23

Convert anything from C++ to Lua and back, easily create modules & more.

Dynatrace/OneAgent-SDK-for-C 14

Enables custom tracing of native applications in Dynatrace

Oberon00/cpptutorial 6

Learn C++ as your first programming language

Oberon00/lsfml 4

Lua SFML binding library

dynatrace-oss/dt-awslayertool 2

Utility to download or clone AWS Lambda Layers, including extensions distributed as layers.

Oberon00/jd 1

Jade 2D Lua Game Engine (SFML based)

dynatrace-oss-contrib/build-tools 0

Building tools provided by OpenTelemetry

Oberon00/attrs 0

Python Classes Without Boilerplate

Pull request review commentopen-telemetry/opentelemetry-specification

Change golang namespace to 'go', rather than 'gc'

 Example:  ### Go Runtimes -TODO(<https://github.com/open-telemetry/opentelemetry-go/issues/1181>): Confirm the contents here+Go Runtimes should fill in the as follows: -| Value | Description |-| --- | --- |-| `gc` | Go compiler |-| `gccgo` | GCC Go frontend |+- `process.runtime.name` - Fill in an interpretation of Go's `runtime.Compiler` constant, according to the following rule: If the value is `gc`, fill in `go`. Otherwise, fill in the exact value of `runtime.Compiler`.++  This can be implemented with the following Go snippet:++  ```go+  import "runtime"+  +  func getRuntimeName() string {+    if runtime.Compiler == "gc" {+      return "go"+    }+    return runtime.Compiler+  }+  ```++- `process.runtime.version` - Fill in the exact value returned by `runtime.Version()`, i.e. `go1.17`.+- `process.runtime.description` - Fill in a description corresponding to the value of `process.runtime.name`, as defined by the table below.

IMHO a static mapping from already reported information should be avoided here. If we have no additional info to add, I think we can recommend leaving description empty for now.

djaglowski

comment created time in 5 days

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentdotnet/runtime

Introduce Activity.IsStopped Property

 private bool W3CIdFlagsSet             get => (_w3CIdFlags & ActivityTraceFlagsIsSet) != 0;         } -        private bool IsFinished+        /// <summary>+        /// Indicates whether this Activity object is stopped

Maybe document that this is already true in the ActivityStopped listener (assuming and hoping this is the case). Could also be added to the unit test.

tarekgh

comment created time in 5 days

PullRequestReviewEvent

Pull request review commentopen-telemetry/opentelemetry-specification

Clarify that attribute keys are unique in collections

 attribute limits for Resources. Attributes, which belong to Metrics, are exempt from the limits described above at this time, as discussed in [Metrics Attribute Limits](../metrics/sdk.md#attribute-limits).++## Attribute Collections++[Resources](../resource/sdk.md),+Metrics [data points](../metrics/datamodel.md#metric-points),+[Spans](../trace/api.md#set-attributes),+Span [Events](../trace/api.md#add-events),+Span [Links](../trace/api.md#specifying-links)+and [Log Records](../logs/data-model.md) may contain a collection of attributes.+The keys in each such collection are unique, i.e. there cannot exist more than

cannot

The keys in each such collection are unique, i.e. there MUST NOT exist more than

And we probably should specify that conflicts SHOULD be resolved by using the attribute set latest.

tigrannajaryan

comment created time in 7 days

PullRequestReviewEvent

Pull request review commentopen-telemetry/opentelemetry-specification

Clarify that attribute keys are unique in collections

 attribute limits for Resources. Attributes, which belong to Metrics, are exempt from the limits described above at this time, as discussed in [Metrics Attribute Limits](../metrics/sdk.md#attribute-limits).++## Attribute Collections++[Resources](../resource/sdk.md),+Metrics [data points](../metrics/datamodel.md#metric-points),+[Spans](../trace/api.md#set-attributes),+Span [Events](../trace/api.md#add-events),+Span [Links](../trace/api.md#specifying-links)+and [Log Records](../logs/data-model.md) may contain a collection of attributes.+The keys in each such collection are unique, i.e. there cannot exist more than+one key-value pair with the same key.

cannot

The keys in each such collection are unique, i.e. there MUST NOT exist more than

And we probably should specify that conflicts SHOULD be resolved by using the attribute set latest.

tigrannajaryan

comment created time in 7 days

PullRequestReviewEvent

issue commentdotnet/runtime

[API Proposal]: Activity.IsStopped (functionality required to conform to OpenTelemetry specification)

The end timestamp is already exposed, but can be set without stopping the Activity (see the issue description).

The SDK might be able to solve this with events, but it then SHOULD ensure that users of the SDK have a way to tell if a Activity they received in SpanProcessor.OnStart is stopped at any later point in time (https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk.md#onstart "It SHOULD be possible to keep a reference to this span object and updates to the span SHOULD be reflected in it."). As stated in the issue description, this would probably require a ConditionalWeakTable.

Oberon00

comment created time in 13 days

pull request commentopen-telemetry/opentelemetry-java

Update errorprone

Coming from C++, I view getting rid of final as bad. Final (like const in C/C++) means that you get a compiler error if you assign to the variable by accident.

anuraaga

comment created time in 13 days

issue commentopen-telemetry/opentelemetry-specification

faas.instance missing from faas semantic conventions

It's a resource attribute: https://github.com/open-telemetry/opentelemetry-specification/blob/d5fca3f1d858f5a584acaa5b044c73c6af2d7a8d/semantic_conventions/resource/faas.yaml#L53-L60

dyladan

comment created time in 13 days

issue commentopen-telemetry/opentelemetry-specification

Specify whether keys in attribute lists are expected to be unique

I remember (actually I just saw it by accident when I opened my Thread list) we had a short Thread on Slack 4 months ago: https://cloud-native.slack.com/archives/C01N7PP1THC/p1630920628020600?thread_ts=1630790115.020300&cid=C01N7PP1THC

At that time I wrote:

There is https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-attributes

Setting an attribute with the same key as an existing attribute SHOULD overwrite the existing attribute's value.

Which currently only applies to Span.SetAttribute. IMHO we should move that to the overall attribute definition, otherwise it doesn't even apply to https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#span-creation

Would not be surprised if it is still unspecified for Span Creation, Resources, Metric attributes (at least I did not follow up at that time).

achille-roussel

comment created time in 13 days

issue openeddotnet/runtime

[API Proposal]: Activity.IsStopped (functionality required to conform to OpenTelemetry specification)

Background and motivation

As far as I know, the Activity class is meant to provide all the functionality required by the OpenTelemetry tracing specification for the concept that is called "Span" in OTel terms.

However, I could not find a way to get the following from Activity:

It must also be able to reliably determine whether the Span has ended (some languages might implement this by having an end timestamp of null, others might have an explicit hasEnded boolean).

-- https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/trace/sdk.md#additional-span-interfaces

At first, I thought one could check if Activity.Duration != TimeSpan.Zero, but while this is indeed true for all stopped/ended activities, even activities that are still running can have a non-zero duration if SetEndTime was called but Stop/Dispose was not.

In some situations, one could could use the callback from the Source and maintain a ConditionalWeakTable to record whether an Activity has stopped, but this is rather cumbersome, slow and not possible if you do not have control over the activities' source.

It seems that Activity already has this implemented as private functinality as a property IsFinished: https://github.com/dotnet/runtime/blob/v6.0.1/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/Activity.cs#L1301-L1303

Exposing the existing name IsFinished would also be an acceptable IMHO (I think the most OTel-like name would be HasEnded, but since End is called Stop, my primary suggestion is IsStopped).

The interface in OpenTelemetry Java is here https://github.com/open-telemetry/opentelemetry-java/blob/v1.9.1/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java#L64-L71 and here https://github.com/open-telemetry/opentelemetry-java/blob/v1.9.1/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/data/SpanData.java#L117-L122

CC @open-telemetry/dotnet-approvers

API Proposal

namespace System.Diagnostics.Generic
{
    public class Activity: IDisposable
    {
        // ...
        public bool IsStopped { get; }
        // ...
    }
}

API Usage

var a = new Activity("foo");
Debug.Assert(!a.IsStopped);
a.Start();
Debug.Assert(!a.IsStopped);
a.Stop();
Debug.Assert(a.IsStopped);

In an ActivityListener.ActivityStopped callback, IsStopped of the notifying Activity must also be true to conform to OTel semantics.

Alternative Designs

If SetEndTime would always unconditionally Stop the activity, the check for nonzero Duration could be used instead of using a separate property. However, that would probably be an unacceptable breaking change.

Risks

None known. This proposal would add a new property exposing existing functionality that is required as an API surface by the OpenTelemetry specification.

created time in 14 days

PullRequestReviewEvent

pull request commentopen-telemetry/opentelemetry-specification

Upgrade semconv generator to v0.8.0

This PR seems to only point the documentation to 0.8.0, the actual build uses https://github.com/open-telemetry/opentelemetry-specification/blob/9216eb8ff1832ae790369e49ce326cb6bc3d1c80/Makefile#L12-L14

lmolkova

comment created time in a month

issue commentopen-telemetry/opentelemetry-dotnet

Self-diagnostics log file has strange content

@xiang17

The file was never intended to be in a proper text format.

What is the expected way to use this file then?

mkotsabiuk

comment created time in a month

issue commentopen-telemetry/opentelemetry-dotnet

Self-diagnostics log file has strange content

I would also like to have that documented.

The reason is described in #1258: The self-diagnostics module is designed to have minimal overhead and bounded resource usage to make it production-ready and developers worry-free from ever-growing log file(s).

This will lead to even stranger content when the file starts again from the beginning, especially if this happens mid-stacktrace and you get something that looks like a normally formatted stack trace with impossible content.

I don't think "minimal-overhead" in that extreme sense is a desirable feature. I'd rather want a developer-friendly debug feature by default.

mkotsabiuk

comment created time in a month

Pull request review commentopen-telemetry/opentelemetry-specification

Adjust syntax for ParentBased sampler to distinguish inputs from output

 of the `TraceID`. [#1413](https://github.com/open-telemetry/opentelemetry-specif * This is a composite sampler. `ParentBased` helps distinguish between the following cases:   * No parent (root span).-  * Remote parent (`SpanContext.IsRemote() == true`) with `SampledFlag` equals `true`-  * Remote parent (`SpanContext.IsRemote() == true`) with `SampledFlag` equals `false`-  * Local parent (`SpanContext.IsRemote() == false`) with `SampledFlag` equals `true`-  * Local parent (`SpanContext.IsRemote() == false`) with `SampledFlag` equals `false`+  * Remote parent (`SpanContext.IsRemote() == true`) with `SampledFlag == true`
  * Remote parent (`SpanContext.IsRemote() == true`) with `SampledFlag` set

Reads cleaner to me.

arminru

comment created time in a month

PullRequestReviewEvent

Pull request review commentDynatrace/OneAgent-SDK-for-dotnet

Release 1.8.0

 public static async Task SampleMethodAsync()  ``` ->*Note*: Previous versions of the OneAgent SDK supported tracing of asynchronous methods (which are C# methods that are marked with the `async` keyword) using the method `StartAsync()`. This method has been deprecated for technical reasons and the recommended way of tracing asynchronous code are the `TraceAsync` methods (see below).+>*Note*: Previous versions of the OneAgent SDK supported tracing of asynchronous methods (which are C# methods
> **Note:** Previous versions of the OneAgent SDK supported tracing of asynchronous methods (which are C# methods
z1c0

comment created time in a month

PullRequestReviewEvent

Pull request review commentDynatrace/OneAgent-SDK-for-dotnet

Release 1.8.0

 is executed on multiple threads. To summarize this, in case of  * synchronous methods you can either use the `Start`, `End` and `Error` methods, or the convenience method `Trace`,-* asynchronous methods you can either use the `StartAsync`, `End` and `Error` methods,-or the convenience method `TraceAsync`.+* asynchronous methods you can either use the `TraceAsync` method.
* asynchronous methods you can use the `TraceAsync` method.
z1c0

comment created time in a month

PullRequestReviewEvent
PullRequestReviewEvent

pull request commentopen-telemetry/opentelemetry-specification

Prohibit usage of retired names in semantic conventions

Is it expected that lossless conversion from new to old versions works? That does not seem like a feasible thing to guarantee to me.

tigrannajaryan

comment created time in a month

Pull request review commentopen-telemetry/opentelemetry-java

Migrate most testsets to test suites.

 dependencies {   jmhRuntimeOnly("io.grpc:grpc-netty") } +testing {+  suites {+    val testGrpcNetty by registering(JvmTestSuite::class) {+      dependencies {+        implementation(project(":exporters:otlp:testing-internal"))++        implementation("io.grpc:grpc-netty")+        implementation("io.grpc:grpc-stub")+      }+    }+    val testGrpcNettyShaded by registering(JvmTestSuite::class) {+      dependencies {+        implementation(project(":exporters:otlp:testing-internal"))++        implementation("io.grpc:grpc-netty-shaded")+        implementation("io.grpc:grpc-stub")+      }+    }+    val testGrpcOkhttp by registering(JvmTestSuite::class) {+      dependencies {+        implementation(project(":exporters:otlp:testing-internal"))++        implementation("io.grpc:grpc-okhttp")+        implementation("io.grpc:grpc-stub")+      }+    }+    val testSpanPipeline by registering(JvmTestSuite::class) {

I think if we do not use the result of registering, then the by registering syntax looks odd. Isn't there some register(JvmTestSuide::class) API that could be used instead?

anuraaga

comment created time in a month

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentopen-telemetry/opentelemetry-java

Migrate most testsets to test suites.

 testing { }  tasks {-  named("check") {

I think this should be kept as-is to profit from conviguration-avoidance: https://docs.gradle.org/current/userguide/task_configuration_avoidance.html#sec:old_vs_new_configuration_api_overview

anuraaga

comment created time in a month

more