github.com/pyroscope-io/pyroscope@v0.37.3-0.20230725203016-5f6947968bd0/examples/dotnet/rideshare/example/Program.cs (about)

     1  using System;
     2  using System.Collections.Generic;
     3  using System.Threading;
     4  using Microsoft.AspNetCore.Http;
     5  
     6  namespace Example;
     7  
     8  using System.Collections;
     9  using Microsoft.AspNetCore.Builder;
    10  
    11  public static class Program
    12  {
    13      public static void Main(string[] args)
    14      {
    15          object globalLock = new();
    16          var strings = new List<string>();
    17          var orderService = new OrderService();
    18          var bikeService = new BikeService(orderService);
    19          var scooterService = new ScooterService(orderService);
    20          var carService = new CarService(orderService);
    21  
    22          var app = WebApplication.CreateBuilder(args).Build();
    23          app.MapGet("/bike", () =>
    24          {
    25              bikeService.Order(1);
    26              return "Bike ordered";
    27          });
    28          app.MapGet("/scooter", () =>
    29          {
    30              scooterService.Order(2);
    31              return "Scooter ordered";
    32          });
    33  
    34          app.MapGet("/car", () =>
    35          {
    36              carService.Order(3);
    37              return "Car ordered";
    38          });
    39          
    40          
    41          app.MapGet("/pyroscope/cpu", (HttpRequest request) =>
    42          {
    43              var enable = request.Query["enable"] == "true";
    44              Pyroscope.Profiler.Instance.SetCPUTrackingEnabled(enable);
    45              return "OK";
    46          });
    47          app.MapGet("/pyroscope/allocation", (HttpRequest request) =>
    48          {
    49              var enable = request.Query["enable"] == "true";
    50              Pyroscope.Profiler.Instance.SetAllocationTrackingEnabled(enable);
    51              return "OK";
    52          });
    53          app.MapGet("/pyroscope/contention", (HttpRequest request) =>
    54          {
    55              var enable = request.Query["enable"] == "true";
    56              Pyroscope.Profiler.Instance.SetContentionTrackingEnabled(enable);
    57              return "OK";
    58          });
    59          app.MapGet("/pyroscope/exception", (HttpRequest request) =>
    60          {
    61              var enable = request.Query["enable"] == "true";
    62              Pyroscope.Profiler.Instance.SetExceptionTrackingEnabled(enable);
    63              return "OK";
    64          });
    65          
    66          
    67          app.MapGet("/playground/allocation", (HttpRequest request) =>
    68          {
    69              var strings = new List<string>();
    70              for (var i = 0; i < 10000; i++)
    71              {
    72                  strings.Add("foobar" + i);
    73              }
    74  
    75              return "OK";
    76          });
    77          app.MapGet("/playground/contention", (HttpRequest request) =>
    78          {
    79              for (var i = 0; i < 100; i++)
    80              {
    81                  lock (globalLock)
    82                  {
    83                      Thread.Sleep(10);
    84                  }
    85              }
    86              return "OK";
    87          });
    88          app.MapGet("/playground/exception", (HttpRequest request) =>
    89          {
    90              for (var i = 0; i < 1000; i++)
    91              {
    92                  try
    93                  {
    94                      throw new Exception("foobar" + i);
    95                  }
    96                  catch (Exception e)
    97                  {
    98                  }
    99              }
   100              return "OK";
   101          });
   102          app.MapGet("/playground/leak", (HttpRequest request) =>
   103          {
   104              for (var i = 0; i < 1000; i++)
   105              {
   106                  strings.Add("leak " + i);
   107              }
   108              return "OK";
   109          });
   110          app.MapGet("/", () =>
   111          {
   112              string env = "";
   113              foreach (DictionaryEntry e in System.Environment.GetEnvironmentVariables())
   114              {
   115                  env += e.Key + " = " + e.Value + "<br>\n";
   116              }
   117              return env;
   118          });
   119  
   120          app.Run();
   121      }
   122  }