// // Copyright The OpenTelemetry Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using OpenTelemetry.Trace; namespace Examples.GrpcService { public class Startup { public Startup(IConfiguration configuration) { this.Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); // Switch between Jaeger/Zipkin by setting UseExporter in appsettings.json. var exporter = this.Configuration.GetValue("UseExporter").ToLowerInvariant(); switch (exporter) { case "jaeger": services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddJaegerExporter(jaegerOptions => { jaegerOptions.ServiceName = this.Configuration.GetValue("Jaeger:ServiceName"); jaegerOptions.AgentHost = this.Configuration.GetValue("Jaeger:Host"); jaegerOptions.AgentPort = this.Configuration.GetValue("Jaeger:Port"); })); break; case "zipkin": services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddZipkinExporter(zipkinOptions => { zipkinOptions.ServiceName = this.Configuration.GetValue("Zipkin:ServiceName"); zipkinOptions.Endpoint = new Uri(this.Configuration.GetValue("Zipkin:Endpoint")); })); break; default: services.AddOpenTelemetryTracing((builder) => builder .AddAspNetCoreInstrumentation() .AddConsoleExporter()); break; } } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGrpcService(); endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"); }); }); } } }