Skip to content

Commit 92c4a26

Browse files
Telemetery integration
1 parent 7a0c1df commit 92c4a26

File tree

54 files changed

+552
-150
lines changed

Some content is hidden

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

54 files changed

+552
-150
lines changed

Directory.Build.props

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
<Project>
22
<PropertyGroup>
3-
<TargetFramework>net9.0</TargetFramework>
3+
<TargetFramework>net10.0</TargetFramework>
44
<ImplicitUsings>enable</ImplicitUsings>
55
<Nullable>enable</Nullable>
66
<IsPackable>true</IsPackable>
7-
<Version>2.1.36</Version>
7+
<Version>2.1.71</Version>
88
<Authors>Andrey Serdyuk</Authors>
99
<Company>TaskHub</Company>
1010
<PackageTags>#TaskHub</PackageTags>
1111
<Description>Shared package for TaskHub project.</Description>
1212
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1313
<IncludeProjectReferences>true</IncludeProjectReferences>
1414
<IncludeSymbols>true</IncludeSymbols>
15-
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
1615
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
17-
<PackageReadmeFile Condition="Exists('$(MSBuildThisFileDirectory)README.md')">README.md</PackageReadmeFile>
16+
<PackageOutputPath>..\..\.nuget</PackageOutputPath>
1817
</PropertyGroup>
1918

2019
<ItemGroup>

Shared.slnx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,21 @@
3333
<Folder Name="/Infrastructure/">
3434
<Project Path="TaskHub.Shared.Infrastructure.EfCore/TaskHub.Shared.Infrastructure.EfCore.csproj" />
3535
</Folder>
36+
<Folder Name="/Observability/" />
37+
<Folder Name="/Observability/Metrics/">
38+
<Project Path="TaskHub.Observability.Metrics.Abstractions/TaskHub.Observability.Metrics.Abstractions.csproj" Id="e8810c32-a485-454a-894f-e8ecbec1261d" />
39+
<Project Path="TaskHub.Observability.Metrics/TaskHub.Observability.Metrics.Implementation.csproj" Id="8473e786-daa5-4c07-966b-f72ba91d5618" />
40+
</Folder>
41+
<Folder Name="/Observability/OpenTelemetry/">
42+
<Project Path="TaskHub.Observability.OpenTelemetry/TaskHub.Observability.OpenTelemetry.csproj" />
43+
</Folder>
44+
<Folder Name="/Observability/Traces/">
45+
<Project Path="TaskHub.Observability.Traces.Abstractions/TaskHub.Observability.Traces.Abstractions.csproj" Id="cb48c92f-bb0c-432d-a8e2-03599ef12ae4" />
46+
<Project Path="TaskHub.Observability.Traces/TaskHub.Observability.Traces.Implementation.csproj" />
47+
</Folder>
3648
<Folder Name="/Tools/">
3749
<Project Path="TaskHub.Shared.Bootstraper/TaskHub.Shared.Bootstraper.csproj" Id="7babb715-b9be-447f-90b4-b1b3451df9bf" />
3850
<Project Path="TaskHub.Shared.ConfigurationTools/TaskHub.Shared.ConfigurationTools.csproj" Id="0f21840b-73df-465d-a20e-45983df6e24e" />
39-
<Project Path="TaskHub.Shared.OpenTelemetry/TaskHub.Shared.OpenTelemetry.csproj" Id="b991f047-11eb-4303-9662-bc4ef0fe058f" />
4051
<Project Path="TaskHub.Shared.RateLimiter/TaskHub.Shared.RateLimiter.csproj" Id="6e4d4c7b-0df0-460e-8653-8123bc540fc6" />
4152
<Project Path="TaskHub.Shared.Redis/TaskHub.Shared.Redis.csproj" Id="5fc5938a-a4d2-4fee-99cc-5d9cf54e0645" />
4253
<Project Path="TaskHub.Shared.Swagger/TaskHub.Shared.Swagger.csproj" Id="b945e948-fe0b-4724-8f55-cbd0be83e924" />
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace TaskHub.Observability.Metrics.Abstractions;
2+
3+
public interface IMetricsService
4+
{
5+
void CommandExecuted(string command, string status, string? exceptionType = null);
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace TaskHub.Observability.Metrics.Abstractions;
2+
3+
public interface IMetricsServiceFactory
4+
{
5+
IMetricsService Create(MetricsOptions options);
6+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace TaskHub.Observability.Metrics.Abstractions;
2+
3+
public sealed class MetricsOptions
4+
{
5+
public string MeterName { get; set; } = "TaskHub.CommandBus";
6+
public string MetricName { get; set; } = "taskhub_command_total";
7+
public string Unit { get; set; } = "commands";
8+
public string Description { get; set; } = "Total number of commands.";
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net10.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
</PropertyGroup>
8+
9+
</Project>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Diagnostics;
2+
using System.Diagnostics.Metrics;
3+
using TaskHub.Observability.Metrics.Abstractions;
4+
5+
namespace TaskHub.Observability.Metrics.Implementation;
6+
7+
public sealed class MetricsService : IMetricsService
8+
{
9+
private readonly Counter<long> counter;
10+
11+
public MetricsService(IMeterFactory meterFactory, MetricsOptions options)
12+
{
13+
var meter = meterFactory.Create(options.MeterName);
14+
counter = meter.CreateCounter<long>(options.MetricName, options.Unit, options.Description);
15+
}
16+
17+
public void CommandExecuted(string command, string status, string? exceptionType = null)
18+
{
19+
var tags = new TagList
20+
{
21+
{ "command", command },
22+
{ "status", status }
23+
};
24+
25+
if (!string.IsNullOrEmpty(exceptionType))
26+
{
27+
tags.Add("exception_type", exceptionType);
28+
}
29+
30+
counter.Add(1, tags);
31+
}
32+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Diagnostics.Metrics;
2+
using TaskHub.Observability.Metrics.Abstractions;
3+
4+
namespace TaskHub.Observability.Metrics.Implementation;
5+
6+
public sealed class MetricsServiceFactory(IMeterFactory meterFactory) : IMetricsServiceFactory
7+
{
8+
public IMetricsService Create(MetricsOptions options) => new MetricsService(meterFactory, options);
9+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<ItemGroup>
3+
<ProjectReference Include="..\TaskHub.Observability.Metrics.Abstractions\TaskHub.Observability.Metrics.Abstractions.csproj" />
4+
</ItemGroup>
5+
</Project>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
namespace TaskHub.Observability.OpenTelemetry;
2+
3+
public class Tools
4+
{
5+
public static string ExtractTableName(string sql, string verb)
6+
{
7+
sql = sql.ToUpperInvariant();
8+
var keyword = verb switch
9+
{
10+
"SELECT" => "FROM",
11+
"UPDATE" => "UPDATE",
12+
"INSERT" => "INTO",
13+
"DELETE" => "FROM",
14+
_ => null
15+
};
16+
17+
if (keyword is null)
18+
{
19+
return string.Empty;
20+
}
21+
22+
var idx = sql.IndexOf(keyword + " ", StringComparison.Ordinal);
23+
if (idx < 0)
24+
{
25+
return string.Empty;
26+
}
27+
28+
var start = idx + keyword.Length + 1;
29+
var end = sql.IndexOfAny([' ', '\r', '\n', '\t', ';'], start);
30+
if (end < 0) end = sql.Length;
31+
32+
return sql[start..end];
33+
}
34+
}

0 commit comments

Comments
 (0)