This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
qmi-cloud/server/training/automations.js
Manuel Romero 075815a6b5 happy
2023-05-19 13:26:47 +02:00

130 lines
3.5 KiB
JavaScript

const axios = require("axios");
const AUTOMATION_NAME_PREFIX = "QMI-Training";
async function asyncForEach(array, callback) {
for (let index = 0; index < array.length; index++) {
await callback(array[index], index, array);
}
}
const _newAutomation = async function(host, apikey, index, workspace) {
let workspaceData = require(`./workspaces/${index}-${workspace}.json`);
let name = `${AUTOMATION_NAME_PREFIX}-${index}-${workspace}`;
let result = await axios({
method: "post",
url: `https://${host}/api/v1/automations/`,
headers: {
"Authorization": `Bearer ${apikey}`,
"Content-Type": "application/json",
"Accept": "application/json"
},
data: {
"id":"create",
"name": name,
"description": workspace === 'main'? "Main automation entry point for QMI training session" : ""
},
});
let data = result.data;
console.log("createAutomation #1", data);
let result2 = await axios({
method: "put",
url: `https://${host}/api/v1/automations/${data.id}`,
headers: {
"Authorization": `Bearer ${apikey}`,
"Content-Type": "application/json",
"Accept": "application/json"
},
data: {
"workspace": workspaceData
},
});
console.log("createAutomation #2", result2.data);
return result2.data;
};
async function runQlikAutomation(session, email) {
let automationUrl = session.qaUrl;
let automationToken = session.qaToken;
try {
var result = await axios({
method: "post",
url: automationUrl,
headers: {
"X-Execution-Token": automationToken,
"Content-Type": "application/json"
},
data: {
email: email,
apiKey: session.qcsApiKey,
sharedSpace: session.qcsSharedSpace? session.qcsSharedSpace : null,
dataSpace: session.qcsDataSpace? session.qcsDataSpace : null
},
});
console.log(`Executed Qlik Automation '${automationUrl}' for user '${email}'`);
return result.data;
} catch (error) {
return {error: error};
}
}
async function getAutomation(session, workspace) {
const name = `${AUTOMATION_NAME_PREFIX}-${session.template.index}-${workspace}`;
console.log(`# GetAutomation: find "${name}"`);
try {
var result = await axios({
method: "get",
url: `https://${session.qcsTenantHost}/api/v1/automations?filter=name eq "${name}"`,
headers: {
"Authorization": `Bearer ${session.qcsApiKey}`,
"Content-Type": "application/json",
"Accept": "application/json"
}
});
if ( result.data && result.data.length ) {
console.log("# GetAutomation", result.data[0]);
return result.data[0];
} else {
console.log("# GetAutomation", 'Not found');
return null;
}
} catch (error) {
return {error: error};
}
}
async function createAutomations(session) {
try {
let result = {};
console.log('asyncForEach', session.template.needQcsAutomation);
await asyncForEach(session.template.needQcsAutomation, async function( workspace ) {
console.log("EXECUTING: ", workspace);
result[workspace] = await _newAutomation(session.qcsTenantHost, session.qcsApiKey, session.template.index, workspace);
});
console.log("Final results automations", result);
return result;
} catch (error) {
return {error: error};
}
}
module.exports.runQlikAutomation = runQlikAutomation;
module.exports.createAutomations = createAutomations;
module.exports.getAutomation = getAutomation;