iobroker.js-controller
Version:
Updated by reinstall.js on 2018-06-11T15:19:56.688Z
57 lines (51 loc) • 2.05 kB
JavaScript
const getUsedObjectIDs = require('../www/js/visUtils').getUsedObjectIDs;
function calcProject(objects, projects, instance, result, callback) {
if (!projects || !projects.length) {
callback(null, result || []);
return;
}
result = result || [];
const project = projects.shift();
if (!project || !project.isDir) {
setImmediate(calcProject, objects, projects, instance, result, callback);
return;
}
// calculate datapoints in one project
objects.readFile(`vis.${instance}`, `/${project.file}/vis-views.json`, (err, data) => {
let json;
try {
json = JSON.parse(data);
} catch {
console.error(`Cannot parse "/${project.file}/vis-views.json`);
setImmediate(calcProject, objects, projects, instance, result, callback);
return;
}
const dps = getUsedObjectIDs(json, false);
if (dps && dps.IDs) {
result.push({
id: `vis.${instance}.datapoints.${project.file.replace(/[.\\s]/g, '_')}`,
val: dps.IDs.length
});
}
setImmediate(calcProject, objects, projects, instance, result, callback);
});
}
function calcProjects(objects, states, instance, config, callback) {
objects.readDir('vis.' + instance, '/', (err, projects) => {
if (err || !projects || !projects.length) {
callback && callback(err || null, [{ id: 'vis.' + instance + '.datapoints.total', val: 0 }]);
} else {
calcProject(objects, projects, instance, [], (err, result) => {
if (result && result.length) {
let total = 0;
for (let r = 0; r < result.length; r++) {
total += result[r].val;
}
result.push({ id: 'vis.' + instance + '.datapoints.total', val: total });
}
callback && callback(err, result);
});
}
});
}
module.exports = calcProjects;