Scenarios/Testing-Scalability/dotnet/Controllers/RandomNumbersController.cs (60 lines of code) (raw):

using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using System.Diagnostics; namespace SimpleApi.Controllers; [ApiController] [Route("[controller]")] public class RandomNumbersController : ControllerBase { private const int DefaultMillionsToGenerate = 10; private const int Factor = 1000000; private readonly ILogger<RandomNumbersController> _logger; private static Random random = new Random(); private int _LazyNumbersToGenerate = -1; private int LazyNumbersToGenerate { get { if (_LazyNumbersToGenerate == -1) _LazyNumbersToGenerate = InitializeNumbersToGenerate(); return _LazyNumbersToGenerate; } } private int InitializeNumbersToGenerate() { string? toGenerate = Environment.GetEnvironmentVariable("MILLION_NUMBERS_TO_GENERATE"); if (toGenerate != null) { try { int retVal = int.Parse(toGenerate); _logger.LogDebug("Creating " + retVal + " random numbers."); return retVal; } catch (Exception e) { _logger.LogError("Could not parse value of MILLION_NUMBERS_TO_GENERATE as string; using default value " + DefaultMillionsToGenerate + "(" + e.Message + ")"); return DefaultMillionsToGenerate; } } else { _logger.LogDebug("No value of MILLION_NUMBERS_TO_GENERATE given; using default value " + DefaultMillionsToGenerate + "."); return DefaultMillionsToGenerate; } } public RandomNumbersController(ILogger<RandomNumbersController> logger) { _logger = logger; } [HttpGet(Name = "RandomNumbers")] public IActionResult Get([FromQuery] int numbers) { if (numbers == 0) numbers = LazyNumbersToGenerate; int toGenerate = Factor * numbers; Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); for (int i = 0 ; i < toGenerate ; i++) { random.Next(); } stopWatch.Stop(); return Ok(new { NumbersGenerated = toGenerate, TimeUsed = stopWatch.Elapsed.TotalMilliseconds }); } }