generated from container/tmpl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.4 KiB
68 lines
2.4 KiB
/**
|
|
* Created by Julin on 2022/11/07.
|
|
*/
|
|
'use strict';
|
|
|
|
module.exports = async function () {
|
|
try {
|
|
// 1. delete all rows in the table
|
|
await clearStatsProcessNodes();
|
|
// 2. insert data into the table
|
|
let processes = await process.clickhouse['pg_pepca_m'].query(`
|
|
select v.id as version_id,
|
|
v.process_id as process_id,
|
|
p.name as process_name,
|
|
v.bpmn_json
|
|
from workflow_process_version as v
|
|
inner join workflow_process as p on v.process_id=p.id
|
|
where v.current=true and p.is_enable=true and p.deleted=false
|
|
order by v.id desc
|
|
`).toPromise();
|
|
let dataToDB = processes.reduce((p, c) => {
|
|
let nodes = JSON.parse(c.bpmn_json);
|
|
let taskNodesCount = 0;
|
|
for (let key in nodes) {
|
|
if (nodes[key].type == 'bpmn:UserTask') taskNodesCount++;
|
|
}
|
|
p.push({
|
|
processVersionId: c.version_id,
|
|
processId: c.process_id,
|
|
processName: c.process_name,
|
|
processNodesTotal: taskNodesCount
|
|
});
|
|
return p;
|
|
}, []);
|
|
await storageStatsProcessNodes(dataToDB);
|
|
} catch (err) {
|
|
process.logger.error('Something error in function [statProcessNodes]:', err);
|
|
}
|
|
};
|
|
|
|
async function clearStatsProcessNodes() {
|
|
const transaction = await process.postgres.orm.transaction();
|
|
const models = process.postgres.models;
|
|
const { Op } = process.postgres.ORM;
|
|
try {
|
|
await models.StatsProcessNodes.destroy({
|
|
where: { processVersionId: { [Op.gt]: 0 } },
|
|
transaction
|
|
});
|
|
await transaction.commit();
|
|
} catch (err) {
|
|
await transaction.rollback();
|
|
process.logger.error('Destroy data from Postgres DB [stats_process_nodes] error:', err);
|
|
}
|
|
};
|
|
|
|
async function storageStatsProcessNodes(data) {
|
|
const transaction = await process.postgres.orm.transaction();
|
|
const models = process.postgres.models;
|
|
try {
|
|
await models.StatsProcessNodes.bulkCreate(data, { transaction });
|
|
await transaction.commit();
|
|
process.logger.info('Sync data to Postgres DB [stats_process_nodes]');
|
|
} catch (err) {
|
|
await transaction.rollback();
|
|
process.logger.error('Storage data to Postgres DB [stats_process_nodes] error:', err);
|
|
}
|
|
};
|
|
|