Skip to content

Commit 50ee358

Browse files
authored
Sample SLI Console application (#47)
* Sample SLI Console application Output: ``` Metric Name: operation.duration, Duration of the operation., Unit: ms, Meter: ServiceLevelIndicator/8.0.0.0 (2025-03-06T20:00:59.4535321Z, 2025-03-06T20:01:01.0792349Z] activity.status.code: Ok CustomerResourceId: SampleConsoleSLI LocationId: ms-loc://az/public/westus3 Operation: OperationWork Histogram Value: Sum: 1540 Count: 1 Min: 1540 Max: 1540 (-Infinity,0]:0 (0,5]:0 (5,10]:0 (10,25]:0 (25,50]:0 (50,75]:0 (75,100]:0 (100,250]:0 (250,500]:0 (500,750]:0 (750,1000]:0 (1000,2500]:1 (2500,5000]:0 (5000,7500]:0 (7500,10000]:0 (10000,+Infinity]:0 ```
1 parent e353a23 commit 50ee358

4 files changed

Lines changed: 96 additions & 0 deletions

File tree

Directory.Packages.props

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@
88
<PackageVersion Include="DotNet.ReproducibleBuilds" Version="1.2.25" />
99
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="7.0.3" />
1010
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="8.0.5" />
11+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
1112
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.1" />
13+
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
1214
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />
1315
<PackageVersion Include="Nerdbank.GitVersioning" Version="3.6.143" />
1416
<PackageVersion Include="OpenTelemetry" Version="1.9.0" />
17+
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.9.0" />
1518
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.9.0" />
1619
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.9.0" />
1720
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.8.1" />

ServiceLevelIndicators.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleMinimalApiSli", "samp
3939
EndProject
4040
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateSli", "sample\GenerateSli\GenerateSli.csproj", "{94FA59E4-26A3-4457-8AD7-4091205F1D06}"
4141
EndProject
42+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleConsoleSLI", "sample\ConsoleApp\SampleConsoleSLI.csproj", "{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}"
43+
EndProject
4244
Global
4345
GlobalSection(SolutionConfigurationPlatforms) = preSolution
4446
Debug|Any CPU = Debug|Any CPU
@@ -85,6 +87,10 @@ Global
8587
{94FA59E4-26A3-4457-8AD7-4091205F1D06}.Debug|Any CPU.Build.0 = Debug|Any CPU
8688
{94FA59E4-26A3-4457-8AD7-4091205F1D06}.Release|Any CPU.ActiveCfg = Release|Any CPU
8789
{94FA59E4-26A3-4457-8AD7-4091205F1D06}.Release|Any CPU.Build.0 = Release|Any CPU
90+
{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
91+
{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
92+
{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
93+
{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Release|Any CPU.Build.0 = Release|Any CPU
8894
EndGlobalSection
8995
GlobalSection(SolutionProperties) = preSolution
9096
HideSolutionNode = FALSE
@@ -100,6 +106,7 @@ Global
100106
{A776B107-2730-4EB6-B481-7F3EFAC2A2A8} = {2C6E9F62-8968-455A-AD02-DC795296471A}
101107
{D25F951D-CE1A-47D1-8421-F71BEBF3A356} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B}
102108
{94FA59E4-26A3-4457-8AD7-4091205F1D06} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B}
109+
{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B}
103110
EndGlobalSection
104111
GlobalSection(ExtensibilityGlobals) = postSolution
105112
SolutionGuid = {5C1087B8-93AA-4847-9D18-6A16E754593F}

sample/ConsoleApp/Program.cs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System.Diagnostics;
2+
using System.Reflection;
3+
using Azure.Core;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using Microsoft.Extensions.Logging;
6+
using OpenTelemetry;
7+
using OpenTelemetry.Logs;
8+
using OpenTelemetry.Metrics;
9+
using OpenTelemetry.Resources;
10+
using ServiceLevelIndicators;
11+
12+
#pragma warning disable CA1848 // Use the LoggerMessage delegates
13+
14+
const string ProgramName = "SampleConsoleSLI";
15+
string version = Assembly
16+
.GetExecutingAssembly()
17+
.GetCustomAttribute<AssemblyFileVersionAttribute>()!
18+
.Version;
19+
ResourceBuilder resourceBuilder = ResourceBuilder
20+
.CreateEmpty()
21+
.AddService(ProgramName, serviceVersion: version, serviceInstanceId: Environment.MachineName);
22+
23+
24+
ServiceCollection services = new();
25+
services.Configure<ServiceLevelIndicatorOptions>(r =>
26+
{
27+
r.CustomerResourceId = ProgramName; // Customer ID if this work is done on behalf of a customer.
28+
r.LocationId = ServiceLevelIndicator.CreateLocationId("public", AzureLocation.WestUS3.Name);
29+
});
30+
31+
services
32+
.AddLogging(builder =>
33+
{
34+
builder.AddOpenTelemetry(options =>
35+
{
36+
options.SetResourceBuilder(resourceBuilder);
37+
options.AddConsoleExporter();
38+
});
39+
})
40+
.AddSingleton<ServiceLevelIndicator>(); ;
41+
42+
var serviceProvider = services.BuildServiceProvider();
43+
44+
var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
45+
46+
using MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder()
47+
.SetResourceBuilder(resourceBuilder)
48+
.AddConsoleExporter()
49+
.AddServiceLevelIndicatorInstrumentation()
50+
.Build();
51+
52+
var serviceLevelIndicator = serviceProvider.GetRequiredService<ServiceLevelIndicator>();
53+
using MeasuredOperation measuredOperation = serviceLevelIndicator.StartMeasuring("OperationWork");
54+
55+
try
56+
{
57+
logger.LogInformation("Starting to do some work...");
58+
await Task.Delay(1000); // Simulate some work
59+
logger.LogInformation("Work done.");
60+
measuredOperation.SetActivityStatusCode(ActivityStatusCode.Ok);
61+
}
62+
catch (Exception ex)
63+
{
64+
measuredOperation.SetActivityStatusCode(ActivityStatusCode.Error);
65+
logger.LogError(ex, "An error occurred doing work.");
66+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="Azure.Core" />
12+
<PackageReference Include="Microsoft.Extensions.Logging.Console" />
13+
<PackageReference Include="OpenTelemetry.Exporter.Console" />
14+
</ItemGroup>
15+
16+
<ItemGroup>
17+
<ProjectReference Include="..\..\ServiceLevelIndicators\src\ServiceLevelIndicators.csproj" />
18+
</ItemGroup>
19+
20+
</Project>

0 commit comments

Comments
 (0)