async function createSpot()

in api/v1/src/spots/dataManager.js [58:132]


async function createSpot(options) {
    const requestId = uuidv4();
    const bucketName = options.destination.bucketName;
    const projectId = options.config.destination.projectId;
    const datasetId = options.config.destination.datasetId;

    const fileName = createFileName(requestId);
    options['destination']['fileName'] = fileName;
    console.log(`RequestId: ${requestId}, options: ${JSON.stringify(options)}`);

    var message;
    if (!bucketName || !fileName) {
        message = 'No Bucket Name or File Name is supplied.';
        console.warn(message);
        return { success: false, code: 400, errors: [message] };
    }

    var exists;
    exists = await storageUtil.fileExists(bucketName, fileName).catch(err => {
        console.warn(err);
        return { success: false, errors: [err.message] };
    });
    if (exists) {
        message = `fileName: '${fileName}' already exists in bucketName: '${bucketName}'`;
        console.warn(message);
        return { success: false, errors: [message] };
    }

    bigqueryUtil = new BigQueryUtil(projectId);
    exists = await bigqueryUtil.datasetExists(datasetId).catch(err => {
        console.warn(err);
        return { success: false, errors: [err.message] };
    });
    if (!exists) {
        message = `datasetId: '${datasetId}' does not exists in projectId: '${projectId}'`;
        console.warn(message);
        return { success: false, errors: [message] };
    }

    const queryOptions = await createSpotJobQueryOptions(requestId, options).catch(err => {
        console.warn(err);
        return { success: false, errors: [err.message] };
    });
    if (queryOptions.success === false) {
        return { ...queryOptions };
    }

    const query = querystring.encode({
        bucketName: bucketName,
        fileName: fileName
    });
    const responseData = {
        requestId: requestId,
        query: `/${requestId}?${query}`,
        bucketName: bucketName,
        fileName: fileName
    }
    // create the spot job request now
    if (options.wait === true) {
        const data = await createSpotJob(requestId, options, queryOptions).catch(err => {
            console.warn(err);
            return { success: false, errors: [err.message] };
        });
        if (data.success === false ) {
            return { ...data };
        }
        return { data: { ...responseData, ...data }, success: true };
    } else {
        // Don't wait for the response
        createSpotJob(requestId, options, queryOptions).catch(err => {
            console.warn(`createSpotJob error: ${err.message}`);
        });
        return { data: { ...responseData }, code: 202, success: true };
    }
}