Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Common/ConnectorActivityFactory.cs
T
Adam Hathcock 4f04e9e1b5 Use Metrics in Connectors (#296)
* add metrics to host apps

* merge fixes and compiles

* Use ME.Console and OTel for logging to correlate

* clean up

* clean up for metrics

* fix self-review comments

* fix seq initialization

* clean up for http traces and rhino 8

* use latest SDK

* formatting
2024-10-14 13:36:07 +00:00

51 lines
1.7 KiB
C#

using System.Runtime.CompilerServices;
using Speckle.Connectors.Logging;
using Speckle.Sdk;
using Speckle.Sdk.Common;
using Speckle.Sdk.Logging;
namespace Speckle.Connectors.Common;
public sealed class ConnectorActivityFactory(ISpeckleApplication application) : ISdkActivityFactory, IDisposable
{
private readonly LoggingActivityFactory _loggingActivityFactory = new();
public void SetTag(string key, object? value) => _loggingActivityFactory.SetTag(key, value);
public void Dispose() => _loggingActivityFactory.Dispose();
public ISdkActivity? Start(string? name = default, [CallerMemberName] string source = "")
{
var activity = _loggingActivityFactory.Start(application.ApplicationAndVersion + " " + (name ?? source));
if (activity is null)
{
return null;
}
return new ConnectorActivity(activity.NotNull());
}
private readonly struct ConnectorActivity(LoggingActivity activity) : ISdkActivity
{
public void Dispose() => activity.Dispose();
public void SetTag(string key, object? value) => activity.SetTag(key, value);
public void RecordException(Exception e) => activity.RecordException(e);
public string TraceId => activity.TraceId;
public void SetStatus(SdkActivityStatusCode code) =>
activity.SetStatus(
code switch
{
SdkActivityStatusCode.Error => LoggingActivityStatusCode.Error,
SdkActivityStatusCode.Unset => LoggingActivityStatusCode.Unset,
SdkActivityStatusCode.Ok => LoggingActivityStatusCode.Ok,
_ => throw new ArgumentOutOfRangeException(nameof(code), code, null)
}
);
public void InjectHeaders(Action<string, string> header) => activity.InjectHeaders(header);
}
}