Skip to content

Commit 4ebbcf8

Browse files
authored
1713 add app metrics and insights using opentelemetry and prometheus (#1633)
Closes SoftUni-Internal/exam-systems-issues#1713 **Summary of the changes made**: 1. Updated `clientName` formatting in `ServiceCollectionExtensions` to use underscores for consistency. 2. Modified OTEL exporter endpoint configuration to use `127.0.0.1` instead of `localhost` to minimize hostname resolution issues. 3. Updated Redis connection to use IP instead of hostname, improved RabbitMQ setup with client-named connections for traceability, and upgraded MassTransit.RabbitMQ to version 8.4.1. 4. Reverted OTEL, Redis, and RabbitMQ configurations to use `localhost` for better readability. 5. Made adjustments to ports, endpoints, and configurations for dashboard and Aspire dashboard usage during local development.
1 parent 9aad1f5 commit 4ebbcf8

File tree

43 files changed

+1666
-606
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1666
-606
lines changed

Common/OJS.Common/Constants/ServiceConstants.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ public static class ServiceConstants
55
public const string WorkersQueueName = "OJS.Servers.Worker.Consumers.SubmissionsForProcessingConsumer";
66

77
// HttpClients
8-
public const string LokiHttpClientName = "Loki";
98
public const string SvnHttpClientName = "Svn";
109
public const string DefaultHttpClientName = "Default";
1110

Common/OJS.Common/Enumerations/OpenAiModels.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
namespace OJS.Common.Enumerations;
1+
// ReSharper disable InconsistentNaming
2+
namespace OJS.Common.Enumerations;
23

34
public enum OpenAIModels
45
{

Docker/envs/common.env

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
# Environment Configuration
22
ASPNETCORE_URLS=http://*:80
3-
DOTNET_RUNNING_IN_CONTAINER=true
3+
DOTNET_RUNNING_IN_CONTAINER=true
4+
5+
OTEL_EXPORTER_OTLP_ENDPOINT=http://dashboard:18889

Docker/envs/worker.env

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
ASPNETCORE_ENVIRONMENT=Production
2-
DOTNET_RUNNING_IN_CONTAINER=true
2+
DOTNET_RUNNING_IN_CONTAINER=true
3+
OTEL_RESOURCE_ATTRIBUTES=service.name=worker, deployment.environment=local

Servers/Administration/OJS.Servers.Administration/Consumers/RetestSubmissionConsumer.cs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,30 @@ namespace OJS.Servers.Administration.Consumers;
44
using MassTransit;
55
using Microsoft.Extensions.Logging;
66
using OJS.PubSub.Worker.Models.Submissions;
7+
using OJS.Servers.Infrastructure.Telemetry;
78
using OJS.Services.Administration.Business.Submissions;
9+
using OJS.Services.Common.Telemetry;
810
using OJS.Services.Infrastructure.Constants;
911

10-
public class RetestSubmissionConsumer : IConsumer<RetestSubmissionPubSubModel>
12+
public class RetestSubmissionConsumer(
13+
ISubmissionsBusinessService submissionsBusinessService,
14+
ILogger<RetestSubmissionConsumer> logger,
15+
ITracingService tracingService)
16+
: IConsumer<RetestSubmissionPubSubModel>
1117
{
12-
private readonly ISubmissionsBusinessService submissionsBusinessService;
13-
private readonly ILogger<RetestSubmissionConsumer> logger;
14-
15-
public RetestSubmissionConsumer(
16-
ISubmissionsBusinessService submissionsBusinessService,
17-
ILogger<RetestSubmissionConsumer> logger)
18-
{
19-
this.submissionsBusinessService = submissionsBusinessService;
20-
this.logger = logger;
21-
}
22-
2318
public async Task Consume(ConsumeContext<RetestSubmissionPubSubModel> context)
24-
{
25-
this.logger.LogReceivedRetestSubmission(context.Message.Id);
26-
await this.submissionsBusinessService.Retest(context.Message.Id, context.Message.Verbosely);
27-
this.logger.LogRetestedSubmission(context.Message.Id);
28-
}
19+
=> await tracingService.TraceAsync(
20+
OjsActivitySources.submissions,
21+
OjsActivitySources.SubmissionActivities.Retest,
22+
async activity =>
23+
{
24+
logger.LogReceivedRetestSubmission(context.Message.Id);
25+
await submissionsBusinessService.Retest(context.Message.Id, context.Message.Verbosely);
26+
activity?.SetTag("submission.verbosely", context.Message.Verbosely);
27+
activity?.SetTag("retest.success", true);
28+
logger.LogRetestedSubmission(context.Message.Id);
29+
},
30+
tags: null,
31+
BusinessContext.ForSubmission(context.Message.Id),
32+
continueFromMessageHeaders: context);
2933
}

Servers/Administration/OJS.Servers.Administration/Extensions/ServiceCollectionExtensions.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ namespace OJS.Servers.Administration.Extensions;
1010
using OJS.Common.Exceptions;
1111
using OJS.Data;
1212
using OJS.Data.Models.Users;
13-
using OJS.Servers.Administration.Consumers;
1413
using OJS.Servers.Administration.Middleware;
1514
using OJS.Servers.Infrastructure.Extensions;
1615
using OJS.Services.Administration.Business.Contests.Validators;

Servers/Administration/OJS.Servers.Administration/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ public static void Main(string[] args)
1111
var builder = WebApplication.CreateBuilder(args);
1212

1313
builder.Services.ConfigureServices(builder.Configuration, builder.Environment);
14-
builder.Host.UseLogger(builder.Environment);
14+
15+
builder.ConfigureOpenTelemetry();
1516

1617
var app = builder.Build();
1718

Servers/Administration/OJS.Servers.Administration/Properties/launchSettings.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
"launchBrowser": false,
2222
"applicationUrl": "http://localhost:5001",
2323
"environmentVariables": {
24-
"ASPNETCORE_ENVIRONMENT": "Development"
24+
"ASPNETCORE_ENVIRONMENT": "Development",
25+
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://127.0.0.1:18889",
26+
"OTEL_RESOURCE_ATTRIBUTES": "service.name=administration-api, deployment.environment=local"
2527
}
2628
}
2729
}

Servers/Administration/OJS.Servers.Administration/appsettings.Development.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,8 @@
22
"ConnectionStrings": {
33
"DefaultConnection": "Data Source=localhost; Initial Catalog=OpenJudgeSystem; Integrated Security=true; TrustServerCertificate=True"
44
},
5-
"ApplicationSettings": {
6-
"OtlpCollectorBaseUrl": "http://localhost:3100"
7-
},
85
"Redis": {
9-
"ConnectionString": "localhost,password=redisPass123,ConnectTimeout=10000,abortConnect=false"
6+
"ConnectionString": "127.0.0.1,password=redisPass123,ConnectTimeout=10000,abortConnect=false"
107
},
118
"MessageQueue": {
129
"Host": "localhost"
@@ -31,11 +28,11 @@
3128
},
3229
{
3330
"Name": "UI API",
34-
"Uri": "http://localhost:5010/api/health"
31+
"Uri": "http://127.0.0.1:5010/api/health"
3532
},
3633
{
3734
"Name": "Worker API",
38-
"Uri": "http://localhost:8003/api/health"
35+
"Uri": "http://127.0.0.1:8003/api/health"
3936
}
4037
],
4138
"EvaluationTimeInSeconds": 3600

Servers/Administration/OJS.Servers.Administration/appsettings.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
"ApplicationSettings": {
66
"SharedAuthCookieDomain": "localhost",
77
"ApiKey": "12345",
8-
"OtlpCollectorBaseUrl": "http://loki:3100",
9-
"OtlpCollectorLogsPushPath": "/otlp/v1/logs",
108
"SecondsBetweenContestLimitsAdjustment": 120,
119
"SecondsBetweenWorkersBusyRatioPolling": 20
1210
},
@@ -76,11 +74,13 @@
7674
"EvaluationTimeInSeconds": 10,
7775
"MinimumSecondsBetweenFailureNotifications": 60
7876
},
79-
"Logging": {
80-
"LogLevel": {
77+
"Serilog": {
78+
"MinimumLevel": {
8179
"Default": "Information",
82-
"Microsoft": "Warning",
83-
"Microsoft.Hosting.Lifetime": "Information"
80+
"Override": {
81+
"System.Net.Http.HttpClient": "Warning",
82+
"Microsoft.AspNetCore.Hosting.Diagnostics": "Information"
83+
}
8484
}
8585
},
8686
"Http": {

0 commit comments

Comments
 (0)