[Examples] Add F# example#6875
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6875 +/- ##
==========================================
- Coverage 88.54% 88.45% -0.09%
==========================================
Files 263 263
Lines 12383 12383
==========================================
- Hits 10964 10953 -11
- Misses 1419 1430 +11
Flags with carried forward coverage won't be shown. Click here to find out more. |
6dbd1b8 to
768ebf1
Compare
baronfel
left a comment
There was a problem hiding this comment.
Looks mostly good, but I have a couple tiny notes to clean it up a bit.
f2e58ca to
5f82e17
Compare
There was a problem hiding this comment.
Pull request overview
Adds a new F# ASP.NET Core Web API example demonstrating OpenTelemetry logging, metrics, and tracing, aligning with the existing C# AspNetCore example and wiring it into the repo solution/build.
Changes:
- Introduces a new F# example app (project, program, controller, instrumentation helper, model) with OTLP/Console/Prometheus switching via configuration.
- Adds supporting example assets (README, appsettings, docker-compose for grafana/otel-lgtm).
- Wires the new example into the solution and central package versions.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| examples/FSharp/docker-compose.yaml | Adds docker-compose to run grafana/otel-lgtm dependencies for the example. |
| examples/FSharp/appsettings.json | Adds configuration for exporters, OTLP endpoint, and instrumentation options. |
| examples/FSharp/WeatherForecast.fs | Adds the sample model used by the controller. |
| examples/FSharp/README.md | Documents running the F# example and optional OTLP export + Docker deps. |
| examples/FSharp/Program.fs | Configures OpenTelemetry logging/metrics/tracing and ASP.NET Core pipeline. |
| examples/FSharp/InstrumentationSource.fs | Adds ActivitySource/Meter/counter holder for manual instrumentation. |
| examples/FSharp/Examples.FSharp.fsproj | Adds the new F# example project and dependencies. |
| examples/FSharp/Controllers/WeatherForecastController.fs | Adds the sample controller emitting telemetry and logs. |
| OpenTelemetry.slnx | Adds the new F# example project to the solution. |
| Directory.Packages.props | Adds central package version entry for FSharp.Core. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Add an example for an ASP.NET Core application using F#.
5f82e17 to
2dc4d61
Compare
|
The intention here was just to have a F# example, rather than have an F# version of every C# example. This was driven by conversation with a user at OTel unplugged that the .NET SDK was just for C#, so the F# example was intended to illustrate that's not the case. |
|
https://github.com/census-instrumentation/opencensus-csharp All of our predecessors named the repo "csharp", but we named it "dotnet" 🤣 indicating it should work for c# or f# . (Don't think this was a conscious decision though. I was not involved in the repo at the creation time).
Unless this is a more widespread feedback, I suggest to avoid F# example. But no strong objections if we want a single F# example, not for everything. |
I think the example is also good to help validate that it does indeed work with F#. It's not the case here, but for example with Polly we had feedback from users that it was more difficult to use in F# and VB.NET compared to C# because of a lack of support for This lead to us adding documentation and samples to help such users. We didn't go further than that due to a lack of feedback/demand. |
| // Copyright The OpenTelemetry Authors | ||
| // SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| namespace Examples.AspNetCore.Controllers |
There was a problem hiding this comment.
Do we have a sense of whether an AspNetCore app makes the most sense for the example? Not being very familiar with F#, I'm not sure if F# AspNetCore apps are common. Maybe F# is more commonly used in the context of a console app or something else?
|
I agree with the sentiments expressed that we do not want to maintain a bunch of different F# examples. @martincostello had shared some feedback he had heard with me that using OpenTelemetry .NET with F# was awkward for F# developers. Not being an F# developer myself, I'm curious if anyone thinks this example either highlights the awkwardness or demonstrates that it is actually not awkward? Either way I think a single F# example may prove useful for folks especially if it dispels any awkwardness. |
Changes
Add an example for an ASP.NET Core application using F#.
This was inspired by a conversation @alanwest and myself had at OTel Unplugged with an end-user who wondered why there wasn't an F# SDK for OpenTelemetry.
The example here is based on the AspNetCore example, and then converted with the help of GitHub Copilot. I'm no F# developer, so it might not be as idiomatic as it could be.
While working on this I found some issues with the Docker Compose setup copied from the ASP.NET Core example
so I'm going to park this for now while I fix that#6877.Feedback welcome.
Merge requirement checklist
Unit tests added/updatedAppropriateCHANGELOG.mdfiles updated for non-trivial changesChanges in public API reviewed (if applicable)