@dremio/js-sdk 0.29.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { SonarV3Config } from "../../common/Config.ts";
|
|
1
|
+
import type { SonarV2Config, SonarV3Config } from "../../common/Config.ts";
|
|
2
2
|
import { Job } from "./Job.ts";
|
|
3
3
|
import { Query } from "../../common/Query.ts";
|
|
4
4
|
import type { SignalParam } from "../../common/Params.ts";
|
|
5
5
|
import { type JobEntity } from "./utils/jobEntityToProperties.ts";
|
|
6
|
+
import { type jobListParamsSchema } from "./listJobs.ts";
|
|
7
|
+
import * as z from "zod/mini";
|
|
6
8
|
export declare class JobsResource {
|
|
7
9
|
#private;
|
|
8
|
-
constructor(config: SonarV3Config);
|
|
10
|
+
constructor(config: SonarV2Config & SonarV3Config);
|
|
9
11
|
_jobFromEntity(id: string, entity: JobEntity): Job;
|
|
10
12
|
create(query: Query): Promise<import("ts-results-es").Result<string, import("../index.ts").HttpError>>;
|
|
11
13
|
/**
|
|
@@ -18,6 +20,50 @@ export declare class JobsResource {
|
|
|
18
20
|
* A convenience method to combine job creation and retrieval
|
|
19
21
|
*/
|
|
20
22
|
createAndRetrieve(query: Query): Promise<import("ts-results-es").Result<Job, import("../index.ts").HttpError>>;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated
|
|
25
|
+
*/
|
|
26
|
+
_list(params: z.infer<typeof jobListParamsSchema>): {
|
|
27
|
+
data({ signal }?: SignalParam): AsyncGenerator<{
|
|
28
|
+
id: string;
|
|
29
|
+
queryType: "UI_RUN" | "UI_PREVIEW" | "UI_INTERNAL_PREVIEW" | "UI_INTERNAL_RUN" | "UI_EXPORT" | "ODBC" | "JDBC" | "REST" | "ACCELERATOR_CREATE" | "ACCELERATOR_DROP" | "UNKNOWN" | "PREPARE_INTERNAL" | "ACCELERATOR_EXPLAIN" | "UI_INITIAL_PREVIEW" | "METADATA_REFRESH" | "FLIGHT" | "INTERNAL_ICEBERG_METADATA_DROP";
|
|
30
|
+
state: string;
|
|
31
|
+
description: string;
|
|
32
|
+
user: string;
|
|
33
|
+
input: string;
|
|
34
|
+
output: string;
|
|
35
|
+
accelerated: boolean;
|
|
36
|
+
datasetVersion: string;
|
|
37
|
+
durationDetails: {
|
|
38
|
+
phaseDuration: string;
|
|
39
|
+
phaseName: "STARTING" | "RUNNING" | "PLANNING" | "PENDING" | "METADATA_RETRIEVAL" | "QUEUED" | "ENGINE_START" | "EXECUTION_PLANNING";
|
|
40
|
+
phaseStartTime: string;
|
|
41
|
+
}[];
|
|
42
|
+
isComplete: boolean;
|
|
43
|
+
outputLimited: boolean;
|
|
44
|
+
outputRecords: number;
|
|
45
|
+
plannerEstimatedCost: number;
|
|
46
|
+
queriedDatasets: {
|
|
47
|
+
datasetPathsList: string[];
|
|
48
|
+
datasetName?: string | undefined;
|
|
49
|
+
datasetPath?: string | undefined;
|
|
50
|
+
datasetType?: string | undefined;
|
|
51
|
+
versionContext?: string | undefined;
|
|
52
|
+
}[];
|
|
53
|
+
queryText: string;
|
|
54
|
+
requestType: string;
|
|
55
|
+
rowsScanned: number;
|
|
56
|
+
spilled: boolean;
|
|
57
|
+
starFlakeAccelerated: boolean;
|
|
58
|
+
totalAttempts: number;
|
|
59
|
+
waitInClient: number;
|
|
60
|
+
duration: import("temporal-polyfill").Temporal.Duration;
|
|
61
|
+
startTime: import("temporal-polyfill").Temporal.Instant;
|
|
62
|
+
enqueuedTime?: string | undefined;
|
|
63
|
+
wlmQueue?: string | undefined;
|
|
64
|
+
endTime?: import("temporal-polyfill").Temporal.Instant | undefined;
|
|
65
|
+
}, void, unknown>;
|
|
66
|
+
};
|
|
21
67
|
observe(id: string): import("rxjs").Observable<import("ts-results-es").Result<Job, import("../index.ts").HttpError>>;
|
|
22
68
|
retrieve(id: string, { signal }?: SignalParam): Promise<import("ts-results-es").Result<Job, import("../index.ts").HttpError>>;
|
|
23
69
|
}
|
|
@@ -20,6 +20,8 @@ import { repeat, shareReplay, takeWhile, tap, timer } from "rxjs";
|
|
|
20
20
|
import { fromAbortable } from "../../common/fromAbortable.js";
|
|
21
21
|
import { jobEntityToProperties } from "./utils/jobEntityToProperties.js";
|
|
22
22
|
import moize from "moize";
|
|
23
|
+
import { createListJobs } from "./listJobs.js";
|
|
24
|
+
import * as z from "zod/mini";
|
|
23
25
|
export class JobsResource {
|
|
24
26
|
#config;
|
|
25
27
|
#createJobObservable = (id) => fromAbortable(({ signal }) => this.retrieve(id, { signal })).pipe(repeat({ delay: (count) => timer(jobPollingBackoff(count - 1)) }), takeWhile((jobResult) => jobResult.isOk() && !jobResult.value.settled, true));
|
|
@@ -97,6 +99,27 @@ export class JobsResource {
|
|
|
97
99
|
createAndRetrieve(query) {
|
|
98
100
|
return new AsyncResult(this.create(query)).andThen((jobId) => this.retrieve(jobId)).promise;
|
|
99
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* @deprecated
|
|
104
|
+
*/
|
|
105
|
+
_list(params) {
|
|
106
|
+
const { getNextPage, listJobs } = createListJobs(this.#config);
|
|
107
|
+
return {
|
|
108
|
+
async *data({ signal } = {}) {
|
|
109
|
+
const firstPageResult = await listJobs(params).promise;
|
|
110
|
+
if (firstPageResult.isErr()) {
|
|
111
|
+
throw firstPageResult.error;
|
|
112
|
+
}
|
|
113
|
+
yield* firstPageResult.value.data;
|
|
114
|
+
let nextPageToken = firstPageResult.value.next;
|
|
115
|
+
while (nextPageToken) {
|
|
116
|
+
const nextPage = await getNextPage(nextPageToken, { signal }).promise.then((result) => result.unwrap());
|
|
117
|
+
nextPageToken = nextPage.next;
|
|
118
|
+
yield* nextPage.data;
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
100
123
|
observe(id) {
|
|
101
124
|
return this.#jobObserverCache(id);
|
|
102
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobsResource.js","sourceRoot":"","sources":["../../../src/oss/jobs/JobsResource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAkB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"JobsResource.js","sourceRoot":"","sources":["../../../src/oss/jobs/JobsResource.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2024-2025 Dremio Corporation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { SonarV2Config, SonarV3Config } from \"../../common/Config.ts\";\nimport { Job } from \"./Job.ts\";\nimport { Query } from \"../../common/Query.ts\";\nimport { AsyncResult } from \"ts-results-es\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport { repeat, shareReplay, takeWhile, tap, timer } from \"rxjs\";\nimport { fromAbortable } from \"../../common/fromAbortable.ts\";\nimport { jobEntityToProperties, type JobEntity } from \"./utils/jobEntityToProperties.ts\";\nimport moize from \"moize\";\nimport { createListJobs, type jobListParamsSchema } from \"./listJobs.ts\";\nimport * as z from \"zod/mini\";\n\nexport class JobsResource {\n #config: SonarV2Config & SonarV3Config;\n\n #createJobObservable = (id: string) =>\n fromAbortable(({ signal }) => this.retrieve(id, { signal })).pipe(\n repeat({ delay: (count) => timer(jobPollingBackoff(count - 1)) }),\n takeWhile((jobResult) => jobResult.isOk() && !jobResult.value.settled, true),\n );\n\n /**\n * Reuse the same observable every time the `observe` method is called.\n */\n #jobObserverCache = moize.default(\n (id: string) =>\n this.#createJobObservable(id).pipe(\n tap({\n finalize: () => {\n this.#jobObserverCache.remove([id]);\n },\n }),\n /**\n * Reuse the same polling for multiple subscribers, buffering only the latest result.\n * Make sure to unsubscribe from the source to stop polling when there are no subscribers (refCount: true)\n */\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n ),\n {\n /**\n * Evict cached observables after 60s. We need some way to prevent a memory\n * leak for long-running SDK processes, and a maxAge of 60 seconds should be\n * enough to handle multiple subscribers attached programmatically to a job.\n * If it's not, then the worst case is that we'd make additional API calls.\n */\n maxAge: 60_000,\n maxSize: Infinity,\n },\n );\n\n constructor(config: SonarV2Config & SonarV3Config) {\n this.#config = config;\n }\n\n _jobFromEntity(id: string, entity: JobEntity): Job {\n return new Job(jobEntityToProperties(id, entity), this.#config, this.observe.bind(this));\n }\n\n create(query: Query) {\n return this.#config\n .sonarV3Request(`sql`, {\n body: JSON.stringify({\n context: query.context,\n sql: query.sql,\n }),\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n keepalive: true,\n method: \"POST\",\n })\n .map((response) => response.json() as Promise<{ id: string }>)\n .map((response) => response.id).promise;\n }\n\n /**\n * Runs multiple queries sequentially, waiting for each one to finish successfully\n * before starting the next. If a query fails, any subsequent queries will not be\n * run.\n */\n async *createSequential(queries: Query[]) {\n for (let i = 0; i < queries.length; i++) {\n const result = await this.createAndRetrieve(queries.at(i)!);\n yield result;\n\n /**\n * Stop processing additional queries if the job prior to it failed\n */\n if (\n // If it's the last query, return immediately rather than waiting for it to finish\n i !== queries.length - 1 &&\n (result.isErr() || (await result.value.retrieveSettled()).state !== \"COMPLETED\")\n ) {\n break;\n }\n }\n }\n\n /**\n * A convenience method to combine job creation and retrieval\n */\n createAndRetrieve(query: Query) {\n return new AsyncResult(this.create(query)).andThen((jobId) => this.retrieve(jobId)).promise;\n }\n\n /**\n * @deprecated\n */\n _list(params: z.infer<typeof jobListParamsSchema>) {\n const { getNextPage, listJobs } = createListJobs(this.#config);\n return {\n async *data({ signal }: SignalParam = {}) {\n const firstPageResult = await listJobs(params).promise;\n\n if (firstPageResult.isErr()) {\n throw firstPageResult.error;\n }\n\n yield* firstPageResult.value.data;\n let nextPageToken = firstPageResult.value.next;\n\n while (nextPageToken) {\n const nextPage = await getNextPage(nextPageToken, { signal }).promise.then((result) =>\n result.unwrap(),\n );\n nextPageToken = nextPage.next;\n yield* nextPage.data;\n }\n },\n };\n }\n\n observe(id: string) {\n return this.#jobObserverCache(id);\n }\n\n retrieve(id: string, { signal }: SignalParam = {}) {\n return this.#config\n .sonarV3Request(`job/${id}`, { signal })\n .map((res) => res.json() as Promise<JobEntity>)\n .map((entity) => this._jobFromEntity(id, entity)).promise;\n }\n}\n\nconst jobPollingBackoff = (count: number) =>\n Math.min(Math.ceil((Math.max(count, 0) ** 2 / 40 + 1) * 1000), 3_000);\n"]}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import * as z from "zod/mini";
|
|
2
|
+
import type { SonarV2Config } from "../../common/Config.ts";
|
|
3
|
+
import { Temporal } from "temporal-polyfill";
|
|
4
|
+
import type { SignalParam } from "../../common/Params.ts";
|
|
5
|
+
export declare const jobListParamsSchema: z.ZodMiniObject<{
|
|
6
|
+
contains: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
7
|
+
dateRange: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
8
|
+
end: z.ZodMiniOptional<z.ZodMiniCustom<Temporal.Instant, Temporal.Instant>>;
|
|
9
|
+
start: z.ZodMiniCustom<Temporal.Instant, Temporal.Instant>;
|
|
10
|
+
}, z.core.$strict>>;
|
|
11
|
+
queryType: z.ZodMiniOptional<z.ZodMiniSet<z.ZodMiniEnum<{
|
|
12
|
+
INTERNAL: "INTERNAL";
|
|
13
|
+
EXTERNAL: "EXTERNAL";
|
|
14
|
+
ACCELERATION: "ACCELERATION";
|
|
15
|
+
DOWNLOAD: "DOWNLOAD";
|
|
16
|
+
UI: "UI";
|
|
17
|
+
}>>>;
|
|
18
|
+
sort: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
19
|
+
direction: z.ZodMiniEnum<{
|
|
20
|
+
ASC: "ASC";
|
|
21
|
+
DESC: "DESC";
|
|
22
|
+
}>;
|
|
23
|
+
field: z.ZodMiniEnum<{
|
|
24
|
+
user: "user";
|
|
25
|
+
duration: "duration";
|
|
26
|
+
startTime: "startTime";
|
|
27
|
+
}>;
|
|
28
|
+
}, z.core.$strict>>;
|
|
29
|
+
status: z.ZodMiniOptional<z.ZodMiniSet<z.ZodMiniEnum<{
|
|
30
|
+
RUNNING: "RUNNING";
|
|
31
|
+
COMPLETED: "COMPLETED";
|
|
32
|
+
CANCELED: "CANCELED";
|
|
33
|
+
FAILED: "FAILED";
|
|
34
|
+
QUEUED: "QUEUED";
|
|
35
|
+
ENGINE_START: "ENGINE_START";
|
|
36
|
+
SETUP: "SETUP";
|
|
37
|
+
}>>>;
|
|
38
|
+
user: z.ZodMiniOptional<z.ZodMiniSet<z.ZodMiniString<string>>>;
|
|
39
|
+
}, z.core.$strict>;
|
|
40
|
+
export declare function mapParams(params: z.infer<typeof jobListParamsSchema>): {
|
|
41
|
+
readonly detailLevel: "1";
|
|
42
|
+
readonly filter: string[];
|
|
43
|
+
readonly order: "DESCENDING" | "ASCENDING" | undefined;
|
|
44
|
+
readonly sort: "dur" | "st" | "usr" | undefined;
|
|
45
|
+
};
|
|
46
|
+
export declare const jobDetailsInSchema: z.ZodMiniObject<{
|
|
47
|
+
accelerated: z.ZodMiniBoolean<boolean>;
|
|
48
|
+
datasetVersion: z.ZodMiniString<string>;
|
|
49
|
+
description: z.ZodMiniString<string>;
|
|
50
|
+
duration: z.ZodMiniNumber<number>;
|
|
51
|
+
durationDetails: z.ZodMiniArray<z.ZodMiniObject<{
|
|
52
|
+
phaseDuration: z.ZodMiniString<string>;
|
|
53
|
+
phaseName: z.ZodMiniEnum<{
|
|
54
|
+
STARTING: "STARTING";
|
|
55
|
+
RUNNING: "RUNNING";
|
|
56
|
+
PLANNING: "PLANNING";
|
|
57
|
+
PENDING: "PENDING";
|
|
58
|
+
METADATA_RETRIEVAL: "METADATA_RETRIEVAL";
|
|
59
|
+
QUEUED: "QUEUED";
|
|
60
|
+
ENGINE_START: "ENGINE_START";
|
|
61
|
+
EXECUTION_PLANNING: "EXECUTION_PLANNING";
|
|
62
|
+
}>;
|
|
63
|
+
phaseStartTime: z.ZodMiniString<string>;
|
|
64
|
+
}, z.core.$strip>>;
|
|
65
|
+
endTime: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
66
|
+
enqueuedTime: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
67
|
+
id: z.ZodMiniString<string>;
|
|
68
|
+
input: z.ZodMiniString<string>;
|
|
69
|
+
isComplete: z.ZodMiniBoolean<boolean>;
|
|
70
|
+
output: z.ZodMiniString<string>;
|
|
71
|
+
outputLimited: z.ZodMiniBoolean<boolean>;
|
|
72
|
+
outputRecords: z.ZodMiniNumber<number>;
|
|
73
|
+
plannerEstimatedCost: z.ZodMiniNumber<number>;
|
|
74
|
+
queriedDatasets: z.ZodMiniArray<z.ZodMiniObject<{
|
|
75
|
+
datasetName: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
76
|
+
datasetPath: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
77
|
+
datasetPathsList: z.ZodMiniArray<z.ZodMiniString<string>>;
|
|
78
|
+
datasetType: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
79
|
+
versionContext: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
queryText: z.ZodMiniString<string>;
|
|
82
|
+
queryType: z.ZodMiniEnum<{
|
|
83
|
+
UI_RUN: "UI_RUN";
|
|
84
|
+
UI_PREVIEW: "UI_PREVIEW";
|
|
85
|
+
UI_INTERNAL_PREVIEW: "UI_INTERNAL_PREVIEW";
|
|
86
|
+
UI_INTERNAL_RUN: "UI_INTERNAL_RUN";
|
|
87
|
+
UI_EXPORT: "UI_EXPORT";
|
|
88
|
+
ODBC: "ODBC";
|
|
89
|
+
JDBC: "JDBC";
|
|
90
|
+
REST: "REST";
|
|
91
|
+
ACCELERATOR_CREATE: "ACCELERATOR_CREATE";
|
|
92
|
+
ACCELERATOR_DROP: "ACCELERATOR_DROP";
|
|
93
|
+
UNKNOWN: "UNKNOWN";
|
|
94
|
+
PREPARE_INTERNAL: "PREPARE_INTERNAL";
|
|
95
|
+
ACCELERATOR_EXPLAIN: "ACCELERATOR_EXPLAIN";
|
|
96
|
+
UI_INITIAL_PREVIEW: "UI_INITIAL_PREVIEW";
|
|
97
|
+
METADATA_REFRESH: "METADATA_REFRESH";
|
|
98
|
+
FLIGHT: "FLIGHT";
|
|
99
|
+
INTERNAL_ICEBERG_METADATA_DROP: "INTERNAL_ICEBERG_METADATA_DROP";
|
|
100
|
+
}>;
|
|
101
|
+
requestType: z.ZodMiniString<string>;
|
|
102
|
+
rowsScanned: z.ZodMiniNumber<number>;
|
|
103
|
+
spilled: z.ZodMiniBoolean<boolean>;
|
|
104
|
+
starFlakeAccelerated: z.ZodMiniBoolean<boolean>;
|
|
105
|
+
startTime: z.ZodMiniNumber<number>;
|
|
106
|
+
state: z.ZodMiniString<string>;
|
|
107
|
+
totalAttempts: z.ZodMiniNumber<number>;
|
|
108
|
+
user: z.ZodMiniString<string>;
|
|
109
|
+
waitInClient: z.ZodMiniNumber<number>;
|
|
110
|
+
wlmQueue: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
111
|
+
}, z.core.$strip>;
|
|
112
|
+
export declare const jobDetailsCodec: z.ZodMiniCodec<z.ZodMiniObject<{
|
|
113
|
+
accelerated: z.ZodMiniBoolean<boolean>;
|
|
114
|
+
datasetVersion: z.ZodMiniString<string>;
|
|
115
|
+
description: z.ZodMiniString<string>;
|
|
116
|
+
duration: z.ZodMiniNumber<number>;
|
|
117
|
+
durationDetails: z.ZodMiniArray<z.ZodMiniObject<{
|
|
118
|
+
phaseDuration: z.ZodMiniString<string>;
|
|
119
|
+
phaseName: z.ZodMiniEnum<{
|
|
120
|
+
STARTING: "STARTING";
|
|
121
|
+
RUNNING: "RUNNING";
|
|
122
|
+
PLANNING: "PLANNING";
|
|
123
|
+
PENDING: "PENDING";
|
|
124
|
+
METADATA_RETRIEVAL: "METADATA_RETRIEVAL";
|
|
125
|
+
QUEUED: "QUEUED";
|
|
126
|
+
ENGINE_START: "ENGINE_START";
|
|
127
|
+
EXECUTION_PLANNING: "EXECUTION_PLANNING";
|
|
128
|
+
}>;
|
|
129
|
+
phaseStartTime: z.ZodMiniString<string>;
|
|
130
|
+
}, z.core.$strip>>;
|
|
131
|
+
endTime: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
132
|
+
enqueuedTime: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
133
|
+
id: z.ZodMiniString<string>;
|
|
134
|
+
input: z.ZodMiniString<string>;
|
|
135
|
+
isComplete: z.ZodMiniBoolean<boolean>;
|
|
136
|
+
output: z.ZodMiniString<string>;
|
|
137
|
+
outputLimited: z.ZodMiniBoolean<boolean>;
|
|
138
|
+
outputRecords: z.ZodMiniNumber<number>;
|
|
139
|
+
plannerEstimatedCost: z.ZodMiniNumber<number>;
|
|
140
|
+
queriedDatasets: z.ZodMiniArray<z.ZodMiniObject<{
|
|
141
|
+
datasetName: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
142
|
+
datasetPath: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
143
|
+
datasetPathsList: z.ZodMiniArray<z.ZodMiniString<string>>;
|
|
144
|
+
datasetType: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
145
|
+
versionContext: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
146
|
+
}, z.core.$strip>>;
|
|
147
|
+
queryText: z.ZodMiniString<string>;
|
|
148
|
+
queryType: z.ZodMiniEnum<{
|
|
149
|
+
UI_RUN: "UI_RUN";
|
|
150
|
+
UI_PREVIEW: "UI_PREVIEW";
|
|
151
|
+
UI_INTERNAL_PREVIEW: "UI_INTERNAL_PREVIEW";
|
|
152
|
+
UI_INTERNAL_RUN: "UI_INTERNAL_RUN";
|
|
153
|
+
UI_EXPORT: "UI_EXPORT";
|
|
154
|
+
ODBC: "ODBC";
|
|
155
|
+
JDBC: "JDBC";
|
|
156
|
+
REST: "REST";
|
|
157
|
+
ACCELERATOR_CREATE: "ACCELERATOR_CREATE";
|
|
158
|
+
ACCELERATOR_DROP: "ACCELERATOR_DROP";
|
|
159
|
+
UNKNOWN: "UNKNOWN";
|
|
160
|
+
PREPARE_INTERNAL: "PREPARE_INTERNAL";
|
|
161
|
+
ACCELERATOR_EXPLAIN: "ACCELERATOR_EXPLAIN";
|
|
162
|
+
UI_INITIAL_PREVIEW: "UI_INITIAL_PREVIEW";
|
|
163
|
+
METADATA_REFRESH: "METADATA_REFRESH";
|
|
164
|
+
FLIGHT: "FLIGHT";
|
|
165
|
+
INTERNAL_ICEBERG_METADATA_DROP: "INTERNAL_ICEBERG_METADATA_DROP";
|
|
166
|
+
}>;
|
|
167
|
+
requestType: z.ZodMiniString<string>;
|
|
168
|
+
rowsScanned: z.ZodMiniNumber<number>;
|
|
169
|
+
spilled: z.ZodMiniBoolean<boolean>;
|
|
170
|
+
starFlakeAccelerated: z.ZodMiniBoolean<boolean>;
|
|
171
|
+
startTime: z.ZodMiniNumber<number>;
|
|
172
|
+
state: z.ZodMiniString<string>;
|
|
173
|
+
totalAttempts: z.ZodMiniNumber<number>;
|
|
174
|
+
user: z.ZodMiniString<string>;
|
|
175
|
+
waitInClient: z.ZodMiniNumber<number>;
|
|
176
|
+
wlmQueue: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
177
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
178
|
+
id: z.ZodMiniString<string>;
|
|
179
|
+
queryType: z.ZodMiniEnum<{
|
|
180
|
+
UI_RUN: "UI_RUN";
|
|
181
|
+
UI_PREVIEW: "UI_PREVIEW";
|
|
182
|
+
UI_INTERNAL_PREVIEW: "UI_INTERNAL_PREVIEW";
|
|
183
|
+
UI_INTERNAL_RUN: "UI_INTERNAL_RUN";
|
|
184
|
+
UI_EXPORT: "UI_EXPORT";
|
|
185
|
+
ODBC: "ODBC";
|
|
186
|
+
JDBC: "JDBC";
|
|
187
|
+
REST: "REST";
|
|
188
|
+
ACCELERATOR_CREATE: "ACCELERATOR_CREATE";
|
|
189
|
+
ACCELERATOR_DROP: "ACCELERATOR_DROP";
|
|
190
|
+
UNKNOWN: "UNKNOWN";
|
|
191
|
+
PREPARE_INTERNAL: "PREPARE_INTERNAL";
|
|
192
|
+
ACCELERATOR_EXPLAIN: "ACCELERATOR_EXPLAIN";
|
|
193
|
+
UI_INITIAL_PREVIEW: "UI_INITIAL_PREVIEW";
|
|
194
|
+
METADATA_REFRESH: "METADATA_REFRESH";
|
|
195
|
+
FLIGHT: "FLIGHT";
|
|
196
|
+
INTERNAL_ICEBERG_METADATA_DROP: "INTERNAL_ICEBERG_METADATA_DROP";
|
|
197
|
+
}>;
|
|
198
|
+
state: z.ZodMiniString<string>;
|
|
199
|
+
description: z.ZodMiniString<string>;
|
|
200
|
+
user: z.ZodMiniString<string>;
|
|
201
|
+
input: z.ZodMiniString<string>;
|
|
202
|
+
output: z.ZodMiniString<string>;
|
|
203
|
+
accelerated: z.ZodMiniBoolean<boolean>;
|
|
204
|
+
datasetVersion: z.ZodMiniString<string>;
|
|
205
|
+
durationDetails: z.ZodMiniArray<z.ZodMiniObject<{
|
|
206
|
+
phaseDuration: z.ZodMiniString<string>;
|
|
207
|
+
phaseName: z.ZodMiniEnum<{
|
|
208
|
+
STARTING: "STARTING";
|
|
209
|
+
RUNNING: "RUNNING";
|
|
210
|
+
PLANNING: "PLANNING";
|
|
211
|
+
PENDING: "PENDING";
|
|
212
|
+
METADATA_RETRIEVAL: "METADATA_RETRIEVAL";
|
|
213
|
+
QUEUED: "QUEUED";
|
|
214
|
+
ENGINE_START: "ENGINE_START";
|
|
215
|
+
EXECUTION_PLANNING: "EXECUTION_PLANNING";
|
|
216
|
+
}>;
|
|
217
|
+
phaseStartTime: z.ZodMiniString<string>;
|
|
218
|
+
}, z.core.$strip>>;
|
|
219
|
+
enqueuedTime: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
220
|
+
isComplete: z.ZodMiniBoolean<boolean>;
|
|
221
|
+
outputLimited: z.ZodMiniBoolean<boolean>;
|
|
222
|
+
outputRecords: z.ZodMiniNumber<number>;
|
|
223
|
+
plannerEstimatedCost: z.ZodMiniNumber<number>;
|
|
224
|
+
queriedDatasets: z.ZodMiniArray<z.ZodMiniObject<{
|
|
225
|
+
datasetName: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
226
|
+
datasetPath: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
227
|
+
datasetPathsList: z.ZodMiniArray<z.ZodMiniString<string>>;
|
|
228
|
+
datasetType: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
229
|
+
versionContext: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
230
|
+
}, z.core.$strip>>;
|
|
231
|
+
queryText: z.ZodMiniString<string>;
|
|
232
|
+
requestType: z.ZodMiniString<string>;
|
|
233
|
+
rowsScanned: z.ZodMiniNumber<number>;
|
|
234
|
+
spilled: z.ZodMiniBoolean<boolean>;
|
|
235
|
+
starFlakeAccelerated: z.ZodMiniBoolean<boolean>;
|
|
236
|
+
totalAttempts: z.ZodMiniNumber<number>;
|
|
237
|
+
waitInClient: z.ZodMiniNumber<number>;
|
|
238
|
+
wlmQueue: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
239
|
+
duration: z.ZodMiniCustom<Temporal.Duration, Temporal.Duration>;
|
|
240
|
+
endTime: z.ZodMiniOptional<z.ZodMiniCustom<Temporal.Instant, Temporal.Instant>>;
|
|
241
|
+
startTime: z.ZodMiniCustom<Temporal.Instant, Temporal.Instant>;
|
|
242
|
+
}, z.core.$strip>>;
|
|
243
|
+
export declare function createListJobs(config: SonarV2Config): {
|
|
244
|
+
getNextPage: (nextPage: string, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<{
|
|
245
|
+
data: {
|
|
246
|
+
id: string;
|
|
247
|
+
queryType: "UI_RUN" | "UI_PREVIEW" | "UI_INTERNAL_PREVIEW" | "UI_INTERNAL_RUN" | "UI_EXPORT" | "ODBC" | "JDBC" | "REST" | "ACCELERATOR_CREATE" | "ACCELERATOR_DROP" | "UNKNOWN" | "PREPARE_INTERNAL" | "ACCELERATOR_EXPLAIN" | "UI_INITIAL_PREVIEW" | "METADATA_REFRESH" | "FLIGHT" | "INTERNAL_ICEBERG_METADATA_DROP";
|
|
248
|
+
state: string;
|
|
249
|
+
description: string;
|
|
250
|
+
user: string;
|
|
251
|
+
input: string;
|
|
252
|
+
output: string;
|
|
253
|
+
accelerated: boolean;
|
|
254
|
+
datasetVersion: string;
|
|
255
|
+
durationDetails: {
|
|
256
|
+
phaseDuration: string;
|
|
257
|
+
phaseName: "STARTING" | "RUNNING" | "PLANNING" | "PENDING" | "METADATA_RETRIEVAL" | "QUEUED" | "ENGINE_START" | "EXECUTION_PLANNING";
|
|
258
|
+
phaseStartTime: string;
|
|
259
|
+
}[];
|
|
260
|
+
isComplete: boolean;
|
|
261
|
+
outputLimited: boolean;
|
|
262
|
+
outputRecords: number;
|
|
263
|
+
plannerEstimatedCost: number;
|
|
264
|
+
queriedDatasets: {
|
|
265
|
+
datasetPathsList: string[];
|
|
266
|
+
datasetName?: string | undefined;
|
|
267
|
+
datasetPath?: string | undefined;
|
|
268
|
+
datasetType?: string | undefined;
|
|
269
|
+
versionContext?: string | undefined;
|
|
270
|
+
}[];
|
|
271
|
+
queryText: string;
|
|
272
|
+
requestType: string;
|
|
273
|
+
rowsScanned: number;
|
|
274
|
+
spilled: boolean;
|
|
275
|
+
starFlakeAccelerated: boolean;
|
|
276
|
+
totalAttempts: number;
|
|
277
|
+
waitInClient: number;
|
|
278
|
+
duration: Temporal.Duration;
|
|
279
|
+
startTime: Temporal.Instant;
|
|
280
|
+
enqueuedTime?: string | undefined;
|
|
281
|
+
wlmQueue?: string | undefined;
|
|
282
|
+
endTime?: Temporal.Instant | undefined;
|
|
283
|
+
}[];
|
|
284
|
+
next: string | undefined;
|
|
285
|
+
}, import("../index.ts").HttpError>;
|
|
286
|
+
listJobs: (params: z.infer<typeof jobListParamsSchema>, { signal }?: SignalParam) => import("ts-results-es").AsyncResult<{
|
|
287
|
+
data: {
|
|
288
|
+
id: string;
|
|
289
|
+
queryType: "UI_RUN" | "UI_PREVIEW" | "UI_INTERNAL_PREVIEW" | "UI_INTERNAL_RUN" | "UI_EXPORT" | "ODBC" | "JDBC" | "REST" | "ACCELERATOR_CREATE" | "ACCELERATOR_DROP" | "UNKNOWN" | "PREPARE_INTERNAL" | "ACCELERATOR_EXPLAIN" | "UI_INITIAL_PREVIEW" | "METADATA_REFRESH" | "FLIGHT" | "INTERNAL_ICEBERG_METADATA_DROP";
|
|
290
|
+
state: string;
|
|
291
|
+
description: string;
|
|
292
|
+
user: string;
|
|
293
|
+
input: string;
|
|
294
|
+
output: string;
|
|
295
|
+
accelerated: boolean;
|
|
296
|
+
datasetVersion: string;
|
|
297
|
+
durationDetails: {
|
|
298
|
+
phaseDuration: string;
|
|
299
|
+
phaseName: "STARTING" | "RUNNING" | "PLANNING" | "PENDING" | "METADATA_RETRIEVAL" | "QUEUED" | "ENGINE_START" | "EXECUTION_PLANNING";
|
|
300
|
+
phaseStartTime: string;
|
|
301
|
+
}[];
|
|
302
|
+
isComplete: boolean;
|
|
303
|
+
outputLimited: boolean;
|
|
304
|
+
outputRecords: number;
|
|
305
|
+
plannerEstimatedCost: number;
|
|
306
|
+
queriedDatasets: {
|
|
307
|
+
datasetPathsList: string[];
|
|
308
|
+
datasetName?: string | undefined;
|
|
309
|
+
datasetPath?: string | undefined;
|
|
310
|
+
datasetType?: string | undefined;
|
|
311
|
+
versionContext?: string | undefined;
|
|
312
|
+
}[];
|
|
313
|
+
queryText: string;
|
|
314
|
+
requestType: string;
|
|
315
|
+
rowsScanned: number;
|
|
316
|
+
spilled: boolean;
|
|
317
|
+
starFlakeAccelerated: boolean;
|
|
318
|
+
totalAttempts: number;
|
|
319
|
+
waitInClient: number;
|
|
320
|
+
duration: Temporal.Duration;
|
|
321
|
+
startTime: Temporal.Instant;
|
|
322
|
+
enqueuedTime?: string | undefined;
|
|
323
|
+
wlmQueue?: string | undefined;
|
|
324
|
+
endTime?: Temporal.Instant | undefined;
|
|
325
|
+
}[];
|
|
326
|
+
next: string | undefined;
|
|
327
|
+
}, import("../index.ts").HttpError>;
|
|
328
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2024-2025 Dremio Corporation
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import * as z from "zod/mini";
|
|
17
|
+
import { Temporal } from "temporal-polyfill";
|
|
18
|
+
import parseMilliseconds from "parse-ms";
|
|
19
|
+
export const jobListParamsSchema = z.partial(z.strictObject({
|
|
20
|
+
contains: z.string().check(z.trim(), z.minLength(1)),
|
|
21
|
+
dateRange: z.strictObject({
|
|
22
|
+
end: z.optional(z.instanceof(Temporal.Instant)),
|
|
23
|
+
start: z.instanceof(Temporal.Instant),
|
|
24
|
+
}),
|
|
25
|
+
queryType: z.set(z.enum(["ACCELERATION", "DOWNLOAD", "EXTERNAL", "INTERNAL", "UI"])),
|
|
26
|
+
sort: z.strictObject({
|
|
27
|
+
direction: z.enum(["ASC", "DESC"]),
|
|
28
|
+
field: z.enum(["duration", "startTime", "user"]),
|
|
29
|
+
}),
|
|
30
|
+
status: z.set(z.enum(["SETUP", "QUEUED", "ENGINE_START", "RUNNING", "COMPLETED", "CANCELED", "FAILED"])),
|
|
31
|
+
user: z.set(z.string().check(z.trim(), z.minLength(1))),
|
|
32
|
+
}));
|
|
33
|
+
export function mapParams(params) {
|
|
34
|
+
const filter = [];
|
|
35
|
+
if (params.contains) {
|
|
36
|
+
filter.push(`*=contains=${JSON.stringify(params.contains)}`);
|
|
37
|
+
}
|
|
38
|
+
if (params.queryType?.size) {
|
|
39
|
+
filter.push(`(${Array.from(params.queryType)
|
|
40
|
+
.map((v) => `qt=="${v}"`)
|
|
41
|
+
.join(",")})`);
|
|
42
|
+
}
|
|
43
|
+
if (params.status?.size) {
|
|
44
|
+
filter.push(`(${Array.from(params.status)
|
|
45
|
+
.map((v) => `jst=="${v}"`)
|
|
46
|
+
.join(",")})`);
|
|
47
|
+
}
|
|
48
|
+
if (params.user?.size) {
|
|
49
|
+
filter.push(`(${Array.from(params.user)
|
|
50
|
+
.map((v) => `usr=="${v}"`)
|
|
51
|
+
.join(",")})`);
|
|
52
|
+
}
|
|
53
|
+
if (params.dateRange?.start) {
|
|
54
|
+
const { end, start } = params.dateRange;
|
|
55
|
+
filter.push(`(${[
|
|
56
|
+
start && `st=gt=${start.epochMilliseconds}`,
|
|
57
|
+
end && `st=lt=${end.epochMilliseconds}`,
|
|
58
|
+
].join(";")})`);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
detailLevel: "1",
|
|
62
|
+
filter,
|
|
63
|
+
order: params.sort
|
|
64
|
+
? params.sort.direction === "DESC"
|
|
65
|
+
? "DESCENDING"
|
|
66
|
+
: "ASCENDING"
|
|
67
|
+
: undefined,
|
|
68
|
+
sort: params.sort ? fieldToV2Mapping[params.sort.field] : undefined,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const fieldToV2Mapping = {
|
|
72
|
+
duration: "dur",
|
|
73
|
+
startTime: "st",
|
|
74
|
+
user: "usr",
|
|
75
|
+
};
|
|
76
|
+
export const jobDetailsInSchema = z.object({
|
|
77
|
+
accelerated: z.boolean(),
|
|
78
|
+
datasetVersion: z.string(),
|
|
79
|
+
description: z.string(),
|
|
80
|
+
duration: z.number(),
|
|
81
|
+
durationDetails: z.array(z.object({
|
|
82
|
+
phaseDuration: z.string(),
|
|
83
|
+
phaseName: z.enum([
|
|
84
|
+
"EXECUTION_PLANNING",
|
|
85
|
+
"METADATA_RETRIEVAL",
|
|
86
|
+
"PENDING",
|
|
87
|
+
"PLANNING",
|
|
88
|
+
"QUEUED",
|
|
89
|
+
"RUNNING",
|
|
90
|
+
"STARTING",
|
|
91
|
+
"ENGINE_START",
|
|
92
|
+
]),
|
|
93
|
+
phaseStartTime: z.string(),
|
|
94
|
+
})),
|
|
95
|
+
endTime: z.optional(z.number()),
|
|
96
|
+
enqueuedTime: z.optional(z.string()),
|
|
97
|
+
id: z.string(),
|
|
98
|
+
input: z.string(),
|
|
99
|
+
isComplete: z.boolean(),
|
|
100
|
+
output: z.string(),
|
|
101
|
+
outputLimited: z.boolean(),
|
|
102
|
+
outputRecords: z.number(),
|
|
103
|
+
plannerEstimatedCost: z.number(),
|
|
104
|
+
queriedDatasets: z.array(z.object({
|
|
105
|
+
datasetName: z.optional(z.string()),
|
|
106
|
+
datasetPath: z.optional(z.string()),
|
|
107
|
+
datasetPathsList: z.array(z.string()),
|
|
108
|
+
datasetType: z.optional(z.string()),
|
|
109
|
+
versionContext: z.optional(z.string()),
|
|
110
|
+
})),
|
|
111
|
+
queryText: z.string(),
|
|
112
|
+
queryType: z.enum([
|
|
113
|
+
"UI_RUN",
|
|
114
|
+
"UI_PREVIEW",
|
|
115
|
+
"UI_INTERNAL_PREVIEW",
|
|
116
|
+
"UI_INTERNAL_RUN",
|
|
117
|
+
"UI_EXPORT",
|
|
118
|
+
"ODBC",
|
|
119
|
+
"JDBC",
|
|
120
|
+
"REST",
|
|
121
|
+
"ACCELERATOR_CREATE",
|
|
122
|
+
"ACCELERATOR_DROP",
|
|
123
|
+
"UNKNOWN",
|
|
124
|
+
"PREPARE_INTERNAL",
|
|
125
|
+
"ACCELERATOR_EXPLAIN",
|
|
126
|
+
"UI_INITIAL_PREVIEW",
|
|
127
|
+
"METADATA_REFRESH",
|
|
128
|
+
"FLIGHT",
|
|
129
|
+
"INTERNAL_ICEBERG_METADATA_DROP",
|
|
130
|
+
]),
|
|
131
|
+
requestType: z.string(),
|
|
132
|
+
rowsScanned: z.number(),
|
|
133
|
+
spilled: z.boolean(),
|
|
134
|
+
starFlakeAccelerated: z.boolean(),
|
|
135
|
+
startTime: z.number(),
|
|
136
|
+
state: z.string(),
|
|
137
|
+
totalAttempts: z.number(),
|
|
138
|
+
user: z.string(),
|
|
139
|
+
waitInClient: z.number(),
|
|
140
|
+
wlmQueue: z.optional(z.string()),
|
|
141
|
+
});
|
|
142
|
+
export const jobDetailsCodec = z.codec(jobDetailsInSchema, z.extend(z.omit(jobDetailsInSchema, {
|
|
143
|
+
duration: true,
|
|
144
|
+
endTime: true,
|
|
145
|
+
startTime: true,
|
|
146
|
+
}), {
|
|
147
|
+
duration: z.instanceof(Temporal.Duration),
|
|
148
|
+
endTime: z.optional(z.instanceof(Temporal.Instant)),
|
|
149
|
+
startTime: z.instanceof(Temporal.Instant),
|
|
150
|
+
}), {
|
|
151
|
+
decode(v) {
|
|
152
|
+
return {
|
|
153
|
+
...v,
|
|
154
|
+
duration: Temporal.Duration.from(parseMilliseconds(v.duration)),
|
|
155
|
+
endTime: v.endTime ? Temporal.Instant.fromEpochMilliseconds(v.endTime) : undefined,
|
|
156
|
+
startTime: Temporal.Instant.fromEpochMilliseconds(v.startTime),
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
encode(v) {
|
|
160
|
+
return {
|
|
161
|
+
...v,
|
|
162
|
+
duration: 0, // Skip installing something like to-milliseconds to achieve this
|
|
163
|
+
endTime: v.endTime ? v.endTime.epochMilliseconds : undefined,
|
|
164
|
+
startTime: v.startTime.epochMilliseconds,
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
export function createListJobs(config) {
|
|
169
|
+
return {
|
|
170
|
+
getNextPage: (nextPage, { signal } = {}) => {
|
|
171
|
+
return config
|
|
172
|
+
.sonarV2Request(`jobs-listing/v1.0/${new URL(nextPage, "https://dremio").search}`, {
|
|
173
|
+
headers: {
|
|
174
|
+
Accept: "application/json",
|
|
175
|
+
},
|
|
176
|
+
signal,
|
|
177
|
+
})
|
|
178
|
+
.map((res) => res.json())
|
|
179
|
+
.map((response) => ({
|
|
180
|
+
data: response.jobs.reduce((accum, curr) => {
|
|
181
|
+
const parseResult = z.safeDecode(jobDetailsCodec, curr);
|
|
182
|
+
if (!parseResult.success) {
|
|
183
|
+
// config.logger?.error(
|
|
184
|
+
// new Error(`Failed to parse job details`, { cause: parseResult.error }),
|
|
185
|
+
// );
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
accum.push(parseResult.data);
|
|
189
|
+
}
|
|
190
|
+
return accum;
|
|
191
|
+
}, []),
|
|
192
|
+
next: response.next,
|
|
193
|
+
}));
|
|
194
|
+
},
|
|
195
|
+
listJobs: (params, { signal } = {}) => {
|
|
196
|
+
const searchParams = new URLSearchParams(Object.entries(mapParams(z.parse(jobListParamsSchema, params))).filter((entry) => !!entry[1]));
|
|
197
|
+
return config
|
|
198
|
+
.sonarV2Request(`jobs-listing/v1.0/?${searchParams.toString()}`, {
|
|
199
|
+
headers: {
|
|
200
|
+
Accept: "application/json",
|
|
201
|
+
},
|
|
202
|
+
signal,
|
|
203
|
+
})
|
|
204
|
+
.map((res) => res.json())
|
|
205
|
+
.map((response) => ({
|
|
206
|
+
data: response.jobs.reduce((accum, curr) => {
|
|
207
|
+
const parseResult = z.safeDecode(jobDetailsCodec, curr);
|
|
208
|
+
if (!parseResult.success) {
|
|
209
|
+
// config.logger?.error(
|
|
210
|
+
// new Error(`Failed to parse job details`, { cause: parseResult.error }),
|
|
211
|
+
// );
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
accum.push(parseResult.data);
|
|
215
|
+
}
|
|
216
|
+
return accum;
|
|
217
|
+
}, []),
|
|
218
|
+
next: response.next,
|
|
219
|
+
}));
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=listJobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listJobs.js","sourceRoot":"","sources":["../../../src/oss/jobs/listJobs.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2024-2025 Dremio Corporation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as z from \"zod/mini\";\nimport type { SonarV2Config } from \"../../common/Config.ts\";\nimport { Temporal } from \"temporal-polyfill\";\nimport type { SignalParam } from \"../../common/Params.ts\";\nimport parseMilliseconds from \"parse-ms\";\n\nexport const jobListParamsSchema = z.partial(\n z.strictObject({\n contains: z.string().check(z.trim(), z.minLength(1)),\n dateRange: z.strictObject({\n end: z.optional(z.instanceof(Temporal.Instant)),\n start: z.instanceof(Temporal.Instant),\n }),\n queryType: z.set(z.enum([\"ACCELERATION\", \"DOWNLOAD\", \"EXTERNAL\", \"INTERNAL\", \"UI\"])),\n sort: z.strictObject({\n direction: z.enum([\"ASC\", \"DESC\"]),\n field: z.enum([\"duration\", \"startTime\", \"user\"]),\n }),\n status: z.set(\n z.enum([\"SETUP\", \"QUEUED\", \"ENGINE_START\", \"RUNNING\", \"COMPLETED\", \"CANCELED\", \"FAILED\"]),\n ),\n user: z.set(z.string().check(z.trim(), z.minLength(1))),\n }),\n);\n\nexport function mapParams(params: z.infer<typeof jobListParamsSchema>) {\n const filter = [] as string[];\n\n if (params.contains) {\n filter.push(`*=contains=${JSON.stringify(params.contains)}`);\n }\n\n if (params.queryType?.size) {\n filter.push(\n `(${Array.from(params.queryType)\n .map((v) => `qt==\"${v}\"`)\n .join(\",\")})`,\n );\n }\n\n if (params.status?.size) {\n filter.push(\n `(${Array.from(params.status)\n .map((v) => `jst==\"${v}\"`)\n .join(\",\")})`,\n );\n }\n\n if (params.user?.size) {\n filter.push(\n `(${Array.from(params.user)\n .map((v) => `usr==\"${v}\"`)\n .join(\",\")})`,\n );\n }\n\n if (params.dateRange?.start) {\n const { end, start } = params.dateRange;\n filter.push(\n `(${[\n start && `st=gt=${start.epochMilliseconds}`,\n end && `st=lt=${end.epochMilliseconds}`,\n ].join(\";\")})`,\n );\n }\n\n return {\n detailLevel: \"1\",\n filter,\n order: params.sort\n ? params.sort.direction === \"DESC\"\n ? \"DESCENDING\"\n : \"ASCENDING\"\n : undefined,\n sort: params.sort ? fieldToV2Mapping[params.sort.field] : undefined,\n } as const;\n}\n\nconst fieldToV2Mapping = {\n duration: \"dur\",\n startTime: \"st\",\n user: \"usr\",\n} as const satisfies Record<\n NonNullable<z.infer<typeof jobListParamsSchema>[\"sort\"]>[\"field\"],\n unknown\n>;\n\nexport const jobDetailsInSchema = z.object({\n accelerated: z.boolean(),\n datasetVersion: z.string(),\n description: z.string(),\n duration: z.number(),\n durationDetails: z.array(\n z.object({\n phaseDuration: z.string(),\n phaseName: z.enum([\n \"EXECUTION_PLANNING\",\n \"METADATA_RETRIEVAL\",\n \"PENDING\",\n \"PLANNING\",\n \"QUEUED\",\n \"RUNNING\",\n \"STARTING\",\n \"ENGINE_START\",\n ]),\n phaseStartTime: z.string(),\n }),\n ),\n endTime: z.optional(z.number()),\n enqueuedTime: z.optional(z.string()),\n id: z.string(),\n input: z.string(),\n isComplete: z.boolean(),\n output: z.string(),\n outputLimited: z.boolean(),\n outputRecords: z.number(),\n plannerEstimatedCost: z.number(),\n queriedDatasets: z.array(\n z.object({\n datasetName: z.optional(z.string()),\n datasetPath: z.optional(z.string()),\n datasetPathsList: z.array(z.string()),\n datasetType: z.optional(z.string()),\n versionContext: z.optional(z.string()),\n }),\n ),\n queryText: z.string(),\n queryType: z.enum([\n \"UI_RUN\",\n \"UI_PREVIEW\",\n \"UI_INTERNAL_PREVIEW\",\n \"UI_INTERNAL_RUN\",\n \"UI_EXPORT\",\n \"ODBC\",\n \"JDBC\",\n \"REST\",\n \"ACCELERATOR_CREATE\",\n \"ACCELERATOR_DROP\",\n \"UNKNOWN\",\n \"PREPARE_INTERNAL\",\n \"ACCELERATOR_EXPLAIN\",\n \"UI_INITIAL_PREVIEW\",\n \"METADATA_REFRESH\",\n \"FLIGHT\",\n \"INTERNAL_ICEBERG_METADATA_DROP\",\n ]),\n requestType: z.string(),\n rowsScanned: z.number(),\n spilled: z.boolean(),\n starFlakeAccelerated: z.boolean(),\n startTime: z.number(),\n state: z.string(),\n totalAttempts: z.number(),\n user: z.string(),\n waitInClient: z.number(),\n wlmQueue: z.optional(z.string()),\n});\n\nexport const jobDetailsCodec = z.codec(\n jobDetailsInSchema,\n z.extend(\n z.omit(jobDetailsInSchema, {\n duration: true,\n endTime: true,\n startTime: true,\n }),\n {\n duration: z.instanceof(Temporal.Duration),\n endTime: z.optional(z.instanceof(Temporal.Instant)),\n startTime: z.instanceof(Temporal.Instant),\n },\n ),\n {\n decode(v) {\n return {\n ...v,\n duration: Temporal.Duration.from(parseMilliseconds(v.duration)),\n endTime: v.endTime ? Temporal.Instant.fromEpochMilliseconds(v.endTime) : undefined,\n startTime: Temporal.Instant.fromEpochMilliseconds(v.startTime),\n };\n },\n encode(v) {\n return {\n ...v,\n duration: 0, // Skip installing something like to-milliseconds to achieve this\n endTime: v.endTime ? v.endTime.epochMilliseconds : undefined,\n startTime: v.startTime.epochMilliseconds,\n };\n },\n },\n);\n\nexport function createListJobs(config: SonarV2Config) {\n return {\n getNextPage: (nextPage: string, { signal }: SignalParam = {}) => {\n return config\n .sonarV2Request(`jobs-listing/v1.0/${new URL(nextPage, \"https://dremio\").search}`, {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) =>\n res.json() as Promise<{ jobs: z.input<typeof jobDetailsCodec>[]; next?: string }>,\n )\n .map((response) => ({\n data: response.jobs.reduce(\n (accum, curr) => {\n const parseResult = z.safeDecode(jobDetailsCodec, curr);\n if (!parseResult.success) {\n // config.logger?.error(\n // new Error(`Failed to parse job details`, { cause: parseResult.error }),\n // );\n } else {\n accum.push(parseResult.data);\n }\n return accum;\n },\n [] as z.output<typeof jobDetailsCodec>[],\n ),\n next: response.next,\n }));\n },\n listJobs: (params: z.infer<typeof jobListParamsSchema>, { signal }: SignalParam = {}) => {\n const searchParams = new URLSearchParams(\n Object.entries(mapParams(z.parse(jobListParamsSchema, params))).filter(\n (entry) => !!entry[1],\n ) as string[][],\n );\n return config\n .sonarV2Request(`jobs-listing/v1.0/?${searchParams.toString()}`, {\n headers: {\n Accept: \"application/json\",\n },\n signal,\n })\n .map(\n (res) =>\n res.json() as Promise<{ jobs: z.input<typeof jobDetailsCodec>[]; next?: string }>,\n )\n .map((response) => ({\n data: response.jobs.reduce(\n (accum, curr) => {\n const parseResult = z.safeDecode(jobDetailsCodec, curr);\n if (!parseResult.success) {\n // config.logger?.error(\n // new Error(`Failed to parse job details`, { cause: parseResult.error }),\n // );\n } else {\n accum.push(parseResult.data);\n }\n return accum;\n },\n [] as z.output<typeof jobDetailsCodec>[],\n ),\n next: response.next,\n }));\n },\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dremio/js-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.0",
|
|
4
4
|
"description": "JavaScript library for the Dremio API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dremio",
|
|
@@ -39,22 +39,22 @@
|
|
|
39
39
|
"rxjs": "^7",
|
|
40
40
|
"temporal-polyfill": "^0.3.0",
|
|
41
41
|
"ts-results-es": "^5.0.1",
|
|
42
|
-
"zod": "^4"
|
|
42
|
+
"zod": "^4.1.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@eslint/compat": "^1.
|
|
46
|
-
"@eslint/js": "9.
|
|
47
|
-
"eslint": "^9.
|
|
48
|
-
"eslint-config-prettier": "10.1.
|
|
49
|
-
"eslint-plugin-license-header": "0.8.0",
|
|
50
|
-
"eslint-plugin-perfectionist": "4.15.0",
|
|
51
|
-
"eslint-plugin-regexp": "2.
|
|
45
|
+
"@eslint/compat": "^1.4.0",
|
|
46
|
+
"@eslint/js": "^9.36.0",
|
|
47
|
+
"eslint": "^9.36.0",
|
|
48
|
+
"eslint-config-prettier": "^10.1.8",
|
|
49
|
+
"eslint-plugin-license-header": "^0.8.0",
|
|
50
|
+
"eslint-plugin-perfectionist": "^4.15.0",
|
|
51
|
+
"eslint-plugin-regexp": "^2.10.0",
|
|
52
52
|
"js-green-licenses": "4.0.0",
|
|
53
53
|
"prettier": "3.6.2",
|
|
54
54
|
"semantic-release": "24.2.5",
|
|
55
|
-
"typedoc": "0.28.
|
|
56
|
-
"typescript": "5.
|
|
57
|
-
"typescript-eslint": "8.
|
|
55
|
+
"typedoc": "0.28.13",
|
|
56
|
+
"typescript": "5.9.3",
|
|
57
|
+
"typescript-eslint": "^8.45.0"
|
|
58
58
|
},
|
|
59
|
-
"packageManager": "pnpm@10.
|
|
59
|
+
"packageManager": "pnpm@10.17.1"
|
|
60
60
|
}
|