diff --git a/packages/dm-core-plugins/src/job/JobControlButton.tsx b/packages/dm-core-plugins/src/job/JobControlButton.tsx index 16e01382e..41dcbaac3 100644 --- a/packages/dm-core-plugins/src/job/JobControlButton.tsx +++ b/packages/dm-core-plugins/src/job/JobControlButton.tsx @@ -50,7 +50,9 @@ export const JobControlButton = (props: { {status} +
+ +
{progress * 100}
+
Promise fetchResult: () => any // TODO: Type set this return value - logs: string + logs: string[] + progress: GLfloat isLoading: boolean error: ErrorResponse | undefined exists: boolean @@ -75,7 +76,8 @@ interface IUseJob { */ export function useJob(entityId?: string, jobId?: string): IUseJob { const [hookJobId, setHookJobId] = useState(jobId) - const [logs, setLogs] = useState('No logs fetched') + const [logs, setLogs] = useState(['No logs fetched']) + const [progress, setProgress] = useState(0.0) const [status, setStatus] = useState(JobStatus.Unknown) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState() @@ -110,6 +112,7 @@ export function useJob(entityId?: string, jobId?: string): IUseJob { // When hookJobId changes, we register an interval to check status. // The interval is deregistered if the status of the job is not "Running" useEffect(() => { + console.log(hookJobId) if (!hookJobId) return statusIntervalId = setInterval(fetchStatusAndLogs, 5000) return () => clearInterval(statusIntervalId) @@ -131,7 +134,7 @@ export function useJob(entityId?: string, jobId?: string): IUseJob { .startJob({ jobDmssId: entityId }) .then((response: AxiosResponse) => { setHookJobId(response.data.uid) - setLogs(response.data.message) + setLogs([response.data.message]) setError(undefined) setStatus(JobStatus.Running) return response.data @@ -149,25 +152,25 @@ export function useJob(entityId?: string, jobId?: string): IUseJob { async function fetchStatusAndLogs(): Promise { if (!hookJobId) { clearInterval(statusIntervalId) - const message = 'The job has not been started' - setLogs(message) + const log = ['The job has not been started'] + setLogs(log) setStatus(JobStatus.NotStarted) return Promise.resolve({ status: JobStatus.NotStarted, - log: message, - message: message, + log: log, + percentage: 0.0, }) } setIsLoading(true) - return dmJobApi .jobStatus({ jobUid: hookJobId }) .then((response: AxiosResponse) => { + if (response.data.percentage) { + setProgress(response.data.percentage) + } setLogs( - response.data.log ?? - response.data.message ?? - 'No logs or status returned from job handler' + response.data.log ?? ['No logs or status returned from job handler'] ) if (response.data.status !== status) setStatus(response.data.status) if ( @@ -209,6 +212,8 @@ export function useJob(entityId?: string, jobId?: string): IUseJob { .finally(() => { setError(undefined) setIsLoading(false) + setLogs([]) + setProgress(0.0) }) } @@ -238,6 +243,7 @@ export function useJob(entityId?: string, jobId?: string): IUseJob { remove, fetchResult, logs, + progress, isLoading, error, exists: !!hookJobId, diff --git a/packages/dm-core/src/services/api/configs/gen-job/.openapi-generator/FILES b/packages/dm-core/src/services/api/configs/gen-job/.openapi-generator/FILES index 7512ccf1f..02ba740ee 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/.openapi-generator/FILES +++ b/packages/dm-core/src/services/api/configs/gen-job/.openapi-generator/FILES @@ -11,5 +11,7 @@ models/error-response.ts models/get-job-result-response.ts models/index.ts models/job-status.ts +models/progress.ts models/start-job-response.ts models/status-job-response.ts +models/update-job-progress-response.ts diff --git a/packages/dm-core/src/services/api/configs/gen-job/api.ts b/packages/dm-core/src/services/api/configs/gen-job/api.ts index a86c94fae..0220fc07d 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/api.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/api.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/api/dmjobs-api.ts b/packages/dm-core/src/services/api/configs/gen-job/api/dmjobs-api.ts index 272b948a4..5fe700c04 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/api/dmjobs-api.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/api/dmjobs-api.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -26,9 +26,13 @@ import { ErrorResponse } from '../models'; // @ts-ignore import { GetJobResultResponse } from '../models'; // @ts-ignore +import { Progress } from '../models'; +// @ts-ignore import { StartJobResponse } from '../models'; // @ts-ignore import { StatusJobResponse } from '../models'; +// @ts-ignore +import { UpdateJobProgressResponse } from '../models'; /** * DMJobsApi - axios parameter creator * @export @@ -182,6 +186,57 @@ export const DMJobsApiAxiosParamCreator = function (configuration?: Configuratio let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Update the progress of the job. - **job_uid**: the job API\'s internal uid for the job. - **progress**: progress object with percentage and logs + * @summary Progress + * @param {string} jobUid + * @param {boolean} forceLog + * @param {Progress} progress + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + updateJobProgress: async (jobUid: string, forceLog: boolean, progress: Progress, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'jobUid' is not null or undefined + assertParamExists('updateJobProgress', 'jobUid', jobUid) + // verify required parameter 'forceLog' is not null or undefined + assertParamExists('updateJobProgress', 'forceLog', forceLog) + // verify required parameter 'progress' is not null or undefined + assertParamExists('updateJobProgress', 'progress', progress) + const localVarPath = `/{job_uid}` + .replace(`{${"job_uid"}}`, encodeURIComponent(String(jobUid))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication OAuth2AuthorizationCodeBearer required + // oauth required + await setOAuthToObject(localVarHeaderParameter, "OAuth2AuthorizationCodeBearer", [], configuration) + + if (forceLog !== undefined) { + localVarQueryParameter['force_log'] = forceLog; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(progress, localVarRequestOptions, configuration) + return { url: toPathString(localVarUrlObj), options: localVarRequestOptions, @@ -241,6 +296,19 @@ export const DMJobsApiFp = function(configuration?: Configuration) { const localVarAxiosArgs = await localVarAxiosParamCreator.startJob(jobDmssId, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, + /** + * Update the progress of the job. - **job_uid**: the job API\'s internal uid for the job. - **progress**: progress object with percentage and logs + * @summary Progress + * @param {string} jobUid + * @param {boolean} forceLog + * @param {Progress} progress + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async updateJobProgress(jobUid: string, forceLog: boolean, progress: Progress, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.updateJobProgress(jobUid, forceLog, progress, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, } }; @@ -291,6 +359,16 @@ export const DMJobsApiFactory = function (configuration?: Configuration, basePat startJob(requestParameters: DMJobsApiStartJobRequest, options?: AxiosRequestConfig): AxiosPromise { return localVarFp.startJob(requestParameters.jobDmssId, options).then((request) => request(axios, basePath)); }, + /** + * Update the progress of the job. - **job_uid**: the job API\'s internal uid for the job. - **progress**: progress object with percentage and logs + * @summary Progress + * @param {DMJobsApiUpdateJobProgressRequest} requestParameters Request parameters. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + updateJobProgress(requestParameters: DMJobsApiUpdateJobProgressRequest, options?: AxiosRequestConfig): AxiosPromise { + return localVarFp.updateJobProgress(requestParameters.jobUid, requestParameters.forceLog, requestParameters.progress, options).then((request) => request(axios, basePath)); + }, }; }; @@ -350,6 +428,34 @@ export interface DMJobsApiStartJobRequest { readonly jobDmssId: string } +/** + * Request parameters for updateJobProgress operation in DMJobsApi. + * @export + * @interface DMJobsApiUpdateJobProgressRequest + */ +export interface DMJobsApiUpdateJobProgressRequest { + /** + * + * @type {string} + * @memberof DMJobsApiUpdateJobProgress + */ + readonly jobUid: string + + /** + * + * @type {boolean} + * @memberof DMJobsApiUpdateJobProgress + */ + readonly forceLog: boolean + + /** + * + * @type {Progress} + * @memberof DMJobsApiUpdateJobProgress + */ + readonly progress: Progress +} + /** * DMJobsApi - object-oriented interface * @export @@ -404,4 +510,16 @@ export class DMJobsApi extends BaseAPI { public startJob(requestParameters: DMJobsApiStartJobRequest, options?: AxiosRequestConfig) { return DMJobsApiFp(this.configuration).startJob(requestParameters.jobDmssId, options).then((request) => request(this.axios, this.basePath)); } + + /** + * Update the progress of the job. - **job_uid**: the job API\'s internal uid for the job. - **progress**: progress object with percentage and logs + * @summary Progress + * @param {DMJobsApiUpdateJobProgressRequest} requestParameters Request parameters. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DMJobsApi + */ + public updateJobProgress(requestParameters: DMJobsApiUpdateJobProgressRequest, options?: AxiosRequestConfig) { + return DMJobsApiFp(this.configuration).updateJobProgress(requestParameters.jobUid, requestParameters.forceLog, requestParameters.progress, options).then((request) => request(this.axios, this.basePath)); + } } diff --git a/packages/dm-core/src/services/api/configs/gen-job/base.ts b/packages/dm-core/src/services/api/configs/gen-job/base.ts index e97f1bdef..d2b2315c4 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/base.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/base.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/common.ts b/packages/dm-core/src/services/api/configs/gen-job/common.ts index b92e6603d..fdee085e1 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/common.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/common.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/configuration.ts b/packages/dm-core/src/services/api/configs/gen-job/configuration.ts index 6661456a0..fb8ba0350 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/configuration.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/configuration.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/index.ts b/packages/dm-core/src/services/api/configs/gen-job/index.ts index fcfaa24db..374a7bc68 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/index.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/index.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/error-response.ts b/packages/dm-core/src/services/api/configs/gen-job/models/error-response.ts index 6d1139df8..674fa1062 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/error-response.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/error-response.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/get-job-result-response.ts b/packages/dm-core/src/services/api/configs/gen-job/models/get-job-result-response.ts index ece08f245..66411c416 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/get-job-result-response.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/get-job-result-response.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/index.ts b/packages/dm-core/src/services/api/configs/gen-job/models/index.ts index e010c3e3f..58b219813 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/index.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/index.ts @@ -1,5 +1,7 @@ export * from './error-response'; export * from './get-job-result-response'; export * from './job-status'; +export * from './progress'; export * from './start-job-response'; export * from './status-job-response'; +export * from './update-job-progress-response'; diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/job-status.ts b/packages/dm-core/src/services/api/configs/gen-job/models/job-status.ts index d7cc0c43f..4761cb5ca 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/job-status.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/job-status.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/progress.ts b/packages/dm-core/src/services/api/configs/gen-job/models/progress.ts new file mode 100644 index 000000000..887dfb4b7 --- /dev/null +++ b/packages/dm-core/src/services/api/configs/gen-job/models/progress.ts @@ -0,0 +1,47 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Data Modelling Job API + * REST API used with the Data Modelling framework to schedule jobs + * + * The version of the OpenAPI document: 1.3.5 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +// May contain unused imports in some cases +// @ts-ignore +import { JobStatus } from './job-status'; + +/** + * + * @export + * @interface Progress + */ +export interface Progress { + /** + * + * @type {number} + * @memberof Progress + */ + 'percentage'?: number; + /** + * + * @type {Array} + * @memberof Progress + */ + 'logs'?: Array; + /** + * + * @type {JobStatus} + * @memberof Progress + */ + 'status'?: JobStatus; +} + + + diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/start-job-response.ts b/packages/dm-core/src/services/api/configs/gen-job/models/start-job-response.ts index 10ae3b4f5..cda5752dd 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/start-job-response.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/start-job-response.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/status-job-response.ts b/packages/dm-core/src/services/api/configs/gen-job/models/status-job-response.ts index cefdd9f40..aef460ba1 100644 --- a/packages/dm-core/src/services/api/configs/gen-job/models/status-job-response.ts +++ b/packages/dm-core/src/services/api/configs/gen-job/models/status-job-response.ts @@ -4,7 +4,7 @@ * Data Modelling Job API * REST API used with the Data Modelling framework to schedule jobs * - * The version of the OpenAPI document: 0.1.0 + * The version of the OpenAPI document: 1.3.5 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -31,16 +31,16 @@ export interface StatusJobResponse { 'status': JobStatus; /** * - * @type {string} + * @type {Array} * @memberof StatusJobResponse */ - 'log'?: string; + 'log'?: Array; /** * - * @type {string} + * @type {number} * @memberof StatusJobResponse */ - 'message': string; + 'percentage'?: number; } diff --git a/packages/dm-core/src/services/api/configs/gen-job/models/update-job-progress-response.ts b/packages/dm-core/src/services/api/configs/gen-job/models/update-job-progress-response.ts new file mode 100644 index 000000000..b5343c270 --- /dev/null +++ b/packages/dm-core/src/services/api/configs/gen-job/models/update-job-progress-response.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Data Modelling Job API + * REST API used with the Data Modelling framework to schedule jobs + * + * The version of the OpenAPI document: 1.3.5 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateJobProgressResponse + */ +export interface UpdateJobProgressResponse { + /** + * + * @type {string} + * @memberof UpdateJobProgressResponse + */ + 'result': string; +} +