Skip to content

Commit

Permalink
Aspire: add settinsg to configure the default FdbTracingOptions
Browse files Browse the repository at this point in the history
- Default tracing options in the AppHost will be applied to all processed that use the fdb resource.
- ex: WithDefaults(...., tracing: FdbTracingOptions.All) can be used to temporarily enable ALL tracing during local dev
  • Loading branch information
KrzysFR committed Jul 31, 2024
1 parent 94f2519 commit 3976314
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
4 changes: 3 additions & 1 deletion Aspire.FoundationDB.Hosting/FdbAspireHostingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,14 +267,16 @@ public static IResourceBuilder<FdbClusterResource> WithNativeLibrary(this IResou
/// <param name="timeout">Default transaction timeout (or TimeSpan.Zero for infinite timeout)</param>
/// <param name="retryLimit">Default transaction max retry limit (or 0 for infinite retries)</param>
/// <param name="readOnly">If true, the process will only have read-only access to the FoundationDB cluster.</param>
/// <param name="tracing">Default tracing options</param>
/// <remarks>These settings will be applied to the default <see cref="FdbConnectionOptions">connection options</see>, and can be overriden per transaction, or during the program startup.</remarks>
public static IResourceBuilder<FdbClusterResource> WithDefaults(this IResourceBuilder<FdbClusterResource> builder, TimeSpan? timeout = null, int? retryLimit = null, bool? readOnly = null)
public static IResourceBuilder<FdbClusterResource> WithDefaults(this IResourceBuilder<FdbClusterResource> builder, TimeSpan? timeout = null, int? retryLimit = null, bool? readOnly = null, FdbTracingOptions? tracing = null)
{
Contract.NotNull(builder);
var fdbCluster = builder.Resource;
if (timeout != null) fdbCluster.DefaultTimeout = timeout;
if (retryLimit != null) fdbCluster.DefaultRetryLimit = retryLimit;
if (readOnly != null) fdbCluster.ReadOnly = readOnly;
if (tracing != null) fdbCluster.DefaultTracing = tracing;
return builder;
}

Expand Down
9 changes: 9 additions & 0 deletions Aspire.FoundationDB.Hosting/FdbClusterResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ public FdbClusterResource(string name, string? entrypoint = null) : base(name, e
/// <remarks>See <see cref="IFdbTransactionOptions.RetryLimit"/> for more information.</remarks>
public int? DefaultRetryLimit { get; set; }

/// <summary>Default tracing options</summary>
/// <remarks>See <see cref="IFdbTransactionOptions.Tracing"/> for more information.</remarks>
public FdbTracingOptions? DefaultTracing { get; set; }

/// <summary>Specifies if the FoundationDB cluster is mounted in read-only mode by default.</summary>
/// <remarks>See <see cref="FdbConnectionOptions.ReadOnly"/> for more information.</remarks>
public bool? ReadOnly { get; set; }
Expand Down Expand Up @@ -132,6 +136,11 @@ private string GetConnectionString()
builder["DefaultRetryLimit"] = this.DefaultRetryLimit.Value.ToString(CultureInfo.InvariantCulture);
}

if (this.DefaultTracing.HasValue)
{
builder["DefaultTracing"] = ((int) this.DefaultTracing.Value).ToString(CultureInfo.InvariantCulture);
}

if (this.ReadOnly == true)
{
builder["ReadOnly"] = true;
Expand Down
18 changes: 18 additions & 0 deletions Aspire.FoundationDB/FdbAspireComponentExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,24 @@ private static IHostApplicationBuilder AddFoundationDb(this IHostApplicationBuil
options.ConnectionOptions.DefaultRetryLimit = settings.DefaultRetryLimit.Value;
}
// DefaultTracing=(flags)
if (cnx != null && cnx.ContainsKey("DefaultTracing"))
{
if (!int.TryParse((string) cnx["DefaultTracing"], out var count))
{
throw new InvalidOperationException("Malformed default tracing options");
}
if (count < 0)
{
throw new InvalidOperationException("Default tracing options must be a positive value");
}
options.ConnectionOptions.DefaultTracing = (FdbTracingOptions) count;
}
else if (settings.DefaultTracing != null)
{
options.ConnectionOptions.DefaultTracing = (FdbTracingOptions) settings.DefaultTracing.Value;
}
// run additional custom configuration
configureProvider?.Invoke(options);
});
Expand Down
11 changes: 9 additions & 2 deletions Aspire.FoundationDB/FdbClientSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,23 @@ public sealed class FdbClientSettings
/// <remarks>See <see cref="IFdbTransactionOptions.RetryLimit"/> for more information.</remarks>
public int? DefaultRetryLimit { get; set; }

/// <summary>Overrides the default tracing options that should be used by this instance</summary>
/// <remarks>
/// <para>See <see cref="IFdbTransactionOptions.Tracing"/> for more information.</para>
/// <para>The default tracing options are <see cref="FdbTracingOptions.RecordTransactions"/> and <see cref="FdbTracingOptions.RecordOperations"/></para>
/// </remarks>
public int? DefaultTracing { get; set; }

/// <summary>Gets or sets a boolean value that indicates whether the FoundationDB health check is disabled or not.</summary>
/// <remarks><para>Enabled by default.</para></remarks>
public bool DisableHealthChecks { get; set; }

/// <summary>Gets or sets a boolean value that indicates whether the OpenTelemetry tracing is disabled or not.</summary>
/// <remarks><para>Enabled by default.</para></remarks>
/// <remarks><para>Tracing is enabled by default.</para></remarks>
public bool DisableTracing { get; set; }

/// <summary>Gets or sets a boolean value that indicates whether the OpenTelemetry metrics are disabled or not.</summary>
/// <remarks><para>Enabled by default.</para></remarks>
/// <remarks><para>Metrics are enabled by default.</para></remarks>
public bool DisableMetrics { get; set; }

}
Expand Down

0 comments on commit 3976314

Please sign in to comment.