Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Common/Connector.cs
T
Jedd Morgan 7860c44f4e feat(api)!: Implement new packfile based sends via SendPipline (aka DuckDB changes) (#1277)
* Dim/quack lets go (#1275)

* Add model ingestion to sharp connectors

* correct ingestion message

* Progress

* grasshopper

* GH exception messages

* fix GH

* file names

* revit file name

* grasshopper file names

* etabs file names

* delete tests

* tekla maybe

* ingestion  scope

* bad boolean logic

* Longer TimeSpan

* wip upload pipe

* 10s

* passthrough ingestion id

* happy hack time: prevent ingestion completion

this is handled server-side in the processing logic.

* add packfile send endpoint detection and routing

Route to SendViaPackfile when the server supports the upload-signing
endpoint (POST probe, 404 = unsupported) and a continuous traversal
builder is registered.

* Adds Continuous Traversal Builder

Introduces a Continuous Traversal Builder to manage the conversion and processing of Revit elements within a Send Pipeline.

---------

Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>

* feat(api): DI Refactor for Duck DB + Gergo's API endpoint changes (#1282)

* Di

* undo accidental change

* Feat (duck): dui ingestion updates post upload (#1295)

* Pass optional ingestion id to DUI

* Make ingestion id null for the SendViaIngestion, see the note :)

* feat!: Duckdev progress reporitng (#1296)

* Di

* throwaway from laptop

* Progress reporting

* Use matching logger

* Revit and revert rhino unpacker progress

* more revertion

* make pr even cleaner

* and this one

* fix build issues with other connectors

* SDK nuget (#1299)

* Bump to 3.14.0-alpha.2

* Feat(duck): grasshopper (#1297)

* Duck x Grasshopper - who would win?

* Fix registration for new builder

* missing imports

* return version id grasshopper

* Align sync resource to sync

---------

Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>

* Bump SDK

* feat(importer): rhino file importer changes for packfile (#1301)

* rhino importer changes

* correct deps

* Bump SDK

* Fix build issues

* ditto

* Fix build issue

* Lower standards

* Fix build

* feat: duck for acad, civil, navis, tekla, etabs (#1300)

* duck: acad, civil, etabs, tekla, navis and bump channels to 10.0.0

* notes

* fix conflicts

* more conflicts

* Ready for testing

* fix(duck): Fix send caching (#1302)

* potential fix

* undo-rhino chnages

* fix xml comment

* amended comment

* revit

* Fix build

* Aligned converting message

* fix: reoccurring object references

* Bump sdk and resolve merge conflict issues

* Merge pull request #1317 from specklesystems/jrm/importer-tracing

feat(otel): Tracing and OTEL changes for Rhino importer

* Fix revit linked model progress (#1312)

* Revert otel packages

* bump SDK

* Trace unpacking groups

* Align trace context nullability with app

* Disable send caching in Navisworks

* comments

* Update FileimportPayload.cs

* fix using directive

---------

Co-authored-by: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>

* Fix merge conflicts

---------

Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com>
Co-authored-by: Oğuzhan Koral <45078678+oguzhankoral@users.noreply.github.com>
Co-authored-by: Björn Steinhagen <88777268+bjoernsteinhagen@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sebastian Witt <sebastian.witt@rwth-aachen.de>
2026-04-08 10:07:56 +01:00

117 lines
3.5 KiB
C#

using System.Reflection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Speckle.Connectors.Common.Common;
using Speckle.Connectors.Logging;
using Speckle.Objects.Geometry;
using Speckle.Sdk;
namespace Speckle.Connectors.Common;
public static class Connector
{
private sealed record LoggingDisposable(IDisposable Logging, IDisposable Tracing, IDisposable Metrics) : IDisposable
{
public void Dispose()
{
Logging.Dispose();
Tracing.Dispose();
Metrics.Dispose();
}
}
public static readonly string TabName = "Speckle";
public static readonly string TabTitle = "Speckle";
public static IDisposable Initialize(
this IServiceCollection serviceCollection,
Application application,
HostAppVersion version
)
{
var assemblyVersion = Assembly.GetExecutingAssembly().GetVersion();
serviceCollection.AddSpeckleSdk(
application,
HostApplications.GetVersion(version),
assemblyVersion,
typeof(Point).Assembly
);
return serviceCollection.AddOpenTelemetry(
"Connector",
application,
version,
#if DEBUG || LOCAL
new SpeckleLogging(Console: true, File: new(), MinimumLevel: SpeckleLogLevel.Debug),
new SpeckleTracing(Console: false),
new SpeckleMetrics(Console: false)
#else
new SpeckleLogging(
Console: true,
File: new(),
Otel:
[
new(
Endpoint: new Uri("https://seq.speckle.systems/ingest/otlp/v1/logs"),
Headers: new() { { "X-Seq-ApiKey", "Y0Ya2CFVt1tCSgrbY07c" } }
)
],
MinimumLevel: SpeckleLogLevel.Information
),
new SpeckleTracing(
Console: false,
Otel:
[
new(
Endpoint: new Uri("https://seq.speckle.systems/ingest/otlp/v1/traces"),
Headers: new() { { "X-Seq-ApiKey", "Y0Ya2CFVt1tCSgrbY07c" } }
)
]
),
null
#endif
);
}
public static IDisposable AddOpenTelemetry(
this IServiceCollection serviceCollection,
string serviceName,
Application application,
HostAppVersion version,
SpeckleLogging loggingConfig,
SpeckleTracing? tracingConfig,
SpeckleMetrics? metricsConfig
)
{
var assemblyVersion = Assembly.GetExecutingAssembly().GetVersion();
var (logging, tracing, metrics) = Observability.Initialize(
serviceName,
application.Name + " " + HostApplications.GetVersion(version),
application.Slug,
assemblyVersion,
new(loggingConfig, tracingConfig, metricsConfig)
);
//do this after the AddSpeckleSdk so that the logging system gets values from here.
serviceCollection.AddLogging(x =>
{
x.ClearProviders();
x.AddProvider(new SpeckleLogProvider(logging));
x.SetMinimumLevel(GetMicrosoftLevel(loggingConfig.MinimumLevel));
});
serviceCollection.AddSingleton<Speckle.Sdk.Logging.ISdkActivityFactory, ConnectorActivityFactory>();
return new LoggingDisposable(logging, tracing, metrics);
}
private static LogLevel GetMicrosoftLevel(SpeckleLogLevel speckleLogLevel) =>
speckleLogLevel switch
{
SpeckleLogLevel.Debug => LogLevel.Debug,
SpeckleLogLevel.Verbose => LogLevel.Trace,
SpeckleLogLevel.Information => LogLevel.Information,
SpeckleLogLevel.Warning => LogLevel.Warning,
SpeckleLogLevel.Error => LogLevel.Error,
SpeckleLogLevel.Fatal => LogLevel.Critical,
_ => throw new ArgumentOutOfRangeException(nameof(speckleLogLevel), speckleLogLevel, null)
};
}