OSDC.Drilling.Cluster.WebPages
2.0.2
dotnet add package OSDC.Drilling.Cluster.WebPages --version 2.0.2
NuGet\Install-Package OSDC.Drilling.Cluster.WebPages -Version 2.0.2
<PackageReference Include="OSDC.Drilling.Cluster.WebPages" Version="2.0.2" />
<PackageVersion Include="OSDC.Drilling.Cluster.WebPages" Version="2.0.2" />
<PackageReference Include="OSDC.Drilling.Cluster.WebPages" />
paket add OSDC.Drilling.Cluster.WebPages --version 2.0.2
#r "nuget: OSDC.Drilling.Cluster.WebPages, 2.0.2"
#:package OSDC.Drilling.Cluster.WebPages@2.0.2
#addin nuget:?package=OSDC.Drilling.Cluster.WebPages&version=2.0.2
#tool nuget:?package=OSDC.Drilling.Cluster.WebPages&version=2.0.2
OSDC.Drilling.Cluster.WebPages
This release targets MudBlazor 9.9.0 and the matching OSDC shared web component packages.
OSDC.Drilling.Cluster.WebPages is a Razor class library that packages the cluster management pages, reference-aware editors, feature/identity administration pages, display pages, and plotting components required by the Cluster web application.
Contents
ClusterMainClusterEditClusterIdentitiesClusterFeaturesSlotFeaturesClusterSurveyRunsClusterTrajectoriesClusterBackupRestoreStatisticsCluster: persistent request summaries in a sortable endpoint and functional-area tableScatterPlotScatter3DPlot- Cluster page support classes such as API access helpers and unit/reference helpers
Calculator pages used by the Cluster web application are supplied by current OSDC Razor packages rather than this library:
OSDC.Drilling.Field.WebPages.FieldCartographicConverterat/FieldCartographicConverter- EarthVerticalDatum, EarthGravity, and EarthMagneticField components hosted by wrapper routes in
WebApp/Pages
Cluster coordinate and mean-sea-level conversions call the Field and EarthVerticalDatum synchronous APIs directly. The library does not create, poll, or delete persisted calculation orders.
Cluster Editing
ClusterEdit provides:
- Save/close workflows with unsaved-change confirmation.
- JSON import/export for clusters.
- Field association.
- Reference point editing with north/east, latitude/longitude, and depth values through the unit/reference system.
- Cluster identity assignment.
- Cluster feature assignment with exclusive/non-exclusive categories and optional date validity periods.
- Slot editing with row selection, north/east and latitude/longitude columns, shared coordinate accuracy values, and deletion of selected rows.
- Slot feature assignment driven by selected slot rows. Assigned slot features are summarized in the slot table.
Batch Backup and Restore
ClusterBackupRestore exports all clusters or an ordered selection to one JSON document. It restores with fail-on-collision or replace behavior and lets the user either map existing local catalog definitions or create missing definitions/options. Field and Rig references are included by UUID and verified name and are validated live during restore; ambiguous or missing matches reject the complete operation.
Feature and Identity Management
The web pages include dedicated administration pages for:
- Cluster identities: definitions such as official name, short name, common name, external database ID, WITSML UID, and similar identifiers.
- Cluster features: category/option definitions that may be exclusive and may require validity periods.
- Slot features: category/option definitions for slot status, usage, integrity, accessibility, readiness, operational constraints, and geometry confidence.
Cluster Displays
ClusterSurveyRuns and ClusterTrajectories display all survey runs or trajectories associated with the selected field and cluster.
Their uncertainty overlays call the Trajectory service's resource-specific ellipse routes, which rebuild authoritative SurveyRun ancestry before calculating graphical ellipses rather than trusting stale or partial covariance submitted by the page.
- Field and cluster selectors list every applicable item when empty and filter names by case-insensitive substring as the user types.
- The 3D view shows survey/trajectory traces and selected uncertainty ellipses.
- Both views show the selected real cluster's slots as one legend-toggleable marker trace, including when no survey runs or trajectories exist.
- In 3D, slots use the cluster reference depth when defined, otherwise ground/mud-line depth, otherwise 0 MSL converted to the internal WGS84 depth datum.
- The
Fieldposition reference uses the persisted reference point of the selected owning Field; if that datum cannot be resolved, the active selection falls back to WGS84. - The
Cartographicposition reference resolves the selected Cluster reference point through its owning Field's configured projection; conversion failure falls back to WGS84 without blocking the display. - The depth selector offers the shared
Rotary table/RTEchoice backed byRig.FixedPlatformProperties.DrillFloorDepth.GaussianValue.Meanonly for a selected fixed-platform Cluster with a valid platform-Rig link. The standard uncertainty defaults to 0.5 m when absent. Rig-service failure leaves the plots usable and only disables that conversion value. - The horizontal projection shows the same data on the north/east plane.
- If the selected field defines delineation lines, the pages overlay the original delineation lines and calculated boundary lines.
- Boundary lines are drawn dashed in the horizontal projection.
- In the 3D view, delineation lines are displayed on the north/east plane at the top or bottom of the survey/trajectory bounding box, depending on camera angle.
- The 3D bounding box includes cluster slots and delineation lines so every available overlay is visible in the initial view.
Dependencies
The package depends on:
ModelSharedOut
The linked generated client is accompanied by ModelSharedOut/ClientJsonSerializerSettings.cs, which preserves OpenAPI string-enum semantics for enum collections in dependency responses, including Rig station-keeping modes.
OSDC.DotnetLibraries.Drilling.WebAppUtilsMudBlazorOSDC.UnitConversion.DrillingRazorMudComponentsPlotly.Blazor
Host application requirements
The consuming web app is expected to:
- Reference this package.
- Provide an implementation of
IClusterWebPagesConfiguration. - Register that configuration and
IClusterAPIUtilsin dependency injection. - Include the library assembly in Blazor routing via
AdditionalAssemblies. - If hosting the same contextual-data and calculator menus as the Cluster web app, reference and register the Field and Earth service web page packages and provide wrapper routes where required.
Example registration:
builder.Services.AddSingleton<IClusterWebPagesConfiguration>(new WebPagesHostConfiguration
{
ClusterHostURL = builder.Configuration["ClusterHostURL"] ?? string.Empty,
FieldHostURL = builder.Configuration["FieldHostURL"] ?? string.Empty,
RigHostURL = builder.Configuration["RigHostURL"] ?? string.Empty,
UnitConversionHostURL = builder.Configuration["UnitConversionHostURL"] ?? string.Empty
});
builder.Services.AddSingleton<IClusterAPIUtils, ClusterAPIUtils>();
Example routing:
<Router AppAssembly="@typeof(App).Assembly"
AdditionalAssemblies="new[] { typeof(OSDC.Drilling.Cluster.WebPages.ClusterMain).Assembly }">
The Cluster web app registers the Field assembly and provides wrapper pages for EarthCartographicProjection, EarthGeodesy, EarthVerticalDatum, EarthGravity, and EarthMagneticField components. This keeps all user-facing routes under /Cluster/webapp.
Shared resource classification (0.1.0)
The model and WebPages projects now reference
OSDC.DotnetLibraries.General.ResourceClassification 0.1.0. DataManagement
2.2.0 continues to own the existing interfaces. Service-specific classification
classes inherit the common implementation while retaining their public names,
JSON properties, nullable references and concrete option lists. Catalogue data,
default UUIDs, database tables, transactions and resource relationships remain
owned by this service.
Reference-integrity validation uses the shared helpers, preserving existing error codes and unlinked drafts. Editor validity-overlap checks use the common inclusive-interval rule. This extraction does not add stricter server validation for IDs or periods; the package also exposes those helpers for a subsequent audited migration. Persisted records are not rewritten.
Publish ResourceClassification 0.1.0 before clean CI/Docker builds. For local pre-publication checks, supply the packed package directory as an explicit NuGet restore source alongside nuget.org; there are no conditional references. Model classification contract tests verify serialization and typed options.
Semantic contract conventions
The owning Model builds against SemanticCatalogue 0.16.0. UI unit selectors remain presentation conversions: wire and stored angular values are radians and linear values are metres. WGS84 ellipsoidal depth is positive downward; display depth references must convert back before saving. Riemannian north/east coordinates are distinct from projected easting/northing. See the Model README for scalar quantity and uncertainty bindings.
Bounded light discovery
Resource and catalog discovery returns light pages, with offset defaulting to 0 and limit defaulting to 50 (allowed range 1–200). Names and relevant resource-reference filters are evaluated on the server. Unbounded full-object HeavyData routes and tools, including filtered full-object lists, have been removed. Existing UUID and HTTP-metadata listings remain available; use named light pages for routine discovery.
REST routes and MCP tool names (relative to the service's existing API path base):
/Cluster/LightData/cluster_discover/ClusterFeatureCategory/LightData/cluster_feature_category_discover/ClusterIdentity/LightData/cluster_identity_discover/SlotFeatureCategory/LightData/slot_feature_category_discover/Cluster/{clusterId}/Slots/LightData/cluster_slots_discover
Pages contain Items, Offset, Limit, TotalCount, and NextOffset; NextOffset is null on the final page. Offset pages are individually consistent reads, not a snapshot spanning requests: concurrent inserts/deletes can change later pages. Refresh discovery when the underlying collection changes. EarthGeodesy's existing search pages instead expose Items[].Value, Offset, Limit, and TotalCount.
Single-record reads, result/chunk reads, and deliberate backup/export/restore operations are preserved. Backups can still contain complete resources and should be treated as explicit bulk operations.
This is a breaking REST/MCP contract change: update generated clients, UIs, and external integrations together with the service release. Removed heavy-list names are not compatibility aliases. No persisted engineering shapes, database names, or storage volumes are changed. Historical usage counters are retained; bounded discovery has a separate additive DiscoveryRequestsPerDay history in resource services.
Tables/selectors use light discovery. Editors retrieve the selected complete resource; category options load only for chosen or already assigned definitions. Slot context uses paginated light locations, and rig-history context reads the selected wellbore. Backup selection uses discovery while the dedicated export/restore APIs retain full backup semantics.
Package release 2.0.0
This release packages the current WebPages and generated contracts. Update consuming WebApps to OSDC.Drilling.Cluster.WebPages version 2.0.0 after it is available on nuget.org. This is a major update for the bounded light discovery contracts; rebuild consumers together with their updated service clients.
Trusted NuGet publishing
The publish-webpages-nuget.yml workflow authenticates with GitHub OIDC through NuGet/login@v1; no long-lived NUGET_API_KEY secret is used. Set NUGET_USER to the nuget.org profile username as a repository variable (a repository secret is also accepted). The publishing job requests contents: read and id-token: write and obtains its temporary credential immediately before uploading.
On nuget.org, the package owner must configure a trusted-publishing policy for Open-Source-Drilling-Community/Cluster, workflow filename publish-webpages-nuget.yml, with permission to push new versions of OSDC.Drilling.Cluster.WebPages. Leave the policy environment empty because the workflow does not declare a GitHub environment. Trigger the workflow manually with the intended version or push a webpages-v* tag. Already published versions are skipped.
Package release 2.0.1
Pins OSDC.UnitConversion.DrillingRazorMudComponents 3.4.9 explicitly so embedded unit selectors consume paginated UnitSystem discovery. This replaces the obsolete indirect dependency inherited through WebAppUtils.
Trajectory and SurveyRun plots assemble all trajectory, ellipse and annotation traces in memory and submit one Plotly update per changed frame. Empty selections clear the previous traces; unit/reference changes rebuild the complete frame.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- MudBlazor (>= 9.9.0)
- OSDC.DotnetLibraries.Drilling.WebAppUtils (>= 1.1.5)
- OSDC.DotnetLibraries.General.Math (>= 1.3.5)
- OSDC.DotnetLibraries.General.ResourceClassification (>= 0.1.0)
- OSDC.UnitConversion.DrillingRazorMudComponents (>= 3.4.9)
- Plotly.Blazor (>= 6.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.