Skip to content

Commit e9ad5eb

Browse files
authored
Adds basic OTel Metric support to fsautocomplete (#1283)
1 parent dd9381d commit e9ad5eb

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

paket.dependencies

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ nuget Ionide.LanguageServerProtocol >= 0.4.23
5656
nuget Microsoft.Extensions.Caching.Memory
5757
nuget OpenTelemetry.Api >= 1.3.2
5858
nuget OpenTelemetry.Exporter.OpenTelemetryProtocol >= 1.3.2 # 1.4 bumps to 7.0 versions of System.Diagnostics libs, so can't use it
59+
nuget OpenTelemetry.Instrumentation.Runtime
5960
nuget LinkDotNet.StringBuilder 1.18.0
6061
nuget CommunityToolkit.HighPerformance
6162
nuget System.Security.Cryptography.Pkcs 6.0.4

paket.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,8 @@ NUGET
378378
Grpc (>= 2.44 < 3.0) - restriction: || (&& (== net6.0) (>= net462)) (&& (== net6.0) (< netstandard2.1)) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< netstandard2.1)) (&& (== net8.0) (>= net462)) (&& (== net8.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net462))
379379
Grpc.Net.Client (>= 2.43 < 3.0) - restriction: || (== net6.0) (== net7.0) (== net8.0) (&& (== netstandard2.0) (>= netstandard2.1)) (== netstandard2.1)
380380
OpenTelemetry (>= 1.3.2)
381+
OpenTelemetry.Instrumentation.Runtime (1.0)
382+
OpenTelemetry.Api (>= 1.3 < 2.0)
381383
Perfolizer (0.2.1)
382384
System.Memory (>= 4.5.3)
383385
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.2)

src/FsAutoComplete/Parser.fs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ open FsAutoComplete.Lsp
1414
open OpenTelemetry
1515
open OpenTelemetry.Resources
1616
open OpenTelemetry.Trace
17+
open OpenTelemetry.Metrics
1718

1819
module Parser =
1920
open FsAutoComplete.Core
2021
open System.Diagnostics
2122

2223
let mutable tracerProvider = Unchecked.defaultof<_>
24+
let mutable meterProvider = Unchecked.defaultof<_>
2325

2426
[<Struct>]
2527
type Pos = { Line: int; Column: int }
@@ -194,19 +196,33 @@ module Parser =
194196
let configureOTel =
195197
Invocation.InvocationMiddleware(fun ctx next ->
196198

199+
200+
197201
if ctx.ParseResult.GetValueForOption otelTracingOption then
202+
198203
let serviceName = FsAutoComplete.Utils.Tracing.serviceName
199204
let version = FsAutoComplete.Utils.Version.info().Version
200205

206+
let resourceBuilder =
207+
ResourceBuilder
208+
.CreateDefault()
209+
.AddService(serviceName = serviceName, serviceVersion = version)
210+
211+
212+
meterProvider <-
213+
Sdk
214+
.CreateMeterProviderBuilder()
215+
.AddMeter()
216+
.AddRuntimeInstrumentation()
217+
.SetResourceBuilder(resourceBuilder)
218+
.AddOtlpExporter()
219+
.Build()
220+
201221
tracerProvider <-
202222
Sdk
203223
.CreateTracerProviderBuilder()
204224
.AddSource(serviceName, Tracing.fscServiceName)
205-
.SetResourceBuilder(
206-
ResourceBuilder
207-
.CreateDefault()
208-
.AddService(serviceName = serviceName, serviceVersion = version)
209-
)
225+
.SetResourceBuilder(resourceBuilder)
210226
.AddOtlpExporter()
211227
.Build()
212228

src/FsAutoComplete/paket.references

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ System.CommandLine
1818
FSharp.Data.Adaptive
1919
Microsoft.Extensions.Caching.Memory
2020
OpenTelemetry.Exporter.OpenTelemetryProtocol
21+
OpenTelemetry.Instrumentation.Runtime
2122
Microsoft.CodeAnalysis
2223
LinkDotNet.StringBuilder
2324
CommunityToolkit.HighPerformance

0 commit comments

Comments
 (0)