diff --git a/Directory.Packages.props b/Directory.Packages.props index cba72e2..ce40da9 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -8,10 +8,13 @@ + + + diff --git a/ServiceLevelIndicators.sln b/ServiceLevelIndicators.sln index 8b689a5..9455ef1 100644 --- a/ServiceLevelIndicators.sln +++ b/ServiceLevelIndicators.sln @@ -39,6 +39,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleMinimalApiSli", "samp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GenerateSli", "sample\GenerateSli\GenerateSli.csproj", "{94FA59E4-26A3-4457-8AD7-4091205F1D06}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleConsoleSLI", "sample\ConsoleApp\SampleConsoleSLI.csproj", "{08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -85,6 +87,10 @@ Global {94FA59E4-26A3-4457-8AD7-4091205F1D06}.Debug|Any CPU.Build.0 = Debug|Any CPU {94FA59E4-26A3-4457-8AD7-4091205F1D06}.Release|Any CPU.ActiveCfg = Release|Any CPU {94FA59E4-26A3-4457-8AD7-4091205F1D06}.Release|Any CPU.Build.0 = Release|Any CPU + {08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {08C09D03-67BE-25CF-68EA-8A94E1EBFE2F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -100,6 +106,7 @@ Global {A776B107-2730-4EB6-B481-7F3EFAC2A2A8} = {2C6E9F62-8968-455A-AD02-DC795296471A} {D25F951D-CE1A-47D1-8421-F71BEBF3A356} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B} {94FA59E4-26A3-4457-8AD7-4091205F1D06} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B} + {08C09D03-67BE-25CF-68EA-8A94E1EBFE2F} = {A7D8DEF7-8D37-4DE9-B935-7D9FF571132B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {5C1087B8-93AA-4847-9D18-6A16E754593F} diff --git a/sample/ConsoleApp/Program.cs b/sample/ConsoleApp/Program.cs new file mode 100644 index 0000000..107e9c9 --- /dev/null +++ b/sample/ConsoleApp/Program.cs @@ -0,0 +1,66 @@ +using System.Diagnostics; +using System.Reflection; +using Azure.Core; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using OpenTelemetry; +using OpenTelemetry.Logs; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using ServiceLevelIndicators; + +#pragma warning disable CA1848 // Use the LoggerMessage delegates + +const string ProgramName = "SampleConsoleSLI"; +string version = Assembly + .GetExecutingAssembly() + .GetCustomAttribute()! + .Version; +ResourceBuilder resourceBuilder = ResourceBuilder + .CreateEmpty() + .AddService(ProgramName, serviceVersion: version, serviceInstanceId: Environment.MachineName); + + +ServiceCollection services = new(); +services.Configure(r => +{ + r.CustomerResourceId = ProgramName; // Customer ID if this work is done on behalf of a customer. + r.LocationId = ServiceLevelIndicator.CreateLocationId("public", AzureLocation.WestUS3.Name); +}); + +services + .AddLogging(builder => + { + builder.AddOpenTelemetry(options => + { + options.SetResourceBuilder(resourceBuilder); + options.AddConsoleExporter(); + }); + }) + .AddSingleton(); ; + +var serviceProvider = services.BuildServiceProvider(); + +var logger = serviceProvider.GetRequiredService>(); + +using MeterProvider meterProvider = Sdk.CreateMeterProviderBuilder() + .SetResourceBuilder(resourceBuilder) + .AddConsoleExporter() + .AddServiceLevelIndicatorInstrumentation() + .Build(); + +var serviceLevelIndicator = serviceProvider.GetRequiredService(); +using MeasuredOperation measuredOperation = serviceLevelIndicator.StartMeasuring("OperationWork"); + +try +{ + logger.LogInformation("Starting to do some work..."); + await Task.Delay(1000); // Simulate some work + logger.LogInformation("Work done."); + measuredOperation.SetActivityStatusCode(ActivityStatusCode.Ok); +} +catch (Exception ex) +{ + measuredOperation.SetActivityStatusCode(ActivityStatusCode.Error); + logger.LogError(ex, "An error occurred doing work."); +} diff --git a/sample/ConsoleApp/SampleConsoleSLI.csproj b/sample/ConsoleApp/SampleConsoleSLI.csproj new file mode 100644 index 0000000..cb5659a --- /dev/null +++ b/sample/ConsoleApp/SampleConsoleSLI.csproj @@ -0,0 +1,20 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + +