diff --git a/datahub-analysis/src/test/java/ai/intellistream/datahub/analysis/compute/AnalysisServiceTest.java b/datahub-analysis/src/test/java/ai/intellistream/datahub/analysis/compute/AnalysisServiceTest.java index 077c38b2..ebf938a6 100644 --- a/datahub-analysis/src/test/java/ai/intellistream/datahub/analysis/compute/AnalysisServiceTest.java +++ b/datahub-analysis/src/test/java/ai/intellistream/datahub/analysis/compute/AnalysisServiceTest.java @@ -13,8 +13,8 @@ import ai.intellistream.datahub.models.analysis.AnalysisResult; import ai.intellistream.datahub.models.forms.AnalysisForm; import ai.intellistream.datahub.sdk.client.DatahubClient; -import ai.intellistream.datahub.sdk.services.ResourceService; -import ai.intellistream.datahub.sdk.services.TimeseriesService; +import ai.intellistream.datahub.sdk.client.ResourceService; +import ai.intellistream.datahub.sdk.client.TimeseriesService; import ai.intellistream.datahub.timeseries.Timeseries; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/datahub-java-sdk/AGENTS.md b/datahub-java-sdk/AGENTS.md index 187cdabe..ec52b99a 100644 --- a/datahub-java-sdk/AGENTS.md +++ b/datahub-java-sdk/AGENTS.md @@ -15,7 +15,7 @@ Thin, synchronous Java client for the DataHub Platform REST API, published as - **Binary ingest is its own method.** `ingestBinary(...)` and `binaryBuffer()` on `TimeseriesService` go to `POST /timeseries/data/binary`; the JSON `ingest(...)` is untouched and the durable spool applies to it only. The binary path resolves series through - `/timeseries/byids` (`ingest/SeriesResolver`), so it needs read access to the dataset too. + `/timeseries/byids` (`client/SeriesResolver`), so it needs read access to the dataset too. - **Branch on the problem `type`, never on a substring of the body.** The api answers every failure with one RFC 9457 shape whose `type` URI is the contract; `detail` and `title` are prose for a human and may be reworded. `Problem.of(status, body)` never throws and never returns null, @@ -36,7 +36,7 @@ Thin, synchronous Java client for the DataHub Platform REST API, published as first send, so a retry carries the same id and collapses in ClickHouse (`ReplacingMergeTree ORDER BY id`). Never switch to random v4 ids for events — they scatter the sort key and degrade insert/merge/query performance. -- **The durable spool must stay memory-safe** (`ingest/DurableSpool`): append to a plain NDJSON +- **The durable spool must stay memory-safe** (`client/DurableSpool`): append to a plain NDJSON active segment, gzip-seal at ~50 MiB rollover, stream sealed segments in fixed-size chunks on flush — a multi-gigabyte spool never loads into memory. Buffer only retryable failures: unreachable (network error, 429, 5xx) and auth (401/403). Terminal errors such as 400 are @@ -47,28 +47,37 @@ Thin, synchronous Java client for the DataHub Platform REST API, published as ## Layout (`ai.intellistream.datahub.sdk`) -- `client/` — `DatahubClient` (entry point, one accessor per service), `DatahubConfig` - (builder; `fromEnv()` on `BASE_URL` + `TOKEN` or `CLIENT_ID`/`CLIENT_SECRET`/`TOKEN_URI`, - optionally `SCOPE`/`AUDIENCE` and the `ASSERTION*` keys that select the `jwt-bearer` grant; - Vault variants via `VaultSecretLoader`, a JDK-HttpClient KV v2 read supporting token and - AppRole auth). -- `auth/` — `TokenProvider`: static token pass-through, or a cached single-flight exchange - refreshed ~30 s before expiry — client-credentials, or the RFC 7523 `jwt-bearer` grant when an - assertion source is configured. The assertion is re-requested per exchange, never cached, - because providers commonly reject a replayed one. -- `http/` — shared plumbing: `ApiHttp` request helpers, `DatahubApiException` error mapping. - Every non-2xx is read as the api's RFC 9457 problem document through - `DatahubApiException.problem()` (`ai.intellistream.datahub.api.errors.Problem`, in api-model). -- `services/` — one class per API area: resources, assets, functions, timeseries, datasets, - events, labels, policies, governance, tenant, units, files, subscriptions. `assets` and - `functions` are the typed views of the `ASSET`/`FUNCTION` corners of the same graph `resources` - serves polymorphically; `labels` reads and writes through `LabelForm`, which is - `@Schema(name = "Label")` and is the label wire shape on both sides. -- `ingest/` — batched ingestion plus the durable disk spool (`DatapointIngestor`, - `EventIngestor`, `DurableSpool`, `BatchExecutor`), and the binary path - (`BinaryDatapointIngestor`, `BinaryIngestOptions`, `BinaryIngestBuffer`, `SeriesResolver`). -- `subscriptions/` — `SubscriptionListener`: durable subscription listening over the api's - WebSocket endpoint with per-subscription ack/nack. +**`DatahubClient` is the only way in.** Everything a caller does is reached through it. The +plumbing is package-private, and so are the service constructors, which is why the services and +the plumbing share one package: Java can only hide a constructor from other packages. Keep new +plumbing package-private in `client/`, and keep new service constructors package-private. +Narrowing a published public type later is a breaking change. The other packages hold only +value types a caller names. + +- `client/` — the entry point and everything behind it: + - public: `DatahubClient` (one accessor per service); `DatahubConfig` (builder; `fromEnv()` + on `BASE_URL` + `TOKEN` or `CLIENT_ID`/`CLIENT_SECRET`/`TOKEN_URI`, optionally + `SCOPE`/`AUDIENCE` and the `ASSERTION*` keys that select the `jwt-bearer` grant; Vault + variants via `VaultSecretLoader`, a JDK-HttpClient KV v2 read supporting token and AppRole + auth); one `*Service` per API area (resources, assets, functions, timeseries, datasets, + events, labels, policies, governance, tenant, units, files, subscriptions); and the handles + a service returns, `BinaryIngestBuffer` and `SubscriptionListener`. `assets` and `functions` + are the typed views of the `ASSET`/`FUNCTION` corners of the same graph `resources` serves + polymorphically; `labels` reads and writes through `LabelForm`, which is + `@Schema(name = "Label")` and is the label wire shape on both sides. + - package-private: `ApiHttp` (request helpers; every non-2xx becomes a + `DatahubApiException`); `TokenProvider` (static token pass-through, or a cached single-flight + exchange refreshed ~30 s before expiry, either client-credentials or the RFC 7523 + `jwt-bearer` grant when an assertion source is configured; the assertion is re-requested per + exchange, never cached, because providers commonly reject a replayed one); the ingest + machinery (`DatapointIngestor`, `EventIngestor`, `BatchExecutor`, `DurableSpool`, + `DatapointSpool`, and for the binary path `BinaryDatapointIngestor` and `SeriesResolver`). +- `http/` — `DatahubApiException`. Every refusal is read as the api's RFC 9457 problem + document through `problem()` (`ai.intellistream.datahub.api.errors.Problem`, in api-model). +- `ingest/` — `IngestOptions`, `BinaryIngestOptions`, `IngestResult`. +- `subscriptions/` — `SubscriptionMessage`, `SubscriptionError`, delivered by + `client/SubscriptionListener` (durable subscription listening over the api's WebSocket endpoint + with per-subscription ack/nack). - `timeseries/`, `util/` — `Datapoint` model, UUID v7 generator. ## Tests diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/http/ApiHttp.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ApiHttp.java similarity index 98% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/http/ApiHttp.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ApiHttp.java index 6a1b9aee..7509c5c5 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/http/ApiHttp.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ApiHttp.java @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.http; +package ai.intellistream.datahub.sdk.client; -import ai.intellistream.datahub.sdk.auth.TokenProvider; +import ai.intellistream.datahub.sdk.http.DatahubApiException; import tools.jackson.databind.JavaType; import tools.jackson.databind.json.JsonMapper; import tools.jackson.databind.type.TypeFactory; @@ -19,7 +19,7 @@ * (de)serializes JSON via Jackson, and maps non-2xx responses to {@link DatahubApiException}. * Thread-safe and meant to be shared. */ -public final class ApiHttp { +final class ApiHttp { /** * The API answers a failure with {@code application/problem+json} (RFC 9457), a different media diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/AssetService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/AssetService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/AssetService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/AssetService.java index fbc4157f..5b0500dc 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/AssetService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/AssetService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.api.responses.GraphDataWrapper; @@ -12,7 +12,6 @@ import ai.intellistream.datahub.models.UpdateRelForm; import ai.intellistream.datahub.models.UpdateAssetForm; import ai.intellistream.datahub.models.datafilters.ResourceFilter; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -32,7 +31,7 @@ public final class AssetService { private final JavaType assets; // DataWrapper private final JavaType nodeGraph; // GraphDataWrapper — the update echo - public AssetService(ApiHttp http) { + AssetService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.assets = tf.constructParametricType(DataWrapper.class, Asset.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BatchExecutor.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BatchExecutor.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BatchExecutor.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BatchExecutor.java index d6ae7694..471cd57d 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BatchExecutor.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BatchExecutor.java @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.ingest.IngestOptions; +import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.api.errors.Problem; import ai.intellistream.datahub.sdk.http.DatahubApiException; diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryDatapointIngestor.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryDatapointIngestor.java similarity index 95% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryDatapointIngestor.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryDatapointIngestor.java index aacf7238..cad91893 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryDatapointIngestor.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryDatapointIngestor.java @@ -1,6 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.ingest.IngestOptions; +import ai.intellistream.datahub.sdk.ingest.IngestResult; +import ai.intellistream.datahub.sdk.ingest.BinaryIngestOptions; import ai.intellistream.datahub.api.binary.DatapointFrameWriter; import ai.intellistream.datahub.api.binary.DatapointValueType; import ai.intellistream.datahub.api.binary.FrameLimits; @@ -8,10 +11,9 @@ import ai.intellistream.datahub.api.responses.DatapointString; import ai.intellistream.datahub.api.responses.DatapointsCollection; import ai.intellistream.datahub.helpers.datetime.DateTimeHandler; -import ai.intellistream.datahub.sdk.http.ApiHttp; import ai.intellistream.datahub.api.errors.Problem; import ai.intellistream.datahub.sdk.http.DatahubApiException; -import ai.intellistream.datahub.sdk.ingest.SeriesResolver.Resolved; +import ai.intellistream.datahub.sdk.client.SeriesResolver.Resolved; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; @@ -36,7 +38,7 @@ * {@link BatchExecutor}. A request the server refuses because a series is unknown or renamed * evicts those series from the resolver, and the points it carried are rebuilt and sent once more. */ -public final class BinaryDatapointIngestor { +final class BinaryDatapointIngestor { static final String PATH = "/timeseries/data/binary"; /** Leave headroom under the 4 MiB raw cap so the estimate never lands on the wrong side of it. */ @@ -166,7 +168,13 @@ private IngestResult send(List requests, BinaryIngestOptions options, } })); } - return BatchExecutor.execute(tasks, options.executorOptions()); + // Same retry, parallelism and fail-fast rules as the JSON path's executor. + IngestOptions executorOptions = IngestOptions.builder() + .parallelism(options.parallelism()) + .maxRetries(options.maxRetries()) + .failFast(options.failFast()) + .build(); + return BatchExecutor.execute(tasks, executorOptions); } /** diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestBuffer.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryIngestBuffer.java similarity index 95% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestBuffer.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryIngestBuffer.java index 3ad59623..8bd6ed48 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestBuffer.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/BinaryIngestBuffer.java @@ -1,7 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; -import ai.intellistream.datahub.sdk.services.TimeseriesService; +import ai.intellistream.datahub.sdk.ingest.IngestResult; +import ai.intellistream.datahub.sdk.ingest.BinaryIngestOptions; import ai.intellistream.datahub.sdk.timeseries.Datapoint; import java.time.Duration; @@ -51,7 +52,7 @@ public final class BinaryIngestBuffer implements AutoCloseable { private volatile IngestResult lastResult; private volatile boolean closed; - public BinaryIngestBuffer(TimeseriesService service, BinaryIngestOptions options, + BinaryIngestBuffer(TimeseriesService service, BinaryIngestOptions options, int maxPoints, Duration maxAge, Consumer onFlush) { if (maxPoints <= 0) { throw new IllegalArgumentException("maxPoints must be > 0"); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatahubClient.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatahubClient.java index c6ce5d68..03d231c4 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatahubClient.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatahubClient.java @@ -3,24 +3,6 @@ import ai.intellistream.datahub.models.NodeModel; import ai.intellistream.datahub.models.EventModel; -import ai.intellistream.datahub.sdk.auth.TokenProvider; -import ai.intellistream.datahub.sdk.http.ApiHttp; -import ai.intellistream.datahub.sdk.ingest.DatapointSpool; -import ai.intellistream.datahub.sdk.ingest.DurableSpool; -import ai.intellistream.datahub.sdk.services.DatasetService; -import ai.intellistream.datahub.sdk.services.AssetService; -import ai.intellistream.datahub.sdk.services.EdgeService; -import ai.intellistream.datahub.sdk.services.FunctionService; -import ai.intellistream.datahub.sdk.services.GovernanceService; -import ai.intellistream.datahub.sdk.services.LabelService; -import ai.intellistream.datahub.sdk.services.PolicyService; -import ai.intellistream.datahub.sdk.services.TenantService; -import ai.intellistream.datahub.sdk.services.EventService; -import ai.intellistream.datahub.sdk.services.FileService; -import ai.intellistream.datahub.sdk.services.ResourceService; -import ai.intellistream.datahub.sdk.services.SubscriptionService; -import ai.intellistream.datahub.sdk.services.TimeseriesService; -import ai.intellistream.datahub.sdk.services.UnitService; import ai.intellistream.datahub.models.NodeModelSubtypes; import tools.jackson.databind.json.JsonMapper; diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointIngestor.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointIngestor.java similarity index 94% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointIngestor.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointIngestor.java index 26379522..237880cd 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointIngestor.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointIngestor.java @@ -1,10 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.ingest.IngestOptions; +import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.api.responses.DatapointString; import ai.intellistream.datahub.api.responses.DatapointsCollection; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import java.util.ArrayList; @@ -15,7 +16,7 @@ * large collections) and runs the batches through {@link BatchExecutor}. Batches are independent, * so there is no cross-batch ordering guarantee — which is fine for timestamped data. */ -public final class DatapointIngestor { +final class DatapointIngestor { private final ApiHttp http; private final String path; diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointSpool.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointSpool.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointSpool.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointSpool.java index 45fb543e..2baef79d 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DatapointSpool.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatapointSpool.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DatapointString; import ai.intellistream.datahub.api.responses.DatapointsCollection; @@ -17,7 +17,7 @@ * time/size retention bounds apply per datapoint), with the flattening to and grouping from * {@link DatapointsCollection} that the timeseries ingest path needs. */ -public final class DatapointSpool { +final class DatapointSpool { /** One spooled datapoint: its series external id and the wire timestamp/value (both strings). */ public record SpoolLine(String externalId, String timestamp, String value) { diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/DatasetService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatasetService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/DatasetService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatasetService.java index 181eb0be..23ee092e 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/DatasetService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DatasetService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.DataSetModel; @@ -8,7 +8,6 @@ import ai.intellistream.datahub.models.Resource; import ai.intellistream.datahub.models.datafilters.DataSetFilter; import ai.intellistream.datahub.models.forms.DataSetForm; -import ai.intellistream.datahub.sdk.http.ApiHttp; import ai.intellistream.datahub.models.SearchBody; import tools.jackson.databind.JavaType; @@ -21,7 +20,7 @@ public final class DatasetService { private final JavaType datasets; // DataWrapper private final JavaType policyNodes; // DataWrapper - public DatasetService(ApiHttp http) { + DatasetService(ApiHttp http) { this.http = http; this.datasets = http.typeFactory().constructParametricType(DataWrapper.class, DataSetModel.class); this.policyNodes = http.typeFactory().constructParametricType(DataWrapper.class, Resource.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DurableSpool.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DurableSpool.java similarity index 99% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DurableSpool.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DurableSpool.java index b7d5e1b3..4b54e30a 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/DurableSpool.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/DurableSpool.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; import tools.jackson.databind.JavaType; import tools.jackson.databind.json.JsonMapper; @@ -53,7 +53,7 @@ * * @param the spooled item type (e.g. a datapoint line or an event) */ -public final class DurableSpool { +final class DurableSpool { private static final Logger log = LoggerFactory.getLogger(DurableSpool.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EdgeService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EdgeService.java similarity index 96% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EdgeService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EdgeService.java index 39ff2e7d..1c758769 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EdgeService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EdgeService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.api.responses.GraphDataWrapper; @@ -9,7 +9,6 @@ import ai.intellistream.datahub.models.RelationshipType; import ai.intellistream.datahub.models.Resource; import ai.intellistream.datahub.resource.RelTypeForm; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -30,7 +29,7 @@ public final class EdgeService { private final JavaType edgeGraph; // GraphDataWrapper private final JavaType relationshipTypes; // DataWrapper - public EdgeService(ApiHttp http) { + EdgeService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.edges = tf.constructParametricType(DataWrapper.class, EdgeProxy.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/EventIngestor.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventIngestor.java similarity index 87% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/EventIngestor.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventIngestor.java index 66cac964..1da0a4ec 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/EventIngestor.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventIngestor.java @@ -1,9 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.ingest.IngestOptions; +import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.EventModel; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import java.util.ArrayList; @@ -13,7 +14,7 @@ * Sends events concurrently: chunks them into batches of at most {@code batchSize} and runs the * batches through {@link BatchExecutor}. */ -public final class EventIngestor { +final class EventIngestor { private final ApiHttp http; private final String path; diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EventService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EventService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventService.java index b9b29be0..ab535da5 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/EventService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/EventService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.EventModel; @@ -8,9 +8,6 @@ import ai.intellistream.datahub.models.UpdateEventForm; import ai.intellistream.datahub.models.events.EventFilter; import ai.intellistream.datahub.models.events.EventRetreiver; -import ai.intellistream.datahub.sdk.http.ApiHttp; -import ai.intellistream.datahub.sdk.ingest.DurableSpool; -import ai.intellistream.datahub.sdk.ingest.EventIngestor; import ai.intellistream.datahub.sdk.ingest.IngestOptions; import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.sdk.util.UuidV7; @@ -38,11 +35,11 @@ public final class EventService { private final JavaType stringWrapper; // DataWrapper private final JavaType countType; // Map — /events/count returns {"count": N} - public EventService(ApiHttp http) { + EventService(ApiHttp http) { this(http, null); } - public EventService(ApiHttp http, DurableSpool spool) { + EventService(ApiHttp http, DurableSpool spool) { this.http = http; this.spool = spool; this.ingestor = new EventIngestor(http, CREATE_PATH); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileService.java index a8609c3d..91207f3d 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileService.java @@ -1,11 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.IdCollection; import ai.intellistream.datahub.models.files.FileUpdate; import ai.intellistream.datahub.models.files.IndexNode; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import java.net.URLEncoder; @@ -20,7 +19,7 @@ public final class FileService { private final ApiHttp http; private final JavaType indexNodes; // DataWrapper - public FileService(ApiHttp http) { + FileService(ApiHttp http) { this.http = http; this.indexNodes = http.typeFactory().constructParametricType(DataWrapper.class, IndexNode.class); } diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileUploadRequest.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileUploadRequest.java similarity index 98% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileUploadRequest.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileUploadRequest.java index daad8eb8..7bdb36ef 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FileUploadRequest.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FileUploadRequest.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; /** * A file to upload: the {@code content} bytes plus metadata. {@code path} (the destination) and diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FunctionService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FunctionService.java similarity index 96% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FunctionService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FunctionService.java index 725d95ff..9e9eb3f7 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/FunctionService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/FunctionService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.function.UpdateFunctionForm; import ai.intellistream.datahub.api.responses.DataWrapper; @@ -12,7 +12,6 @@ import ai.intellistream.datahub.models.SearchBody; import ai.intellistream.datahub.models.UpdateRelForm; import ai.intellistream.datahub.models.datafilters.FunctionFilter; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -28,7 +27,7 @@ public final class FunctionService { private final JavaType functions; // DataWrapper private final JavaType nodeGraph; // GraphDataWrapper — the update echo - public FunctionService(ApiHttp http) { + FunctionService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.functions = tf.constructParametricType(DataWrapper.class, Function.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/GovernanceService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/GovernanceService.java similarity index 89% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/GovernanceService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/GovernanceService.java index 457bef24..6ee60b66 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/GovernanceService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/GovernanceService.java @@ -1,9 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.GovernanceTemplateDTO; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; /** @@ -16,7 +15,7 @@ public final class GovernanceService { private final ApiHttp http; private final JavaType templates; // DataWrapper - public GovernanceService(ApiHttp http) { + GovernanceService(ApiHttp http) { this.http = http; this.templates = http.typeFactory() .constructParametricType(DataWrapper.class, GovernanceTemplateDTO.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/LabelService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/LabelService.java similarity index 95% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/LabelService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/LabelService.java index 2d0c825f..6e0191ef 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/LabelService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/LabelService.java @@ -1,10 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.label.LabelForm; import ai.intellistream.datahub.models.IdCollection; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import java.util.List; @@ -26,7 +25,7 @@ public final class LabelService { private final ApiHttp http; private final JavaType labels; // DataWrapper - public LabelService(ApiHttp http) { + LabelService(ApiHttp http) { this.http = http; this.labels = http.typeFactory().constructParametricType(DataWrapper.class, LabelForm.class); } diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/PolicyService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/PolicyService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/PolicyService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/PolicyService.java index 6debb5d0..31e25a1b 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/PolicyService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/PolicyService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.IdCollection; @@ -7,7 +7,6 @@ import ai.intellistream.datahub.models.forms.UpdatePolicyForm; import ai.intellistream.datahub.models.policy.NamingCheckForm; import ai.intellistream.datahub.models.policy.PolicyFinding; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -28,7 +27,7 @@ public final class PolicyService { private final JavaType policies; // DataWrapper private final JavaType findings; // {"findings": [...]} — the envelope the endpoint returns - public PolicyService(ApiHttp http) { + PolicyService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.policies = tf.constructParametricType(DataWrapper.class, Policy.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/ResourceService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ResourceService.java similarity index 98% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/ResourceService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ResourceService.java index c3be22a9..9498cc1e 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/ResourceService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/ResourceService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.api.graphtransfer.GraphImportResult; @@ -16,7 +16,6 @@ import ai.intellistream.datahub.models.UpdateResourceForm; import ai.intellistream.datahub.models.datafilters.ResourceFilter; import ai.intellistream.datahub.models.RelForm; -import ai.intellistream.datahub.sdk.http.ApiHttp; import ai.intellistream.datahub.models.SearchBody; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -35,7 +34,7 @@ public final class ResourceService { private final JavaType resourceNetwork; // ResourceNetwork private final JavaType graphImportResult; // GraphImportResult - public ResourceService(ApiHttp http) { + ResourceService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.nodes = tf.constructParametricType(DataWrapper.class, NodeModel.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/SeriesResolver.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SeriesResolver.java similarity index 98% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/SeriesResolver.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SeriesResolver.java index e68beb40..45160653 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/SeriesResolver.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SeriesResolver.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.ingest; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.binary.DatapointValueType; import ai.intellistream.datahub.api.responses.DataWrapper; @@ -23,7 +23,7 @@ * in bulk, and cached for the life of the client. A server answer that a series is unknown or * renamed evicts it, so the next request resolves it afresh. */ -public final class SeriesResolver { +final class SeriesResolver { /** A series as the frame names it. */ public record Resolved(long id, String externalId, DatapointValueType type) { diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListener.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionListener.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListener.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionListener.java index f9248ce1..8d3cabf1 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListener.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionListener.java @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.subscriptions; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.subscriptions.SubscriptionMessage; +import ai.intellistream.datahub.sdk.subscriptions.SubscriptionError; import ai.intellistream.datahub.api.responses.DataWrapperMessage; import ai.intellistream.datahub.sdk.http.DatahubApiException; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -46,7 +48,7 @@ private SubscriptionListener(WebSocket webSocket, JsonMapper mapper, } /** Open a listener for the given subscription external ids (handshake authed with the bearer token). */ - public static SubscriptionListener connect(HttpClient httpClient, String baseUrl, String token, + static SubscriptionListener connect(HttpClient httpClient, String baseUrl, String token, JsonMapper mapper, List externalIds) { BlockingQueue queue = new LinkedBlockingQueue<>(); BlockingQueue errors = new LinkedBlockingQueue<>(); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/SubscriptionService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionService.java similarity index 92% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/SubscriptionService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionService.java index c3458a4a..148dea53 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/SubscriptionService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/SubscriptionService.java @@ -1,10 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.IdCollection; -import ai.intellistream.datahub.sdk.http.ApiHttp; -import ai.intellistream.datahub.sdk.subscriptions.SubscriptionListener; import ai.intellistream.datahub.subscription.Subscription; import ai.intellistream.datahub.subscription.SubscriptionRetriever; import tools.jackson.databind.JavaType; @@ -20,7 +18,7 @@ public final class SubscriptionService { private final ApiHttp http; private final JavaType subscriptions; // DataWrapper - public SubscriptionService(ApiHttp http) { + SubscriptionService(ApiHttp http) { this.http = http; this.subscriptions = http.typeFactory().constructParametricType(DataWrapper.class, Subscription.class); } diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TenantService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TenantService.java similarity index 95% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TenantService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TenantService.java index 988ab905..fb2faef1 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TenantService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TenantService.java @@ -1,10 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.models.tenant.SettingsPermission; import ai.intellistream.datahub.models.tenant.TenantLlmSettings; import ai.intellistream.datahub.models.tenant.TenantLlmSettingsForm; -import ai.intellistream.datahub.sdk.http.ApiHttp; import ai.intellistream.datahub.tenant.TenantFeatures; import tools.jackson.databind.JavaType; import tools.jackson.databind.type.TypeFactory; @@ -26,7 +25,7 @@ public final class TenantService { private final JavaType permissions; // Map private final JavaType llmSettings; // TenantLlmSettings - public TenantService(ApiHttp http) { + TenantService(ApiHttp http) { this.http = http; TypeFactory tf = http.typeFactory(); this.features = tf.constructType(TenantFeatures.class); diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TimeseriesService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TimeseriesService.java similarity index 97% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TimeseriesService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TimeseriesService.java index 6d1093e3..a5db68d4 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/TimeseriesService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TimeseriesService.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataCollection; import ai.intellistream.datahub.api.responses.DataRetriever; @@ -13,16 +13,10 @@ import ai.intellistream.datahub.models.TimeseriesRetreiver; import ai.intellistream.datahub.models.datafilters.TimeseriesFilter; import ai.intellistream.datahub.models.forms.RetrieveFilter; -import ai.intellistream.datahub.sdk.http.ApiHttp; import ai.intellistream.datahub.api.responses.DatapointString; -import ai.intellistream.datahub.sdk.ingest.BinaryDatapointIngestor; -import ai.intellistream.datahub.sdk.ingest.BinaryIngestBuffer; import ai.intellistream.datahub.sdk.ingest.BinaryIngestOptions; -import ai.intellistream.datahub.sdk.ingest.DatapointIngestor; -import ai.intellistream.datahub.sdk.ingest.DatapointSpool; import ai.intellistream.datahub.sdk.ingest.IngestOptions; import ai.intellistream.datahub.sdk.ingest.IngestResult; -import ai.intellistream.datahub.sdk.ingest.SeriesResolver; import ai.intellistream.datahub.sdk.timeseries.Datapoint; import ai.intellistream.datahub.timeseries.Timeseries; import ai.intellistream.datahub.models.SearchForm; @@ -62,11 +56,11 @@ public final class TimeseriesService { private final JavaType valueTypeHint; // ValueTypeRecommendation private final JavaType aggregatedData; // DataWrapper> - public TimeseriesService(ApiHttp http) { + TimeseriesService(ApiHttp http) { this(http, null); } - public TimeseriesService(ApiHttp http, DatapointSpool spool) { + TimeseriesService(ApiHttp http, DatapointSpool spool) { this.http = http; this.spool = spool; this.ingestor = new DatapointIngestor(http, DATA_PATH); @@ -449,11 +443,6 @@ public BinaryIngestBuffer binaryBuffer() { BinaryIngestBuffer.DEFAULT_MAX_AGE, null); } - /** The series cache the binary path resolves through; exposed so a caller can drop it. */ - public SeriesResolver seriesResolver() { - return seriesResolver; - } - private static List toCollections(Map> datapointsByExternalId) { List collections = new ArrayList<>(datapointsByExternalId.size()); datapointsByExternalId.forEach((externalId, points) -> { diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/auth/TokenProvider.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TokenProvider.java similarity index 98% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/auth/TokenProvider.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TokenProvider.java index 47e14920..ea06e75a 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/auth/TokenProvider.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/TokenProvider.java @@ -1,7 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.auth; +package ai.intellistream.datahub.sdk.client; -import ai.intellistream.datahub.sdk.client.DatahubConfig; import ai.intellistream.datahub.sdk.http.DatahubApiException; import com.fasterxml.jackson.annotation.JsonProperty; import tools.jackson.databind.json.JsonMapper; @@ -23,7 +22,7 @@ * cached until shortly before it expires; refresh is single-flight — concurrent callers trigger at * most one exchange. */ -public final class TokenProvider { +final class TokenProvider { private static final long EXPIRY_SKEW_SECONDS = 30; private static final String JWT_BEARER_GRANT = "urn:ietf:params:oauth:grant-type:jwt-bearer"; diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/UnitService.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/UnitService.java similarity index 93% rename from datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/UnitService.java rename to datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/UnitService.java index 7527907c..ecbb13d5 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/services/UnitService.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/client/UnitService.java @@ -1,10 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.services; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DataWrapper; import ai.intellistream.datahub.models.IdCollection; import ai.intellistream.datahub.models.unit.UnitModel; -import ai.intellistream.datahub.sdk.http.ApiHttp; import tools.jackson.databind.JavaType; import java.net.URLEncoder; @@ -17,7 +16,7 @@ public final class UnitService { private final ApiHttp http; private final JavaType units; // DataWrapper - public UnitService(ApiHttp http) { + UnitService(ApiHttp http) { this.http = http; this.units = http.typeFactory().constructParametricType(DataWrapper.class, UnitModel.class); } diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestOptions.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestOptions.java index 81e62342..fabe25e6 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestOptions.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/ingest/BinaryIngestOptions.java @@ -40,15 +40,6 @@ private BinaryIngestOptions(Builder b) { public int maxRetries() { return maxRetries; } public boolean failFast() { return failFast; } - /** The equivalent executor options: same retry, parallelism and fail-fast rules. */ - IngestOptions executorOptions() { - return IngestOptions.builder() - .parallelism(parallelism) - .maxRetries(maxRetries) - .failFast(failFast) - .build(); - } - public static BinaryIngestOptions defaults() { return builder().build(); } diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionError.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionError.java index bb71000a..805cdddf 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionError.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionError.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package ai.intellistream.datahub.sdk.subscriptions; +import ai.intellistream.datahub.sdk.client.SubscriptionListener; /** * A server-side error notice for a single subscription, delivered over the WebSocket as * {@code {"error": true, "subscriptionExternalId": "", "reason": ""}}. The connection is diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionMessage.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionMessage.java index cf8036d1..c017d826 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionMessage.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionMessage.java @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 package ai.intellistream.datahub.sdk.subscriptions; +import ai.intellistream.datahub.sdk.client.SubscriptionListener; import ai.intellistream.datahub.api.responses.DataWrapperMessage; /** diff --git a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/timeseries/Datapoint.java b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/timeseries/Datapoint.java index 050bb7df..f0262fd3 100644 --- a/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/timeseries/Datapoint.java +++ b/datahub-java-sdk/src/main/java/ai/intellistream/datahub/sdk/timeseries/Datapoint.java @@ -8,7 +8,7 @@ /** * A single datapoint to ingest — a timestamp and a value. The {@code of(...)} factories build the * string value the wire expects; {@link #toDatapointString()} converts to the wire type. Used by - * {@link ai.intellistream.datahub.sdk.services.TimeseriesService#ingest(java.util.Map)}. + * {@link ai.intellistream.datahub.sdk.client.TimeseriesService#ingest(java.util.Map)}. */ public record Datapoint(Instant timestamp, String value) { diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/FileServiceTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/FileServiceTest.java index 463ba4c2..634a2944 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/FileServiceTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/FileServiceTest.java @@ -5,7 +5,7 @@ import ai.intellistream.datahub.models.files.IndexNode; import ai.intellistream.datahub.sdk.client.DatahubClient; import ai.intellistream.datahub.sdk.client.DatahubConfig; -import ai.intellistream.datahub.sdk.services.FileUploadRequest; +import ai.intellistream.datahub.sdk.client.FileUploadRequest; import com.sun.net.httpserver.HttpServer; import org.junit.jupiter.api.Test; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/NoContentResponseTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/NoContentResponseTest.java index d5e18709..8ecae1ca 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/NoContentResponseTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/NoContentResponseTest.java @@ -98,15 +98,15 @@ void noBodyEndpointsCompleteOnA204() { void noBodyCallsAreDeclaredVoid() { record Call(Class service, String method, Class... parameters) {} List noBody = List.of( - new Call(ai.intellistream.datahub.sdk.services.ResourceService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.TimeseriesService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.TimeseriesService.class, "insertDatapoints", List.class), - new Call(ai.intellistream.datahub.sdk.services.TimeseriesService.class, "deleteDatapoints", List.class), - new Call(ai.intellistream.datahub.sdk.services.DatasetService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.EventService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.SubscriptionService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.FileService.class, "delete", List.class), - new Call(ai.intellistream.datahub.sdk.services.EdgeService.class, "delete", List.class)); + new Call(ai.intellistream.datahub.sdk.client.ResourceService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.TimeseriesService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.TimeseriesService.class, "insertDatapoints", List.class), + new Call(ai.intellistream.datahub.sdk.client.TimeseriesService.class, "deleteDatapoints", List.class), + new Call(ai.intellistream.datahub.sdk.client.DatasetService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.EventService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.SubscriptionService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.FileService.class, "delete", List.class), + new Call(ai.intellistream.datahub.sdk.client.EdgeService.class, "delete", List.class)); List wrongly = new ArrayList<>(); for (Call call : noBody) { diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SdkWireContractTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SdkWireContractTest.java index a86b16c4..ff123da5 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SdkWireContractTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SdkWireContractTest.java @@ -44,7 +44,7 @@ import ai.intellistream.datahub.resource.RelTypeForm; import ai.intellistream.datahub.sdk.client.DatahubClient; import ai.intellistream.datahub.sdk.client.DatahubConfig; -import ai.intellistream.datahub.sdk.services.FileUploadRequest; +import ai.intellistream.datahub.sdk.client.FileUploadRequest; import ai.intellistream.datahub.subscription.Subscription; import ai.intellistream.datahub.subscription.SubscriptionRetriever; import ai.intellistream.datahub.timeseries.Timeseries; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SubscriptionListenIT.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SubscriptionListenIT.java index 321b2d01..999dfb8c 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SubscriptionListenIT.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/SubscriptionListenIT.java @@ -5,7 +5,7 @@ import ai.intellistream.datahub.api.responses.DataWrapperMessage; import ai.intellistream.datahub.models.IdCollection; import ai.intellistream.datahub.sdk.client.DatahubClient; -import ai.intellistream.datahub.sdk.subscriptions.SubscriptionListener; +import ai.intellistream.datahub.sdk.client.SubscriptionListener; import ai.intellistream.datahub.sdk.subscriptions.SubscriptionMessage; import ai.intellistream.datahub.sdk.timeseries.Datapoint; import ai.intellistream.datahub.subscription.Subscription; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TimeseriesBinaryIngestTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TimeseriesBinaryIngestTest.java index ba1ada88..c5a51e23 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TimeseriesBinaryIngestTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TimeseriesBinaryIngestTest.java @@ -9,7 +9,7 @@ import ai.intellistream.datahub.api.responses.DatapointsCollection; import ai.intellistream.datahub.sdk.client.DatahubClient; import ai.intellistream.datahub.sdk.client.DatahubConfig; -import ai.intellistream.datahub.sdk.ingest.BinaryIngestBuffer; +import ai.intellistream.datahub.sdk.client.BinaryIngestBuffer; import ai.intellistream.datahub.sdk.ingest.BinaryIngestOptions; import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.sdk.timeseries.Datapoint; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/DurableBufferTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/DurableBufferTest.java similarity index 98% rename from datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/DurableBufferTest.java rename to datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/DurableBufferTest.java index 08d6a7ab..719c27e6 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/DurableBufferTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/DurableBufferTest.java @@ -1,11 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk; +package ai.intellistream.datahub.sdk.client; import ai.intellistream.datahub.api.responses.DatapointString; import ai.intellistream.datahub.api.responses.DatapointsCollection; -import ai.intellistream.datahub.sdk.client.DatahubClient; -import ai.intellistream.datahub.sdk.client.DatahubConfig; -import ai.intellistream.datahub.sdk.ingest.DatapointSpool; import ai.intellistream.datahub.sdk.ingest.IngestOptions; import ai.intellistream.datahub.sdk.ingest.IngestResult; import ai.intellistream.datahub.sdk.timeseries.Datapoint; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListenerTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/SubscriptionListenerTest.java similarity index 98% rename from datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListenerTest.java rename to datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/SubscriptionListenerTest.java index a6b59ed6..d2058881 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/subscriptions/SubscriptionListenerTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/SubscriptionListenerTest.java @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk.subscriptions; +package ai.intellistream.datahub.sdk.client; +import ai.intellistream.datahub.sdk.subscriptions.SubscriptionMessage; +import ai.intellistream.datahub.sdk.subscriptions.SubscriptionError; import org.junit.jupiter.api.Test; import tools.jackson.databind.json.JsonMapper; diff --git a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TokenProviderTest.java b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/TokenProviderTest.java similarity index 97% rename from datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TokenProviderTest.java rename to datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/TokenProviderTest.java index 01cd16f7..a37b0386 100644 --- a/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/TokenProviderTest.java +++ b/datahub-java-sdk/src/test/java/ai/intellistream/datahub/sdk/client/TokenProviderTest.java @@ -1,9 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 -package ai.intellistream.datahub.sdk; +package ai.intellistream.datahub.sdk.client; -import ai.intellistream.datahub.sdk.auth.TokenProvider; -import ai.intellistream.datahub.sdk.client.DatahubConfig; -import ai.intellistream.datahub.sdk.client.DatahubConfigException; import com.sun.net.httpserver.HttpServer; import org.junit.jupiter.api.Test; import tools.jackson.databind.json.JsonMapper; diff --git a/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/config/SecurityConfigTest.java b/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/config/SecurityConfigTest.java index f2ad7da1..ed4d2138 100644 --- a/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/config/SecurityConfigTest.java +++ b/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/config/SecurityConfigTest.java @@ -4,7 +4,7 @@ import ai.intellistream.datahub.rvm.RvmConversion; import ai.intellistream.datahub.rvm.RvmConverter; import ai.intellistream.datahub.sdk.client.DatahubClient; -import ai.intellistream.datahub.sdk.services.FileService; +import ai.intellistream.datahub.sdk.client.FileService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; diff --git a/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/web/ConversionControllerTest.java b/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/web/ConversionControllerTest.java index 105529b7..552108f0 100644 --- a/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/web/ConversionControllerTest.java +++ b/datahub-rvm-converter/src/test/java/ai/intellistream/datahub/rvm/web/ConversionControllerTest.java @@ -6,7 +6,7 @@ import ai.intellistream.datahub.rvm.RvmConverter; import ai.intellistream.datahub.rvm.config.RvmApiClientFactory; import ai.intellistream.datahub.sdk.client.DatahubClient; -import ai.intellistream.datahub.sdk.services.FileService; +import ai.intellistream.datahub.sdk.client.FileService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus;