Introduce ESLint and Prettier

This commit is contained in:
Zaid Abdulla committed 2018-08-24 05:31:22 -07:00
1 parent 9c943d0bbf
commit e494bdca8a
26 files changed
+1585 -1594

No files matched your search

+85 -76
View File
@@ -1,5 +1,5 @@
/**
* Copyright 2013-2017 Zaid Abdulla
* Copyright 2013-2018 Zaid Abdulla
*
* This file is part of GenieACS.
*
@@ -33,7 +33,6 @@ let nextRefresh = 1;
let hash = null;
let presets, provisions, virtualParameters, files;
function computeHash() {
// MD5 hash for presets, provisions, virtual parameters for detecting changes
let h = crypto.createHash("md5");
@@ -50,13 +49,11 @@ function computeHash() {
keys = Object.keys(provisions).sort();
h.update(JSON.stringify(keys));
for (let k of keys)
h.update(provisions[k].md5);
for (let k of keys) h.update(provisions[k].md5);
keys = Object.keys(virtualParameters).sort();
h.update(JSON.stringify(keys));
for (let k of keys)
h.update(virtualParameters[k].md5);
for (let k of keys) h.update(virtualParameters[k].md5);
hash = h.digest("hex");
}
@@ -66,47 +63,45 @@ function flattenObject(src, prefix = "", dst = {}) {
let v = src[k];
if (typeof v === "object" && !Array.isArray(v))
flattenObject(v, `${prefix}${k}.`, dst);
else
dst[`${prefix}${k}`] = v;
else dst[`${prefix}${k}`] = v;
}
return dst;
}
function refresh(callback) {
if (!nextRefresh)
return setTimeout(function() {refresh(callback);}, 20);
if (!nextRefresh) {
return setTimeout(() => {
refresh(callback);
}, 20);
}
nextRefresh = 0;
const now = Date.now();
cache.get("presets_hash", function(err, res) {
if (err)
return callback(err);
cache.get("presets_hash", (err, dbHash) => {
if (err) return callback(err);
if (hash && res === hash) {
if (hash && dbHash === hash) {
nextRefresh = now + (REFRESH - (now % REFRESH));
return callback();
}
cache.lock("presets_hash_lock", 3, function(err, unlockOrExtend) {
if (err)
return callback(err);
cache.lock("presets_hash_lock", 3, (err, unlockOrExtend) => {
if (err) return callback(err);
let counter = 3;
counter += 2;
db.getPresets(function(err, res) {
db.getPresets((err, res) => {
if (err) {
if (counter & 1)
callback(err);
return counter = 0;
if (counter & 1) callback(err);
return (counter = 0);
}
db.getObjects(function(err, objects) {
db.getObjects((err, objects) => {
if (err) {
if (counter & 1)
callback(err);
return counter = 0;
if (counter & 1) callback(err);
return (counter = 0);
}
objects = objects.map(obj => {
@@ -118,14 +113,12 @@ function refresh(callback) {
if (!obj["_keys"] || !obj["_keys"].length)
obj["_keys"] = Object.keys(obj).filter(k => !k.startsWith("_"));
return obj
})
return obj;
});
res.sort((a, b) => {
if (a.weight === b.weight)
return a._id > b._id;
else
return a.weight - b.weight;
if (a.weight === b.weight) return a._id > b._id;
else return a.weight - b.weight;
});
presets = [];
@@ -134,14 +127,16 @@ function refresh(callback) {
if (preset.schedule) {
let parts = preset.schedule.trim().split(/\s+/);
schedule = {
md5: crypto.createHash("md5").update(preset.schedule).digest("hex")
md5: crypto
.createHash("md5")
.update(preset.schedule)
.digest("hex")
};
try {
schedule.duration = +(parts.shift()) * 1000;
schedule.duration = +parts.shift() * 1000;
schedule.schedule = scheduling.parseCron(parts.join(" "));
}
catch (err) {
} catch (err) {
logger.warn({
message: "Invalid preset schedule",
preset: preset._id,
@@ -152,7 +147,9 @@ function refresh(callback) {
}
let events = preset.events || {};
let precondition = query.convertMongoQueryToFilters(JSON.parse(preset.precondition));
let precondition = query.convertMongoQueryToFilters(
JSON.parse(preset.precondition)
);
let _provisions = preset.provisions || [];
// Generate provisions from the old configuration format
@@ -181,32 +178,41 @@ function refresh(callback) {
case "add_object":
for (let obj of objects) {
if (obj["_id"] === c.object) {
let alias = obj["_keys"].map((k) => `${k}:${JSON.stringify(obj[k])}`).join(",");
let alias = obj["_keys"]
.map(k => `${k}:${JSON.stringify(obj[k])}`)
.join(",");
let p = `${c.name}.[${alias}]`;
_provisions.push(["instances", p, 1]);
for (let k in obj)
if (!k.startsWith("_") && !(obj["_keys"].indexOf(k) !== -1))
for (let k in obj) {
if (
!k.startsWith("_") &&
!(obj["_keys"].indexOf(k) !== -1)
)
_provisions.push(["value", `${p}.${k}`, obj[k]]);
}
}
}
break;
case "delete_object":
for (let obj of objects) {
if (obj["_id"] === c.object) {
let alias = obj["_keys"].map((k) => `${k}:${JSON.stringify(obj[k])}`).join(",");
let alias = obj["_keys"]
.map(k => `${k}:${JSON.stringify(obj[k])}`)
.join(",");
let p = `${c.name}.[${alias}]`;
_provisions.push(["instances", p, 0]);
}
}
break;
default:
if (counter & 1)
callback(new Error(`Unknown configuration type ${c.type}`));
return counter = 0;
break;
return (counter = 0);
}
}
@@ -222,7 +228,7 @@ function refresh(callback) {
if ((counter -= 2) === 1) {
computeHash();
cache.set("presets_hash", hash, 300, function(err) {
cache.set("presets_hash", hash, 300, err => {
unlockOrExtend(0);
nextRefresh = now + (REFRESH - (now % REFRESH));
callback(err);
@@ -232,23 +238,28 @@ function refresh(callback) {
});
counter += 2;
db.getProvisions(function(err, res) {
db.getProvisions((err, res) => {
if (err) {
if (counter & 1)
callback(err);
return counter = 0;
if (counter & 1) callback(err);
return (counter = 0);
}
provisions = {};
for (let r of res) {
provisions[r._id] = {};
provisions[r._id].md5 = crypto.createHash("md5").update(r.script).digest("hex");
provisions[r._id].script = new vm.Script(`"use strict";(function(){\n${r.script}\n})();`, {filename: r._id, lineOffset: -1, timeout: 50});
provisions[r._id].md5 = crypto
.createHash("md5")
.update(r.script)
.digest("hex");
provisions[r._id].script = new vm.Script(
`"use strict";(function(){\n${r.script}\n})();`,
{ filename: r._id, lineOffset: -1, timeout: 50 }
);
}
if ((counter -= 2) === 1) {
computeHash();
cache.set("presets_hash", hash, 300, function(err) {
cache.set("presets_hash", hash, 300, err => {
unlockOrExtend(0);
nextRefresh = now + (REFRESH - (now % REFRESH));
callback(err);
@@ -257,23 +268,28 @@ function refresh(callback) {
});
counter += 2;
db.getVirtualParameters(function(err, res) {
db.getVirtualParameters((err, res) => {
if (err) {
if (counter & 1)
callback(err);
return counter = 0;
if (counter & 1) callback(err);
return (counter = 0);
}
virtualParameters = {};
for (let r of res) {
virtualParameters[r._id] = {}
virtualParameters[r._id].md5 = crypto.createHash("md5").update(r.script).digest("hex");
virtualParameters[r._id].script = new vm.Script(`"use strict";(function(){\n${r.script}\n})();`, {filename: r._id, lineOffset: -1, timeout: 50});
virtualParameters[r._id] = {};
virtualParameters[r._id].md5 = crypto
.createHash("md5")
.update(r.script)
.digest("hex");
virtualParameters[r._id].script = new vm.Script(
`"use strict";(function(){\n${r.script}\n})();`,
{ filename: r._id, lineOffset: -1, timeout: 50 }
);
}
if ((counter -= 2) === 1) {
computeHash();
cache.set("presets_hash", hash, 300, function(err) {
cache.set("presets_hash", hash, 300, err => {
unlockOrExtend(0);
nextRefresh = now + (REFRESH - (now % REFRESH));
callback(err);
@@ -282,11 +298,10 @@ function refresh(callback) {
});
counter += 2;
db.getFiles(function(err, res) {
db.getFiles((err, res) => {
if (err) {
if (counter & 1)
callback(err);
return counter = 0;
if (counter & 1) callback(err);
return (counter = 0);
}
files = {};
@@ -300,7 +315,7 @@ function refresh(callback) {
if ((counter -= 2) === 1) {
computeHash();
cache.set("presets_hash", hash, 300, function(err) {
cache.set("presets_hash", hash, 300, err => {
unlockOrExtend(0);
nextRefresh = now + (REFRESH - (now % REFRESH));
callback(err);
@@ -310,7 +325,7 @@ function refresh(callback) {
if ((counter -= 2) === 1) {
computeHash();
cache.set("presets_hash", hash, 300, function(err) {
cache.set("presets_hash", hash, 300, err => {
unlockOrExtend(0);
nextRefresh = now + (REFRESH - (now % REFRESH));
callback(err);
@@ -320,37 +335,31 @@ function refresh(callback) {
});
}
function getPresets(callback) {
if (Date.now() < nextRefresh)
return callback(null, hash, presets);
if (Date.now() < nextRefresh) return callback(null, hash, presets);
refresh(function(err) {
refresh(err => {
callback(err, hash, presets);
});
}
function getFiles(callback) {
if (Date.now() < nextRefresh)
return callback(null, hash, files);
if (Date.now() < nextRefresh) return callback(null, hash, files);
refresh(function(err) {
refresh(err => {
callback(err, hash, files);
})
});
}
function getProvisionsAndVirtualParameters(callback) {
if (Date.now() < nextRefresh)
return callback(null, hash, provisions, virtualParameters);
refresh(function(err) {
refresh(err => {
callback(err, hash, provisions, virtualParameters);
});
}
exports.getPresets = getPresets;
exports.getFiles = getFiles;
exports.getProvisionsAndVirtualParameters = getProvisionsAndVirtualParameters;