Code
·
73 lines
·
2738 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73using Microsoft.AspNetCore.Mvc;
namespace SeriLoog.Controllers;
[ApiController]
[Route("api/[controller]")]
public sealed class DemoController : ControllerBase
{
private readonly ILogger<DemoController> _logger;
private static readonly string[] Users = { "alphons", "marieke", "jeroen", "sanne", "kees" };
private static readonly string[] Orders = { "ORD-1001", "ORD-1002", "ORD-1003", "ORD-1004" };
private static readonly Random Rng = new();
public DemoController(ILogger<DemoController> logger)
{
_logger = logger;
}
[HttpPost("generate")]
public IActionResult Generate([FromQuery] int count = 25)
{
count = Math.Clamp(count, 1, 500);
for (var i = 0; i < count; i++)
{
var user = Users[Rng.Next(Users.Length)];
var order = Orders[Rng.Next(Orders.Length)];
var durationMs = Rng.Next(5, 2000);
switch (Rng.Next(0, 8))
{
case 0:
_logger.LogTrace("Cache lookup for key {CacheKey} took {DurationMs}ms", $"user:{user}", durationMs);
break;
case 1:
_logger.LogDebug("Processing order {OrderId} for user {User}", order, user);
break;
case 2:
case 3:
_logger.LogInformation("User {User} placed order {OrderId} worth {Amount:C}", user, order, Rng.Next(10, 500));
break;
case 4:
_logger.LogWarning("Order {OrderId} for {User} is taking longer than expected ({DurationMs}ms)", order, user, durationMs);
break;
case 5:
try
{
throw new InvalidOperationException($"Payment gateway timeout for order {order}");
}
catch (Exception ex)
{
_logger.LogError(ex, "Payment failed for order {OrderId} and user {User}", order, user);
}
break;
case 6:
try
{
throw new ApplicationException($"Unhandled exception while shipping {order}");
}
catch (Exception ex)
{
_logger.LogCritical(ex, "Fatal error shipping order {OrderId}", order);
}
break;
default:
_logger.LogInformation("Health check ok at {CheckedAt}", DateTimeOffset.UtcNow);
break;
}
}
return Ok(new { generated = count });
}
}