Skip to content

Commit 314af0f

Browse files
authored
Fix Npgsql Metrics (dotnet#658)
* Restore disabled counter This was missed in dotnet#648 Addresses dotnet#645 * Add view to Npgsql's histograms because they are in seconds and not ms. Fix dotnet#641
1 parent 09cfdf6 commit 314af0f

File tree

4 files changed

+33
-11
lines changed

4 files changed

+33
-11
lines changed

src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.csproj

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
<PackageIconFullPath>$(SharedDir)PostgreSQL_logo.3colors.540x557.png</PackageIconFullPath>
99
</PropertyGroup>
1010

11+
<ItemGroup>
12+
<Compile Include="..\Aspire.Npgsql\NpgsqlCommon.cs" />
13+
</ItemGroup>
14+
1115
<ItemGroup>
1216
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" />
1317
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" />

src/Components/Aspire.Npgsql.EntityFrameworkCore.PostgreSQL/AspireEFPostgreSqlExtensions.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ public static partial class AspireEFPostgreSqlExtensions
122122
eventCountersInstrumentationOptions.AddEventSources("Microsoft.EntityFrameworkCore");
123123
});
124124

125-
// https://github.com/npgsql/npgsql/blob/4c9921de2dfb48fb5a488787fc7422add3553f50/src/Npgsql/MetricsReporter.cs#L48
126-
meterProviderBuilder.AddMeter("Npgsql");
125+
NpgsqlCommon.AddNpgsqlMetrics(meterProviderBuilder);
127126
});
128127
}
129128

src/Components/Aspire.Npgsql/AspirePostgreSqlNpgsqlExtensions.cs

+1-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using Microsoft.Extensions.Diagnostics.HealthChecks;
1010
using Microsoft.Extensions.Logging;
1111
using Npgsql;
12-
using OpenTelemetry.Metrics;
1312

1413
namespace Microsoft.Extensions.Hosting;
1514

@@ -98,14 +97,7 @@ private static void AddNpgsqlDataSource(IHostApplicationBuilder builder, string
9897
if (settings.Metrics)
9998
{
10099
builder.Services.AddOpenTelemetry()
101-
.WithMetrics(meterProviderBuilder =>
102-
{
103-
// https://github.com/npgsql/npgsql/blob/4c9921de2dfb48fb5a488787fc7422add3553f50/src/Npgsql/MetricsReporter.cs#L48
104-
meterProviderBuilder.AddMeter("Npgsql");
105-
106-
// disable "prepared_ratio" until https://github.com/dotnet/aspire/issues/629 is fixed.
107-
meterProviderBuilder.AddView(instrumentName: "db.client.commands.prepared_ratio", MetricStreamConfiguration.Drop);
108-
});
100+
.WithMetrics(NpgsqlCommon.AddNpgsqlMetrics);
109101
}
110102
}
111103

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using OpenTelemetry.Metrics;
5+
6+
internal static class NpgsqlCommon
7+
{
8+
public static void AddNpgsqlMetrics(MeterProviderBuilder meterProviderBuilder)
9+
{
10+
double[] secondsBuckets = [0, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10];
11+
12+
// https://github.com/npgsql/npgsql/blob/4c9921de2dfb48fb5a488787fc7422add3553f50/src/Npgsql/MetricsReporter.cs#L48
13+
meterProviderBuilder
14+
.AddMeter("Npgsql")
15+
// Npgsql's histograms are in seconds, not milliseconds.
16+
.AddView("db.client.commands.duration",
17+
new ExplicitBucketHistogramConfiguration
18+
{
19+
Boundaries = secondsBuckets
20+
})
21+
.AddView("db.client.connections.create_time",
22+
new ExplicitBucketHistogramConfiguration
23+
{
24+
Boundaries = secondsBuckets
25+
});
26+
}
27+
}

0 commit comments

Comments
 (0)