Skip to content

Commit a073fd2

Browse files
committed
inject span attributes
1 parent 109c04c commit a073fd2

File tree

2 files changed

+34
-10
lines changed

2 files changed

+34
-10
lines changed

Helpers/SpanNamingSchema.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
namespace OpenTelemetry.Instrumentation.Digma.Helpers;
44

5-
public interface ISpanNamingSchema
5+
public interface IActivityNamingSchema
66
{
77
public string GetSpanName(Type classType, MethodInfo method);
88
}
99

10-
public class MethodFullNameSchema : ISpanNamingSchema
10+
public class MethodFullNameSchema : IActivityNamingSchema
1111
{
1212
public string GetSpanName(Type classType, MethodInfo method)
1313
{
1414
return $"{classType.FullName}.{method.Name}";
1515
}
1616
}
1717

18-
public class ClassAndMethodNameSchema : ISpanNamingSchema
18+
public class ClassAndMethodNameSchema : IActivityNamingSchema
1919
{
2020
public string GetSpanName(Type classType, MethodInfo method)
2121
{

Helpers/TracingDecorator.cs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,26 @@ public class TraceDecorator<TDecorated> : DispatchProxy where TDecorated : class
1010

1111
private ActivitySource _activity;
1212
private TDecorated _decorated;
13-
private ISpanNamingSchema _namingSchema = new MethodFullNameSchema();
13+
private IActivityNamingSchema _namingSchema = new MethodFullNameSchema();
1414
private bool _decorateAllMethods = true;
1515

1616
/// <summary>
1717
/// Creates a new TraceDecorator instance wrapping the specific object and implementing the TDecorated interface
1818
/// </summary>
1919
/// <param name="decorated"></param>
20-
/// <param name="spanNamingSchema"></param>
20+
/// <param name="activityNamingSchema"></param>
2121
/// <param name="decorateAllMethods"></param>
2222
/// <returns></returns>
23-
public static TDecorated Create(TDecorated decorated, ISpanNamingSchema? spanNamingSchema=null,
23+
public static TDecorated Create(TDecorated decorated, IActivityNamingSchema? activityNamingSchema=null,
2424
bool decorateAllMethods=true)
2525
{
2626
object proxy = Create<TDecorated, TraceDecorator<TDecorated>>()!;
27-
((TraceDecorator<TDecorated>)proxy!).SetParameters(decorated, spanNamingSchema,decorateAllMethods);
27+
((TraceDecorator<TDecorated>)proxy!).SetParameters(decorated, activityNamingSchema,decorateAllMethods);
2828

2929
return (TDecorated)proxy;
3030
}
3131

32-
private void SetParameters(TDecorated decorated, ISpanNamingSchema? spanNamingSchema, bool decorateAllMethods)
32+
private void SetParameters(TDecorated decorated, IActivityNamingSchema? spanNamingSchema, bool decorateAllMethods)
3333
{
3434
_decorated = decorated;
3535
_activity = new(_decorated!.GetType().FullName!);
@@ -58,7 +58,7 @@ private void SetParameters(TDecorated decorated, ISpanNamingSchema? spanNamingSc
5858
throw;
5959
}
6060
}
61-
61+
6262

6363
protected override object? Invoke(MethodInfo? targetMethod, object?[]? args)
6464
{
@@ -69,6 +69,9 @@ private void SetParameters(TDecorated decorated, ISpanNamingSchema? spanNamingSc
6969
{
7070
var defaultSpanName = _namingSchema.GetSpanName(_decorated!.GetType(), targetMethod);
7171
using var activity = _activity.StartActivity(activityAttribute?.Name ?? defaultSpanName);
72+
73+
InjectAttributes(targetMethod, activity);
74+
7275
if (activityAttribute?.RecordExceptions==false)
7376
{
7477
return InvokeDecoratedExecution(targetMethod, args);
@@ -81,6 +84,27 @@ private void SetParameters(TDecorated decorated, ISpanNamingSchema? spanNamingSc
8184
return InvokeDecoratedExecution(targetMethod, args);
8285

8386
}
84-
8587

88+
private void InjectAttributes(MethodInfo targetMethod, Activity? activity)
89+
{
90+
var methodActivityAttributes = targetMethod.GetCustomAttribute<ActivitiesAttributesAttribute>(inherit: false);
91+
var classActivityAttributes =
92+
_decorated.GetType().GetCustomAttribute<ActivitiesAttributesAttribute>(inherit: false);
93+
94+
if (methodActivityAttributes != null)
95+
{
96+
foreach (var key in classActivityAttributes.Attributes.Keys)
97+
{
98+
activity.AddTag(key, methodActivityAttributes.Attributes[key]);
99+
}
100+
}
101+
102+
if (classActivityAttributes != null)
103+
{
104+
foreach (var key in classActivityAttributes.Attributes.Keys)
105+
{
106+
activity.AddTag(key, methodActivityAttributes.Attributes[key]);
107+
}
108+
}
109+
}
86110
}

0 commit comments

Comments
 (0)