add diskusage monitor
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -79,4 +79,5 @@ typings/
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
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) {
|
||||
let inputData = inputLine.data;
|
||||
logger.log("debug", "ProcessingType " + inputLine.processingType);
|
||||
logger.log("debug", "InputLine " + JSON.stringify(inputLine));
|
||||
let allWhiteFilterRules = this.ruleSet[inputLine.processingType].rules;
|
||||
if (this.processLogicOr(allWhiteFilterRules, inputData)) { return (true); }
|
||||
logger.log("debug", "No whitelisting matched; returning false");
|
||||
@@ -103,11 +104,15 @@ exports.RuleEngine = class RuleEngine {
|
||||
}
|
||||
processLogicFlat(theWhiteFilterRule, inputData) {
|
||||
logger.log("debug", "Logic FLAT start - whiteFilterRule: " + JSON.stringify(theWhiteFilterRule));
|
||||
logger.log("debug", "inputData: " + JSON.stringify(inputData));
|
||||
let isKnownComp = false;
|
||||
let retVal = false;
|
||||
if (theWhiteFilterRule.Comp === "===") {
|
||||
isKnownComp = 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 === "<") {
|
||||
isKnownComp = 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 isWhiteListed = ruleEngine.processData(theInputLine);
|
||||
let miniInput = jsonminify(JSON.stringify(theInputLine));
|
||||
let now = Date();
|
||||
|
||||
if (isWhiteListed) {
|
||||
logger.log("debug", "Not Whitelisted: " + miniInput);
|
||||
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"
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"version": "0.1.2",
|
||||
"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",
|
||||
"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": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
@@ -505,6 +519,11 @@
|
||||
"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": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz",
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"diskusage": "^1.0.0",
|
||||
"jsonminify": "^0.4.1",
|
||||
"micro": "^9.3.3",
|
||||
"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