22using Microsoft . AspNetCore . Authentication . JwtBearer ;
33using Microsoft . AspNetCore . ResponseCompression ;
44using Microsoft . IdentityModel . Tokens ;
5+ using OpenTelemetry . Logs ;
6+ using OpenTelemetry . Metrics ;
7+ using OpenTelemetry . Resources ;
8+ using OpenTelemetry . Trace ;
59using RideSharingApp . Api . Middlewares ;
610using Serilog ;
711
12+
813namespace RideSharingApp . Api ;
914
1015public static class DependencyInjection
@@ -26,7 +31,8 @@ public static WebApplication UseApi(this WebApplication app)
2631 app
2732 . UseMiddleware < SecurityHeadersMiddleware > ( )
2833 . UseMiddleware < CorrelationIdMiddleware > ( )
29- . UseMiddleware < GlobalExceptionMiddleware > ( ) ;
34+ . UseMiddleware < GlobalExceptionMiddleware > ( )
35+ . UseMiddleware < IdempotencyMiddleware > ( ) ;
3036
3137 return app ;
3238 }
@@ -38,6 +44,21 @@ public static WebApplicationBuilder HostSerilog(this WebApplicationBuilder build
3844 loggerConfiguration . WriteTo . Console ( ) ;
3945 } ) ;
4046
47+ var resourceBuilder = ResourceBuilder . CreateDefault ( )
48+ . AddService ( "RideSharingAppApi" , serviceVersion : "1.0.0" ) ;
49+
50+ // ---------- LOGGING ----------
51+ builder . Logging . ClearProviders ( ) ;
52+ builder . Logging . AddOpenTelemetry ( logging =>
53+ {
54+ logging
55+ . SetResourceBuilder ( resourceBuilder )
56+ . AddOtlpExporter ( o =>
57+ {
58+ o . Endpoint = new Uri ( "http://otel-collector:4317" ) ;
59+ } ) ;
60+ } ) ;
61+
4162 return builder ;
4263 }
4364
@@ -51,7 +72,8 @@ public static IServiceCollection AddApi(this IServiceCollection services, IConfi
5172 . AddVersioning ( )
5273 . AddSwaggerGen ( )
5374 . AddCompression ( )
54- . UseSerilog ( configuration ) ;
75+ . UseSerilog ( configuration )
76+ . AddOpenTel ( ) ;
5577
5678 return services ;
5779 }
@@ -146,4 +168,77 @@ private static IServiceCollection UseSerilog(this IServiceCollection services, I
146168
147169 return services ;
148170 }
149- }
171+
172+ private static IServiceCollection AddOpenTel ( this IServiceCollection services )
173+ {
174+ var resourceBuilder = ResourceBuilder . CreateDefault ( )
175+ . AddService ( "RideSharingAppApi" , serviceVersion : "1.0.0" ) ;
176+
177+ services . AddOpenTelemetry ( )
178+ . WithMetrics ( metrics =>
179+ {
180+ metrics
181+ . SetResourceBuilder ( ResourceBuilder . CreateDefault ( )
182+ . AddService ( nameof ( RideSharingApp ) ) )
183+ . AddAspNetCoreInstrumentation ( )
184+ . AddRuntimeInstrumentation ( )
185+ . AddProcessInstrumentation ( )
186+ . AddOtlpExporter ( o =>
187+ {
188+ o . Endpoint = new Uri ( Environment . GetEnvironmentVariable ( "OTEL_EXPORTER_OTLP_ENDPOINT" ) ?? "http://otel-collector:4318" ) ;
189+ } ) ;
190+ } ) ;
191+
192+ // ---------- MÉTRICAS ----------
193+ services . AddOpenTelemetry ( )
194+ . WithMetrics ( metrics =>
195+ {
196+ metrics
197+ . SetResourceBuilder ( resourceBuilder )
198+ . AddAspNetCoreInstrumentation ( )
199+ . AddRuntimeInstrumentation ( )
200+ . AddProcessInstrumentation ( )
201+ . AddMeter ( "RideSharingAppApiMetrics" )
202+ . AddOtlpExporter ( o =>
203+ {
204+ o . Endpoint = new Uri ( "http://otel-collector:4317" ) ;
205+ } ) ;
206+ } ) ;
207+
208+ // ---------- TRACING ----------
209+ services . AddOpenTelemetry ( )
210+ . WithTracing ( tracing =>
211+ {
212+ tracing
213+ . SetResourceBuilder ( resourceBuilder )
214+ . AddAspNetCoreInstrumentation ( )
215+ . AddHttpClientInstrumentation ( )
216+ . AddOtlpExporter ( o =>
217+ {
218+ o . Endpoint = new Uri ( "http://otel-collector:4317" ) ;
219+ } ) ;
220+ } ) ;
221+
222+ return services ;
223+ }
224+ }
225+
226+ //internal class NewRides : INewRides
227+ //{
228+ // private readonly Counter<long> _ordersCounter;
229+
230+ // public NewRides(IMeterProvider meterProvider)
231+ // {
232+ // // Cria um meter via abstração do OpenTelemetry
233+ // var meter = meterProvider.GetMeter("MyAppMetrics");
234+ // _ordersCounter = meter.CreateCounter<long>(
235+ // "orders_total",
236+ // description: "Quantidade total de pedidos criados"
237+ // );
238+ // }
239+
240+ // public void Increment()
241+ // {
242+ // _ordersCounter.Add(1);
243+ // }
244+ //}
0 commit comments