add diskusage monitor
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -80,3 +80,4 @@ typings/
|
|||||||
.dynamodb/
|
.dynamodb/
|
||||||
casRpsLogExtractor/casRpsLogExtractor.config.json
|
casRpsLogExtractor/casRpsLogExtractor.config.json
|
||||||
casRpsLogExtractor/casRpsLogExtractor.maxPKey.dat
|
casRpsLogExtractor/casRpsLogExtractor.maxPKey.dat
|
||||||
|
diskUsageMonitor/diskUsageMonitor.config.json
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ exports.RuleEngine = class RuleEngine {
|
|||||||
processData(inputLine) {
|
processData(inputLine) {
|
||||||
let inputData = inputLine.data;
|
let inputData = inputLine.data;
|
||||||
logger.log("debug", "ProcessingType " + inputLine.processingType);
|
logger.log("debug", "ProcessingType " + inputLine.processingType);
|
||||||
|
logger.log("debug", "InputLine " + JSON.stringify(inputLine));
|
||||||
let allWhiteFilterRules = this.ruleSet[inputLine.processingType].rules;
|
let allWhiteFilterRules = this.ruleSet[inputLine.processingType].rules;
|
||||||
if (this.processLogicOr(allWhiteFilterRules, inputData)) { return (true); }
|
if (this.processLogicOr(allWhiteFilterRules, inputData)) { return (true); }
|
||||||
logger.log("debug", "No whitelisting matched; returning false");
|
logger.log("debug", "No whitelisting matched; returning false");
|
||||||
@@ -103,11 +104,15 @@ exports.RuleEngine = class RuleEngine {
|
|||||||
}
|
}
|
||||||
processLogicFlat(theWhiteFilterRule, inputData) {
|
processLogicFlat(theWhiteFilterRule, inputData) {
|
||||||
logger.log("debug", "Logic FLAT start - whiteFilterRule: " + JSON.stringify(theWhiteFilterRule));
|
logger.log("debug", "Logic FLAT start - whiteFilterRule: " + JSON.stringify(theWhiteFilterRule));
|
||||||
|
logger.log("debug", "inputData: " + JSON.stringify(inputData));
|
||||||
let isKnownComp = false;
|
let isKnownComp = false;
|
||||||
let retVal = false;
|
let retVal = false;
|
||||||
if (theWhiteFilterRule.Comp === "===") {
|
if (theWhiteFilterRule.Comp === "===") {
|
||||||
isKnownComp = true;
|
isKnownComp = true;
|
||||||
if (inputData[theWhiteFilterRule.Field] === theWhiteFilterRule.Value) {retVal = true;}
|
if (inputData[theWhiteFilterRule.Field] === theWhiteFilterRule.Value) {retVal = true;}
|
||||||
|
} else if (theWhiteFilterRule.Comp === "!==") {
|
||||||
|
isKnownComp = true;
|
||||||
|
if (inputData[theWhiteFilterRule.Field] !== theWhiteFilterRule.Value) {retVal = true;}
|
||||||
} else if (theWhiteFilterRule.Comp === "<") {
|
} else if (theWhiteFilterRule.Comp === "<") {
|
||||||
isKnownComp = true;
|
isKnownComp = true;
|
||||||
if (inputData[theWhiteFilterRule.Field] < theWhiteFilterRule.Value) {retVal = true;}
|
if (inputData[theWhiteFilterRule.Field] < theWhiteFilterRule.Value) {retVal = true;}
|
||||||
|
|||||||
9
diskUsageMonitor/diskUsageMonitor.config.json.example
Normal file
9
diskUsageMonitor/diskUsageMonitor.config.json.example
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"sourceTag": "CCE1DiskUsage",
|
||||||
|
"serverURI": "http://localhost:2222",
|
||||||
|
"pollInterval": 3600000,
|
||||||
|
"diskLimits":[
|
||||||
|
{"path":"C:\\", "minFree":"1"},
|
||||||
|
{"path":"T:\\", "minFree":"1"}
|
||||||
|
]
|
||||||
|
}
|
||||||
62
diskUsageMonitor/diskUsageMonitor.js
Normal file
62
diskUsageMonitor/diskUsageMonitor.js
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
const request = require("request-promise");
|
||||||
|
const fs = require("fs");
|
||||||
|
const winston = require("winston");
|
||||||
|
const disk = require('diskusage');
|
||||||
|
|
||||||
|
const logger = winston.createLogger({
|
||||||
|
level: 'info',
|
||||||
|
format: winston.format.combine(
|
||||||
|
winston.format.timestamp(),
|
||||||
|
winston.format.printf(info => {
|
||||||
|
return `${info.timestamp} ${info.level}: ${info.message}`;
|
||||||
|
})
|
||||||
|
),
|
||||||
|
transports: [
|
||||||
|
new winston.transports.Console(),
|
||||||
|
new winston.transports.File({ filename: './log/diskUsageMonitor.log', level: 'error' }),
|
||||||
|
new winston.transports.File({ filename: './log/Combined.log' })
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const processingType = "diskusage";
|
||||||
|
|
||||||
|
logger.log("info", "Starting diskUsageMonitor v0.1 by j.tretter@gmail.com");
|
||||||
|
const config = JSON.parse(fs.readFileSync("diskUsageMonitor.config.json", "utf8"));
|
||||||
|
logger.log("debug", "Config" + JSON.stringify(config));
|
||||||
|
|
||||||
|
function cb(){
|
||||||
|
config.diskLimits.forEach(theDiskLimit=>{
|
||||||
|
theMessage={};
|
||||||
|
theMessage.processingType=processingType;
|
||||||
|
theMessage.sourceTag=config.sourceTag;
|
||||||
|
theMessage.timestamp=new Date();
|
||||||
|
theDiskLimit.isWarn=false;
|
||||||
|
disk.check(theDiskLimit.path, function(err, info) {
|
||||||
|
if (err) {
|
||||||
|
logger.log("error","Error reading disk Information " + err);
|
||||||
|
theDiskLimit.error = err;
|
||||||
|
theDiskLimit.isWarn = true;
|
||||||
|
} else {
|
||||||
|
let availGB=info.available/1024/1024;
|
||||||
|
let totalGB=info.total/1024/1024;
|
||||||
|
theDiskLimit.availGB=availGB;
|
||||||
|
theDiskLimit.totalGB=totalGB;
|
||||||
|
if (availGB<=theDiskLimit.minFree) {
|
||||||
|
theDiskLimit.isWarn=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
theMessage.data=theDiskLimit;
|
||||||
|
logger.log("debug","Sending Message: " + JSON.stringify(theMessage));
|
||||||
|
|
||||||
|
request({ method: 'POST', uri: config.serverURI, body: JSON.stringify([theMessage]), json: true }).then(_ => {
|
||||||
|
logger.log("debug","Sent Request to Service");
|
||||||
|
}).catch(err=>{
|
||||||
|
logger.log("error","Sending Request to Service: " + err);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
cb();
|
||||||
|
setInterval(cb,config.pollInterval);
|
||||||
@@ -37,7 +37,7 @@ const server = micro(async (req, res) => {
|
|||||||
let theInputLine=allInputLines[i];
|
let theInputLine=allInputLines[i];
|
||||||
let isWhiteListed = ruleEngine.processData(theInputLine);
|
let isWhiteListed = ruleEngine.processData(theInputLine);
|
||||||
let miniInput = jsonminify(JSON.stringify(theInputLine));
|
let miniInput = jsonminify(JSON.stringify(theInputLine));
|
||||||
let now = Date();
|
|
||||||
if (isWhiteListed) {
|
if (isWhiteListed) {
|
||||||
logger.log("debug", "Not Whitelisted: " + miniInput);
|
logger.log("debug", "Not Whitelisted: " + miniInput);
|
||||||
fs.appendFileSync("./log/skipped.log", miniInput + "\n");
|
fs.appendFileSync("./log/skipped.log", miniInput + "\n");
|
||||||
|
|||||||
19
package-lock.json
generated
19
package-lock.json
generated
@@ -229,6 +229,15 @@
|
|||||||
"kuler": "1.0.x"
|
"kuler": "1.0.x"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"diskusage": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/diskusage/-/diskusage-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-eOrPVSZLxo8kXz03GA+gdKauSSmicNET/pXMZKXs1vkdZrEayeZmJYu1Eo2uzVhkQL748vq1irIi7hzoPWBRmQ==",
|
||||||
|
"requires": {
|
||||||
|
"es6-promise": "^4.2.5",
|
||||||
|
"nan": "^2.11.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ecc-jsbn": {
|
"ecc-jsbn": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||||
@@ -251,6 +260,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz",
|
||||||
"integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA=="
|
"integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA=="
|
||||||
},
|
},
|
||||||
|
"es6-promise": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg=="
|
||||||
|
},
|
||||||
"escape-string-regexp": {
|
"escape-string-regexp": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||||
@@ -505,6 +519,11 @@
|
|||||||
"tedious": "^2.7.1"
|
"tedious": "^2.7.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nan": {
|
||||||
|
"version": "2.12.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
|
||||||
|
"integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw=="
|
||||||
|
},
|
||||||
"native-duplexpair": {
|
"native-duplexpair": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"diskusage": "^1.0.0",
|
||||||
"jsonminify": "^0.4.1",
|
"jsonminify": "^0.4.1",
|
||||||
"micro": "^9.3.3",
|
"micro": "^9.3.3",
|
||||||
"msnodesqlv8": "^0.6.11",
|
"msnodesqlv8": "^0.6.11",
|
||||||
|
|||||||
5
rules/diskusage.rule.json
Normal file
5
rules/diskusage.rule.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{ "diskusage":
|
||||||
|
{ "rules":[
|
||||||
|
{ "Logic":"-", "Field":"isWarn", "Comp":"!==", "Value":true}
|
||||||
|
]}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user