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 835cab0214 fixes and logs
2024-04-10 11:18:20 +02:00

129 lines
3.8 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("Trainning# createAutomation #step1", 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("Trainning# createAutomation #step2", 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(`Trainning# 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(`Trainning# GetAutomation: find automation with name (${name}) in tenant (${session.qcsTenantHost})`);
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("Trainning# GetAutomation found!!", result.data[0]);
return result.data[0];
} else {
console.log("Trainning# GetAutomation", 'Not found!!');
return null;
}
} catch (error) {
return {error: error};
}
}
async function createAutomations(session) {
try {
console.log("Trainning# CreateAutomation for session ", session._id);
let result = {};
console.log('Trainning# CreateAutomation asyncForEach', session.template.needQcsAutomation);
await asyncForEach(session.template.needQcsAutomation, async function( workspace ) {
console.log("Trainning# CreateAutomation EXECUTING create new automation: ", workspace);
result[workspace] = await _newAutomation(session.qcsTenantHost, session.qcsApiKey, session.template.index, workspace);
});
console.log("Trainning# Final results create automations", result);
return result;
} catch (error) {
return {error: error};
}
}
module.exports.runQlikAutomation = runQlikAutomation;
module.exports.createAutomations = createAutomations;
module.exports.getAutomation = getAutomation;