Skip to content

Commit 72746d6

Browse files
committed
sample telemetry
1 parent f04825a commit 72746d6

File tree

3 files changed

+95
-71
lines changed

3 files changed

+95
-71
lines changed

sandbox/GeneratorSandbox/GeneratorSandbox.csproj

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
</PropertyGroup>
1818

1919
<ItemGroup>
20-
<!--<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
21-
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.0" />-->
22-
<!--<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.6" />-->
23-
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
24-
<!--<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.0" />-->
25-
<!--<PackageReference Include="ZLogger" Version="2.5.9" />-->
20+
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.6" />
21+
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
22+
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
23+
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.9.0" />
24+
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.9.0" />
2625
</ItemGroup>
2726

2827
<ItemGroup>
Lines changed: 89 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,109 @@
11
using ConsoleAppFramework;
2+
using Microsoft.Extensions.DependencyInjection;
3+
using Microsoft.Extensions.Hosting;
4+
using Microsoft.Extensions.Logging;
5+
using OpenTelemetry.Logs;
6+
using OpenTelemetry.Metrics;
7+
using OpenTelemetry.Resources;
8+
using OpenTelemetry.Trace;
9+
using System.Diagnostics;
210

3-
args = ["hello"];
11+
// Use SigNoz profiling: (view: http://localhost:8080/ )
12+
// git clone https://github.com/SigNoz/signoz.git
13+
// cd signoz/deploy/docker
14+
// docker compose up
15+
Environment.SetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4317"); // 4317 or 4318
416

5-
var builder = ConsoleApp.Create();
17+
var builder = Host.CreateApplicationBuilder(args);
618

7-
builder.UseFilter<NopFilter1>();
8-
builder.UseFilter<NopFilter2>();
19+
builder.Logging.AddOpenTelemetry(logging =>
20+
{
21+
logging.IncludeFormattedMessage = true;
22+
logging.IncludeScopes = true;
23+
});
924

10-
builder.Add<MyClass>();
25+
builder.Services.AddOpenTelemetry()
26+
.ConfigureResource(resource =>
27+
{
28+
resource.AddService("ConsoleAppFramework Telemetry Sample");
29+
})
30+
.WithMetrics(metrics =>
31+
{
32+
metrics.AddRuntimeInstrumentation()
33+
.AddHttpClientInstrumentation()
34+
.AddOtlpExporter();
35+
})
36+
.WithTracing(tracing =>
37+
{
38+
tracing.SetSampler(new AlwaysOnSampler())
39+
.AddHttpClientInstrumentation()
40+
.AddSource(ConsoleAppFrameworkSampleActivitySource.Name)
41+
.AddOtlpExporter();
42+
})
43+
.WithLogging(logging =>
44+
{
45+
logging.AddOtlpExporter();
46+
});
1147

12-
await builder.RunAsync(args);
48+
var app = builder.ToConsoleAppBuilder();
1349

14-
[ConsoleAppFilter<NopFilter3>]
15-
[ConsoleAppFilter<NopFilter4>]
16-
public class MyClass
17-
{
18-
[ConsoleAppFilter<NopFilter5>]
19-
[ConsoleAppFilter<NopFilter6>]
20-
public void Hello()
21-
{
22-
Console.Write("abcde");
23-
}
24-
}
50+
app.UseFilter<CommandTracingFilter>();
2551

26-
internal class NopFilter1(ConsoleAppFilter next)
27-
: ConsoleAppFilter(next)
52+
app.Add("", async ([FromServices] ILogger<Program> logger) =>
2853
{
29-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
30-
{
31-
Console.Write(1);
32-
return Next.InvokeAsync(context, cancellationToken);
33-
}
34-
}
54+
using var httpClient = new HttpClient();
55+
var ms = await httpClient.GetStringAsync("https://www.microsoft.com");
56+
logger.LogInformation(ms);
57+
var google = await httpClient.GetStringAsync("https://www.google.com");
58+
logger.LogInformation(google);
3559

36-
internal class NopFilter2(ConsoleAppFilter next)
37-
: ConsoleAppFilter(next)
38-
{
39-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
40-
{
41-
Console.Write(2);
42-
return Next.InvokeAsync(context, cancellationToken);
43-
}
44-
}
60+
var ms2 = httpClient.GetStringAsync("https://www.microsoft.com");
61+
var google2 = httpClient.GetStringAsync("https://www.google.com");
62+
var apple2 = httpClient.GetStringAsync("https://www.apple.com");
63+
await Task.WhenAll(ms2, google2, apple2);
4564

46-
internal class NopFilter3(ConsoleAppFilter next)
47-
: ConsoleAppFilter(next)
48-
{
49-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
50-
{
51-
Console.Write(3);
52-
return Next.InvokeAsync(context, cancellationToken);
53-
}
54-
}
65+
logger.LogInformation(apple2.Result);
5566

56-
internal class NopFilter4(ConsoleAppFilter next)
57-
: ConsoleAppFilter(next)
58-
{
59-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
60-
{
61-
Console.Write(4);
62-
return Next.InvokeAsync(context, cancellationToken);
63-
}
64-
}
67+
logger.LogInformation("OK");
68+
});
6569

66-
internal class NopFilter5(ConsoleAppFilter next)
67-
: ConsoleAppFilter(next)
70+
await app.RunAsync(args);
71+
72+
public static class ConsoleAppFrameworkSampleActivitySource
6873
{
69-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
70-
{
71-
Console.Write(5);
72-
return Next.InvokeAsync(context, cancellationToken);
73-
}
74+
public const string Name = "ConsoleAppFrameworkSample";
75+
76+
public static ActivitySource Instance { get; } = new ActivitySource(Name);
7477
}
7578

76-
internal class NopFilter6(ConsoleAppFilter next)
77-
: ConsoleAppFilter(next)
79+
// Sample Activity filter
80+
internal class CommandTracingFilter(ConsoleAppFilter next) : ConsoleAppFilter(next)
7881
{
79-
public override Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
82+
public override async Task InvokeAsync(ConsoleAppContext context, CancellationToken cancellationToken)
8083
{
81-
Console.Write(6);
82-
return Next.InvokeAsync(context, cancellationToken);
84+
using var activity = ConsoleAppFrameworkSampleActivitySource.Instance.StartActivity("CommandStart");
85+
if (activity != null)
86+
{
87+
activity.SetTag("console_app.command_name", context.CommandName);
88+
activity.AddBaggage("console_app.command_args", string.Join(" ", context.EscapedArguments));
89+
}
90+
91+
try
92+
{
93+
await Next.InvokeAsync(context, cancellationToken);
94+
if (activity != null)
95+
{
96+
activity.SetStatus(ActivityStatusCode.Ok);
97+
}
98+
}
99+
catch (Exception ex)
100+
{
101+
if (activity != null)
102+
{
103+
activity.AddException(ex);
104+
activity.SetStatus(ActivityStatusCode.Error);
105+
}
106+
throw;
107+
}
83108
}
84109
}

sandbox/GeneratorSandbox/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"Default": {
44
"commandName": "Project",
5-
"commandLineArgs": "run --project foo.csproj -- --foo 100 --bar bazbaz"
5+
"commandLineArgs": ""
66
},
77
"ShowVersion": {
88
"commandName": "Project",

0 commit comments

Comments
 (0)